colana 1.0.0-beta.82 → 1.0.0-beta.83
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/bin/admin.js +1 -398
- package/bin/colana.js +1 -798
- package/package.json +15 -55
- package/public/agent-split.html +4 -4
- package/public/agent.html +4 -4
- package/public/app.57f7278383.js +1 -0
- package/public/asset-manifest.json +30 -0
- package/public/index.html +10 -10
- package/public/service-worker.js +10 -7
- package/public/wizard.5253af0543.js +1 -0
- package/public/wizard.html +13 -13
- package/server/index.cjs +2 -0
- package/server/index.js +1 -1216
- package/server/index.jsc +0 -0
- package/public/admin-panel.js +0 -735
- package/public/app.js +0 -15183
- package/public/sw-register.js +0 -3
- package/public/wizard.js +0 -1585
- package/server/admin.js +0 -284
- package/server/agent-control-routes.js +0 -277
- package/server/agent-manager.js +0 -1156
- package/server/analytics-routes.js +0 -163
- package/server/analytics.js +0 -663
- package/server/auth.js +0 -124
- package/server/auto-installer.js +0 -1405
- package/server/auto-resume.js +0 -94
- package/server/blueprint-exporter.js +0 -474
- package/server/blueprint-importer.js +0 -676
- package/server/blueprint-routes.js +0 -557
- package/server/blueprint-store.js +0 -180
- package/server/blueprint-sync.js +0 -674
- package/server/brand.js +0 -97
- package/server/checkpoint-store.js +0 -48
- package/server/config.js +0 -370
- package/server/context-sync.js +0 -498
- package/server/db.js +0 -735
- package/server/dependency-detector.js +0 -542
- package/server/diagnostics-routes.js +0 -402
- package/server/error-recovery.js +0 -746
- package/server/errors.js +0 -36
- package/server/file-browser.js +0 -332
- package/server/git-ops.js +0 -498
- package/server/gog-auth.js +0 -450
- package/server/integration-hub.js +0 -535
- package/server/integration-routes.js +0 -288
- package/server/key-manager.js +0 -206
- package/server/license-routes.js +0 -144
- package/server/license.js +0 -703
- package/server/logger.js +0 -109
- package/server/openclaw-config.js +0 -554
- package/server/permission-mcp.js +0 -137
- package/server/permission-routes.js +0 -96
- package/server/personal-agent-routes.js +0 -555
- package/server/personal-chat-store.js +0 -146
- package/server/platform.js +0 -169
- package/server/port-finder.js +0 -42
- package/server/preflight.js +0 -235
- package/server/project-config.js +0 -304
- package/server/project-routes.js +0 -441
- package/server/project-store.js +0 -240
- package/server/pty-manager.js +0 -2487
- package/server/runtime-policy.js +0 -88
- package/server/server-control-routes.js +0 -130
- package/server/service-manager.js +0 -584
- package/server/session-routes.js +0 -565
- package/server/session-store.js +0 -740
- package/server/settings-routes.js +0 -187
- package/server/settings-store.js +0 -561
- package/server/snippet-routes.js +0 -89
- package/server/snippet-store.js +0 -122
- package/server/spawn-env.js +0 -78
- package/server/system-info.js +0 -64
- package/server/template-routes.js +0 -115
- package/server/template-store.js +0 -320
- package/server/updater.js +0 -213
- package/server/usage-tracker.js +0 -223
- package/server/validation.js +0 -378
- package/server/webhook-routes.js +0 -151
- package/server/wizard-routes.js +0 -880
- package/server/worktree-manager.js +0 -740
- /package/public/{styles.css → styles.058bb007f9.css} +0 -0
- /package/public/vendor/dompurify/{purify.min.js → purify.min.48298679f9.js} +0 -0
- /package/public/vendor/highlightjs/{github-dark.min.css → github-dark.min.9f208d0221.css} +0 -0
- /package/public/vendor/highlightjs/{highlight.min.js → highlight.min.c4a399dd6f.js} +0 -0
- /package/public/vendor/marked/{marked.min.js → marked.min.934e3e36e9.js} +0 -0
- /package/public/vendor/xterm/{xterm.css → xterm.832f3f2c60.css} +0 -0
- /package/public/vendor/xterm/{xterm.js → xterm.f0aea0f75f.js} +0 -0
- /package/public/vendor/xterm-addon-fit/{xterm-addon-fit.js → xterm-addon-fit.10f3194c5f.js} +0 -0
- /package/public/vendor/xterm-addon-search/{xterm-addon-search.js → xterm-addon-search.6a6db33f16.js} +0 -0
- /package/public/vendor/xterm-addon-unicode11/{xterm-addon-unicode11.js → xterm-addon-unicode11.ab10d83642.js} +0 -0
- /package/public/vendor/xterm-addon-web-links/{xterm-addon-web-links.js → xterm-addon-web-links.d67624ab0e.js} +0 -0
- /package/public/{wizard.css → wizard.988f7742a1.css} +0 -0
package/bin/admin.js
CHANGED
|
@@ -1,399 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Colana Admin CLI
|
|
5
|
-
*
|
|
6
|
-
* Commands:
|
|
7
|
-
* colana admin help Show usage
|
|
8
|
-
* colana admin doctor Run system diagnostics
|
|
9
|
-
* colana admin staff-keys List configured staff/admin keys (env vars)
|
|
10
|
-
* colana admin create-key Generate a new license key (stored in DB)
|
|
11
|
-
* colana admin list-keys List DB-stored license keys
|
|
12
|
-
* colana admin revoke-key <id> Revoke a DB-stored license key
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import fs from 'fs';
|
|
16
|
-
import path from 'path';
|
|
17
|
-
import os from 'os';
|
|
18
|
-
import { fileURLToPath } from 'url';
|
|
19
|
-
import { c, icons, brandName } from '../server/brand.js';
|
|
20
|
-
|
|
21
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
22
|
-
|
|
23
|
-
// ---------------------------------------------------------------------------
|
|
24
|
-
// Arg parsing (minimal, no external deps)
|
|
25
|
-
// ---------------------------------------------------------------------------
|
|
26
|
-
|
|
27
|
-
function parseArgs(argv) {
|
|
28
|
-
const args = argv.slice(2);
|
|
29
|
-
const command = args[0];
|
|
30
|
-
const positional = [];
|
|
31
|
-
const flags = {};
|
|
32
|
-
|
|
33
|
-
for (let i = 1; i < args.length; i++) {
|
|
34
|
-
if (args[i].startsWith('--')) {
|
|
35
|
-
let key = args[i].slice(2);
|
|
36
|
-
let val;
|
|
37
|
-
const eqIdx = key.indexOf('=');
|
|
38
|
-
if (eqIdx !== -1) {
|
|
39
|
-
val = key.slice(eqIdx + 1);
|
|
40
|
-
key = key.slice(0, eqIdx);
|
|
41
|
-
} else {
|
|
42
|
-
val = (i + 1 < args.length && !args[i + 1].startsWith('--')) ? args[++i] : 'true';
|
|
43
|
-
}
|
|
44
|
-
flags[key] = val;
|
|
45
|
-
} else {
|
|
46
|
-
positional.push(args[i]);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return { command, flags, positional };
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// ---------------------------------------------------------------------------
|
|
54
|
-
// Helpers
|
|
55
|
-
// ---------------------------------------------------------------------------
|
|
56
|
-
|
|
57
|
-
function maskKey(key) {
|
|
58
|
-
if (!key || key.length <= 8) return '****';
|
|
59
|
-
return key.slice(0, 4) + '****';
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// ---------------------------------------------------------------------------
|
|
63
|
-
// Server API client (preferred — avoids sql.js in-memory DB conflicts)
|
|
64
|
-
// ---------------------------------------------------------------------------
|
|
65
|
-
|
|
66
|
-
const DEFAULT_PORT = 9876;
|
|
67
|
-
const MAX_PORT_SCAN = 100;
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Try to reach the running Colana server.
|
|
71
|
-
* Scans ports starting from DEFAULT_PORT (matching server's port-finder logic).
|
|
72
|
-
* Returns the base URL if found, null otherwise.
|
|
73
|
-
*/
|
|
74
|
-
async function findRunningServer() {
|
|
75
|
-
for (let i = 0; i < MAX_PORT_SCAN; i++) {
|
|
76
|
-
const port = DEFAULT_PORT + i;
|
|
77
|
-
try {
|
|
78
|
-
const res = await fetch(`http://127.0.0.1:${port}/api/health`, {
|
|
79
|
-
signal: AbortSignal.timeout(500),
|
|
80
|
-
});
|
|
81
|
-
if (res.ok) {
|
|
82
|
-
const data = await res.json();
|
|
83
|
-
if (data.status === 'ok') return `http://127.0.0.1:${port}`;
|
|
84
|
-
}
|
|
85
|
-
} catch {
|
|
86
|
-
// Port not responding — try next
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Create a key via the server API.
|
|
94
|
-
*/
|
|
95
|
-
async function createKeyViaApi(baseUrl, body) {
|
|
96
|
-
const res = await fetch(`${baseUrl}/api/admin/keys`, {
|
|
97
|
-
method: 'POST',
|
|
98
|
-
headers: { 'Content-Type': 'application/json' },
|
|
99
|
-
body: JSON.stringify(body),
|
|
100
|
-
});
|
|
101
|
-
if (!res.ok) {
|
|
102
|
-
const err = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
|
|
103
|
-
throw new Error(err.error || `Server responded with ${res.status}`);
|
|
104
|
-
}
|
|
105
|
-
return res.json();
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* List keys via the server API.
|
|
110
|
-
*/
|
|
111
|
-
async function listKeysViaApi(baseUrl, filters) {
|
|
112
|
-
const params = new URLSearchParams();
|
|
113
|
-
if (filters.type) params.set('type', filters.type);
|
|
114
|
-
if (filters.status) params.set('status', filters.status);
|
|
115
|
-
const qs = params.toString();
|
|
116
|
-
const res = await fetch(`${baseUrl}/api/admin/keys${qs ? '?' + qs : ''}`);
|
|
117
|
-
if (!res.ok) {
|
|
118
|
-
const err = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
|
|
119
|
-
throw new Error(err.error || `Server responded with ${res.status}`);
|
|
120
|
-
}
|
|
121
|
-
return res.json();
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Revoke a key via the server API.
|
|
126
|
-
*/
|
|
127
|
-
async function revokeKeyViaApi(baseUrl, id) {
|
|
128
|
-
const res = await fetch(`${baseUrl}/api/admin/keys/${id}`, { method: 'DELETE' });
|
|
129
|
-
if (!res.ok) {
|
|
130
|
-
const err = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
|
|
131
|
-
throw new Error(err.error || `Server responded with ${res.status}`);
|
|
132
|
-
}
|
|
133
|
-
return res.json();
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// ---------------------------------------------------------------------------
|
|
137
|
-
// DB-backed key management (fallback when server is not running)
|
|
138
|
-
// ---------------------------------------------------------------------------
|
|
139
|
-
|
|
140
|
-
let _dbReady = false;
|
|
141
|
-
|
|
142
|
-
async function ensureDb() {
|
|
143
|
-
if (_dbReady) return;
|
|
144
|
-
const { getDb } = await import('../server/db.js');
|
|
145
|
-
await getDb();
|
|
146
|
-
_dbReady = true;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
async function createKey(flags) {
|
|
150
|
-
const name = flags.name;
|
|
151
|
-
const type = flags.type || 'staff';
|
|
152
|
-
const email = flags.email || null;
|
|
153
|
-
const expires = flags.expires || null;
|
|
154
|
-
|
|
155
|
-
if (!name) {
|
|
156
|
-
console.error(`\n ${icons.fail} ${c.error}ERROR: --name is required.${c.reset}\n`);
|
|
157
|
-
console.error(' Usage: colana admin create-key --name "Sarah" --type staff [--email x] [--expires 2026-12-31]\n');
|
|
158
|
-
process.exit(1);
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
const validTypes = ['admin', 'staff', 'beta'];
|
|
163
|
-
if (!validTypes.includes(type)) {
|
|
164
|
-
console.error(`\n ${icons.fail} ${c.error}ERROR: Invalid type "${type}". Must be one of: ${validTypes.join(', ')}${c.reset}\n`);
|
|
165
|
-
process.exit(1);
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// Prefer server API (avoids sql.js in-memory DB conflict)
|
|
170
|
-
const serverUrl = await findRunningServer();
|
|
171
|
-
let result;
|
|
172
|
-
|
|
173
|
-
if (serverUrl) {
|
|
174
|
-
try {
|
|
175
|
-
result = await createKeyViaApi(serverUrl, { name, type, email: email || undefined, expires: expires || undefined });
|
|
176
|
-
} catch (err) {
|
|
177
|
-
console.error(`\n ${icons.fail} ${c.error}${err.message}${c.reset} ${c.muted}(via server)${c.reset}\n`);
|
|
178
|
-
process.exit(1);
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
} else {
|
|
182
|
-
// Fallback: direct DB access (only safe when server is NOT running)
|
|
183
|
-
await ensureDb();
|
|
184
|
-
const { generateKey } = await import('../server/key-manager.js');
|
|
185
|
-
try {
|
|
186
|
-
result = generateKey(name, type, email, expires);
|
|
187
|
-
} catch (err) {
|
|
188
|
-
console.error(`\n ${icons.fail} ${c.error}${err.message}${c.reset}\n`);
|
|
189
|
-
process.exit(1);
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
if (!result || !result.name) {
|
|
195
|
-
console.error(`\n ${icons.fail} ${c.error}Key generation returned an unexpected response.${c.reset}\n`);
|
|
196
|
-
process.exit(1);
|
|
197
|
-
return; // Guard for test environments where process.exit is mocked
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
console.log('');
|
|
201
|
-
console.log(` ${icons.pass} Key generated successfully!`);
|
|
202
|
-
console.log(` ${c.muted}${'─'.repeat(40)}${c.reset}`);
|
|
203
|
-
console.log(` ${c.muted}Name:${c.reset} ${c.value}${result.name}${c.reset}`);
|
|
204
|
-
console.log(` ${c.muted}Type:${c.reset} ${c.value}${result.type}${c.reset}`);
|
|
205
|
-
console.log(` ${c.muted}ID:${c.reset} ${c.value}${result.id}${c.reset}`);
|
|
206
|
-
console.log(` ${c.muted}Key:${c.reset} ${c.warn}${result.raw}${c.reset}`);
|
|
207
|
-
console.log(` ${c.muted}${'─'.repeat(40)}${c.reset}`);
|
|
208
|
-
console.log(` ${c.warn}IMPORTANT: Copy this key now. It cannot be retrieved later.${c.reset}`);
|
|
209
|
-
if (serverUrl) {
|
|
210
|
-
console.log(` ${c.muted}(Created via running server)${c.reset}`);
|
|
211
|
-
} else {
|
|
212
|
-
console.log(` ${c.muted}(Created via direct DB — restart server to pick up)${c.reset}`);
|
|
213
|
-
}
|
|
214
|
-
console.log('');
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
async function listKeysCmd(flags) {
|
|
218
|
-
const filters = {};
|
|
219
|
-
if (flags.type) filters.type = flags.type;
|
|
220
|
-
if (flags.status) filters.status = flags.status;
|
|
221
|
-
|
|
222
|
-
// Prefer server API
|
|
223
|
-
const serverUrl = await findRunningServer();
|
|
224
|
-
let result;
|
|
225
|
-
|
|
226
|
-
if (serverUrl) {
|
|
227
|
-
try {
|
|
228
|
-
result = await listKeysViaApi(serverUrl, filters);
|
|
229
|
-
} catch (err) {
|
|
230
|
-
console.error(`\n ${icons.fail} ${c.error}${err.message}${c.reset} ${c.muted}(via server)${c.reset}\n`);
|
|
231
|
-
process.exit(1);
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
} else {
|
|
235
|
-
await ensureDb();
|
|
236
|
-
const { listKeys } = await import('../server/key-manager.js');
|
|
237
|
-
result = listKeys(filters);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
if (!result || !result.keys || !result.keys.length) {
|
|
241
|
-
console.log('\n No keys found.\n');
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
console.log('');
|
|
246
|
-
console.log(` ${c.heading}License Keys:${c.reset}`);
|
|
247
|
-
console.log(` ${c.muted}${'─'.repeat(80)}${c.reset}`);
|
|
248
|
-
console.log(` ${c.muted}${'ID'.padEnd(10)}${'Name'.padEnd(20)}${'Type'.padEnd(10)}${'Status'.padEnd(10)}${'Expires'.padEnd(15)}Created${c.reset}`);
|
|
249
|
-
console.log(` ${c.muted}${'─'.repeat(80)}${c.reset}`);
|
|
250
|
-
|
|
251
|
-
for (const k of result.keys) {
|
|
252
|
-
const id = (k.id || '').slice(0, 8);
|
|
253
|
-
const name = (k.name || '').slice(0, 18).padEnd(20);
|
|
254
|
-
const type = (k.type || '').padEnd(10);
|
|
255
|
-
const status = (k.status || '').padEnd(10);
|
|
256
|
-
const expires = (k.expiry ? new Date(k.expiry).toLocaleDateString() : 'Never').padEnd(15);
|
|
257
|
-
const created = k.created_at ? new Date(k.created_at).toLocaleDateString() : '-';
|
|
258
|
-
console.log(` ${id.padEnd(10)}${name}${type}${status}${expires}${created}`);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
console.log(` ${c.muted}${'─'.repeat(80)}${c.reset}`);
|
|
262
|
-
console.log(` ${c.muted}Total: ${result.keys.length} key(s)${c.reset}\n`);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
async function revokeKeyCmd(positional) {
|
|
266
|
-
const id = positional[0];
|
|
267
|
-
if (!id) {
|
|
268
|
-
console.error(`\n ${icons.fail} ${c.error}ERROR: Key ID is required.${c.reset}\n`);
|
|
269
|
-
console.error(' Usage: colana admin revoke-key <id>\n');
|
|
270
|
-
process.exit(1);
|
|
271
|
-
return;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
// Prefer server API
|
|
275
|
-
const serverUrl = await findRunningServer();
|
|
276
|
-
|
|
277
|
-
if (serverUrl) {
|
|
278
|
-
try {
|
|
279
|
-
await revokeKeyViaApi(serverUrl, id);
|
|
280
|
-
console.log(`\n ${icons.pass} Key ${c.value}${id}${c.reset} has been revoked.\n`);
|
|
281
|
-
} catch (err) {
|
|
282
|
-
console.error(`\n ${icons.fail} ${c.error}${err.message}${c.reset} ${c.muted}(via server)${c.reset}\n`);
|
|
283
|
-
process.exit(1);
|
|
284
|
-
return;
|
|
285
|
-
}
|
|
286
|
-
} else {
|
|
287
|
-
await ensureDb();
|
|
288
|
-
const { revokeKey } = await import('../server/key-manager.js');
|
|
289
|
-
try {
|
|
290
|
-
revokeKey(id);
|
|
291
|
-
console.log(`\n ${icons.pass} Key ${c.value}${id}${c.reset} has been revoked.\n`);
|
|
292
|
-
} catch (err) {
|
|
293
|
-
console.error(`\n ${icons.fail} ${c.error}${err.message}${c.reset}\n`);
|
|
294
|
-
process.exit(1);
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
// ---------------------------------------------------------------------------
|
|
301
|
-
// Commands
|
|
302
|
-
// ---------------------------------------------------------------------------
|
|
303
|
-
|
|
304
|
-
function showHelp() {
|
|
305
|
-
console.log(`
|
|
306
|
-
${brandName()} ${c.muted}Admin CLI${c.reset}
|
|
307
|
-
|
|
308
|
-
${c.heading}Usage:${c.reset}
|
|
309
|
-
${c.cmd}colana admin doctor${c.reset} Run system diagnostics
|
|
310
|
-
${c.cmd}colana admin staff-keys${c.reset} List configured staff/admin keys (env vars)
|
|
311
|
-
${c.cmd}colana admin create-key${c.reset} Generate a new license key (stored in DB)
|
|
312
|
-
${c.muted}--name "Name"${c.reset} Recipient name (required)
|
|
313
|
-
${c.muted}--type staff|admin|beta${c.reset} Key type (default: staff)
|
|
314
|
-
${c.muted}--email user@example.com${c.reset} Email (optional)
|
|
315
|
-
${c.muted}--expires 2026-12-31${c.reset} Expiry date (optional)
|
|
316
|
-
${c.cmd}colana admin list-keys${c.reset} List DB-stored license keys
|
|
317
|
-
${c.muted}--type staff|admin|beta${c.reset} Filter by type
|
|
318
|
-
${c.muted}--status active|revoked${c.reset} Filter by status
|
|
319
|
-
${c.cmd}colana admin revoke-key <id>${c.reset} Revoke a DB-stored license key
|
|
320
|
-
|
|
321
|
-
${c.muted}Polar.sh key management:${c.reset}
|
|
322
|
-
${c.url}https://dashboard.polar.sh${c.reset}
|
|
323
|
-
`);
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
function doctor() {
|
|
327
|
-
console.log("\n Run 'colana doctor' for system diagnostics.\n");
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
function staffKeys() {
|
|
331
|
-
const staffRaw = process.env.STAFF_KEYS || '';
|
|
332
|
-
const adminRaw = process.env.ADMIN_KEYS || '';
|
|
333
|
-
|
|
334
|
-
const staffList = staffRaw.split(',').map(k => k.trim()).filter(Boolean);
|
|
335
|
-
const adminList = adminRaw.split(',').map(k => k.trim()).filter(Boolean);
|
|
336
|
-
|
|
337
|
-
if (staffList.length === 0 && adminList.length === 0) {
|
|
338
|
-
console.log('\n No staff or admin keys configured. Set STAFF_KEYS or ADMIN_KEYS environment variable.\n');
|
|
339
|
-
return;
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
console.log('');
|
|
343
|
-
|
|
344
|
-
if (staffList.length > 0) {
|
|
345
|
-
console.log(` ${c.heading}Staff Keys:${c.reset}`);
|
|
346
|
-
console.log(` ${c.muted}${'─'.repeat(10)}${c.reset}`);
|
|
347
|
-
staffList.forEach((key, i) => {
|
|
348
|
-
console.log(` ${i + 1}. ${maskKey(key)} (STAFF_KEYS)`);
|
|
349
|
-
});
|
|
350
|
-
console.log('');
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
if (adminList.length > 0) {
|
|
354
|
-
console.log(` ${c.heading}Admin Keys:${c.reset}`);
|
|
355
|
-
console.log(` ${c.muted}${'─'.repeat(10)}${c.reset}`);
|
|
356
|
-
adminList.forEach((key, i) => {
|
|
357
|
-
console.log(` ${i + 1}. ${maskKey(key)} (ADMIN_KEYS)`);
|
|
358
|
-
});
|
|
359
|
-
console.log('');
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
console.log(' To add/remove keys, update the STAFF_KEYS or ADMIN_KEYS environment variable.\n');
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
// ---------------------------------------------------------------------------
|
|
366
|
-
// Main
|
|
367
|
-
// ---------------------------------------------------------------------------
|
|
368
|
-
|
|
369
|
-
async function main() {
|
|
370
|
-
const { command, flags, positional } = parseArgs(process.argv);
|
|
371
|
-
|
|
372
|
-
if (!command || command === 'help' || command === '--help') {
|
|
373
|
-
showHelp();
|
|
374
|
-
return;
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
switch (command) {
|
|
378
|
-
case 'doctor':
|
|
379
|
-
return doctor();
|
|
380
|
-
case 'staff-keys':
|
|
381
|
-
return staffKeys();
|
|
382
|
-
case 'create-key':
|
|
383
|
-
return createKey(flags);
|
|
384
|
-
case 'list-keys':
|
|
385
|
-
return listKeysCmd(flags);
|
|
386
|
-
case 'revoke-key':
|
|
387
|
-
return revokeKeyCmd(positional);
|
|
388
|
-
default:
|
|
389
|
-
console.error(` ${icons.fail} Unknown command: ${c.value}${command}${c.reset}`);
|
|
390
|
-
console.error(` ${c.muted}Run "colana admin help" for usage.${c.reset}`);
|
|
391
|
-
process.exit(1);
|
|
392
|
-
return;
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
main().catch((err) => {
|
|
397
|
-
console.error(` ${icons.fail} ${c.error}${err.message || err}${c.reset}`);
|
|
398
|
-
process.exit(1);
|
|
399
|
-
});
|
|
2
|
+
const a0_0x6c3ac3=a0_0x29ac;(function(_0x3aae2a,_0x1f8989){const _0xdfd336=a0_0x29ac,_0x122b3c=_0x3aae2a();while(!![]){try{const _0x3b5b38=parseInt(_0xdfd336(0x2c9))/0x1*(parseInt(_0xdfd336(0x20f))/0x2)+parseInt(_0xdfd336(0x211))/0x3*(parseInt(_0xdfd336(0x263))/0x4)+-parseInt(_0xdfd336(0x2cf))/0x5+parseInt(_0xdfd336(0x1dc))/0x6*(-parseInt(_0xdfd336(0x27e))/0x7)+parseInt(_0xdfd336(0x310))/0x8*(parseInt(_0xdfd336(0x1d1))/0x9)+parseInt(_0xdfd336(0x296))/0xa*(parseInt(_0xdfd336(0x2e0))/0xb)+parseInt(_0xdfd336(0x2fa))/0xc*(-parseInt(_0xdfd336(0x239))/0xd);if(_0x3b5b38===_0x1f8989)break;else _0x122b3c['push'](_0x122b3c['shift']());}catch(_0x28a30c){_0x122b3c['push'](_0x122b3c['shift']());}}}(a0_0x354e,0xdedeb));var __defProp=Object['defineProperty'],__getOwnPropNames=Object['getOwnPropertyNames'],__esm=(_0x34e56d,_0x2f2711)=>function _0x198323(){const _0x410e54={'BqzAb':function(_0x37ead8,_0x33abec){return _0x37ead8(_0x33abec);}};return _0x34e56d&&(_0x2f2711=(0x0,_0x34e56d[_0x410e54['BqzAb'](__getOwnPropNames,_0x34e56d)[0x0]])(_0x34e56d=0x0)),_0x2f2711;},__export=(_0x9d36e8,_0x508e27)=>{const _0x491ebd=a0_0x29ac,_0x579b08={'ozQTG':function(_0x58cf2d,_0x207c99,_0x1d8016,_0x3a434a){return _0x58cf2d(_0x207c99,_0x1d8016,_0x3a434a);}};for(var _0x294c87 in _0x508e27)_0x579b08[_0x491ebd(0x1c6)](__defProp,_0x9d36e8,_0x294c87,{'get':_0x508e27[_0x294c87],'enumerable':!![]});};import a0_0x337eff from'crypto';import a0_0x2d137c from'fs';import a0_0x969e39 from'os';import a0_0x3b7b56 from'path';import{fileURLToPath}from'url';function envInt(_0x38c30b,_0x35b345){const _0x32e3eb=a0_0x29ac,_0x1c94e3=parseInt(_0x38c30b,0xa);return Number[_0x32e3eb(0x2b7)](_0x1c94e3)?_0x35b345:_0x1c94e3;}function resolveEncryptionKey(){const _0x1a3a4f=a0_0x29ac,_0x5e7bc8={'HabUW':function(_0x347f82,_0x1f715a){return _0x347f82(_0x1f715a);}};if(process['env'][_0x1a3a4f(0x251)])return process['env']['ENCRYPTION_KEY'];const _0x2020e7=a0_0x3b7b56[_0x1a3a4f(0x308)](dataDir,KEY_FILENAME),_0x5b8368=a0_0x3b7b56[_0x1a3a4f(0x308)](dataDir,'dashboard.db');if(a0_0x2d137c['existsSync'](_0x2020e7))try{const _0x2928e1=a0_0x2d137c[_0x1a3a4f(0x258)](_0x2020e7,'utf-8'),_0x2ae1ae=_0x2928e1[_0x1a3a4f(0x2cc)]('\x0a')['filter'](_0xb0d564=>!_0xb0d564['startsWith']('#'))['join']('')[_0x1a3a4f(0x2c4)]();if(_0x2ae1ae['length']>=0x20)return _0x2ae1ae;console['error']('[security]\x20Encryption\x20key\x20file\x20is\x20invalid\x20('+_0x2ae1ae['length']+'\x20chars).\x20Regenerating.');}catch(_0x5f42eb){console['error']('[security]\x20Failed\x20to\x20read\x20encryption\x20key\x20file:\x20'+_0x5f42eb['message']);}if(!a0_0x2d137c['existsSync'](_0x5b8368))return _0x5e7bc8[_0x1a3a4f(0x32f)](generateAndWriteKeyFile,_0x2020e7);return LEGACY_DEFAULT_KEY;}function generateAndWriteKeyFile(_0x1fac58){const _0x4555c6=a0_0x29ac,_0x4368f8={'PfJXK':'hex','uXxIR':'#\x20Without\x20this\x20key,\x20all\x20encrypted\x20settings\x20(API\x20keys,\x20tokens)\x20are\x20unrecoverable.','HpXgq':_0x4555c6(0x29e),'gYuwz':_0x4555c6(0x290),'XOSCJ':'[security]\x20Generated\x20new\x20encryption\x20key\x20file.','MhmXp':'[security]\x20Encryption\x20key\x20is\x20in-memory\x20only.\x20Restart\x20will\x20generate\x20a\x20new\x20key.'},_0x584ac5=a0_0x337eff[_0x4555c6(0x2a5)](0x20)['toString'](_0x4368f8[_0x4555c6(0x2e5)]);try{const _0x235211=a0_0x3b7b56['dirname'](_0x1fac58);if(!a0_0x2d137c['existsSync'](_0x235211))a0_0x2d137c['mkdirSync'](_0x235211,{'recursive':!![]});const _0x3792c9=['#\x20Auto-generated\x20by\x20Colana.\x20Do\x20not\x20share\x20or\x20delete.',_0x4368f8['uXxIR'],_0x4368f8[_0x4555c6(0x26d)],_0x584ac5,'']['join']('\x0a');a0_0x2d137c['writeFileSync'](_0x1fac58,_0x3792c9,{'encoding':_0x4368f8[_0x4555c6(0x25a)],'mode':0x180}),console[_0x4555c6(0x2ff)](_0x4368f8['XOSCJ']);}catch(_0x49a7fb){console['error']('[security]\x20WARNING:\x20Could\x20not\x20write\x20encryption\x20key\x20file:\x20'+_0x49a7fb[_0x4555c6(0x316)]),console[_0x4555c6(0x28b)](_0x4368f8[_0x4555c6(0x240)]);}return _0x584ac5;}function getReleaseChannel(){const _0x57a127=a0_0x29ac,_0x5c106b={'LLcJH':_0x57a127(0x2cb),'seKuD':_0x57a127(0x290),'YEoVe':_0x57a127(0x1e6),'vRDdi':'stable'};try{const _0x3b8ba1=a0_0x3b7b56[_0x57a127(0x308)](__dirname,'..',_0x5c106b['LLcJH']),_0x32f663=JSON[_0x57a127(0x21d)](a0_0x2d137c['readFileSync'](_0x3b8ba1,_0x5c106b['seKuD'])),_0x2ba6fb=_0x32f663[_0x57a127(0x299)]||'';if(_0x2ba6fb[_0x57a127(0x24c)](_0x5c106b[_0x57a127(0x2fe)]))return _0x57a127(0x2eb);}catch{}return _0x5c106b[_0x57a127(0x28c)];}var __dirname,dataDir,LEGACY_DEFAULT_KEY,KEY_FILENAME,config,config_default,init_config=__esm({'server/config.js'(){const _0x1bd598=a0_0x29ac,_0x936c7b={'wGcnh':_0x1bd598(0x235),'zuBHm':_0x1bd598(0x2db),'jnQvP':'encryption.key','uUDzf':'Claude\x20Code','yzmBI':'flag','Qrqlt':_0x1bd598(0x1e8),'LbpdQ':'Codex\x20CLI','JbMHU':'@openai/codex','uvoMK':_0x1bd598(0x222),'RttFU':_0x1bd598(0x23e),'tZHxj':_0x1bd598(0x1c5),'keJlC':'npm\x20install\x20-g\x20@google/gemini-cli','zWlsG':_0x1bd598(0x2c3),'xxrEZ':_0x1bd598(0x30a),'sjsHj':_0x1bd598(0x2af),'SFVEq':'GitHub\x20Copilot\x20subscription','BKyDt':'Aider','OuCEY':_0x1bd598(0x25f),'DiuRk':'pip\x20install\x20aider-chat','AapKZ':_0x1bd598(0x2e8),'HAzXb':_0x1bd598(0x1d5),'MTVuy':'https://colana.ai','rbCdA':function(_0x912ff,_0x2eb4f3,_0x2bd95a){return _0x912ff(_0x2eb4f3,_0x2bd95a);},'bzUdT':function(_0x37322d,_0x38bd5a){return _0x37322d*_0x38bd5a;},'Qwzsw':function(_0x1d5bc6,_0x51d8e3,_0x16919c){return _0x1d5bc6(_0x51d8e3,_0x16919c);},'LdSzZ':function(_0x54ed96,_0xe7fb49,_0x37f1fe){return _0x54ed96(_0xe7fb49,_0x37f1fe);},'HcMNd':_0x1bd598(0x1df),'MtKza':'code','Rrxty':function(_0x3ddb66,_0x42c4fc,_0x320364){return _0x3ddb66(_0x42c4fc,_0x320364);},'JjuNg':function(_0x2feab9,_0x461e46,_0x537f16){return _0x2feab9(_0x461e46,_0x537f16);},'xRcTM':function(_0x29dd6c,_0xc97bd1){return _0x29dd6c*_0xc97bd1;},'JohTb':'Edit','MbOIc':'Glob','RMlLG':'WebSearch','kxmdo':'WebFetch','webZl':function(_0x599a86,_0x3a3d36,_0x48783c){return _0x599a86(_0x3a3d36,_0x48783c);},'WodHN':_0x1bd598(0x30d),'tITte':function(_0x423cac,_0x466f56){return _0x423cac*_0x466f56;},'oVxQj':function(_0x279a29,_0x5f2763){return _0x279a29*_0x5f2763;},'VwMGn':'--print','tSMVp':_0x1bd598(0x2e6),'gqeeh':'stream-json','FCOwz':'--include-partial-messages','vMkKI':'default','HwnCA':_0x1bd598(0x321),'eTAGd':_0x1bd598(0x28d),'rLIkj':function(_0x4e16f1,_0x243d1f,_0x563537){return _0x4e16f1(_0x243d1f,_0x563537);},'koRrC':'acceptEdits','JWIDh':'dontAsk'};__dirname=a0_0x3b7b56[_0x1bd598(0x229)](fileURLToPath(import.meta.url)),dataDir=process[_0x1bd598(0x2ec)]['DATA_DIR']?a0_0x3b7b56['resolve'](process['env'][_0x1bd598(0x267)]):a0_0x3b7b56[_0x1bd598(0x308)](__dirname,'..','data'),LEGACY_DEFAULT_KEY=_0x936c7b[_0x1bd598(0x328)],KEY_FILENAME=_0x936c7b['jnQvP'],config={'providers':{'claude':{'label':_0x936c7b[_0x1bd598(0x291)],'binary':'claude','npmPackage':_0x1bd598(0x257),'models':[],'supportsResume':!![],'supportsPty':!![],'supportsInteractive':!![],'resumeStyle':_0x936c7b['yzmBI'],'resumeFlag':_0x936c7b['Qrqlt'],'installCmd':'npm\x20install\x20-g\x20@anthropic-ai/claude-code','runtime':_0x1bd598(0x210),'authNote':_0x1bd598(0x254)},'codex':{'label':_0x936c7b[_0x1bd598(0x1ec)],'binary':_0x1bd598(0x1eb),'npmPackage':_0x936c7b[_0x1bd598(0x274)],'models':[],'supportsResume':!![],'supportsPty':!![],'supportsInteractive':!![],'resumeStyle':_0x936c7b['uvoMK'],'resumeSubcmd':'resume','installCmd':_0x936c7b['RttFU'],'runtime':'npm','authNote':_0x1bd598(0x1f3)},'gemini':{'label':_0x1bd598(0x2d9),'binary':_0x936c7b['tZHxj'],'npmPackage':'@google/gemini-cli','models':[],'supportsResume':!![],'supportsPty':!![],'supportsInteractive':!![],'resumeStyle':_0x936c7b['yzmBI'],'resumeFlag':_0x936c7b[_0x1bd598(0x27f)],'installCmd':_0x936c7b['keJlC'],'runtime':'npm','authNote':_0x936c7b[_0x1bd598(0x273)],'recommended':!![]},'copilot':{'label':_0x936c7b['xxrEZ'],'binary':_0x936c7b[_0x1bd598(0x23b)],'fallbackBinary':'gh','fallbackBinaryArgs':[_0x1bd598(0x2af)],'models':[],'supportsResume':!![],'supportsPty':!![],'supportsInteractive':!![],'resumeStyle':_0x936c7b[_0x1bd598(0x1e4)],'resumeFlag':_0x936c7b['Qrqlt'],'installCmd':_0x1bd598(0x27a),'installFallbackCmd':'gh\x20extension\x20install\x20github/gh-copilot','runtime':'npm','authNote':_0x936c7b['SFVEq']},'aider':{'label':_0x936c7b[_0x1bd598(0x309)],'binary':_0x1bd598(0x2df),'models':[],'supportsResume':!![],'supportsPty':!![],'supportsInteractive':!![],'resumeStyle':'flag','resumeFlag':_0x936c7b[_0x1bd598(0x329)],'noSessionId':!![],'installCmd':'pipx\x20install\x20aider-chat','installFallbackCmd':_0x936c7b['DiuRk'],'installPrereq':_0x936c7b[_0x1bd598(0x31a)],'runtime':'pipx','authNote':'LLM\x20API\x20key\x20required'},'openclaw':{'label':'OpenClaw','binary':'openclaw','models':[],'supportsResume':![],'supportsPty':!![],'supportsInteractive':!![],'supportsHeadless':![],'installCmd':_0x1bd598(0x226),'runtime':'npm','authNote':_0x1bd598(0x242),'gatewayPort':0x4965,'isPersonal':!![]}},'defaultModel':process[_0x1bd598(0x2ec)]['DEFAULT_MODEL']||null,'polar':{'organizationId':process[_0x1bd598(0x2ec)][_0x1bd598(0x1d0)]||'','accessToken':process[_0x1bd598(0x2ec)]['POLAR_ACCESS_TOKEN']||'','productId':process['env']['POLAR_PRODUCT_ID']||'','checkoutUrl':process['env'][_0x1bd598(0x218)]||_0x936c7b['HAzXb'],'customerPortalUrl':process['env']['POLAR_CUSTOMER_PORTAL_URL']||'','webhookSecret':process['env'][_0x1bd598(0x2e7)]||'','apiUrl':process['env']['POLAR_API_URL']||_0x1bd598(0x22e),'blueprintCloudUrl':process[_0x1bd598(0x2ec)][_0x1bd598(0x2e2)]||_0x936c7b['MTVuy'],'cacheTtlMs':_0x936c7b['rbCdA'](envInt,process['env']['LICENSE_CACHE_TTL_MS'],_0x936c7b[_0x1bd598(0x261)](_0x936c7b['bzUdT'](_0x936c7b[_0x1bd598(0x261)](0x7,0x18),0x3c)*0x3c,0x3e8)),'revalidationIntervalMs':_0x936c7b[_0x1bd598(0x317)](envInt,process['env'][_0x1bd598(0x1da)],0x6*0x3c*0x3c*0x3e8),'staffKeys':(process['env'][_0x1bd598(0x303)]||'')[_0x1bd598(0x2cc)](',')[_0x1bd598(0x2de)](_0x29f2ce=>_0x29f2ce[_0x1bd598(0x2c4)]())['filter'](Boolean),'adminKeys':(process[_0x1bd598(0x2ec)][_0x1bd598(0x29a)]||'')[_0x1bd598(0x2cc)](',')[_0x1bd598(0x2de)](_0x74be25=>_0x74be25[_0x1bd598(0x2c4)]())[_0x1bd598(0x25b)](Boolean)},'freeMaxSessions':envInt(process[_0x1bd598(0x2ec)]['FREE_MAX_SESSIONS'],0x2),'dataDir':dataDir,'dbFilename':process[_0x1bd598(0x2ec)][_0x1bd598(0x203)]||'dashboard.db','homePath':a0_0x969e39[_0x1bd598(0x2fc)](),'startPort':envInt(process['env']['START_PORT'],0x2694),'maxPortAttempts':_0x936c7b['LdSzZ'](envInt,process['env'][_0x1bd598(0x1c7)],0x64),'bindAddress':process[_0x1bd598(0x2ec)]['BIND_ADDRESS']||_0x936c7b['HcMNd'],'encryptionKey':resolveEncryptionKey(),'encryptionKeyIsLegacyDefault':![],'defaultEditorCommand':_0x936c7b['MtKza'],'permissionTimeoutMs':_0x936c7b[_0x1bd598(0x2d3)](envInt,process['env'][_0x1bd598(0x212)],0x1d4c0),'permissionClientMs':envInt(process['env'][_0x1bd598(0x219)],0x249f0),'agentGracePeriodMs':envInt(process['env']['AGENT_GRACE_PERIOD_MS'],0x1388),'shutdownTimeoutMs':_0x936c7b['rbCdA'](envInt,process[_0x1bd598(0x2ec)]['SHUTDOWN_TIMEOUT_MS'],0x2710),'defaultLogLimit':_0x936c7b['LdSzZ'](envInt,process['env']['DEFAULT_LOG_LIMIT'],0x3e8),'defaultSessionLimit':envInt(process['env']['DEFAULT_SESSION_LIMIT'],0x14),'gitDiffMaxBuffer':envInt(process['env'][_0x1bd598(0x1ca)],0xa*0x400*0x400),'toolResultPreviewLen':envInt(process['env']['TOOL_RESULT_PREVIEW_LEN'],0x1f4),'maxResumableSessions':_0x936c7b[_0x1bd598(0x1fa)](envInt,process['env']['MAX_RESUMABLE_SESSIONS'],0x5),'updateCheckIntervalMs':envInt(process[_0x1bd598(0x2ec)][_0x1bd598(0x318)],_0x936c7b[_0x1bd598(0x261)](_0x936c7b[_0x1bd598(0x1cf)](_0x936c7b['xRcTM'](0x6,0x3c),0x3c),0x3e8)),'logRetentionDays':envInt(process[_0x1bd598(0x2ec)]['LOG_RETENTION_DAYS'],0x0),'logRetentionIntervalMs':envInt(process['env'][_0x1bd598(0x285)],0x18*0x3c*0x3c*0x3e8),'logRetentionBatchSize':envInt(process['env']['LOG_RETENTION_BATCH_SIZE'],0x7d0),'logRetentionMaxBatches':envInt(process['env'][_0x1bd598(0x21a)],0xa),'logArchiveMode':(process['env']['LOG_ARCHIVE_MODE']||'db')[_0x1bd598(0x30e)](),'allowedTools':[_0x1bd598(0x2fd),_0x936c7b[_0x1bd598(0x1ed)],_0x1bd598(0x25d),_0x936c7b[_0x1bd598(0x2f2)],'Grep','Bash',_0x936c7b[_0x1bd598(0x1e2)],_0x936c7b[_0x1bd598(0x252)]],'maxTurnsOptions':[0x0,0xa,0x19,0x32,0x64],'fontSizes':[0xc,0xe,0x10,0x12],'ptyBufferSize':envInt(process['env']['PTY_BUFFER_SIZE'],0x100*0x400),'ptyDefaultCols':_0x936c7b[_0x1bd598(0x245)](envInt,process[_0x1bd598(0x2ec)]['PTY_DEFAULT_COLS'],0x78),'ptyDefaultRows':_0x936c7b['Rrxty'](envInt,process['env']['PTY_DEFAULT_ROWS'],0x1e),'worktreesDir':a0_0x3b7b56[_0x1bd598(0x308)](dataDir,_0x936c7b[_0x1bd598(0x1f9)]),'worktreeMaxPerProject':0xa,'worktreeStaleAfterDays':0x4,'worktreeCleanupIntervalMs':_0x936c7b[_0x1bd598(0x32d)](_0x936c7b[_0x1bd598(0x2f0)](0x18,0x3c),0x3c)*0x3e8,'worktreeGitTimeoutMs':0x7530,'worktreeGitQuickTimeoutMs':0x1388,'cliFlags':[_0x936c7b[_0x1bd598(0x2a1)],_0x936c7b['tSMVp'],'stream-json','--input-format',_0x936c7b['gqeeh'],_0x936c7b['FCOwz'],'--verbose'],'permissionToolName':'mcp__dashboard_permissions__permission_prompt','permissionModes':[_0x936c7b[_0x1bd598(0x2b5)],'acceptEdits',_0x936c7b['HwnCA'],'bypassPermissions',_0x1bd598(0x234),_0x936c7b['eTAGd']],'contextWindows':{'opus':0x30d40,'sonnet':0x30d40,'haiku':0x30d40,'claude-opus-4-6-20260214':0x30d40,'claude-opus-4-5-20251101':0x30d40,'claude-sonnet-4-5-20250929':0x30d40,'claude-sonnet-4-20250514':0x30d40,'claude-3-5-sonnet-20241022':0x30d40,'claude-3-5-haiku-20241022':0x30d40,'default':0x30d40},'client':{'wsReconnectBaseMs':0x3e8,'wsReconnectMaxMs':0x7530,'toastDurationMs':0xfa0,'toolOutputTruncation':0x12c,'taskPreviewLen':0x23,'terminalTaskLen':0x32,'popoutWidth':0x320,'popoutHeight':0x258,'maxResumableSessions':_0x936c7b[_0x1bd598(0x1f8)](envInt,process[_0x1bd598(0x2ec)]['MAX_RESUMABLE_SESSIONS'],0x5),'permissionModes':[_0x1bd598(0x2f1),_0x936c7b[_0x1bd598(0x278)],_0x936c7b[_0x1bd598(0x32a)],_0x1bd598(0x1f2),_0x936c7b['JWIDh'],_0x936c7b[_0x1bd598(0x1ee)]],'defaultContextWindow':0x30d40,'contextWindows':{'opus':0x30d40,'sonnet':0x30d40,'haiku':0x30d40,'claude-opus-4-6-20260214':0x30d40,'claude-opus-4-5-20251101':0x30d40,'claude-sonnet-4-5-20250929':0x30d40,'claude-sonnet-4-20250514':0x30d40,'claude-3-5-sonnet-20241022':0x30d40,'claude-3-5-haiku-20241022':0x30d40,'default':0x30d40},'allowedTools':[_0x1bd598(0x2fd),_0x936c7b['JohTb'],_0x1bd598(0x25d),'Glob',_0x1bd598(0x206),'Bash',_0x1bd598(0x2ab),_0x936c7b['kxmdo']],'maxTurnsOptions':[0x0,0xa,0x19,0x32,0x64],'fontSizes':[0xc,0xe,0x10,0x12]}},config['encryptionKeyIsLegacyDefault']=config[_0x1bd598(0x269)]===LEGACY_DEFAULT_KEY,config[_0x1bd598(0x2c6)]=LEGACY_DEFAULT_KEY,config['KEY_FILENAME']=KEY_FILENAME,config[_0x1bd598(0x2ad)]=function(){const _0x60dc56=_0x1bd598;return a0_0x337eff[_0x60dc56(0x20d)]('sha256')[_0x60dc56(0x228)](_0x60dc56(0x270)+config['encryptionKey'])[_0x60dc56(0x2ac)](_0x936c7b[_0x60dc56(0x287)])[_0x60dc56(0x294)](0x0,0x20);},config[_0x1bd598(0x250)]=getReleaseChannel(),config[_0x1bd598(0x2ef)][_0x1bd598(0x271)]=Object['fromEntries'](Object[_0x1bd598(0x28a)](config[_0x1bd598(0x271)])['map'](([_0x364d15,_0x287c8f])=>[_0x364d15,{'label':_0x287c8f['label'],'models':_0x287c8f['models'],'supportsResume':_0x287c8f[_0x1bd598(0x204)],'supportsPty':_0x287c8f[_0x1bd598(0x1d4)],'supportsInteractive':_0x287c8f[_0x1bd598(0x32e)],'supportsHeadless':_0x287c8f[_0x1bd598(0x2d8)]!==![],'runtime':_0x287c8f[_0x1bd598(0x31b)],'authNote':_0x287c8f[_0x1bd598(0x1ce)],'recommended':_0x287c8f[_0x1bd598(0x2a7)]||![],'isPersonal':_0x287c8f['isPersonal']||![]}])),config_default=config;}}),db_exports={};__export(db_exports,{'checkDbIntegrity':()=>checkDbIntegrity,'closeDb':()=>closeDb,'default':()=>db_default,'getDb':()=>getDb,'getSchemaVersion':()=>getSchemaVersion,'queryAll':()=>queryAll,'queryOne':()=>queryOne,'run':()=>run,'runImmediate':()=>runImmediate,'save':()=>save});import a0_0x1d0227 from'sql.js';import a0_0x1dbc7b from'path';import a0_0x27b20e from'fs';function saveDatabaseNow(){const _0x3118ff=a0_0x29ac;if(db){const _0x370398=db['export'](),_0x511e1c=Buffer[_0x3118ff(0x259)](_0x370398);a0_0x27b20e[_0x3118ff(0x2b3)](DB_PATH,_0x511e1c);}}function saveDatabase(){if(_saveTimer)return;_saveTimer=setTimeout(()=>{_saveTimer=null,saveDatabaseNow();},0x3e8);}async function initializeDatabase(){const _0x3b766a=a0_0x29ac,_0x37bfb5={'ASudG':_0x3b766a(0x305),'zPFHY':function(_0x32565d,_0x51c592){return _0x32565d>_0x51c592;},'GFRKl':function(_0x29f543,_0x2bb8cd){return _0x29f543===_0x2bb8cd;},'NsEzf':'auth_mode','tiWut':_0x3b766a(0x1c5),'ZUjAC':'theme','QtMoR':_0x3b766a(0x266),'wrtNX':'max_turns','kCmVG':'font_size','rhjxn':_0x3b766a(0x2be),'idGnq':function(_0x5551d6){return _0x5551d6();}};!a0_0x27b20e[_0x3b766a(0x27c)](DATA_DIR)&&a0_0x27b20e[_0x3b766a(0x275)](DATA_DIR,{'recursive':!![]});SQL=await a0_0x1d0227();if(a0_0x27b20e['existsSync'](DB_PATH)){const _0x265d32=a0_0x27b20e[_0x3b766a(0x258)](DB_PATH);db=new SQL[(_0x3b766a(0x327))](_0x265d32);}else db=new SQL[(_0x3b766a(0x327))]();db[_0x3b766a(0x2a9)]('PRAGMA\x20foreign_keys\x20=\x20ON'),db[_0x3b766a(0x2a9)]('\x0a\x20\x20\x20\x20--\x20Projects\x20table\x0a\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20projects\x20(\x0a\x20\x20\x20\x20\x20\x20id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20name\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20path\x20TEXT\x20NOT\x20NULL\x20UNIQUE,\x0a\x20\x20\x20\x20\x20\x20description\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20created_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27)),\x0a\x20\x20\x20\x20\x20\x20updated_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27))\x0a\x20\x20\x20\x20)\x0a\x20\x20'),db['run'](_0x3b766a(0x2f9)),db[_0x3b766a(0x2a9)]('\x0a\x20\x20\x20\x20--\x20Logs\x20table\x20(stores\x20streaming\x20output)\x0a\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20logs\x20(\x0a\x20\x20\x20\x20\x20\x20id\x20INTEGER\x20PRIMARY\x20KEY\x20AUTOINCREMENT,\x0a\x20\x20\x20\x20\x20\x20session_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20type\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20content\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20timestamp\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27)),\x0a\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(session_id)\x20REFERENCES\x20sessions(id)\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20)\x0a\x20\x20'),db[_0x3b766a(0x2a9)](_0x3b766a(0x311)),db[_0x3b766a(0x2a9)]('\x0a\x20\x20\x20\x20--\x20Session\x20usage\x20summary\x20table\x20(pre-aggregated\x20for\x20session\x20list)\x0a\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20session_usage_summary\x20(\x0a\x20\x20\x20\x20\x20\x20session_id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20input_tokens\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20output_tokens\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20cache_read_tokens\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20cache_write_tokens\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20total_cost\x20REAL\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20cli_cost\x20REAL\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20models_used\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20updated_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27)),\x0a\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(session_id)\x20REFERENCES\x20sessions(id)\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20)\x0a\x20\x20'),db[_0x3b766a(0x2a9)](_0x3b766a(0x284)),db['run'](_0x3b766a(0x238)),db[_0x3b766a(0x2a9)]('\x0a\x20\x20\x20\x20--\x20Snippets\x20table\x20(clipboard/reusable\x20commands)\x0a\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20snippets\x20(\x0a\x20\x20\x20\x20\x20\x20id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20project_id\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20name\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20content\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20usage_count\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20created_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27)),\x0a\x20\x20\x20\x20\x20\x20updated_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27)),\x0a\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(project_id)\x20REFERENCES\x20projects(id)\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20)\x0a\x20\x20'),db['run'](_0x3b766a(0x246)),db['run'](_0x3b766a(0x24a)),db['run'](_0x3b766a(0x1dd)),db[_0x3b766a(0x2a9)](_0x3b766a(0x24e));try{db[_0x3b766a(0x2a9)]('ALTER\x20TABLE\x20sessions\x20ADD\x20COLUMN\x20permission_mode\x20TEXT\x20DEFAULT\x20\x27default\x27');}catch(_0x4adada){}try{db[_0x3b766a(0x2a9)](_0x3b766a(0x227));}catch(_0x41bf5b){}try{db['run']('ALTER\x20TABLE\x20sessions\x20ADD\x20COLUMN\x20num_turns\x20INTEGER');}catch(_0x1575a0){}try{db['run'](_0x3b766a(0x2b8));}catch(_0x49fc10){}try{db[_0x3b766a(0x2a9)](_0x3b766a(0x249));}catch(_0x31a0e7){}try{db[_0x3b766a(0x2a9)](_0x37bfb5['ASudG']);}catch(_0x44b765){}db['run']('\x0a\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20schema_version\x20(\x0a\x20\x20\x20\x20\x20\x20version\x20INTEGER\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20applied_at\x20TEXT\x20DEFAULT\x20(datetime(\x27now\x27))\x0a\x20\x20\x20\x20)\x0a\x20\x20');const _0x570f71=db['exec'](_0x3b766a(0x253)),_0x4c7f4c=_0x37bfb5[_0x3b766a(0x22a)](_0x570f71['length'],0x0)?_0x570f71[0x0]['values'][0x0][0x0]:0x0;_0x37bfb5[_0x3b766a(0x230)](_0x4c7f4c,0x0)&&db['run']('INSERT\x20INTO\x20schema_version\x20(version)\x20VALUES\x20(?)',[0x1]);runMigrations();const _0x2aa45b=[[_0x37bfb5[_0x3b766a(0x2cd)],_0x3b766a(0x31f)],['default_provider',_0x37bfb5['tiWut']],[_0x3b766a(0x31e),config_default['defaultModel']],[_0x37bfb5[_0x3b766a(0x201)],_0x37bfb5['QtMoR']],['allowed_tools',JSON[_0x3b766a(0x2b4)]([_0x3b766a(0x2fd),_0x3b766a(0x2c1),_0x3b766a(0x25d),'Glob','Grep'])],[_0x37bfb5['wrtNX'],'0'],[_0x37bfb5['kCmVG'],'14'],[_0x37bfb5[_0x3b766a(0x2ba)],_0x3b766a(0x2ce)],['auto_resume_on_restart','true']];for(const [_0x496424,_0x4cb4f4]of _0x2aa45b){db['run']('INSERT\x20OR\x20IGNORE\x20INTO\x20settings\x20(key,\x20value)\x20VALUES\x20(?,\x20?)',[_0x496424,_0x4cb4f4]);}return _0x37bfb5['idGnq'](saveDatabaseNow),console[_0x3b766a(0x2ff)]('Database\x20initialized\x20at:',DB_PATH),db;}function isFtsMissingError(_0x1cccf6){const _0xcc13a5=a0_0x29ac,_0x19edf7={'FnLWd':'no\x20such\x20module:\x20fts5','XdWmO':_0xcc13a5(0x21f)};if(!_0x1cccf6)return![];const _0x191569=String(_0x1cccf6[_0xcc13a5(0x316)]||_0x1cccf6);return _0x191569['includes'](_0x19edf7['FnLWd'])||_0x191569[_0xcc13a5(0x24c)](_0x19edf7['XdWmO'])||_0x191569[_0xcc13a5(0x24c)]('fts5')||_0x191569['includes']('fts4');}function a0_0x29ac(_0x35a636,_0x5ebc53){_0x35a636=_0x35a636-0x1c2;const _0x354eee=a0_0x354e();let _0x29acef=_0x354eee[_0x35a636];return _0x29acef;}function createLogsFts(_0xdd236,_0x58fdbd){const _0xe1de8d=a0_0x29ac,_0x1e29fb='4|0|1|3|2'[_0xe1de8d(0x2cc)]('|');let _0x4dc358=0x0;while(!![]){switch(_0x1e29fb[_0x4dc358++]){case'0':_0xdd236[_0xe1de8d(0x2a9)]('\x0a\x20\x20\x20\x20CREATE\x20TRIGGER\x20IF\x20NOT\x20EXISTS\x20logs_fts_ai\x20AFTER\x20INSERT\x20ON\x20logs\x20BEGIN\x0a\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20logs_fts(rowid,\x20content,\x20session_id)\x0a\x20\x20\x20\x20\x20\x20VALUES\x20(new.id,\x20new.content,\x20new.session_id);\x0a\x20\x20\x20\x20END;\x0a\x20\x20');continue;case'1':_0xdd236['run']('\x0a\x20\x20\x20\x20CREATE\x20TRIGGER\x20IF\x20NOT\x20EXISTS\x20logs_fts_ad\x20AFTER\x20DELETE\x20ON\x20logs\x20BEGIN\x0a\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20logs_fts(logs_fts,\x20rowid,\x20content,\x20session_id)\x0a\x20\x20\x20\x20\x20\x20VALUES\x20(\x27delete\x27,\x20old.id,\x20old.content,\x20old.session_id);\x0a\x20\x20\x20\x20END;\x0a\x20\x20');continue;case'2':_0xdd236[_0xe1de8d(0x2a9)]('INSERT\x20INTO\x20logs_fts(logs_fts)\x20VALUES(\x27rebuild\x27)');continue;case'3':_0xdd236['run']('\x0a\x20\x20\x20\x20CREATE\x20TRIGGER\x20IF\x20NOT\x20EXISTS\x20logs_fts_au\x20AFTER\x20UPDATE\x20ON\x20logs\x20BEGIN\x0a\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20logs_fts(logs_fts,\x20rowid,\x20content,\x20session_id)\x0a\x20\x20\x20\x20\x20\x20VALUES\x20(\x27delete\x27,\x20old.id,\x20old.content,\x20old.session_id);\x0a\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20logs_fts(rowid,\x20content,\x20session_id)\x0a\x20\x20\x20\x20\x20\x20VALUES\x20(new.id,\x20new.content,\x20new.session_id);\x0a\x20\x20\x20\x20END;\x0a\x20\x20');continue;case'4':_0xdd236['run']('\x0a\x20\x20\x20\x20CREATE\x20VIRTUAL\x20TABLE\x20IF\x20NOT\x20EXISTS\x20logs_fts\x0a\x20\x20\x20\x20USING\x20'+_0x58fdbd+'(\x0a\x20\x20\x20\x20\x20\x20content,\x0a\x20\x20\x20\x20\x20\x20session_id\x20UNINDEXED,\x0a\x20\x20\x20\x20\x20\x20content=\x27logs\x27\x0a\x20\x20\x20\x20)\x0a\x20\x20');continue;}break;}}function setupLogsFts(_0x2a776d){const _0x21ded3=a0_0x29ac,_0x19f291={'BoyLA':function(_0x1800e6,_0x29de98,_0x25d6be){return _0x1800e6(_0x29de98,_0x25d6be);},'zfYYb':'fts4','zzfXB':_0x21ded3(0x264)};try{_0x19f291['BoyLA'](createLogsFts,_0x2a776d,_0x21ded3(0x241));return;}catch(_0x25021c){if(!isFtsMissingError(_0x25021c))throw _0x25021c;}try{_0x19f291[_0x21ded3(0x23a)](createLogsFts,_0x2a776d,_0x19f291[_0x21ded3(0x1fc)]);return;}catch(_0x40bec1){if(!isFtsMissingError(_0x40bec1))throw _0x40bec1;}console['warn'](_0x19f291['zzfXB']);}function runMigrations(){const _0x392760=a0_0x29ac,_0x2be9d8={'vnQik':_0x392760(0x1ff),'yQfgZ':function(_0x2e457c,_0x85d65){return _0x2e457c>_0x85d65;},'UdTmu':'function'},_0x2c3ac5=db[_0x392760(0x300)](_0x2be9d8[_0x392760(0x215)]),_0x49c81c=_0x2be9d8[_0x392760(0x293)](_0x2c3ac5[_0x392760(0x2d1)],0x0)&&_0x2c3ac5[0x0]['values'][0x0][0x0]!=null?_0x2c3ac5[0x0]['values'][0x0][0x0]:0x0;for(const _0x2f77a3 of migrations){if(_0x2f77a3['version']>_0x49c81c)try{typeof _0x2f77a3['up']===_0x2be9d8['UdTmu']?_0x2f77a3['up'](db):db['run'](_0x2f77a3['sql']),db[_0x392760(0x2a9)]('INSERT\x20INTO\x20schema_version\x20(version)\x20VALUES\x20(?)',[_0x2f77a3['version']]),console[_0x392760(0x2ff)]('[db]\x20Applied\x20migration\x20v'+_0x2f77a3[_0x392760(0x299)]);}catch(_0x2dc6b0){console['error']('[db]\x20FATAL:\x20Migration\x20v'+_0x2f77a3[_0x392760(0x299)]+_0x392760(0x1f6)+_0x2dc6b0['message']),console[_0x392760(0x28b)](_0x392760(0x302));throw _0x2dc6b0;}}}function checkDbIntegrity(){const _0x5f17a9=a0_0x29ac,_0x4fbd10={'URndC':function(_0x9febec,_0x3c29f5){return _0x9febec>_0x3c29f5;},'GwViP':function(_0x3f7500,_0x17273d){return _0x3f7500(_0x17273d);}};if(!db)return{'ok':![],'detail':'Database\x20not\x20initialized'};try{const _0x2704bb=db['exec']('PRAGMA\x20integrity_check'),_0x35f1d8=_0x4fbd10['URndC'](_0x2704bb['length'],0x0)?_0x2704bb[0x0]['values'][0x0][0x0]:'unknown';return{'ok':_0x35f1d8==='ok','detail':_0x4fbd10['GwViP'](String,_0x35f1d8)};}catch(_0x23ed75){return{'ok':![],'detail':_0x23ed75[_0x5f17a9(0x316)]};}}function getSchemaVersion(){const _0x1c76c3=a0_0x29ac;if(!db)return 0x0;const _0xd2448b=db['exec'](_0x1c76c3(0x1ff));return _0xd2448b['length']>0x0&&_0xd2448b[0x0]['values'][0x0][0x0]!=null?_0xd2448b[0x0]['values'][0x0][0x0]:0x0;}async function getDb(){return!db&&await initializeDatabase(),db;}function a0_0x354e(){const _0x3b5331=['WebSearch','digest','deriveGogKeyringPassword','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_logs_archive_timestamp\x20ON\x20logs_archive(timestamp)','copilot','HvCZO','catch','nkSgp','writeFileSync','stringify','vMkKI','exit','isNaN','ALTER\x20TABLE\x20sessions\x20ADD\x20COLUMN\x20total_cost_usd\x20REAL','resolve','rhjxn','staff-keys','nmzVL','ALTER\x20TABLE\x20snippets\x20DROP\x20COLUMN\x20is_pinned','editor_command','fail','Polar.sh\x20key\x20management:','Edit','muted','Free\x20or\x20paid\x20Google\x20account','trim','revoke-key','LEGACY_DEFAULT_KEY','type','JFyzY','1REmQgT','expires','package.json','split','NsEzf','code','3722880lDuVlZ','\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20analytics_events\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20id\x20INTEGER\x20PRIMARY\x20KEY\x20AUTOINCREMENT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event_type\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event_category\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20properties\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20created_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27))\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20','length','Server\x20responded\x20with\x20','Rrxty','SELECT\x20type,\x20COUNT(*)\x20as\x20count\x20FROM\x20license_keys\x20WHERE\x20status\x20=\x20\x27active\x27\x20GROUP\x20BY\x20type','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_analytics_snapshots_type_period\x20ON\x20analytics_snapshots(snapshot_type,\x20period_start)','\x20\x20\x20\x20','MRQzr','supportsHeadless','Gemini\x20CLI','JaDPk','colana-default-encryption-key32','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Filter\x20by\x20type\x0a\x20\x20\x20\x20\x20\x20','GNGVt','map','aider','3184709Tarsmm','\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20session_checkpoints\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20session_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20project_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20git_sha\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20is_dirty\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20dirty_summary\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20restored_at\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20created_at\x20TEXT\x20DEFAULT\x20(datetime(\x27now\x27)),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(session_id)\x20REFERENCES\x20sessions(id)\x20ON\x20DELETE\x20CASCADE,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(project_id)\x20REFERENCES\x20projects(id)\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20','BLUEPRINT_CLOUD_URL','hANOI','\x0a\x20\x20\x20\x20','PfJXK','--output-format','POLAR_WEBHOOK_SECRET','python3','\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20license_keys\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20name\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20key_hash\x20TEXT\x20NOT\x20NULL\x20UNIQUE,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20\x27staff\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20email\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20\x27active\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20expires_at\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20created_at\x20TEXT\x20DEFAULT\x20(datetime(\x27now\x27)),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20revoked_at\x20TEXT\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20','Type:','beta','env','tRppk','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_checkpoints_session\x20ON\x20session_checkpoints(session_id)','client','oVxQj','default','MbOIc','pass','Key\x20generation\x20returned\x20an\x20unexpected\x20response.','application/json','expiry','ahaRj','active','\x0a\x20\x20\x20\x20--\x20Sessions\x20table\x0a\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20sessions\x20(\x0a\x20\x20\x20\x20\x20\x20id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20project_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20claude_session_id\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20task\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20status\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20\x27starting\x27,\x0a\x20\x20\x20\x20\x20\x20model\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20started_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27)),\x0a\x20\x20\x20\x20\x20\x20ended_at\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20parent_session_id\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(project_id)\x20REFERENCES\x20projects(id)\x20ON\x20DELETE\x20CASCADE,\x0a\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(parent_session_id)\x20REFERENCES\x20sessions(id)\x0a\x20\x20\x20\x20)\x0a\x20\x20','18180gctkhS','SELECT\x20id,\x20name,\x20type,\x20status,\x20expires_at,\x20created_at\x20FROM\x20license_keys\x20WHERE\x20key_hash\x20=\x20?','homedir','Read','YEoVe','log','exec','UPDATE\x20sessions\x20SET\x20auth_mode\x20=\x20\x27subscription\x27\x20WHERE\x20auth_mode\x20IS\x20NULL','[db]\x20Database\x20may\x20be\x20in\x20an\x20inconsistent\x20state.\x20Contact\x20support.','STAFF_KEYS','GSxug','ALTER\x20TABLE\x20sessions\x20ADD\x20COLUMN\x20provider\x20TEXT\x20DEFAULT\x20\x27claude\x27','Usage:','amNGp','join','BKyDt','Copilot\x20CLI','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Email\x20(optional)\x0a\x20\x20\x20\x20\x20\x20','sha256','worktrees','toLowerCase','keys','8VrjDVB','\x0a\x20\x20\x20\x20--\x20Usage\x20table\x20(token/cost\x20tracking)\x0a\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20usage\x20(\x0a\x20\x20\x20\x20\x20\x20id\x20INTEGER\x20PRIMARY\x20KEY\x20AUTOINCREMENT,\x0a\x20\x20\x20\x20\x20\x20session_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20input_tokens\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20output_tokens\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20cache_read_tokens\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20cache_write_tokens\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20cost_estimate\x20REAL\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20recorded_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27)),\x0a\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(session_id)\x20REFERENCES\x20sessions(id)\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20)\x0a\x20\x20','VMeNB','Created','ALTER\x20TABLE\x20templates\x20ADD\x20COLUMN\x20description\x20TEXT','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_audit_log_created\x20ON\x20audit_log(created_at)','message','Qwzsw','UPDATE_CHECK_INTERVAL_MS','BiOBS','AapKZ','runtime','heading','push','default_model','subscription','RdWot','plan','SELECT\x20id,\x20status\x20FROM\x20license_keys\x20WHERE\x20id\x20=\x20?','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Expiry\x20date\x20(optional)\x0a\x20\x20\x20\x20','ufmiS','(via\x20server)','\x1b[36m','Database','zuBHm','OuCEY','HwnCA','Invalid\x20key\x20type:\x20','ALTER\x20TABLE\x20sessions\x20ADD\x20COLUMN\x20worktree_path\x20TEXT','tITte','supportsInteractive','HabUW','\x20has\x20been\x20revoked.\x0a','prefix','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_wizard_sessions_status\x20ON\x20wizard_sessions(status)','gemini','ozQTG','MAX_PORT_ATTEMPTS','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_audit_log_action\x20ON\x20audit_log(action)','SfAPD','GIT_DIFF_MAX_BUFFER','ALTER\x20TABLE\x20sessions\x20ADD\x20COLUMN\x20worktree_branch\x20TEXT','ALTER\x20TABLE\x20snippets\x20DROP\x20COLUMN\x20category','Staff\x20Keys:','authNote','xRcTM','POLAR_ORG_ID','10462356rmRczQ','RlLrQ','https://dashboard.polar.sh','supportsPty','https://buy.polar.sh/colana','CNvPm','value','lana','cmd','LICENSE_REVALIDATION_INTERVAL_MS','QJEIH','571188uduYPH','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_logs_session_id\x20ON\x20logs(session_id)','\x20ORDER\x20BY\x20created_at\x20DESC','127.0.0.1','rDlWU','dbFilename','RMlLG','SELECT\x20id,\x20name,\x20type,\x20status,\x20email,\x20expires_at,\x20created_at,\x20revoked_at\x20FROM\x20license_keys\x20WHERE\x201=1','yzmBI','fWkqD','-beta','\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20analytics_snapshots\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20id\x20INTEGER\x20PRIMARY\x20KEY\x20AUTOINCREMENT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20snapshot_type\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20period_start\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20period_end\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20metrics\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20created_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27))\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20','--resume','(Created\x20via\x20direct\x20DB\x20—\x20restart\x20server\x20to\x20pick\x20up)','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_license_keys_status\x20ON\x20license_keys(status)','codex','LbpdQ','JohTb','eTAGd','Key:','http://127.0.0.1:','ALTER\x20TABLE\x20usage\x20ADD\x20COLUMN\x20cost_source\x20TEXT\x20DEFAULT\x20\x27estimated\x27','bypassPermissions','OpenAI\x20API\x20key\x20(pay-per-use)','--expires\x202026-12-31','count','\x20failed:\x20','\x20AND\x20status\x20=\x20?','rLIkj','WodHN','JjuNg','\x20Key\x20generated\x20successfully!','zfYYb','\x20key(s)','--name\x20\x22Name\x22','SELECT\x20MAX(version)\x20as\x20v\x20FROM\x20schema_version','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Run\x20system\x20diagnostics\x0a\x20\x20\x20\x20','ZUjAC','info','DB_FILENAME','supportsResume','LkZqP','Grep','now','colana\x20admin\x20doctor','DELETE','\x20Key\x20','\x20\x20\x20\x20\x20\x20\x20\x20Revoke\x20a\x20DB-stored\x20license\x20key\x0a\x0a\x20\x20','startsWith','createHash','colana\x20admin\x20create-key','1757546jECJPu','npm','591bvyMbb','PERMISSION_TIMEOUT_MS','bHxoD','set','vnQik','Admin\x20Keys:','****','POLAR_CHECKOUT_URL','PERMISSION_CLIENT_MS','LOG_RETENTION_MAX_BATCHES','efVeJ','QMane','parse','repeat','no\x20such\x20module:\x20fts4','then','warn','subcommand','free','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_license_keys_key_hash\x20ON\x20license_keys(key_hash)','WljfU','npm\x20install\x20-g\x20openclaw','ALTER\x20TABLE\x20sessions\x20ADD\x20COLUMN\x20duration_ms\x20INTEGER','update','dirname','zPFHY','License\x20Keys:','name','Total:\x20','https://api.polar.sh/v1','padEnd','GFRKl','PCEzu','FgKkf','ALTER\x20TABLE\x20sessions\x20ADD\x20COLUMN\x20isolation_mode\x20TEXT\x20DEFAULT\x20\x27local\x27','dontAsk','hex','\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20audit_log\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20id\x20INTEGER\x20PRIMARY\x20KEY\x20AUTOINCREMENT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20target\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20actor\x20TEXT\x20DEFAULT\x20\x27admin\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20created_at\x20TEXT\x20DEFAULT\x20(datetime(\x27now\x27))\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20','ETvpL','\x0a\x20\x20\x20\x20--\x20Templates\x20table\x20(task\x20prompt\x20templates)\x0a\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20templates\x20(\x0a\x20\x20\x20\x20\x20\x20id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20project_id\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20name\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20content\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20category\x20TEXT\x20DEFAULT\x20\x27general\x27,\x0a\x20\x20\x20\x20\x20\x20created_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27)),\x0a\x20\x20\x20\x20\x20\x20updated_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27)),\x0a\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(project_id)\x20REFERENCES\x20projects(id)\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20)\x0a\x20\x20','18044Zgvtzy','BoyLA','sjsHj','FORCE_COLOR','expires_at','npm\x20install\x20-g\x20@openai/codex','hVEfQ','MhmXp','fts5','User-configured\x20model\x20keys\x20(Anthropic,\x20OpenAI,\x20Ollama,\x20etc.)','\x1b[32m','UPDATE\x20projects\x20SET\x20is_personal\x20=\x201\x20WHERE\x20description\x20=\x20\x27Virtual\x20project\x20for\x20non-coding\x20agents\x20(OpenClaw,\x20etc.)\x27','webZl','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_sessions_project_id\x20ON\x20sessions(project_id)','uAfLd','RJoyR','ALTER\x20TABLE\x20sessions\x20ADD\x20COLUMN\x20mode\x20TEXT\x20DEFAULT\x20\x27legacy\x27','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_sessions_status\x20ON\x20sessions(status)','sXbDJ','includes','ppfyu','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_usage_session_id\x20ON\x20usage(session_id)','email','releaseChannel','ENCRYPTION_KEY','kxmdo','SELECT\x20COUNT(*)\x20as\x20cnt\x20FROM\x20schema_version','Anthropic\x20subscription\x20or\x20API\x20key','Expires','ERROR:\x20--name\x20is\x20required.','@anthropic-ai/claude-code','readFileSync','from','gYuwz','filter','UPDATE\x20projects\x20SET\x20is_personal\x20=\x201\x20WHERE\x20name\x20=\x20\x27Personal\x27\x20AND\x20is_personal\x20=\x200','Write','prepare','--restore-chat-history','\x0a\x20\x20','bzUdT','tumBv','7444TfGWZe','[db]\x20FTS\x20unavailable;\x20log\x20search\x20will\x20fall\x20back\x20to\x20LIKE.','taNpL','dark','DATA_DIR','Name','encryptionKey','reset','Key\x20ID\x20is\x20required','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Filter\x20by\x20status\x0a\x20\x20\x20\x20','HpXgq','mhGCO','\x20LIMIT\x20?','colana:gog-keyring:','providers','brHKa','zWlsG','JbMHU','mkdirSync','Admin\x20CLI','forEach','koRrC','ALTER\x20TABLE\x20templates\x20ADD\x20COLUMN\x20is_builtin\x20INTEGER\x20DEFAULT\x200','gh\x20copilot\x20--version','min','existsSync','created_at','7VIxtQo','Qrqlt','isTTY','ZRyFl','RvvQf','BbGSx','\x0a\x20\x20\x20\x20--\x20Settings\x20table\x20(key-value\x20store)\x0a\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20settings\x20(\x0a\x20\x20\x20\x20\x20\x20key\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20value\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20updated_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27))\x0a\x20\x20\x20\x20)\x0a\x20\x20','LOG_RETENTION_INTERVAL_MS','\x0a\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20OR\x20REPLACE\x20INTO\x20session_usage_summary\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20session_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20input_tokens,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20output_tokens,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20cache_read_tokens,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20cache_write_tokens,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20total_cost,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20cli_cost,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20models_used,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updated_at\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20session_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20COALESCE(SUM(input_tokens),\x200),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20COALESCE(SUM(output_tokens),\x200),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20COALESCE(SUM(cache_read_tokens),\x200),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20COALESCE(SUM(cache_write_tokens),\x200),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20COALESCE(SUM(cost_estimate),\x200),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20COALESCE(SUM(CASE\x20WHEN\x20cost_source\x20IN\x20(\x27cli_reported\x27,\x27terminal_parsed\x27)\x20THEN\x20cost_estimate\x20ELSE\x200\x20END),\x200),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20GROUP_CONCAT(DISTINCT\x20model),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20datetime(\x27now\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20usage\x0a\x20\x20\x20\x20\x20\x20\x20\x20GROUP\x20BY\x20session_id\x0a\x20\x20\x20\x20\x20\x20','wGcnh','max','admin','entries','error','vRDdi','delegate','ALTER\x20TABLE\x20sessions\x20ADD\x20COLUMN\x20worktree_pinned\x20INTEGER\x20DEFAULT\x200','\x1b[1;37m','utf-8','uUDzf','status','yQfgZ','slice','UPDATE\x20projects\x20SET\x20is_personal\x20=\x201\x20WHERE\x20name\x20=\x20\x27Personal\x27','50ppzYfY','ALTER\x20TABLE\x20sessions\x20ADD\x20COLUMN\x20auth_mode\x20TEXT\x20DEFAULT\x20NULL','ALTER\x20TABLE\x20sessions\x20ADD\x20COLUMN\x20provider_session_id\x20TEXT','version','ADMIN_KEYS','sAJRJ','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20List\x20DB-stored\x20license\x20keys\x0a\x20\x20\x20\x20\x20\x20','FJDwD','#\x20Back\x20up\x20this\x20file\x20alongside\x20your\x20database.','Database\x20connection\x20closed','ALTER\x20TABLE\x20usage\x20ADD\x20COLUMN\x20model\x20TEXT\x20DEFAULT\x20NULL','VwMGn','toLocaleDateString','HTTP\x20','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_analytics_events_type\x20ON\x20analytics_events(event_type)','randomBytes','json','recommended','mYHml','run','zVkmp'];a0_0x354e=function(){return _0x3b5331;};return a0_0x354e();}function closeDb(){const _0x25f641=a0_0x29ac,_0x3141dc={'HvCZO':function(_0x159e42){return _0x159e42();},'uBSJA':_0x25f641(0x29f)};if(db){const _0xca5fe0='2|0|3|4|1'[_0x25f641(0x2cc)]('|');let _0x574e0b=0x0;while(!![]){switch(_0xca5fe0[_0x574e0b++]){case'0':_0x3141dc[_0x25f641(0x2b0)](saveDatabaseNow);continue;case'1':console[_0x25f641(0x2ff)](_0x3141dc['uBSJA']);continue;case'2':_saveTimer&&(clearTimeout(_saveTimer),_saveTimer=null);continue;case'3':db['close']();continue;case'4':db=null;continue;}break;}}}function save(){_saveTimer&&(clearTimeout(_saveTimer),_saveTimer=null),saveDatabaseNow();}function queryAll(_0x70aec9,_0x16d11e=[]){const _0x3f0399=a0_0x29ac,_0x3db518={'uetqk':'Database\x20not\x20initialized.\x20Call\x20initializeDatabase()\x20first.'};if(!db)throw new Error(_0x3db518['uetqk']);const _0x5a07df=db[_0x3f0399(0x25e)](_0x70aec9);_0x16d11e[_0x3f0399(0x2d1)]>0x0&&_0x5a07df['bind'](_0x16d11e);const _0x51cf26=[];while(_0x5a07df['step']()){_0x51cf26['push'](_0x5a07df['getAsObject']());}return _0x5a07df[_0x3f0399(0x223)](),_0x51cf26;}function queryOne(_0x5a1e44,_0x21e623=[]){const _0x2759b7=a0_0x29ac,_0x5b2c12={'LkZqP':function(_0x9d6d5f,_0x25cdd2){return _0x9d6d5f>_0x25cdd2;}},_0x2a001d=queryAll(_0x5a1e44,_0x21e623);return _0x5b2c12[_0x2759b7(0x205)](_0x2a001d[_0x2759b7(0x2d1)],0x0)?_0x2a001d[0x0]:null;}function run(_0x15b2ae,_0x243e7e=[]){const _0x145b5b=a0_0x29ac,_0x2e9876={'mYHml':'Database\x20not\x20initialized.\x20Call\x20initializeDatabase()\x20first.'};if(!db)throw new Error(_0x2e9876[_0x145b5b(0x2a8)]);db[_0x145b5b(0x2a9)](_0x15b2ae,_0x243e7e),saveDatabase();}function runImmediate(_0xb62810,_0x13f1cc=[]){const _0x65c01c={'ijfLw':'Database\x20not\x20initialized.\x20Call\x20initializeDatabase()\x20first.'};if(!db)throw new Error(_0x65c01c['ijfLw']);db['run'](_0xb62810,_0x13f1cc),save();}var DATA_DIR,DB_PATH,db,SQL,_saveTimer,migrations,db_default,init_db=__esm({'server/db.js'(){const _0x280971=a0_0x29ac,_0x4a3016={'tPbDU':_0x280971(0x1f1),'GSxug':'ALTER\x20TABLE\x20sessions\x20ADD\x20COLUMN\x20last_activity_at\x20TEXT\x20DEFAULT\x20NULL','oqvyG':_0x280971(0x2bd),'RvvQf':_0x280971(0x1cc),'QeFSM':_0x280971(0x2ee),'NydAs':_0x280971(0x298),'GwqbM':'UPDATE\x20sessions\x20SET\x20provider_session_id\x20=\x20claude_session_id\x20WHERE\x20provider\x20=\x20\x27claude\x27\x20AND\x20claude_session_id\x20IS\x20NOT\x20NULL\x20AND\x20provider_session_id\x20IS\x20NULL','nkSgp':'ALTER\x20TABLE\x20templates\x20ADD\x20COLUMN\x20suggested_provider\x20TEXT','hANOI':function(_0x3cc775,_0xf7f2ed){return _0x3cc775(_0xf7f2ed);},'zvgQT':'CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_analytics_events_category\x20ON\x20analytics_events(event_category)','amNGp':'CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_analytics_events_created\x20ON\x20analytics_events(created_at)','cPZVl':_0x280971(0x2d5),'tRppk':'CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_pcm_role\x20ON\x20personal_chat_messages(role)'};init_config(),DATA_DIR=config_default['dataDir'],DB_PATH=a0_0x1dbc7b[_0x280971(0x308)](DATA_DIR,config_default[_0x280971(0x1e1)]),db=null,SQL=null,_saveTimer=null,migrations=[{'version':0x2,'up':_0xf77f0b=>{const _0x3d9fc1=_0x280971;_0xf77f0b[_0x3d9fc1(0x2a9)](_0x3d9fc1(0x297)),_0xf77f0b['run'](_0x3d9fc1(0x2a0)),_0xf77f0b[_0x3d9fc1(0x2a9)](_0x4a3016['tPbDU']);}},{'version':0x3,'up':_0x103e55=>{const _0x47c690=_0x280971;_0x103e55['run'](_0x47c690(0x301));}},{'version':0x4,'up':_0x4f91d7=>{const _0x4aa910=_0x280971;_0x4f91d7[_0x4aa910(0x2a9)](_0x4aa910(0x236)),_0x4f91d7[_0x4aa910(0x2a9)](_0x4aa910(0x1c8)),_0x4f91d7['run'](_0x4aa910(0x315));}},{'version':0x5,'up':_0x4c14a2=>{const _0x56e398=_0x280971;try{_0x4c14a2['run'](_0x4a3016[_0x56e398(0x304)]);}catch(_0x2ca62c){}}},{'version':0x6,'up':_0x5e1b21=>{try{_0x5e1b21['run']('ALTER\x20TABLE\x20projects\x20ADD\x20COLUMN\x20permission_preset\x20TEXT\x20DEFAULT\x20\x27default\x27');}catch(_0x5ced3b){}}},{'version':0x7,'up':_0x38b12c=>{const _0x12f003=_0x280971;try{_0x38b12c[_0x12f003(0x2a9)](_0x4a3016['oqvyG']);}catch(_0x3fd463){}try{_0x38b12c['run'](_0x4a3016[_0x12f003(0x282)]);}catch(_0x13b312){}}},{'version':0x8,'up':_0x39a8c7=>{const _0xd2c4ac=_0x280971;_0x39a8c7[_0xd2c4ac(0x2a9)](_0xd2c4ac(0x2e1)),_0x39a8c7['run'](_0x4a3016['QeFSM']);}},{'version':0x9,'up':_0x43e7e4=>{try{_0x43e7e4['run'](_0x4a3016['NydAs']);}catch(_0x283400){}_0x43e7e4['run'](_0x4a3016['GwqbM']),_0x43e7e4['run']('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_sessions_provider_session_id\x20ON\x20sessions(provider_session_id)');}},{'version':0xa,'up':_0x4f72fd=>{const _0x5035b4=_0x280971;_0x4f72fd['run']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20wizard_sessions\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20scan_results\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20selected_providers\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20install_results\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20created_at\x20INTEGER\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20completed_at\x20INTEGER\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20'),_0x4f72fd[_0x5035b4(0x2a9)](_0x5035b4(0x1c4));}},{'version':0xb,'up':_0xcdf9a0=>{const _0x269fca=_0x280971;try{_0xcdf9a0[_0x269fca(0x2a9)](_0x269fca(0x314));}catch(_0x54231e){}try{_0xcdf9a0['run'](_0x4a3016[_0x269fca(0x2b2)]);}catch(_0xe33375){}try{_0xcdf9a0[_0x269fca(0x2a9)]('ALTER\x20TABLE\x20templates\x20ADD\x20COLUMN\x20permission_mode\x20TEXT\x20DEFAULT\x20\x27default\x27');}catch(_0x4181d8){}try{_0xcdf9a0['run'](_0x269fca(0x279));}catch(_0x273f14){}}},{'version':0xc,'up':_0x578b5c=>{const _0x5a89a3=_0x280971;_0x578b5c[_0x5a89a3(0x2a9)]('UPDATE\x20sessions\x20SET\x20auth_mode\x20=\x20\x27api_key\x27\x20WHERE\x20provider\x20=\x20\x27codex\x27\x20AND\x20(auth_mode\x20IS\x20NULL\x20OR\x20auth_mode\x20=\x20\x27subscription\x27)');}},{'version':0xd,'up':_0x41f2c7=>{const _0x3a8b92=_0x280971;_0x41f2c7['run']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20session_usage_summary\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20session_id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20input_tokens\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20output_tokens\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20cache_read_tokens\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20cache_write_tokens\x20INTEGER\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20total_cost\x20REAL\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20cli_cost\x20REAL\x20DEFAULT\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20models_used\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updated_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27)),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(session_id)\x20REFERENCES\x20sessions(id)\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20'),_0x41f2c7['run'](_0x3a8b92(0x286));}},{'version':0xe,'up':_0x441e73=>{const _0x55e620=_0x280971;_0x4a3016[_0x55e620(0x2e3)](setupLogsFts,_0x441e73);}},{'version':0xf,'up':_0x36ca60=>{const _0x15a0de=_0x280971;_0x36ca60['run']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20logs_archive\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20id\x20INTEGER\x20PRIMARY\x20KEY\x20AUTOINCREMENT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20session_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20content\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20archived_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27)),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(session_id)\x20REFERENCES\x20sessions(id)\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20'),_0x36ca60[_0x15a0de(0x2a9)]('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_logs_archive_session_id\x20ON\x20logs_archive(session_id)'),_0x36ca60['run'](_0x15a0de(0x2ae));}},{'version':0x10,'up':_0x24e0d5=>{const _0x4b40d1=_0x280971;_0x24e0d5['run'](_0x4b40d1(0x2e9)),_0x24e0d5[_0x4b40d1(0x2a9)](_0x4b40d1(0x1ea)),_0x24e0d5[_0x4b40d1(0x2a9)](_0x4b40d1(0x224));}},{'version':0x11,'up':_0xf5c09f=>{const _0x2d4e89=_0x280971;_0xf5c09f[_0x2d4e89(0x2a9)]('ALTER\x20TABLE\x20projects\x20ADD\x20COLUMN\x20is_personal\x20INTEGER\x20NOT\x20NULL\x20DEFAULT\x200'),_0xf5c09f['run'](_0x2d4e89(0x295)),_0xf5c09f[_0x2d4e89(0x2a9)](_0x2d4e89(0x244));}},{'version':0x12,'up':_0xc531f=>{const _0x291395=_0x280971;_0xc531f[_0x291395(0x2a9)](_0x291395(0x25c));}},{'version':0x13,'up':_0xaa0320=>{const _0x945160=_0x280971,_0x59f12f=[_0x945160(0x233),_0x945160(0x32c),_0x945160(0x1cb),_0x945160(0x28e),'ALTER\x20TABLE\x20sessions\x20ADD\x20COLUMN\x20worktree_merged\x20INTEGER\x20DEFAULT\x200'];for(const _0x331838 of _0x59f12f){try{_0xaa0320['run'](_0x331838);}catch(_0x16d7eb){}}}},{'version':0x14,'up':_0xdf2361=>{const _0x1ddbb0=_0x280971;_0xdf2361['run'](_0x1ddbb0(0x2d0)),_0xdf2361[_0x1ddbb0(0x2a9)](_0x1ddbb0(0x1e7)),_0xdf2361[_0x1ddbb0(0x2a9)](_0x1ddbb0(0x2a4)),_0xdf2361['run'](_0x4a3016['zvgQT']),_0xdf2361[_0x1ddbb0(0x2a9)](_0x4a3016[_0x1ddbb0(0x307)]),_0xdf2361[_0x1ddbb0(0x2a9)](_0x4a3016['cPZVl']);}},{'version':0x15,'up':_0x16ca56=>{const _0x2c7149=_0x280971;_0x16ca56[_0x2c7149(0x2a9)]('\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20personal_chat_messages\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20id\x20INTEGER\x20PRIMARY\x20KEY\x20AUTOINCREMENT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20role\x20TEXT\x20NOT\x20NULL\x20CHECK(role\x20IN\x20(\x27user\x27,\x20\x27assistant\x27,\x20\x27notification\x27)),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20content\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20source\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20\x27chat\x27\x20CHECK(source\x20IN\x20(\x27chat\x27,\x20\x27notification\x27,\x20\x27terminal\x27)),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20metadata\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20created_at\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20(datetime(\x27now\x27))\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20'),_0x16ca56['run']('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_pcm_created\x20ON\x20personal_chat_messages(created_at)'),_0x16ca56[_0x2c7149(0x2a9)](_0x4a3016[_0x2c7149(0x2ed)]);}},{'version':0x16,'up':_0x544720=>{_0x544720['run']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20project_blueprints\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20project_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20blueprint_id\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20blueprint_name\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20blueprint_version\x20INTEGER\x20DEFAULT\x201,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20source_type\x20TEXT\x20NOT\x20NULL\x20DEFAULT\x20\x27file\x27\x20CHECK(source_type\x20IN\x20(\x27file\x27,\x20\x27url\x27,\x20\x27cloud\x27)),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20source_url\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20original_json\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20variables_encrypted\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20applied_at\x20TEXT\x20DEFAULT\x20(datetime(\x27now\x27)),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20last_checked_at\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20last_updated_at\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(project_id)\x20REFERENCES\x20projects(id)\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20'),_0x544720['run']('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20idx_project_blueprints_project\x20ON\x20project_blueprints(project_id)');}}],db_default={'getDb':getDb,'closeDb':closeDb,'save':save,'queryAll':queryAll,'queryOne':queryOne,'run':run,'runImmediate':runImmediate,'checkDbIntegrity':checkDbIntegrity,'getSchemaVersion':getSchemaVersion};}}),key_manager_exports={};__export(key_manager_exports,{'exportKeysCSV':()=>exportKeysCSV,'generateKey':()=>generateKey,'getKeyStats':()=>getKeyStats,'listKeys':()=>listKeys,'revokeKey':()=>revokeKey,'validateKey':()=>validateKey});import a0_0x35a75c from'crypto';function hashKey(_0x2d024f){const _0x13c8db=a0_0x29ac,_0xd02983={'OMKdC':'hex'};return a0_0x35a75c['createHash'](_0x13c8db(0x30c))[_0x13c8db(0x228)](_0x2d024f)[_0x13c8db(0x2ac)](_0xd02983['OMKdC']);}function generateKey(_0x413ca6,_0x1b0b8e='staff',_0x177a10=null,_0x14df90=null){const _0x6c0863=a0_0x29ac,_0x28dad5={'BiOBS':'beta','RJoyR':'string','UbVMH':'Name\x20is\x20required','sJJKG':function(_0x2136f3,_0x7e0ecf,_0x3b481d){return _0x2136f3(_0x7e0ecf,_0x3b481d);},'SXhLx':function(_0x49004b,_0x332146){return _0x49004b||_0x332146;}},_0x25738c=['admin','staff',_0x28dad5[_0x6c0863(0x319)]];if(!_0x25738c[_0x6c0863(0x24c)](_0x1b0b8e))throw new Error(_0x6c0863(0x32b)+_0x1b0b8e+'.\x20Must\x20be\x20one\x20of:\x20'+_0x25738c['join'](',\x20'));if(!_0x413ca6||typeof _0x413ca6!==_0x28dad5[_0x6c0863(0x248)]||!_0x413ca6[_0x6c0863(0x2c4)]())throw new Error(_0x28dad5['UbVMH']);const _0x4b7967=a0_0x35a75c['randomUUID'](),_0x1ff932=KEY_PREFIX+a0_0x35a75c[_0x6c0863(0x2a5)](0x10)['toString']('hex'),_0x2433fb=hashKey(_0x1ff932);return _0x28dad5['sJJKG'](run,'INSERT\x20INTO\x20license_keys\x20(id,\x20name,\x20key_hash,\x20type,\x20email,\x20status,\x20expires_at)\x0a\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20\x27active\x27,\x20?)',[_0x4b7967,_0x413ca6['trim'](),_0x2433fb,_0x1b0b8e,_0x177a10||null,_0x28dad5['SXhLx'](_0x14df90,null)]),{'id':_0x4b7967,'raw':_0x1ff932,'type':_0x1b0b8e,'name':_0x413ca6[_0x6c0863(0x2c4)]()};}function validateKey(_0x39a5ec){const _0x5cecb9=a0_0x29ac,_0x5093c2={'QJEIH':'string','GTLZn':function(_0x4881df,_0xba12e8,_0x1f67e7){return _0x4881df(_0xba12e8,_0x1f67e7);},'BhdkQ':_0x5cecb9(0x2fb),'zVkmp':function(_0x75f82f,_0x29b932){return _0x75f82f!==_0x29b932;}};if(!_0x39a5ec||typeof _0x39a5ec!==_0x5093c2[_0x5cecb9(0x1db)])return null;const _0x51358d=hashKey(_0x39a5ec['trim']()),_0x44e7ed=_0x5093c2['GTLZn'](queryOne,_0x5093c2['BhdkQ'],[_0x51358d]);if(!_0x44e7ed)return null;if(_0x5093c2[_0x5cecb9(0x2aa)](_0x44e7ed[_0x5cecb9(0x292)],_0x5cecb9(0x2f8)))return null;if(_0x44e7ed['expires_at']){const _0x19959e=new Date(_0x44e7ed['expires_at'])['getTime']();if(_0x19959e<Date[_0x5cecb9(0x207)]())return null;}return{'id':_0x44e7ed['id'],'name':_0x44e7ed[_0x5cecb9(0x22c)],'type':_0x44e7ed['type'],'status':_0x44e7ed['status'],'expires_at':_0x44e7ed[_0x5cecb9(0x23d)],'created_at':_0x44e7ed[_0x5cecb9(0x27d)]};}function listKeys(_0xdfb413={}){const _0x1a2612=a0_0x29ac,_0x562675={'hVEfQ':_0x1a2612(0x1e3),'efVeJ':_0x1a2612(0x1f7),'NCRnp':_0x1a2612(0x1de),'MRQzr':function(_0x509c5a,_0x3c84c5){return _0x509c5a(_0x3c84c5);},'BbGSx':_0x1a2612(0x26f)};let _0x1d3a87=_0x562675[_0x1a2612(0x23f)];const _0x1844ae=[];_0xdfb413['type']&&(_0x1d3a87+='\x20AND\x20type\x20=\x20?',_0x1844ae[_0x1a2612(0x31d)](_0xdfb413['type']));_0xdfb413[_0x1a2612(0x292)]&&(_0x1d3a87+=_0x562675[_0x1a2612(0x21b)],_0x1844ae['push'](_0xdfb413['status']));_0x1d3a87+=_0x562675['NCRnp'];const _0x2a109f=Math[_0x1a2612(0x27b)](Math[_0x1a2612(0x288)](_0x562675[_0x1a2612(0x2d7)](parseInt,_0xdfb413['limit'])||0x32,0x1),0x1f4);_0x1d3a87+=_0x562675[_0x1a2612(0x283)],_0x1844ae[_0x1a2612(0x31d)](_0x2a109f);const _0x407c0f=queryAll(_0x1d3a87,_0x1844ae),_0x23756f=_0x407c0f['map'](_0xe311b8=>({'id':_0xe311b8['id'],'name':_0xe311b8[_0x1a2612(0x22c)],'type':_0xe311b8['type'],'status':_0xe311b8['status']==='active'?'ACTIVE':'SUSPENDED','key':_0xe311b8['id'][_0x1a2612(0x294)](0x0,0x8)+_0x1a2612(0x217),'email':_0xe311b8['email'],'expiry':_0xe311b8[_0x1a2612(0x23d)],'created_at':_0xe311b8['created_at'],'revoked_at':_0xe311b8['revoked_at']}));return{'keys':_0x23756f};}function revokeKey(_0x1a2ef9){const _0x3eba2a=a0_0x29ac,_0x25b07f={'tumBv':'Key\x20not\x20found','wkcGP':function(_0x88fe5e,_0x4f8ea2){return _0x88fe5e===_0x4f8ea2;},'xfjCD':'revoked','OJiXe':'Key\x20is\x20already\x20revoked','LSmCB':function(_0x3b5294,_0x242b90,_0x54a4d6){return _0x3b5294(_0x242b90,_0x54a4d6);}};if(!_0x1a2ef9)throw new Error(_0x3eba2a(0x26b));const _0x4d0e30=queryOne(_0x3eba2a(0x322),[_0x1a2ef9]);if(!_0x4d0e30)throw new Error(_0x25b07f[_0x3eba2a(0x262)]);if(_0x25b07f['wkcGP'](_0x4d0e30[_0x3eba2a(0x292)],_0x25b07f['xfjCD']))throw new Error(_0x25b07f['OJiXe']);return _0x25b07f['LSmCB'](run,'UPDATE\x20license_keys\x20SET\x20status\x20=\x20\x27revoked\x27,\x20revoked_at\x20=\x20datetime(\x27now\x27)\x20WHERE\x20id\x20=\x20?',[_0x1a2ef9]),{'success':!![]};}function getKeyStats(){const _0x2a2b6e=a0_0x29ac,_0x2f9584={'brHKa':function(_0x3d8e94,_0x386623){return _0x3d8e94(_0x386623);},'rBbjG':function(_0x578baf,_0x3fb8bd){return _0x578baf(_0x3fb8bd);},'FJDwD':'SELECT\x20COUNT(*)\x20as\x20count\x20FROM\x20license_keys\x20WHERE\x20status\x20=\x20\x27active\x27','VMeNB':'SELECT\x20COUNT(*)\x20as\x20count\x20FROM\x20license_keys\x20WHERE\x20status\x20=\x20\x27revoked\x27'},_0x2b6540=_0x2f9584[_0x2a2b6e(0x272)](queryOne,'SELECT\x20COUNT(*)\x20as\x20count\x20FROM\x20license_keys'),_0x3949be=_0x2f9584['rBbjG'](queryOne,_0x2f9584[_0x2a2b6e(0x29d)]),_0x2d9338=_0x2f9584[_0x2a2b6e(0x272)](queryOne,_0x2f9584[_0x2a2b6e(0x312)]),_0x34f3ca=queryAll(_0x2a2b6e(0x2d4)),_0xc4180d={};for(const _0x4e26a2 of _0x34f3ca){_0xc4180d[_0x4e26a2['type']]=_0x4e26a2['count'];}return{'totalKeys':_0x2b6540?.[_0x2a2b6e(0x1f5)]||0x0,'activeKeys':_0x3949be?.['count']||0x0,'revokedKeys':_0x2d9338?.[_0x2a2b6e(0x1f5)]||0x0,'byType':_0xc4180d};}function exportKeysCSV(){const _0x3a7be6=a0_0x29ac,_0x273529={'ufmiS':'id,name,type,status,email,expires_at,created_at,revoked_at'},_0x548ffd=queryAll('SELECT\x20id,\x20name,\x20type,\x20status,\x20email,\x20expires_at,\x20created_at,\x20revoked_at\x20FROM\x20license_keys\x20ORDER\x20BY\x20created_at\x20DESC'),_0x2c488a=_0x273529[_0x3a7be6(0x324)],_0x225d89=_0x548ffd[_0x3a7be6(0x2de)](_0x4db01d=>{const _0x52aa4a=_0x3a7be6;return[_0x4db01d['id'],'\x22'+(_0x4db01d['name']||'')['replace'](/"/g,'\x22\x22')+'\x22',_0x4db01d['type'],_0x4db01d[_0x52aa4a(0x292)],_0x4db01d[_0x52aa4a(0x24f)]||'',_0x4db01d['expires_at']||'',_0x4db01d['created_at']||'',_0x4db01d['revoked_at']||'']['join'](',');});return[_0x2c488a,..._0x225d89][_0x3a7be6(0x308)]('\x0a');}var KEY_PREFIX,init_key_manager=__esm({'server/key-manager.js'(){const _0x588562=a0_0x29ac,_0x45f8c1={'uAfLd':function(_0x23d734){return _0x23d734();},'ETvpL':'col_'};_0x45f8c1[_0x588562(0x247)](init_db),KEY_PREFIX=_0x45f8c1[_0x588562(0x237)];}});import a0_0x42b982 from'path';import{fileURLToPath as a0_0x447b11}from'url';var supportsColor=((()=>{const _0x24b574=a0_0x29ac,_0xc861be={'CNvPm':function(_0x1d68ac,_0x54a14d){return _0x1d68ac===_0x54a14d;}};if(process[_0x24b574(0x2ec)]['NO_COLOR'])return![];if(_0xc861be[_0x24b574(0x1d6)](process[_0x24b574(0x2ec)][_0x24b574(0x23c)],'1'))return!![];return!!process['stdout'][_0x24b574(0x280)];})());function makeColors(_0x4cf786){const _0x1410f4=a0_0x29ac,_0x517165={'UdCSi':'\x1b[38;5;214m','JaDPk':_0x1410f4(0x243),'GpfZe':'\x1b[33m','PCEzu':'\x1b[37m','GNGVt':'\x1b[36m'};if(!_0x4cf786)return{'reset':'','brand':'','heading':'','success':'','error':'','warn':'','info':'','muted':'','value':'','cmd':'','url':''};return{'reset':'\x1b[0m','brand':_0x517165['UdCSi'],'heading':_0x1410f4(0x28f),'success':_0x517165[_0x1410f4(0x2da)],'error':'\x1b[31m','warn':_0x517165['GpfZe'],'info':'\x1b[36m','muted':'\x1b[90m','value':_0x517165[_0x1410f4(0x231)],'cmd':_0x517165[_0x1410f4(0x2dd)],'url':_0x1410f4(0x326)};}var c=makeColors(supportsColor),icons={'pass':c['success']+'✓'+c['reset'],'fail':c[a0_0x6c3ac3(0x28b)]+'✗'+c[a0_0x6c3ac3(0x26a)],'warn':c['warn']+'⚠'+c['reset'],'arrow':c[a0_0x6c3ac3(0x202)]+'→'+c['reset'],'dot':c['brand']+'•'+c[a0_0x6c3ac3(0x26a)]};function brandName(_0x43d8a8='full'){const _0x6fde51=a0_0x6c3ac3,_0x254c5f={'fWkqD':_0x6fde51(0x1c3)},_0x10cd50=c['heading']+'co'+c['brand']+':'+c['heading']+_0x6fde51(0x1d8)+c['reset'];if(_0x43d8a8===_0x254c5f[_0x6fde51(0x1e5)])return'['+_0x10cd50+']';return _0x10cd50;}var __dirname2=a0_0x42b982['dirname'](a0_0x447b11(import.meta.url));function parseArgs(_0x3580bd){const _0x39f691=a0_0x6c3ac3,_0x28940d={'znpqj':function(_0x2a07b1,_0x32510c){return _0x2a07b1<_0x32510c;},'ppfyu':function(_0x44c58f,_0x1b7b5e){return _0x44c58f+_0x1b7b5e;}},_0x3c9fa9=_0x3580bd[_0x39f691(0x294)](0x2),_0x2d9d10=_0x3c9fa9[0x0],_0x28998f=[],_0x952c67={};for(let _0xfe9b4=0x1;_0x28940d['znpqj'](_0xfe9b4,_0x3c9fa9['length']);_0xfe9b4++){if(_0x3c9fa9[_0xfe9b4][_0x39f691(0x20c)]('--')){let _0x388b0a=_0x3c9fa9[_0xfe9b4]['slice'](0x2),_0x5b259e;const _0x243272=_0x388b0a['indexOf']('=');_0x243272!==-0x1?(_0x5b259e=_0x388b0a['slice'](_0x243272+0x1),_0x388b0a=_0x388b0a['slice'](0x0,_0x243272)):_0x5b259e=_0xfe9b4+0x1<_0x3c9fa9[_0x39f691(0x2d1)]&&!_0x3c9fa9[_0x28940d[_0x39f691(0x24d)](_0xfe9b4,0x1)]['startsWith']('--')?_0x3c9fa9[++_0xfe9b4]:'true',_0x952c67[_0x388b0a]=_0x5b259e;}else _0x28998f['push'](_0x3c9fa9[_0xfe9b4]);}return{'command':_0x2d9d10,'flags':_0x952c67,'positional':_0x28998f};}function maskKey(_0x27108b){const _0x54b5c7=a0_0x6c3ac3,_0x43b1f5={'KWqnP':'****'};if(!_0x27108b||_0x27108b[_0x54b5c7(0x2d1)]<=0x8)return _0x43b1f5['KWqnP'];return _0x27108b['slice'](0x0,0x4)+_0x43b1f5['KWqnP'];}var DEFAULT_PORT=0x2694,MAX_PORT_SCAN=0x64;async function findRunningServer(){const _0x5e0bfb=a0_0x6c3ac3,_0x23b29b={'wDlfB':function(_0x58d844,_0x51482f){return _0x58d844<_0x51482f;},'SfAPD':function(_0x5ca2eb,_0x2d62b7,_0x10e21d){return _0x5ca2eb(_0x2d62b7,_0x10e21d);}};for(let _0xf8bb15=0x0;_0x23b29b['wDlfB'](_0xf8bb15,MAX_PORT_SCAN);_0xf8bb15++){const _0x4c8520=DEFAULT_PORT+_0xf8bb15;try{const _0x28000c=await _0x23b29b[_0x5e0bfb(0x1c9)](fetch,_0x5e0bfb(0x1f0)+_0x4c8520+'/api/health',{'signal':AbortSignal['timeout'](0x1f4)});if(_0x28000c['ok']){const _0x21ba9f=await _0x28000c['json']();if(_0x21ba9f['status']==='ok')return _0x5e0bfb(0x1f0)+_0x4c8520;}}catch{}}return null;}async function createKeyViaApi(_0x4c7d7c,_0x318ce0){const _0x49b11f=a0_0x6c3ac3,_0x5a9873=await fetch(_0x4c7d7c+'/api/admin/keys',{'method':'POST','headers':{'Content-Type':_0x49b11f(0x2f5)},'body':JSON[_0x49b11f(0x2b4)](_0x318ce0)});if(!_0x5a9873['ok']){const _0xad8867=await _0x5a9873[_0x49b11f(0x2a6)]()[_0x49b11f(0x2b1)](()=>({'error':'HTTP\x20'+_0x5a9873['status']}));throw new Error(_0xad8867[_0x49b11f(0x28b)]||'Server\x20responded\x20with\x20'+_0x5a9873[_0x49b11f(0x292)]);}return _0x5a9873[_0x49b11f(0x2a6)]();}async function listKeysViaApi(_0x54cfb4,_0x1122a5){const _0x4b4e6c=a0_0x6c3ac3,_0x4855f4={'FgKkf':'status'},_0x42d2f2=new URLSearchParams();if(_0x1122a5[_0x4b4e6c(0x2c7)])_0x42d2f2[_0x4b4e6c(0x214)]('type',_0x1122a5[_0x4b4e6c(0x2c7)]);if(_0x1122a5['status'])_0x42d2f2[_0x4b4e6c(0x214)](_0x4855f4[_0x4b4e6c(0x232)],_0x1122a5['status']);const _0x5e4814=_0x42d2f2['toString'](),_0x4de271=await fetch(_0x54cfb4+'/api/admin/keys'+(_0x5e4814?'?'+_0x5e4814:''));if(!_0x4de271['ok']){const _0x1c7be9=await _0x4de271['json']()[_0x4b4e6c(0x2b1)](()=>({'error':_0x4b4e6c(0x2a3)+_0x4de271[_0x4b4e6c(0x292)]}));throw new Error(_0x1c7be9[_0x4b4e6c(0x28b)]||'Server\x20responded\x20with\x20'+_0x4de271[_0x4b4e6c(0x292)]);}return _0x4de271[_0x4b4e6c(0x2a6)]();}async function revokeKeyViaApi(_0x52a7ec,_0x22942b){const _0xd161f2=a0_0x6c3ac3,_0x34e655={'OaPAJ':function(_0x29c4c7,_0x49962d,_0x6ed9e2){return _0x29c4c7(_0x49962d,_0x6ed9e2);}},_0x52c1c5=await _0x34e655['OaPAJ'](fetch,_0x52a7ec+'/api/admin/keys/'+_0x22942b,{'method':_0xd161f2(0x209)});if(!_0x52c1c5['ok']){const _0x47d659=await _0x52c1c5['json']()[_0xd161f2(0x2b1)](()=>({'error':'HTTP\x20'+_0x52c1c5['status']}));throw new Error(_0x47d659[_0xd161f2(0x28b)]||_0xd161f2(0x2d2)+_0x52c1c5[_0xd161f2(0x292)]);}return _0x52c1c5[_0xd161f2(0x2a6)]();}var _dbReady=![];async function ensureDb(){if(_dbReady)return;const {getDb:_0x4dafe9}=await Promise['resolve']()['then'](()=>(init_db(),db_exports));await _0x4dafe9(),_dbReady=!![];}async function createKey(_0x3040ea){const _0xed852e=a0_0x6c3ac3,_0x27da18={'ZRyFl':'staff','RdWot':function(_0x13917c,_0x2527a7){return _0x13917c||_0x2527a7;},'RSxAa':function(_0x3292e6){return _0x3292e6();}},_0x54b011=_0x3040ea[_0xed852e(0x22c)],_0x448b38=_0x3040ea[_0xed852e(0x2c7)]||_0x27da18['ZRyFl'],_0x32fd9d=_0x3040ea['email']||null,_0x267114=_0x3040ea[_0xed852e(0x2ca)]||null;if(!_0x54b011){console['error']('\x0a\x20\x20'+icons[_0xed852e(0x2bf)]+'\x20'+c[_0xed852e(0x28b)]+_0xed852e(0x256)+c[_0xed852e(0x26a)]+'\x0a'),console['error']('\x20\x20Usage:\x20colana\x20admin\x20create-key\x20--name\x20\x22Sarah\x22\x20--type\x20staff\x20[--email\x20x]\x20[--expires\x202026-12-31]\x0a'),process[_0xed852e(0x2b6)](0x1);return;}const _0x4acba6=[_0xed852e(0x289),_0x27da18[_0xed852e(0x281)],_0xed852e(0x2eb)];if(!_0x4acba6['includes'](_0x448b38)){console['error']('\x0a\x20\x20'+icons['fail']+'\x20'+c['error']+'ERROR:\x20Invalid\x20type\x20\x22'+_0x448b38+'\x22.\x20Must\x20be\x20one\x20of:\x20'+_0x4acba6['join'](',\x20')+c[_0xed852e(0x26a)]+'\x0a'),process[_0xed852e(0x2b6)](0x1);return;}const _0x4546bc=await findRunningServer();let _0x3722e9;if(_0x4546bc)try{_0x3722e9=await createKeyViaApi(_0x4546bc,{'name':_0x54b011,'type':_0x448b38,'email':_0x27da18[_0xed852e(0x320)](_0x32fd9d,void 0x0),'expires':_0x267114||void 0x0});}catch(_0x723349){console['error'](_0xed852e(0x260)+icons['fail']+'\x20'+c[_0xed852e(0x28b)]+_0x723349[_0xed852e(0x316)]+c[_0xed852e(0x26a)]+'\x20'+c['muted']+_0xed852e(0x325)+c['reset']+'\x0a'),process[_0xed852e(0x2b6)](0x1);return;}else{await _0x27da18['RSxAa'](ensureDb);const {generateKey:_0x27494f}=await Promise['resolve']()['then'](()=>(init_key_manager(),key_manager_exports));try{_0x3722e9=_0x27494f(_0x54b011,_0x448b38,_0x32fd9d,_0x267114);}catch(_0xa07972){console['error'](_0xed852e(0x260)+icons['fail']+'\x20'+c[_0xed852e(0x28b)]+_0xa07972[_0xed852e(0x316)]+c[_0xed852e(0x26a)]+'\x0a'),process[_0xed852e(0x2b6)](0x1);return;}}if(!_0x3722e9||!_0x3722e9[_0xed852e(0x22c)]){console[_0xed852e(0x28b)]('\x0a\x20\x20'+icons['fail']+'\x20'+c[_0xed852e(0x28b)]+_0xed852e(0x2f4)+c['reset']+'\x0a'),process[_0xed852e(0x2b6)](0x1);return;}console['log'](''),console[_0xed852e(0x2ff)]('\x20\x20'+icons[_0xed852e(0x2f3)]+_0xed852e(0x1fb)),console[_0xed852e(0x2ff)]('\x20\x20'+c['muted']+'─'['repeat'](0x28)+c['reset']),console['log'](_0xed852e(0x2d6)+c['muted']+'Name:'+c['reset']+_0xed852e(0x2d6)+c['value']+_0x3722e9[_0xed852e(0x22c)]+c['reset']),console[_0xed852e(0x2ff)](_0xed852e(0x2d6)+c['muted']+_0xed852e(0x2ea)+c[_0xed852e(0x26a)]+_0xed852e(0x2d6)+c[_0xed852e(0x1d7)]+_0x3722e9['type']+c['reset']),console['log']('\x20\x20\x20\x20'+c[_0xed852e(0x2c2)]+'ID:'+c[_0xed852e(0x26a)]+'\x20\x20\x20\x20\x20\x20'+c[_0xed852e(0x1d7)]+_0x3722e9['id']+c['reset']),console[_0xed852e(0x2ff)]('\x20\x20\x20\x20'+c[_0xed852e(0x2c2)]+_0xed852e(0x1ef)+c[_0xed852e(0x26a)]+'\x20\x20\x20\x20\x20'+c['warn']+_0x3722e9['raw']+c[_0xed852e(0x26a)]),console[_0xed852e(0x2ff)]('\x20\x20'+c[_0xed852e(0x2c2)]+'─'[_0xed852e(0x21e)](0x28)+c[_0xed852e(0x26a)]),console[_0xed852e(0x2ff)]('\x20\x20'+c[_0xed852e(0x221)]+'IMPORTANT:\x20Copy\x20this\x20key\x20now.\x20It\x20cannot\x20be\x20retrieved\x20later.'+c['reset']),_0x4546bc?console['log']('\x20\x20'+c['muted']+'(Created\x20via\x20running\x20server)'+c['reset']):console[_0xed852e(0x2ff)]('\x20\x20'+c['muted']+_0xed852e(0x1e9)+c['reset']),console[_0xed852e(0x2ff)]('');}async function listKeysCmd(_0x225cd2){const _0x22f948=a0_0x6c3ac3,_0x310ece={'WljfU':function(_0x4e58ce){return _0x4e58ce();},'QMane':function(_0x6dafde,_0x48d429,_0x142b02){return _0x6dafde(_0x48d429,_0x142b02);},'seNEG':'\x0a\x20\x20No\x20keys\x20found.\x0a','mhGCO':'Type','ahaRj':_0x22f948(0x255)},_0x484d4d={};if(_0x225cd2[_0x22f948(0x2c7)])_0x484d4d['type']=_0x225cd2[_0x22f948(0x2c7)];if(_0x225cd2[_0x22f948(0x292)])_0x484d4d[_0x22f948(0x292)]=_0x225cd2[_0x22f948(0x292)];const _0x47f2c4=await _0x310ece[_0x22f948(0x225)](findRunningServer);let _0x19bc4f;if(_0x47f2c4)try{_0x19bc4f=await _0x310ece[_0x22f948(0x21c)](listKeysViaApi,_0x47f2c4,_0x484d4d);}catch(_0xad33d){console[_0x22f948(0x28b)]('\x0a\x20\x20'+icons['fail']+'\x20'+c['error']+_0xad33d['message']+c[_0x22f948(0x26a)]+'\x20'+c[_0x22f948(0x2c2)]+'(via\x20server)'+c['reset']+'\x0a'),process[_0x22f948(0x2b6)](0x1);return;}else{await _0x310ece[_0x22f948(0x225)](ensureDb);const {listKeys:_0x4d3e27}=await Promise['resolve']()[_0x22f948(0x220)](()=>(init_key_manager(),key_manager_exports));_0x19bc4f=_0x4d3e27(_0x484d4d);}if(!_0x19bc4f||!_0x19bc4f[_0x22f948(0x30f)]||!_0x19bc4f[_0x22f948(0x30f)][_0x22f948(0x2d1)]){console['log'](_0x310ece['seNEG']);return;}console[_0x22f948(0x2ff)](''),console[_0x22f948(0x2ff)]('\x20\x20'+c['heading']+_0x22f948(0x22b)+c['reset']),console[_0x22f948(0x2ff)]('\x20\x20'+c['muted']+'─'['repeat'](0x50)+c[_0x22f948(0x26a)]),console[_0x22f948(0x2ff)]('\x20\x20'+c[_0x22f948(0x2c2)]+'ID'[_0x22f948(0x22f)](0xa)+_0x22f948(0x268)['padEnd'](0x14)+_0x310ece[_0x22f948(0x26e)][_0x22f948(0x22f)](0xa)+'Status'['padEnd'](0xa)+_0x310ece[_0x22f948(0x2f7)]['padEnd'](0xf)+_0x22f948(0x313)+c['reset']),console['log']('\x20\x20'+c[_0x22f948(0x2c2)]+'─'['repeat'](0x50)+c[_0x22f948(0x26a)]);for(const _0x2a274c of _0x19bc4f['keys']){const _0x426d92=(_0x2a274c['id']||'')['slice'](0x0,0x8),_0x2fe9e5=(_0x2a274c['name']||'')[_0x22f948(0x294)](0x0,0x12)['padEnd'](0x14),_0x1eaa4d=(_0x2a274c[_0x22f948(0x2c7)]||'')['padEnd'](0xa),_0x592775=(_0x2a274c[_0x22f948(0x292)]||'')['padEnd'](0xa),_0x311c4c=(_0x2a274c['expiry']?new Date(_0x2a274c[_0x22f948(0x2f6)])['toLocaleDateString']():'Never')['padEnd'](0xf),_0x502519=_0x2a274c[_0x22f948(0x27d)]?new Date(_0x2a274c[_0x22f948(0x27d)])[_0x22f948(0x2a2)]():'-';console[_0x22f948(0x2ff)]('\x20\x20'+_0x426d92[_0x22f948(0x22f)](0xa)+_0x2fe9e5+_0x1eaa4d+_0x592775+_0x311c4c+_0x502519);}console[_0x22f948(0x2ff)]('\x20\x20'+c['muted']+'─'[_0x22f948(0x21e)](0x50)+c[_0x22f948(0x26a)]),console['log']('\x20\x20'+c['muted']+_0x22f948(0x22d)+_0x19bc4f[_0x22f948(0x30f)]['length']+_0x22f948(0x1fd)+c[_0x22f948(0x26a)]+'\x0a');}async function revokeKeyCmd(_0x1f66d0){const _0x3b5e22=a0_0x6c3ac3,_0x1131c0={'XAafu':function(_0x5e60a5){return _0x5e60a5();},'XriIh':function(_0x49974c){return _0x49974c();},'bbWFM':function(_0x30d4a4,_0x6d493c){return _0x30d4a4(_0x6d493c);}},_0x5d7150=_0x1f66d0[0x0];if(!_0x5d7150){console[_0x3b5e22(0x28b)]('\x0a\x20\x20'+icons['fail']+'\x20'+c[_0x3b5e22(0x28b)]+'ERROR:\x20Key\x20ID\x20is\x20required.'+c['reset']+'\x0a'),console[_0x3b5e22(0x28b)]('\x20\x20Usage:\x20colana\x20admin\x20revoke-key\x20<id>\x0a'),process['exit'](0x1);return;}const _0x55bb6c=await _0x1131c0['XAafu'](findRunningServer);if(_0x55bb6c)try{await revokeKeyViaApi(_0x55bb6c,_0x5d7150),console[_0x3b5e22(0x2ff)](_0x3b5e22(0x260)+icons['pass']+_0x3b5e22(0x20a)+c['value']+_0x5d7150+c['reset']+_0x3b5e22(0x1c2));}catch(_0x564be7){console['error'](_0x3b5e22(0x260)+icons['fail']+'\x20'+c[_0x3b5e22(0x28b)]+_0x564be7[_0x3b5e22(0x316)]+c[_0x3b5e22(0x26a)]+'\x20'+c[_0x3b5e22(0x2c2)]+_0x3b5e22(0x325)+c['reset']+'\x0a'),process[_0x3b5e22(0x2b6)](0x1);return;}else{await _0x1131c0['XriIh'](ensureDb);const {revokeKey:_0x1219d7}=await Promise[_0x3b5e22(0x2b9)]()[_0x3b5e22(0x220)](()=>(init_key_manager(),key_manager_exports));try{_0x1131c0['bbWFM'](_0x1219d7,_0x5d7150),console['log'](_0x3b5e22(0x260)+icons[_0x3b5e22(0x2f3)]+_0x3b5e22(0x20a)+c[_0x3b5e22(0x1d7)]+_0x5d7150+c['reset']+_0x3b5e22(0x1c2));}catch(_0xd9d4de){console[_0x3b5e22(0x28b)]('\x0a\x20\x20'+icons['fail']+'\x20'+c[_0x3b5e22(0x28b)]+_0xd9d4de['message']+c[_0x3b5e22(0x26a)]+'\x0a'),process['exit'](0x1);return;}}}function showHelp(){const _0x32e12c=a0_0x6c3ac3;console['log'](_0x32e12c(0x260)+brandName()+'\x20'+c[_0x32e12c(0x2c2)]+_0x32e12c(0x276)+c[_0x32e12c(0x26a)]+'\x0a\x0a\x20\x20'+c[_0x32e12c(0x31c)]+_0x32e12c(0x306)+c['reset']+'\x0a\x20\x20\x20\x20'+c[_0x32e12c(0x1d9)]+_0x32e12c(0x208)+c[_0x32e12c(0x26a)]+_0x32e12c(0x200)+c['cmd']+'colana\x20admin\x20staff-keys'+c['reset']+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20List\x20configured\x20staff/admin\x20keys\x20(env\x20vars)\x0a\x20\x20\x20\x20'+c[_0x32e12c(0x1d9)]+_0x32e12c(0x20e)+c[_0x32e12c(0x26a)]+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Generate\x20a\x20new\x20license\x20key\x20(stored\x20in\x20DB)\x0a\x20\x20\x20\x20\x20\x20'+c['muted']+_0x32e12c(0x1fe)+c[_0x32e12c(0x26a)]+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Recipient\x20name\x20(required)\x0a\x20\x20\x20\x20\x20\x20'+c['muted']+'--type\x20staff|admin|beta'+c['reset']+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Key\x20type\x20(default:\x20staff)\x0a\x20\x20\x20\x20\x20\x20'+c['muted']+'--email\x20user@example.com'+c[_0x32e12c(0x26a)]+_0x32e12c(0x30b)+c['muted']+_0x32e12c(0x1f4)+c['reset']+_0x32e12c(0x323)+c['cmd']+'colana\x20admin\x20list-keys'+c['reset']+_0x32e12c(0x29c)+c['muted']+'--type\x20staff|admin|beta'+c['reset']+_0x32e12c(0x2dc)+c[_0x32e12c(0x2c2)]+'--status\x20active|revoked'+c[_0x32e12c(0x26a)]+_0x32e12c(0x26c)+c['cmd']+'colana\x20admin\x20revoke-key\x20<id>'+c[_0x32e12c(0x26a)]+_0x32e12c(0x20b)+c[_0x32e12c(0x2c2)]+_0x32e12c(0x2c0)+c['reset']+_0x32e12c(0x2e4)+c['url']+_0x32e12c(0x1d3)+c[_0x32e12c(0x26a)]+'\x0a');}function doctor(){const _0x9d091a=a0_0x6c3ac3;console[_0x9d091a(0x2ff)]('\x0a\x20\x20Run\x20\x27colana\x20doctor\x27\x20for\x20system\x20diagnostics.\x0a');}function staffKeys(){const _0x3d0823=a0_0x6c3ac3,_0x1166bd={'taNpL':function(_0x28d5e1,_0x5ef69b){return _0x28d5e1+_0x5ef69b;},'rDlWU':function(_0x55f8f2,_0x23bf8d){return _0x55f8f2(_0x23bf8d);},'sAJRJ':function(_0x6e051b,_0x9d39bb){return _0x6e051b===_0x9d39bb;},'sUkXh':'\x0a\x20\x20No\x20staff\x20or\x20admin\x20keys\x20configured.\x20Set\x20STAFF_KEYS\x20or\x20ADMIN_KEYS\x20environment\x20variable.\x0a','JFyzY':function(_0x112a4e,_0xba1c42){return _0x112a4e>_0xba1c42;}},_0x165db6=process['env'][_0x3d0823(0x303)]||'',_0xff10f9=process[_0x3d0823(0x2ec)]['ADMIN_KEYS']||'',_0x29e211=_0x165db6['split'](',')['map'](_0xd66498=>_0xd66498['trim']())['filter'](Boolean),_0x4b7fd0=_0xff10f9['split'](',')[_0x3d0823(0x2de)](_0x2e1ebc=>_0x2e1ebc[_0x3d0823(0x2c4)]())[_0x3d0823(0x25b)](Boolean);if(_0x1166bd[_0x3d0823(0x29b)](_0x29e211['length'],0x0)&&_0x4b7fd0[_0x3d0823(0x2d1)]===0x0){console[_0x3d0823(0x2ff)](_0x1166bd['sUkXh']);return;}console[_0x3d0823(0x2ff)](''),_0x1166bd[_0x3d0823(0x2c8)](_0x29e211[_0x3d0823(0x2d1)],0x0)&&(console[_0x3d0823(0x2ff)]('\x20\x20'+c[_0x3d0823(0x31c)]+_0x3d0823(0x1cd)+c['reset']),console[_0x3d0823(0x2ff)]('\x20\x20'+c[_0x3d0823(0x2c2)]+'─'[_0x3d0823(0x21e)](0xa)+c[_0x3d0823(0x26a)]),_0x29e211[_0x3d0823(0x277)]((_0x48b0df,_0x2d5371)=>{const _0x17b5e0=_0x3d0823;console[_0x17b5e0(0x2ff)](_0x17b5e0(0x2d6)+_0x1166bd['taNpL'](_0x2d5371,0x1)+'.\x20'+maskKey(_0x48b0df)+'\x20\x20(STAFF_KEYS)');}),console['log']('')),_0x4b7fd0[_0x3d0823(0x2d1)]>0x0&&(console[_0x3d0823(0x2ff)]('\x20\x20'+c['heading']+_0x3d0823(0x216)+c[_0x3d0823(0x26a)]),console[_0x3d0823(0x2ff)]('\x20\x20'+c['muted']+'─'[_0x3d0823(0x21e)](0xa)+c['reset']),_0x4b7fd0['forEach']((_0x2249b1,_0x3ee266)=>{const _0x3c5a5b=_0x3d0823;console['log']('\x20\x20\x20\x20'+_0x1166bd[_0x3c5a5b(0x265)](_0x3ee266,0x1)+'.\x20'+_0x1166bd[_0x3c5a5b(0x1e0)](maskKey,_0x2249b1)+'\x20\x20(ADMIN_KEYS)');}),console[_0x3d0823(0x2ff)]('')),console[_0x3d0823(0x2ff)]('\x20\x20To\x20add/remove\x20keys,\x20update\x20the\x20STAFF_KEYS\x20or\x20ADMIN_KEYS\x20environment\x20variable.\x0a');}async function main(){const _0x4d1478=a0_0x6c3ac3,_0x431042={'bHxoD':function(_0x21d9e4,_0x22a8ec){return _0x21d9e4(_0x22a8ec);},'wLVOI':'help','nmzVL':function(_0x196ad8,_0x104b24){return _0x196ad8===_0x104b24;},'sXbDJ':function(_0x3f2256){return _0x3f2256();},'RlLrQ':'doctor'},{command:_0xebb8fd,flags:_0x385de5,positional:_0x5e0251}=_0x431042[_0x4d1478(0x213)](parseArgs,process['argv']);if(!_0xebb8fd||_0xebb8fd===_0x431042['wLVOI']||_0x431042[_0x4d1478(0x2bc)](_0xebb8fd,'--help')){_0x431042[_0x4d1478(0x24b)](showHelp);return;}switch(_0xebb8fd){case _0x431042[_0x4d1478(0x1d2)]:return _0x431042[_0x4d1478(0x24b)](doctor);case _0x4d1478(0x2bb):return staffKeys();case'create-key':return _0x431042['bHxoD'](createKey,_0x385de5);case'list-keys':return listKeysCmd(_0x385de5);case _0x4d1478(0x2c5):return revokeKeyCmd(_0x5e0251);default:console[_0x4d1478(0x28b)]('\x20\x20'+icons[_0x4d1478(0x2bf)]+'\x20Unknown\x20command:\x20'+c[_0x4d1478(0x1d7)]+_0xebb8fd+c[_0x4d1478(0x26a)]),console[_0x4d1478(0x28b)]('\x20\x20'+c[_0x4d1478(0x2c2)]+'Run\x20\x22colana\x20admin\x20help\x22\x20for\x20usage.'+c['reset']),process['exit'](0x1);return;}}main()[a0_0x6c3ac3(0x2b1)](_0x5538e7=>{const _0x135346=a0_0x6c3ac3;console[_0x135346(0x28b)]('\x20\x20'+icons['fail']+'\x20'+c[_0x135346(0x28b)]+(_0x5538e7[_0x135346(0x316)]||_0x5538e7)+c['reset']),process['exit'](0x1);});
|