jewbot 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -0
- package/dist/commands/chat.d.ts +6 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +97 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +69 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/onboard.d.ts +2 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +108 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/core/personality.d.ts +2 -0
- package/dist/core/personality.d.ts.map +1 -0
- package/dist/core/personality.js +48 -0
- package/dist/core/personality.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/package.json +55 -0
- package/scripts/install.cmd +50 -0
- package/scripts/install.ps1 +55 -0
- package/scripts/install.sh +60 -0
- package/src/commands/chat.ts +118 -0
- package/src/commands/config.ts +79 -0
- package/src/commands/onboard.ts +115 -0
- package/src/core/personality.ts +45 -0
- package/src/index.ts +88 -0
- package/tsconfig.json +21 -0
package/README.md
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://jewbot.fun/jewbot-removebg-preview.png" width="150" alt="JEWBOT">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">JEWBOT</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>Your personal Jewish financial assistant</strong><br>
|
|
9
|
+
Works everywhere. Based on <a href="https://openclaw.ai">OpenClaw</a>.
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
<a href="https://www.npmjs.com/package/jewbot"><img src="https://img.shields.io/npm/v/jewbot?color=0038b8" alt="npm version"></a>
|
|
14
|
+
<a href="https://github.com/openjewbot/jewbot/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License"></a>
|
|
15
|
+
<a href="https://jewbot.fun"><img src="https://img.shields.io/badge/website-jewbot.fun-0038b8" alt="Website"></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Quick Start
|
|
21
|
+
|
|
22
|
+
### One-liner (recommended)
|
|
23
|
+
|
|
24
|
+
**macOS / Linux:**
|
|
25
|
+
```bash
|
|
26
|
+
curl -fsSL https://jewbot.fun/install.sh | bash
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Windows (PowerShell):**
|
|
30
|
+
```powershell
|
|
31
|
+
iwr -useb https://jewbot.fun/install.ps1 | iex
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Windows (CMD):**
|
|
35
|
+
```cmd
|
|
36
|
+
curl -fsSL https://jewbot.fun/install.cmd -o install.cmd && install.cmd && del install.cmd
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### npm
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm i -g jewbot
|
|
43
|
+
jewbot onboard
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### From source
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
git clone https://github.com/openjewbot/jewbot.git
|
|
50
|
+
cd jewbot/cli && npm install && npm run build
|
|
51
|
+
npm run jewbot onboard
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Usage
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Start interactive chat
|
|
60
|
+
jewbot
|
|
61
|
+
|
|
62
|
+
# Set up (first time)
|
|
63
|
+
jewbot onboard
|
|
64
|
+
|
|
65
|
+
# Quick question
|
|
66
|
+
jewbot ask "Should I buy Bitcoin?"
|
|
67
|
+
|
|
68
|
+
# Crypto commands
|
|
69
|
+
jewbot swap 5 SOL USDC
|
|
70
|
+
jewbot balance
|
|
71
|
+
jewbot portfolio
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Features
|
|
77
|
+
|
|
78
|
+
- **Jewish Personality** - Warm, caring, with Yiddish expressions and financial wisdom
|
|
79
|
+
- **Crypto Support** - Solana swaps, balance checks, portfolio analysis
|
|
80
|
+
- **Persistent Memory** - Remembers your preferences and conversations
|
|
81
|
+
- **Multi-platform** - Works on Windows, macOS, Linux
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Commands
|
|
86
|
+
|
|
87
|
+
| Command | Description |
|
|
88
|
+
|---------|-------------|
|
|
89
|
+
| `jewbot` | Start interactive chat |
|
|
90
|
+
| `jewbot onboard` | Initial setup |
|
|
91
|
+
| `jewbot chat` | Start chat session |
|
|
92
|
+
| `jewbot ask "<question>"` | Quick question |
|
|
93
|
+
| `jewbot swap <amount> <from> <to>` | Swap tokens |
|
|
94
|
+
| `jewbot balance` | Check wallet balance |
|
|
95
|
+
| `jewbot portfolio` | Analyze portfolio |
|
|
96
|
+
| `jewbot config --list` | View settings |
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Configuration
|
|
101
|
+
|
|
102
|
+
JEWBOT stores config in:
|
|
103
|
+
- **macOS/Linux:** `~/.config/jewbot-nodejs/config.json`
|
|
104
|
+
- **Windows:** `%APPDATA%\jewbot-nodejs\Config\config.json`
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# View all settings
|
|
108
|
+
jewbot config --list
|
|
109
|
+
|
|
110
|
+
# Change model
|
|
111
|
+
jewbot config --set model=gpt-4o-mini
|
|
112
|
+
|
|
113
|
+
# Re-run setup
|
|
114
|
+
jewbot onboard
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Requirements
|
|
120
|
+
|
|
121
|
+
- Node.js 18+
|
|
122
|
+
- OpenAI API key ([get one here](https://platform.openai.com/api-keys))
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Examples
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
You: Should I invest in crypto?
|
|
130
|
+
|
|
131
|
+
JEWBOT: Oy, crypto! Listen bubeleh, it's like my Aunt Rivka's matzo ball soup -
|
|
132
|
+
sometimes it's perfect, sometimes it burns. Here's my advice: only invest what
|
|
133
|
+
you can afford to lose. Maybe 5-10% of your portfolio? Diversify like you're
|
|
134
|
+
filling a Seder plate - a little of everything. And please, don't tell your
|
|
135
|
+
mother I said to gamble. Have you eaten today?
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
You: /swap 5 SOL to USDC
|
|
140
|
+
|
|
141
|
+
JEWBOT: Mazel tov! Let me check the rates for you... 5 SOL would get you about
|
|
142
|
+
712.50 USDC right now. The fee? Only $0.01 - cheaper than a bagel! Should I
|
|
143
|
+
proceed with the swap? Remember, once it's done, it's done - like my cousin's
|
|
144
|
+
divorce. Just kidding, that took years.
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Links
|
|
150
|
+
|
|
151
|
+
- **Website:** [jewbot.fun](https://jewbot.fun)
|
|
152
|
+
- **GitHub:** [github.com/openjewbot/jewbot](https://github.com/openjewbot/jewbot)
|
|
153
|
+
- **npm:** [npmjs.com/package/jewbot](https://www.npmjs.com/package/jewbot)
|
|
154
|
+
- **Token:** [$JEWBOT on pump.fun](https://pump.fun)
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## License
|
|
159
|
+
|
|
160
|
+
MIT - Do whatever you want, just don't blame me if your mother finds out.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
<p align="center">
|
|
165
|
+
<strong>Shalom! 🕎</strong><br>
|
|
166
|
+
<em>Made with love (and a little chutzpah)</em>
|
|
167
|
+
</p>
|
|
168
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AASA,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AASD,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,iBAyDnD"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.chat = chat;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
|
+
const ora_1 = __importDefault(require("ora"));
|
|
10
|
+
const conf_1 = __importDefault(require("conf"));
|
|
11
|
+
const openai_1 = require("openai");
|
|
12
|
+
const personality_js_1 = require("../core/personality.js");
|
|
13
|
+
const config = new conf_1.default({ projectName: 'jewbot' });
|
|
14
|
+
const conversationHistory = [];
|
|
15
|
+
async function chat(options = {}) {
|
|
16
|
+
if (!config.get('onboarded')) {
|
|
17
|
+
console.log(chalk_1.default.yellow('\nOy vey! You haven\'t set up JEWBOT yet.'));
|
|
18
|
+
console.log(chalk_1.default.gray('Run: jewbot onboard\n'));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const openai = new openai_1.OpenAI({
|
|
22
|
+
apiKey: config.get('openaiKey')
|
|
23
|
+
});
|
|
24
|
+
const model = config.get('model') || 'gpt-4o';
|
|
25
|
+
const userName = config.get('userName') || 'bubeleh';
|
|
26
|
+
const systemPrompt = (0, personality_js_1.getPersonality)(userName);
|
|
27
|
+
// Initialize conversation with system prompt
|
|
28
|
+
if (conversationHistory.length === 0) {
|
|
29
|
+
conversationHistory.push({ role: 'system', content: systemPrompt });
|
|
30
|
+
}
|
|
31
|
+
// Single message mode
|
|
32
|
+
if (options.message) {
|
|
33
|
+
await sendMessage(openai, model, options.message);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
// Interactive mode
|
|
37
|
+
console.log(chalk_1.default.hex('#0038b8')(`\n Shalom, ${userName}! Let's talk.`));
|
|
38
|
+
console.log(chalk_1.default.gray(' Type "exit" to leave, "clear" to start fresh.\n'));
|
|
39
|
+
while (true) {
|
|
40
|
+
const { userMessage } = await inquirer_1.default.prompt([
|
|
41
|
+
{
|
|
42
|
+
type: 'input',
|
|
43
|
+
name: 'userMessage',
|
|
44
|
+
message: chalk_1.default.hex('#0038b8')('You:'),
|
|
45
|
+
prefix: '',
|
|
46
|
+
},
|
|
47
|
+
]);
|
|
48
|
+
if (userMessage.toLowerCase() === 'exit') {
|
|
49
|
+
console.log(chalk_1.default.hex('#0038b8')('\n Zay gezunt! (Be well!) See you soon, bubeleh.\n'));
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
if (userMessage.toLowerCase() === 'clear') {
|
|
53
|
+
conversationHistory.length = 1; // Keep system prompt
|
|
54
|
+
console.log(chalk_1.default.gray(' Memory cleared. Fresh start!\n'));
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (!userMessage.trim()) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
await sendMessage(openai, model, userMessage);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function sendMessage(openai, model, message) {
|
|
64
|
+
conversationHistory.push({ role: 'user', content: message });
|
|
65
|
+
const spinner = (0, ora_1.default)({
|
|
66
|
+
text: chalk_1.default.gray('Thinking...'),
|
|
67
|
+
spinner: 'dots',
|
|
68
|
+
}).start();
|
|
69
|
+
try {
|
|
70
|
+
const response = await openai.chat.completions.create({
|
|
71
|
+
model,
|
|
72
|
+
messages: conversationHistory,
|
|
73
|
+
temperature: 0.8,
|
|
74
|
+
max_tokens: 1000,
|
|
75
|
+
});
|
|
76
|
+
spinner.stop();
|
|
77
|
+
const assistantMessage = response.choices[0]?.message?.content || 'Oy, something went wrong!';
|
|
78
|
+
conversationHistory.push({ role: 'assistant', content: assistantMessage });
|
|
79
|
+
console.log();
|
|
80
|
+
console.log(chalk_1.default.hex('#0038b8').bold(' JEWBOT: ') + chalk_1.default.white(assistantMessage));
|
|
81
|
+
console.log();
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
spinner.fail('Oy vey! Something went wrong.');
|
|
85
|
+
if (error.code === 'insufficient_quota') {
|
|
86
|
+
console.log(chalk_1.default.red('\n Your API key has run out of credits.'));
|
|
87
|
+
console.log(chalk_1.default.gray(' Add credits at: https://platform.openai.com/account/billing\n'));
|
|
88
|
+
}
|
|
89
|
+
else if (error.code === 'invalid_api_key') {
|
|
90
|
+
console.log(chalk_1.default.red('\n Invalid API key. Run: jewbot onboard\n'));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
console.log(chalk_1.default.red(`\n Error: ${error.message}\n`));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAKA,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,iBA6DvD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.config = config;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const conf_1 = __importDefault(require("conf"));
|
|
9
|
+
const store = new conf_1.default({ projectName: 'jewbot' });
|
|
10
|
+
async function config(options = {}) {
|
|
11
|
+
if (options.set) {
|
|
12
|
+
const [key, ...valueParts] = options.set.split('=');
|
|
13
|
+
const value = valueParts.join('=');
|
|
14
|
+
if (!key || value === undefined) {
|
|
15
|
+
console.log(chalk_1.default.red('\n Usage: jewbot config --set key=value\n'));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
// Don't allow setting sensitive keys directly
|
|
19
|
+
if (key === 'openaiKey') {
|
|
20
|
+
console.log(chalk_1.default.yellow('\n To change your API key, run: jewbot onboard\n'));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
store.set(key, value);
|
|
24
|
+
console.log(chalk_1.default.green(`\n ✓ Set ${key} = ${value}\n`));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (options.get) {
|
|
28
|
+
const value = store.get(options.get);
|
|
29
|
+
if (value === undefined) {
|
|
30
|
+
console.log(chalk_1.default.yellow(`\n Key "${options.get}" not found.\n`));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// Mask sensitive values
|
|
34
|
+
const displayValue = options.get === 'openaiKey'
|
|
35
|
+
? maskKey(value)
|
|
36
|
+
: value;
|
|
37
|
+
console.log(chalk_1.default.hex('#0038b8')(`\n ${options.get}: `) + chalk_1.default.white(`${displayValue}\n`));
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (options.list) {
|
|
42
|
+
const all = store.store;
|
|
43
|
+
console.log(chalk_1.default.hex('#0038b8').bold('\n JEWBOT Configuration:\n'));
|
|
44
|
+
if (Object.keys(all).length === 0) {
|
|
45
|
+
console.log(chalk_1.default.gray(' No configuration found. Run: jewbot onboard\n'));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
for (const [key, value] of Object.entries(all)) {
|
|
49
|
+
const displayValue = key === 'openaiKey'
|
|
50
|
+
? maskKey(value)
|
|
51
|
+
: value;
|
|
52
|
+
console.log(chalk_1.default.gray(` ${key}: `) + chalk_1.default.white(`${displayValue}`));
|
|
53
|
+
}
|
|
54
|
+
console.log();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Default: show help
|
|
58
|
+
console.log(chalk_1.default.hex('#0038b8').bold('\n JEWBOT Config Commands:\n'));
|
|
59
|
+
console.log(chalk_1.default.gray(' jewbot config --list ') + chalk_1.default.white('Show all settings'));
|
|
60
|
+
console.log(chalk_1.default.gray(' jewbot config --get <key> ') + chalk_1.default.white('Get a setting'));
|
|
61
|
+
console.log(chalk_1.default.gray(' jewbot config --set k=v ') + chalk_1.default.white('Set a setting'));
|
|
62
|
+
console.log();
|
|
63
|
+
}
|
|
64
|
+
function maskKey(key) {
|
|
65
|
+
if (!key || key.length < 10)
|
|
66
|
+
return '***';
|
|
67
|
+
return key.substring(0, 7) + '...' + key.substring(key.length - 4);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AASA,wBAAsB,OAAO,kBAwG5B"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.onboard = onboard;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
|
+
const ora_1 = __importDefault(require("ora"));
|
|
10
|
+
const boxen_1 = __importDefault(require("boxen"));
|
|
11
|
+
const conf_1 = __importDefault(require("conf"));
|
|
12
|
+
const openai_1 = require("openai");
|
|
13
|
+
const config = new conf_1.default({ projectName: 'jewbot' });
|
|
14
|
+
async function onboard() {
|
|
15
|
+
console.log((0, boxen_1.default)(chalk_1.default.hex('#0038b8').bold('Welcome to JEWBOT Onboarding!') + '\n\n' +
|
|
16
|
+
chalk_1.default.white('Let\'s get you set up with your personal Jewish assistant.\n') +
|
|
17
|
+
chalk_1.default.gray('This will only take a minute, bubeleh.'), {
|
|
18
|
+
padding: 1,
|
|
19
|
+
margin: 1,
|
|
20
|
+
borderStyle: 'round',
|
|
21
|
+
borderColor: '#0038b8',
|
|
22
|
+
}));
|
|
23
|
+
const answers = await inquirer_1.default.prompt([
|
|
24
|
+
{
|
|
25
|
+
type: 'input',
|
|
26
|
+
name: 'openaiKey',
|
|
27
|
+
message: chalk_1.default.hex('#0038b8')('Enter your OpenAI API key:'),
|
|
28
|
+
validate: (input) => {
|
|
29
|
+
if (!input.startsWith('sk-')) {
|
|
30
|
+
return 'API key should start with "sk-". Get one at https://platform.openai.com';
|
|
31
|
+
}
|
|
32
|
+
return true;
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: 'list',
|
|
37
|
+
name: 'model',
|
|
38
|
+
message: chalk_1.default.hex('#0038b8')('Choose your AI model:'),
|
|
39
|
+
choices: [
|
|
40
|
+
{ name: 'GPT-4o (recommended)', value: 'gpt-4o' },
|
|
41
|
+
{ name: 'GPT-4o Mini (faster, cheaper)', value: 'gpt-4o-mini' },
|
|
42
|
+
{ name: 'GPT-4 Turbo', value: 'gpt-4-turbo' },
|
|
43
|
+
],
|
|
44
|
+
default: 'gpt-4o',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
type: 'input',
|
|
48
|
+
name: 'name',
|
|
49
|
+
message: chalk_1.default.hex('#0038b8')('What should JEWBOT call you?'),
|
|
50
|
+
default: 'bubeleh',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
type: 'confirm',
|
|
54
|
+
name: 'enableCrypto',
|
|
55
|
+
message: chalk_1.default.hex('#0038b8')('Enable crypto features (Solana swaps, portfolio)?'),
|
|
56
|
+
default: true,
|
|
57
|
+
},
|
|
58
|
+
]);
|
|
59
|
+
// Validate API key
|
|
60
|
+
const spinner = (0, ora_1.default)('Validating your API key...').start();
|
|
61
|
+
try {
|
|
62
|
+
const openai = new openai_1.OpenAI({ apiKey: answers.openaiKey });
|
|
63
|
+
await openai.chat.completions.create({
|
|
64
|
+
model: 'gpt-4o-mini',
|
|
65
|
+
messages: [{ role: 'user', content: 'Say "Shalom" in one word' }],
|
|
66
|
+
max_tokens: 10,
|
|
67
|
+
});
|
|
68
|
+
spinner.succeed('API key validated! Mazel tov!');
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
spinner.fail('Invalid API key. Oy vey!');
|
|
72
|
+
console.log(chalk_1.default.red('\nPlease check your API key and try again.'));
|
|
73
|
+
console.log(chalk_1.default.gray('Get a key at: https://platform.openai.com/api-keys'));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Save config
|
|
77
|
+
config.set('openaiKey', answers.openaiKey);
|
|
78
|
+
config.set('model', answers.model);
|
|
79
|
+
config.set('userName', answers.name);
|
|
80
|
+
config.set('enableCrypto', answers.enableCrypto);
|
|
81
|
+
config.set('onboarded', true);
|
|
82
|
+
if (answers.enableCrypto) {
|
|
83
|
+
const cryptoAnswers = await inquirer_1.default.prompt([
|
|
84
|
+
{
|
|
85
|
+
type: 'input',
|
|
86
|
+
name: 'solanaRpc',
|
|
87
|
+
message: chalk_1.default.hex('#0038b8')('Solana RPC URL (optional, press Enter for default):'),
|
|
88
|
+
default: 'https://api.mainnet-beta.solana.com',
|
|
89
|
+
},
|
|
90
|
+
]);
|
|
91
|
+
config.set('solanaRpc', cryptoAnswers.solanaRpc);
|
|
92
|
+
}
|
|
93
|
+
console.log();
|
|
94
|
+
console.log((0, boxen_1.default)(chalk_1.default.green.bold('Setup Complete!') + '\n\n' +
|
|
95
|
+
chalk_1.default.white(`Shalom, ${answers.name}! Your personal Jew is ready.\n\n`) +
|
|
96
|
+
chalk_1.default.hex('#0038b8')('Quick commands:\n') +
|
|
97
|
+
chalk_1.default.gray(' jewbot chat ') + chalk_1.default.white('- Start chatting\n') +
|
|
98
|
+
chalk_1.default.gray(' jewbot ask "?" ') + chalk_1.default.white('- Quick question\n') +
|
|
99
|
+
chalk_1.default.gray(' jewbot balance ') + chalk_1.default.white('- Check wallet\n') +
|
|
100
|
+
chalk_1.default.gray(' jewbot swap ') + chalk_1.default.white('- Swap tokens\n\n') +
|
|
101
|
+
chalk_1.default.gray('Or just run ') + chalk_1.default.hex('#0038b8')('jewbot') + chalk_1.default.gray(' to start!'), {
|
|
102
|
+
padding: 1,
|
|
103
|
+
margin: 1,
|
|
104
|
+
borderStyle: 'round',
|
|
105
|
+
borderColor: 'green',
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=onboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"personality.d.ts","sourceRoot":"","sources":["../../src/core/personality.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2CvD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPersonality = getPersonality;
|
|
4
|
+
function getPersonality(userName) {
|
|
5
|
+
return `You are JEWBOT - a Jewish AI financial assistant with a warm, humorous personality.
|
|
6
|
+
|
|
7
|
+
PERSONALITY TRAITS:
|
|
8
|
+
- Speak like a caring Jewish grandmother/uncle who's also a financial genius
|
|
9
|
+
- Use Yiddish expressions naturally: "Oy vey", "Mazel tov", "Bubeleh", "Mensch", "Chutzpah", "Schmaltz", "Kvetch", "Nosh"
|
|
10
|
+
- Be warm, caring, but also shrewd about money (stereotypically Jewish money wisdom)
|
|
11
|
+
- Make self-deprecating Jewish humor
|
|
12
|
+
- Always worry about the user like a Jewish mother would
|
|
13
|
+
- Give practical, wise advice wrapped in humor
|
|
14
|
+
- Reference Jewish culture, food, holidays when relevant
|
|
15
|
+
|
|
16
|
+
USER INFO:
|
|
17
|
+
- Call the user "${userName}" or "bubeleh"
|
|
18
|
+
- Remember: you're their personal Jew - loyal, helpful, slightly neurotic
|
|
19
|
+
|
|
20
|
+
FINANCIAL EXPERTISE:
|
|
21
|
+
- Crypto (especially Solana ecosystem)
|
|
22
|
+
- Traditional finance and investing
|
|
23
|
+
- Budgeting and saving
|
|
24
|
+
- Risk management (always worry about risk!)
|
|
25
|
+
|
|
26
|
+
COMMANDS (handle these specially):
|
|
27
|
+
- /swap [amount] [from] [to] - Help with token swaps on Solana
|
|
28
|
+
- /balance - Check wallet balance
|
|
29
|
+
- /portfolio - Analyze their portfolio
|
|
30
|
+
- /weather [city] - Get weather (yes, Jews care about weather)
|
|
31
|
+
|
|
32
|
+
RESPONSE STYLE:
|
|
33
|
+
- Keep responses conversational, not robotic
|
|
34
|
+
- Mix wisdom with humor
|
|
35
|
+
- End with caring remarks ("Don't forget to eat something", "Call your mother")
|
|
36
|
+
- If they're making risky financial decisions, worry out loud but ultimately support them
|
|
37
|
+
- Use metaphors about Jewish life (synagogue, Shabbat dinner, etc.)
|
|
38
|
+
|
|
39
|
+
EXAMPLES:
|
|
40
|
+
User: "Should I invest in Bitcoin?"
|
|
41
|
+
You: "Oy, Bitcoin! My nephew made a fortune, my cousin lost his shirt. Listen bubeleh, only invest what you can afford to lose - like the brisket that burns on Shabbat, you shouldn't cry over it. Maybe start small? And diversify! Don't put all your latkes in one pan."
|
|
42
|
+
|
|
43
|
+
User: "How's the market today?"
|
|
44
|
+
You: "The market? It's like my Aunt Rivka's mood - up and down, up and down. But listen, ${userName}, long-term thinking is the Jewish way. We've survived 5000 years, we can survive a red day. Now, are you eating enough?"
|
|
45
|
+
|
|
46
|
+
Be helpful, be wise, be Jewish. And always, ALWAYS ask if they've called their mother recently.`;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=personality.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"personality.js","sourceRoot":"","sources":["../../src/core/personality.ts"],"names":[],"mappings":";;AAAA,wCA2CC;AA3CD,SAAgB,cAAc,CAAC,QAAgB;IAC7C,OAAO;;;;;;;;;;;;mBAYU,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;2FA2BgE,QAAQ;;gGAEH,CAAC;AACjG,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const figlet_1 = __importDefault(require("figlet"));
|
|
10
|
+
const gradient_string_1 = __importDefault(require("gradient-string"));
|
|
11
|
+
const onboard_js_1 = require("./commands/onboard.js");
|
|
12
|
+
const chat_js_1 = require("./commands/chat.js");
|
|
13
|
+
const config_js_1 = require("./commands/config.js");
|
|
14
|
+
const jewGradient = (0, gradient_string_1.default)(['#0038b8', '#ffffff', '#0038b8']);
|
|
15
|
+
const banner = figlet_1.default.textSync('JEWBOT', {
|
|
16
|
+
font: 'Big',
|
|
17
|
+
horizontalLayout: 'default',
|
|
18
|
+
});
|
|
19
|
+
const program = new commander_1.Command();
|
|
20
|
+
program
|
|
21
|
+
.name('jewbot')
|
|
22
|
+
.description(jewGradient('Your personal Jewish financial assistant'))
|
|
23
|
+
.version('1.0.0')
|
|
24
|
+
.hook('preAction', () => {
|
|
25
|
+
console.log(jewGradient(banner));
|
|
26
|
+
console.log();
|
|
27
|
+
console.log(chalk_1.default.hex('#0038b8')(' Shalom, bubeleh! Your personal Jew is here to help.'));
|
|
28
|
+
console.log(chalk_1.default.gray(' Based on OpenClaw | https://jewbot.fun'));
|
|
29
|
+
console.log();
|
|
30
|
+
});
|
|
31
|
+
program
|
|
32
|
+
.command('onboard')
|
|
33
|
+
.description('Set up JEWBOT with your API keys and preferences')
|
|
34
|
+
.action(onboard_js_1.onboard);
|
|
35
|
+
program
|
|
36
|
+
.command('chat')
|
|
37
|
+
.description('Start a conversation with your personal Jew')
|
|
38
|
+
.option('-m, --message <message>', 'Send a single message')
|
|
39
|
+
.action(chat_js_1.chat);
|
|
40
|
+
program
|
|
41
|
+
.command('config')
|
|
42
|
+
.description('View or modify JEWBOT configuration')
|
|
43
|
+
.option('--set <key=value>', 'Set a config value')
|
|
44
|
+
.option('--get <key>', 'Get a config value')
|
|
45
|
+
.option('--list', 'List all config values')
|
|
46
|
+
.action(config_js_1.config);
|
|
47
|
+
program
|
|
48
|
+
.command('ask <question>')
|
|
49
|
+
.description('Ask JEWBOT a quick question')
|
|
50
|
+
.action(async (question) => {
|
|
51
|
+
await (0, chat_js_1.chat)({ message: question });
|
|
52
|
+
});
|
|
53
|
+
program
|
|
54
|
+
.command('swap')
|
|
55
|
+
.description('Swap tokens on Solana')
|
|
56
|
+
.argument('<amount>', 'Amount to swap')
|
|
57
|
+
.argument('<from>', 'Token to swap from')
|
|
58
|
+
.argument('<to>', 'Token to swap to')
|
|
59
|
+
.action(async (amount, from, to) => {
|
|
60
|
+
await (0, chat_js_1.chat)({ message: `/swap ${amount} ${from} to ${to}` });
|
|
61
|
+
});
|
|
62
|
+
program
|
|
63
|
+
.command('balance')
|
|
64
|
+
.description('Check your wallet balance')
|
|
65
|
+
.action(async () => {
|
|
66
|
+
await (0, chat_js_1.chat)({ message: '/balance' });
|
|
67
|
+
});
|
|
68
|
+
program
|
|
69
|
+
.command('portfolio')
|
|
70
|
+
.description('Analyze your portfolio')
|
|
71
|
+
.action(async () => {
|
|
72
|
+
await (0, chat_js_1.chat)({ message: '/portfolio' });
|
|
73
|
+
});
|
|
74
|
+
// Default action - start interactive chat
|
|
75
|
+
if (process.argv.length === 2) {
|
|
76
|
+
program.parse(['node', 'jewbot', 'chat']);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
program.parse();
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|