get-claudia 1.26.0 → 1.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/index.js +148 -151
- package/gateway/scripts/install.ps1 +19 -2
- package/gateway/scripts/install.sh +20 -2
- package/memory-daemon/brain_monitor_screenshot.svg +249 -0
- package/memory-daemon/claudia_memory/__main__.py +12 -0
- package/memory-daemon/claudia_memory/tui/__init__.py +25 -0
- package/memory-daemon/claudia_memory/tui/app.py +117 -0
- package/memory-daemon/claudia_memory/tui/data_source.py +314 -0
- package/memory-daemon/claudia_memory/tui/styles.tcss +92 -0
- package/memory-daemon/claudia_memory/tui/widgets/__init__.py +13 -0
- package/memory-daemon/claudia_memory/tui/widgets/claudia_identity.py +157 -0
- package/memory-daemon/claudia_memory/tui/widgets/constellation.py +81 -0
- package/memory-daemon/claudia_memory/tui/widgets/memory_landscape.py +130 -0
- package/memory-daemon/claudia_memory/tui/widgets/neural_pulse.py +90 -0
- package/memory-daemon/pyproject.toml +5 -1
- package/memory-daemon/requirements.txt +3 -0
- package/memory-daemon/scripts/install.ps1 +59 -15
- package/memory-daemon/scripts/install.sh +39 -12
- package/memory-daemon/tests/test_tui_data_source.py +327 -0
- package/package.json +1 -1
- package/template-v2/.claude/skills/README.md +2 -1
- package/template-v2/.claude/skills/brain-monitor/SKILL.md +50 -0
- package/template-v2/CLAUDE.md +1 -0
package/bin/index.js
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
import { existsSync, mkdirSync, cpSync, readdirSync, readFileSync, writeFileSync, statSync } from 'fs';
|
|
4
4
|
import { join, dirname } from 'path';
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
|
-
import {
|
|
7
|
-
import { createInterface } from 'readline';
|
|
6
|
+
import { spawn } from 'child_process';
|
|
8
7
|
import { homedir } from 'os';
|
|
9
8
|
|
|
10
9
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -31,6 +30,35 @@ const colors = {
|
|
|
31
30
|
boldCyan: '\x1b[1;36m',
|
|
32
31
|
};
|
|
33
32
|
|
|
33
|
+
// Read version from package.json
|
|
34
|
+
function getVersion() {
|
|
35
|
+
try {
|
|
36
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf8'));
|
|
37
|
+
return pkg.version || '0.0.0';
|
|
38
|
+
} catch {
|
|
39
|
+
return '0.0.0';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Typewriter effect - writes text char by char
|
|
44
|
+
function typewriter(text, color = '') {
|
|
45
|
+
return new Promise((resolve) => {
|
|
46
|
+
const reset = color ? colors.reset : '';
|
|
47
|
+
let i = 0;
|
|
48
|
+
process.stdout.write(color);
|
|
49
|
+
const interval = setInterval(() => {
|
|
50
|
+
if (i < text.length) {
|
|
51
|
+
process.stdout.write(text[i]);
|
|
52
|
+
i++;
|
|
53
|
+
} else {
|
|
54
|
+
process.stdout.write(reset + '\n');
|
|
55
|
+
clearInterval(interval);
|
|
56
|
+
resolve();
|
|
57
|
+
}
|
|
58
|
+
}, 25);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
34
62
|
// Pixel art banner - "CLAUDIA" text + portrait (double-width for square pixels)
|
|
35
63
|
const b = colors.cyan; // blue pixels
|
|
36
64
|
const y = colors.yellow; // yellow pixels (hair)
|
|
@@ -53,14 +81,18 @@ ${b}${px}${px}${r}${_}${b}${px}${px}${r}${_}${b}${px}${r}${_}${b}${px}${r}${_}${
|
|
|
53
81
|
${w}${px}${r}${_}${w}${px}${r}
|
|
54
82
|
`;
|
|
55
83
|
|
|
56
|
-
const banner = `
|
|
57
|
-
${bannerArt}
|
|
58
|
-
${colors.dim}Agentic executive assistant. Learns and adapts to how you work.${colors.reset}
|
|
59
|
-
${colors.dim}by Kamil Banc${colors.reset}
|
|
60
|
-
`;
|
|
61
|
-
|
|
62
84
|
async function main() {
|
|
63
|
-
|
|
85
|
+
const version = getVersion();
|
|
86
|
+
|
|
87
|
+
// Print pixel art
|
|
88
|
+
console.log(bannerArt);
|
|
89
|
+
|
|
90
|
+
// Version badge + tagline + attribution (all yellow)
|
|
91
|
+
console.log(` ${colors.boldYellow}CLAUDIA${colors.reset} ${colors.yellow}v${version}${colors.reset}`);
|
|
92
|
+
await typewriter(' Agentic executive assistant. Learns and adapts to how you work.', colors.yellow);
|
|
93
|
+
console.log(` ${colors.yellow}by Kamil Banc${colors.reset}`);
|
|
94
|
+
console.log(` ${colors.yellow}${'─'.repeat(40)}${colors.reset}`);
|
|
95
|
+
console.log();
|
|
64
96
|
|
|
65
97
|
// Determine target directory and flags
|
|
66
98
|
const args = process.argv.slice(2);
|
|
@@ -77,7 +109,7 @@ async function main() {
|
|
|
77
109
|
const displayDir = isCurrentDir ? 'current directory' : targetDir;
|
|
78
110
|
|
|
79
111
|
if (isDemoMode) {
|
|
80
|
-
console.log(`${colors.yellow}
|
|
112
|
+
console.log(`${colors.yellow}Demo mode${colors.reset} - Will seed with example data after install`);
|
|
81
113
|
}
|
|
82
114
|
|
|
83
115
|
// Check if directory already exists with Claudia files
|
|
@@ -89,7 +121,7 @@ async function main() {
|
|
|
89
121
|
|
|
90
122
|
if (hasClaudioFiles) {
|
|
91
123
|
isUpgrade = true;
|
|
92
|
-
console.log(
|
|
124
|
+
console.log(`${colors.cyan}✓${colors.reset} Found existing Claudia instance. Upgrading framework files...`);
|
|
93
125
|
}
|
|
94
126
|
}
|
|
95
127
|
|
|
@@ -106,7 +138,7 @@ async function main() {
|
|
|
106
138
|
cpSync(templatePath, targetPath, { recursive: true });
|
|
107
139
|
console.log(`${colors.green}✓${colors.reset} Installed in ${displayDir}`);
|
|
108
140
|
} catch (error) {
|
|
109
|
-
console.error(`\n${colors.yellow}
|
|
141
|
+
console.error(`\n${colors.yellow}!${colors.reset} Error copying files: ${error.message}`);
|
|
110
142
|
process.exit(1);
|
|
111
143
|
}
|
|
112
144
|
} else {
|
|
@@ -134,7 +166,7 @@ async function main() {
|
|
|
134
166
|
console.log(`${colors.green}✓${colors.reset} Updated ${upgraded} framework components (skills, commands, rules, identity)`);
|
|
135
167
|
console.log(`${colors.dim} Your data (context/, people/, projects/) was preserved.${colors.reset}`);
|
|
136
168
|
} catch (error) {
|
|
137
|
-
console.error(`\n${colors.yellow}
|
|
169
|
+
console.error(`\n${colors.yellow}!${colors.reset} Error upgrading files: ${error.message}`);
|
|
138
170
|
process.exit(1);
|
|
139
171
|
}
|
|
140
172
|
}
|
|
@@ -142,23 +174,6 @@ async function main() {
|
|
|
142
174
|
// Show what's new in this release
|
|
143
175
|
showWhatsNew(isUpgrade);
|
|
144
176
|
|
|
145
|
-
// Interactive setup prompts
|
|
146
|
-
const rl = createInterface({
|
|
147
|
-
input: process.stdin,
|
|
148
|
-
output: process.stdout
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
const askYesNo = (question) => {
|
|
152
|
-
return new Promise((resolve) => {
|
|
153
|
-
rl.question(question, (answer) => {
|
|
154
|
-
resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
const setupMemory = await askYesNo(`\n${colors.yellow}?${colors.reset} Set up enhanced memory system? (recommended) [y/n]: `);
|
|
160
|
-
rl.close();
|
|
161
|
-
|
|
162
177
|
// Helper: seed demo database using spawn (safe, no shell injection)
|
|
163
178
|
function seedDemoDatabase(targetPath, mcpPath, callback) {
|
|
164
179
|
console.log(`\n${colors.cyan}Seeding demo database...${colors.reset}`);
|
|
@@ -205,7 +220,7 @@ async function main() {
|
|
|
205
220
|
|
|
206
221
|
// Helper: run visualizer install script and call back when done (auto-install, no prompt)
|
|
207
222
|
function runVisualizerSetup(callback) {
|
|
208
|
-
console.log(`\n${colors.
|
|
223
|
+
console.log(`\n${colors.boldYellow}━━━ Phase 2/3: Brain Visualizer ━━━${colors.reset}\n`);
|
|
209
224
|
|
|
210
225
|
const visualizerScriptPath = isWindows
|
|
211
226
|
? join(__dirname, '..', 'visualizer', 'scripts', 'install.ps1')
|
|
@@ -248,7 +263,7 @@ async function main() {
|
|
|
248
263
|
|
|
249
264
|
// Helper: run gateway install script and call back when done
|
|
250
265
|
function runGatewaySetup(callback) {
|
|
251
|
-
console.log(`\n${colors.
|
|
266
|
+
console.log(`\n${colors.boldYellow}━━━ Phase 3/3: Messaging Gateway ━━━${colors.reset}\n`);
|
|
252
267
|
|
|
253
268
|
const gatewayScriptPath = isWindows
|
|
254
269
|
? join(__dirname, '..', 'gateway', 'scripts', 'install.ps1')
|
|
@@ -269,7 +284,8 @@ async function main() {
|
|
|
269
284
|
stdio: 'inherit',
|
|
270
285
|
env: {
|
|
271
286
|
...process.env,
|
|
272
|
-
CLAUDIA_GATEWAY_UPGRADE: isUpgrade ? '1' : '0'
|
|
287
|
+
CLAUDIA_GATEWAY_UPGRADE: isUpgrade ? '1' : '0',
|
|
288
|
+
CLAUDIA_GATEWAY_SKIP_SETUP: '1'
|
|
273
289
|
}
|
|
274
290
|
});
|
|
275
291
|
|
|
@@ -354,135 +370,119 @@ async function main() {
|
|
|
354
370
|
}
|
|
355
371
|
}
|
|
356
372
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
373
|
+
// Memory system always installs (no prompt)
|
|
374
|
+
console.log(`\n${colors.boldYellow}━━━ Phase 1/3: Memory System ━━━${colors.reset}\n`);
|
|
375
|
+
|
|
376
|
+
const memoryDaemonPath = isWindows
|
|
377
|
+
? join(__dirname, '..', 'memory-daemon', 'scripts', 'install.ps1')
|
|
378
|
+
: join(__dirname, '..', 'memory-daemon', 'scripts', 'install.sh');
|
|
379
|
+
|
|
380
|
+
if (existsSync(memoryDaemonPath)) {
|
|
381
|
+
try {
|
|
382
|
+
// Run the install script, passing project path for upgrades
|
|
383
|
+
const spawnCmd = isWindows ? powershellPath : 'bash';
|
|
384
|
+
const spawnArgs = isWindows
|
|
385
|
+
? ['-ExecutionPolicy', 'Bypass', '-File', memoryDaemonPath]
|
|
386
|
+
: [memoryDaemonPath];
|
|
387
|
+
const result = spawn(spawnCmd, spawnArgs, {
|
|
388
|
+
stdio: 'inherit',
|
|
389
|
+
env: {
|
|
390
|
+
...process.env,
|
|
391
|
+
CLAUDIA_PROJECT_PATH: isUpgrade ? targetPath : '',
|
|
392
|
+
CLAUDIA_NONINTERACTIVE: '1'
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
result.on('close', (code) => {
|
|
397
|
+
let memoryOk = false;
|
|
398
|
+
if (code === 0) {
|
|
399
|
+
console.log(`${colors.green}✓${colors.reset} Memory system installed`);
|
|
400
|
+
memoryOk = true;
|
|
401
|
+
|
|
402
|
+
// Update .mcp.json if it exists
|
|
403
|
+
const mcpPath = join(targetPath, '.mcp.json');
|
|
404
|
+
const mcpExamplePath = join(targetPath, '.mcp.json.example');
|
|
405
|
+
|
|
406
|
+
if (existsSync(mcpExamplePath) && !existsSync(mcpPath)) {
|
|
407
|
+
// Read example and add memory server
|
|
408
|
+
let mcpConfig = JSON.parse(readFileSync(mcpExamplePath, 'utf8'));
|
|
409
|
+
mcpConfig.mcpServers = mcpConfig.mcpServers || {};
|
|
410
|
+
|
|
411
|
+
const home = homedir();
|
|
412
|
+
const pythonCmd = isWindows
|
|
413
|
+
? join(home, '.claudia', 'daemon', 'venv', 'Scripts', 'python.exe')
|
|
414
|
+
: `${process.env.HOME}/.claudia/daemon/venv/bin/python`;
|
|
415
|
+
|
|
416
|
+
mcpConfig.mcpServers['claudia-memory'] = {
|
|
417
|
+
command: pythonCmd,
|
|
418
|
+
args: ['-m', 'claudia_memory.mcp.server'],
|
|
419
|
+
_description: 'Claudia memory system with vector search'
|
|
420
|
+
};
|
|
421
|
+
writeFileSync(mcpPath, JSON.stringify(mcpConfig, null, 2));
|
|
422
|
+
console.log(`${colors.green}✓${colors.reset} Created .mcp.json with memory server`);
|
|
376
423
|
}
|
|
377
|
-
});
|
|
378
|
-
|
|
379
|
-
result.on('close', (code) => {
|
|
380
|
-
let memoryOk = false;
|
|
381
|
-
if (code === 0) {
|
|
382
|
-
console.log(`${colors.green}✓${colors.reset} Memory system installed`);
|
|
383
|
-
memoryOk = true;
|
|
384
|
-
|
|
385
|
-
// Update .mcp.json if it exists
|
|
386
|
-
const mcpPath = join(targetPath, '.mcp.json');
|
|
387
|
-
const mcpExamplePath = join(targetPath, '.mcp.json.example');
|
|
388
|
-
|
|
389
|
-
if (existsSync(mcpExamplePath) && !existsSync(mcpPath)) {
|
|
390
|
-
// Read example and add memory server
|
|
391
|
-
let mcpConfig = JSON.parse(readFileSync(mcpExamplePath, 'utf8'));
|
|
392
|
-
mcpConfig.mcpServers = mcpConfig.mcpServers || {};
|
|
393
|
-
|
|
394
|
-
const home = homedir();
|
|
395
|
-
const pythonCmd = isWindows
|
|
396
|
-
? join(home, '.claudia', 'daemon', 'venv', 'Scripts', 'python.exe')
|
|
397
|
-
: `${process.env.HOME}/.claudia/daemon/venv/bin/python`;
|
|
398
|
-
|
|
399
|
-
mcpConfig.mcpServers['claudia-memory'] = {
|
|
400
|
-
command: pythonCmd,
|
|
401
|
-
args: ['-m', 'claudia_memory.mcp.server'],
|
|
402
|
-
_description: 'Claudia memory system with vector search'
|
|
403
|
-
};
|
|
404
|
-
writeFileSync(mcpPath, JSON.stringify(mcpConfig, null, 2));
|
|
405
|
-
console.log(`${colors.green}✓${colors.reset} Created .mcp.json with memory server`);
|
|
406
|
-
}
|
|
407
424
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
425
|
+
// Seed demo database if --demo flag was passed
|
|
426
|
+
if (isDemoMode) {
|
|
427
|
+
const mcpPathForDemo = join(targetPath, '.mcp.json');
|
|
428
|
+
seedDemoDatabase(targetPath, mcpPathForDemo, () => maybeRunVisualizer(memoryOk));
|
|
429
|
+
return; // Wait for demo seed to complete
|
|
430
|
+
}
|
|
431
|
+
} else {
|
|
432
|
+
console.log(`${colors.yellow}!${colors.reset} Memory setup had issues. You can run it later with:`);
|
|
433
|
+
if (isWindows) {
|
|
434
|
+
console.log(` ${colors.cyan}powershell.exe -ExecutionPolicy Bypass -File "${memoryDaemonPath}"${colors.reset}`);
|
|
414
435
|
} else {
|
|
415
|
-
console.log(
|
|
416
|
-
if (isWindows) {
|
|
417
|
-
console.log(` ${colors.cyan}powershell.exe -ExecutionPolicy Bypass -File "${memoryDaemonPath}"${colors.reset}`);
|
|
418
|
-
} else {
|
|
419
|
-
console.log(` ${colors.cyan}bash ${memoryDaemonPath}${colors.reset}`);
|
|
420
|
-
}
|
|
436
|
+
console.log(` ${colors.cyan}bash ${memoryDaemonPath}${colors.reset}`);
|
|
421
437
|
}
|
|
438
|
+
}
|
|
422
439
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
440
|
+
// Chain visualizer setup (auto), then gateway
|
|
441
|
+
maybeRunVisualizer(memoryOk);
|
|
442
|
+
});
|
|
426
443
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
}
|
|
432
|
-
} else {
|
|
433
|
-
console.log(`${colors.yellow}!${colors.reset} Memory daemon files not found. Skipping.`);
|
|
444
|
+
return; // Wait for spawn to complete
|
|
445
|
+
} catch (error) {
|
|
446
|
+
console.log(`${colors.yellow}!${colors.reset} Could not set up memory system: ${error.message}`);
|
|
447
|
+
console.log(` You can set it up later manually.`);
|
|
434
448
|
}
|
|
449
|
+
} else {
|
|
450
|
+
console.log(`${colors.yellow}!${colors.reset} Memory daemon files not found. Skipping.`);
|
|
435
451
|
}
|
|
436
452
|
|
|
437
|
-
// Memory
|
|
453
|
+
// Memory failed to spawn -- continue with visualizer/gateway
|
|
438
454
|
maybeRunVisualizer(false);
|
|
439
455
|
|
|
440
456
|
function showNextSteps(memoryInstalled, visualizerInstalled, gatewayInstalled, systemHealthy = true) {
|
|
441
|
-
// Show next steps - different message based on what was installed
|
|
442
457
|
const cdStep = isCurrentDir ? '' : ` ${colors.cyan}cd ${targetDir}${colors.reset}\n`;
|
|
443
458
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
console.log(`
|
|
447
|
-
${colors.bold}Next:${colors.reset}
|
|
448
|
-
${cdStep} ${colors.cyan}claude${colors.reset}
|
|
449
|
-
${colors.dim}Memory system ready!${colors.reset}
|
|
459
|
+
// Installation summary
|
|
460
|
+
console.log(`\n${colors.boldYellow}━━━ Installation Complete ━━━${colors.reset}\n`);
|
|
450
461
|
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
} else {
|
|
454
|
-
console.log(`
|
|
455
|
-
${colors.yellow}Some issues were detected above.${colors.reset}
|
|
456
|
-
${colors.dim}You can fix them now, or Claudia will work in fallback mode until they're resolved.${colors.reset}
|
|
457
|
-
${colors.dim}Re-run diagnostics anytime: ${isWindows ? '%USERPROFILE%\\.claudia\\diagnose.ps1' : '~/.claudia/diagnose.sh'}${colors.reset}
|
|
462
|
+
const check = `${colors.green}✓${colors.reset}`;
|
|
463
|
+
const warn = `${colors.yellow}○${colors.reset}`;
|
|
458
464
|
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
`);
|
|
463
|
-
}
|
|
464
|
-
} else {
|
|
465
|
-
console.log(`
|
|
466
|
-
${colors.bold}Next:${colors.reset}
|
|
467
|
-
${cdStep} ${colors.cyan}claude${colors.reset}
|
|
468
|
-
${colors.dim}Say hi!${colors.reset}
|
|
465
|
+
console.log(`${memoryInstalled ? check : warn} Memory system ${memoryInstalled ? 'Active' : 'Skipped'}`);
|
|
466
|
+
console.log(`${visualizerInstalled ? check : warn} Brain visualizer ${visualizerInstalled ? 'Active' : 'Skipped'}`);
|
|
467
|
+
console.log(`${gatewayInstalled ? check : warn} Gateway ${gatewayInstalled ? 'Installed' : 'Skipped'}`);
|
|
469
468
|
|
|
470
|
-
|
|
471
|
-
`);
|
|
469
|
+
if (gatewayInstalled) {
|
|
470
|
+
console.log(`${colors.yellow}->${colors.reset} Configure tokens: ~/.claudia/gateway.json`);
|
|
472
471
|
}
|
|
473
472
|
|
|
474
|
-
if (
|
|
475
|
-
console.log(
|
|
476
|
-
|
|
477
|
-
`);
|
|
473
|
+
if (!systemHealthy) {
|
|
474
|
+
console.log(`\n${colors.yellow}Some issues were detected above.${colors.reset}`);
|
|
475
|
+
console.log(`${colors.dim}You can fix them now, or Claudia will work in fallback mode until they're resolved.${colors.reset}`);
|
|
476
|
+
console.log(`${colors.dim}Re-run diagnostics anytime: ${isWindows ? '%USERPROFILE%\\.claudia\\diagnose.ps1' : '~/.claudia/diagnose.sh'}${colors.reset}`);
|
|
478
477
|
}
|
|
479
478
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
${colors.
|
|
483
|
-
${colors.cyan}~/.claudia/bin/claudia-gateway start${colors.reset}
|
|
484
|
-
${colors.dim}See ~/.claudia/gateway.json for settings.${colors.reset}
|
|
479
|
+
console.log(`
|
|
480
|
+
${colors.bold}Next:${colors.reset}
|
|
481
|
+
${cdStep} ${colors.cyan}claude${colors.reset}
|
|
485
482
|
`);
|
|
483
|
+
|
|
484
|
+
if (memoryInstalled) {
|
|
485
|
+
console.log(`${colors.dim}If Claude was already running elsewhere, restart it to activate memory tools.${colors.reset}`);
|
|
486
486
|
}
|
|
487
487
|
}
|
|
488
488
|
}
|
|
@@ -503,20 +503,17 @@ ${line}
|
|
|
503
503
|
${header}
|
|
504
504
|
${line}
|
|
505
505
|
|
|
506
|
-
${bc}
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
${bc}Provenance${r} ${d}Every fact traces back to its source.${r}
|
|
510
|
-
${d}Ask "how do you know that?" and Claudia shows her work.${r}
|
|
506
|
+
${bc}Zero-Prompt Install${r} ${d}Everything installs automatically.${r}
|
|
507
|
+
${d}No questions, smart defaults, graceful fallbacks.${r}
|
|
511
508
|
|
|
512
|
-
${bc}
|
|
513
|
-
|
|
509
|
+
${bc}Gateway Auto-Setup${r} ${d}Messaging gateway installs with everything.${r}
|
|
510
|
+
${d}Configure tokens at your own pace.${r}
|
|
514
511
|
|
|
515
|
-
${bc}
|
|
516
|
-
|
|
512
|
+
${bc}Document Storage${r} ${d}Files, transcripts, and emails are stored${r}
|
|
513
|
+
${d}and linked to people and memories.${r}
|
|
517
514
|
|
|
518
|
-
${bc}
|
|
519
|
-
|
|
515
|
+
${bc}Provenance${r} ${d}Every fact traces back to its source.${r}
|
|
516
|
+
${d}Ask "how do you know that?" and Claudia shows her work.${r}
|
|
520
517
|
|
|
521
518
|
${line}
|
|
522
519
|
`);
|
|
@@ -22,8 +22,13 @@ $BIN_DIR = Join-Path $CLAUDIA_DIR "bin"
|
|
|
22
22
|
# Upgrade mode
|
|
23
23
|
$IS_UPGRADE = $env:CLAUDIA_GATEWAY_UPGRADE -eq "1"
|
|
24
24
|
|
|
25
|
-
#
|
|
26
|
-
|
|
25
|
+
# Skip interactive setup wizard (set by parent installer)
|
|
26
|
+
$SkipSetup = $env:CLAUDIA_GATEWAY_SKIP_SETUP
|
|
27
|
+
|
|
28
|
+
# Banner (skip clear when called from parent installer)
|
|
29
|
+
if ($SkipSetup -ne "1") {
|
|
30
|
+
Clear-Host
|
|
31
|
+
}
|
|
27
32
|
Write-Host ""
|
|
28
33
|
Write-Host ($CYAN + "####" + $NC + " " + $CYAN + "##" + $NC + " " + $CYAN + "##" + $NC + " " + $CYAN + "##" + $NC + " " + $CYAN + "##" + $NC + " " + $CYAN + "####" + $NC + " " + $CYAN + "##" + $NC + " " + $CYAN + "##" + $NC)
|
|
29
34
|
Write-Host ($CYAN + "##" + $NC + " " + $CYAN + "##" + $NC + " " + $CYAN + "##" + $NC + " " + $CYAN + "##" + $NC + " " + $CYAN + "##" + $NC + " " + $CYAN + "##" + $NC + " " + $CYAN + "##" + $NC + " " + $CYAN + "##" + $NC + " " + $CYAN + "##" + $NC + " " + $CYAN + "##" + $NC + " " + $CYAN + "##" + $NC)
|
|
@@ -304,6 +309,16 @@ Write-Host " | |"
|
|
|
304
309
|
Write-Host " +-----------------------------------------------------------+"
|
|
305
310
|
Write-Host $NC
|
|
306
311
|
|
|
312
|
+
# Skip interactive wizard when called from parent installer
|
|
313
|
+
if ($SkipSetup -eq "1") {
|
|
314
|
+
Write-Host (" " + $GREEN + "[OK]" + $NC + " Gateway ready")
|
|
315
|
+
Write-Host ""
|
|
316
|
+
Write-Host (" " + $BOLD + "Configure messaging:" + $NC)
|
|
317
|
+
Write-Host (" " + $DIM + "Edit " + $CONFIG_FILE + " to add Telegram or Slack tokens." + $NC)
|
|
318
|
+
Write-Host (" " + $DIM + "See: https://github.com/kbanc85/claudia#gateway" + $NC)
|
|
319
|
+
Write-Host ""
|
|
320
|
+
} else {
|
|
321
|
+
|
|
307
322
|
# Offer interactive setup guide
|
|
308
323
|
Write-Host " The gateway needs a chat platform (Telegram or Slack) to"
|
|
309
324
|
Write-Host (" receive your messages. " + $BOLD + "Want a step-by-step setup guide?" + $NC)
|
|
@@ -534,6 +549,8 @@ if ($showGuide -match "^[Yy]") {
|
|
|
534
549
|
}
|
|
535
550
|
}
|
|
536
551
|
|
|
552
|
+
} # end SkipSetup else block
|
|
553
|
+
|
|
537
554
|
Write-Host ($BOLD + "Security reminders:" + $NC)
|
|
538
555
|
Write-Host ""
|
|
539
556
|
if (-not $LOCAL_MODEL) {
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
set -e
|
|
6
6
|
|
|
7
|
+
# Skip interactive setup wizard (set by parent installer)
|
|
8
|
+
SKIP_SETUP="${CLAUDIA_GATEWAY_SKIP_SETUP:-0}"
|
|
9
|
+
|
|
7
10
|
# Colors
|
|
8
11
|
RED='\033[0;31m'
|
|
9
12
|
GREEN='\033[0;32m'
|
|
@@ -30,8 +33,10 @@ elif [ -n "$BASH_VERSION" ] || [ "$(basename "$SHELL")" = "bash" ]; then
|
|
|
30
33
|
SHELL_RC="$HOME/.bashrc"
|
|
31
34
|
fi
|
|
32
35
|
|
|
33
|
-
# Clear screen and show banner
|
|
34
|
-
|
|
36
|
+
# Clear screen and show banner (skip clear when called from parent installer)
|
|
37
|
+
if [ "$SKIP_SETUP" != "1" ]; then
|
|
38
|
+
clear
|
|
39
|
+
fi
|
|
35
40
|
|
|
36
41
|
# Claudia pixel art banner (matching the NPX installer)
|
|
37
42
|
W='\033[97m' # white
|
|
@@ -364,6 +369,17 @@ cat << 'EOF'
|
|
|
364
369
|
EOF
|
|
365
370
|
echo -e "${NC}"
|
|
366
371
|
|
|
372
|
+
# Skip interactive wizard when called from parent installer
|
|
373
|
+
if [ "$SKIP_SETUP" = "1" ]; then
|
|
374
|
+
echo -e " ${GREEN}✓${NC} Gateway ready"
|
|
375
|
+
echo
|
|
376
|
+
echo -e " ${BOLD}Configure messaging:${NC}"
|
|
377
|
+
echo -e " ${DIM}Edit ~/.claudia/gateway.json to add Telegram or Slack tokens.${NC}"
|
|
378
|
+
echo -e " ${DIM}See: https://github.com/kbanc85/claudia#gateway${NC}"
|
|
379
|
+
echo
|
|
380
|
+
|
|
381
|
+
else
|
|
382
|
+
|
|
367
383
|
# Offer interactive setup guide
|
|
368
384
|
echo -e " The gateway needs a chat platform (Telegram or Slack) to"
|
|
369
385
|
echo -e " receive your messages. ${BOLD}Want a step-by-step setup guide?${NC}"
|
|
@@ -601,6 +617,8 @@ if [[ "$SHOW_GUIDE" =~ ^[Yy] ]]; then
|
|
|
601
617
|
fi
|
|
602
618
|
fi
|
|
603
619
|
|
|
620
|
+
fi # end SKIP_SETUP else block
|
|
621
|
+
|
|
604
622
|
echo -e "${BOLD}Security reminders:${NC}"
|
|
605
623
|
echo
|
|
606
624
|
if [ -z "$LOCAL_MODEL" ]; then
|