musonda 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/IMPLEMENTATION.md +432 -0
- package/README.md +119 -0
- package/dist/agent/harness.d.ts +25 -0
- package/dist/agent/harness.js +215 -0
- package/dist/agent/harness.js.map +1 -0
- package/dist/agent/openaiResponsesClient.d.ts +35 -0
- package/dist/agent/openaiResponsesClient.js +250 -0
- package/dist/agent/openaiResponsesClient.js.map +1 -0
- package/dist/agent/systemPrompt.d.ts +9 -0
- package/dist/agent/systemPrompt.js +100 -0
- package/dist/agent/systemPrompt.js.map +1 -0
- package/dist/agent/types.d.ts +53 -0
- package/dist/agent/types.js +2 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/cli/commands/chat.d.ts +6 -0
- package/dist/cli/commands/chat.js +8 -0
- package/dist/cli/commands/chat.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +4 -0
- package/dist/cli/commands/doctor.js +336 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/gateway.d.ts +20 -0
- package/dist/cli/commands/gateway.js +135 -0
- package/dist/cli/commands/gateway.js.map +1 -0
- package/dist/cli/commands/help.d.ts +4 -0
- package/dist/cli/commands/help.js +159 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/plugins.d.ts +18 -0
- package/dist/cli/commands/plugins.js +250 -0
- package/dist/cli/commands/plugins.js.map +1 -0
- package/dist/cli/commands/service.d.ts +16 -0
- package/dist/cli/commands/service.js +136 -0
- package/dist/cli/commands/service.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +4 -0
- package/dist/cli/commands/setup.js +8 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/status.d.ts +4 -0
- package/dist/cli/commands/status.js +73 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/update.d.ts +22 -0
- package/dist/cli/commands/update.js +226 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/daemon.d.ts +33 -0
- package/dist/cli/daemon.js +208 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/interactiveMenu.d.ts +5 -0
- package/dist/cli/interactiveMenu.js +225 -0
- package/dist/cli/interactiveMenu.js.map +1 -0
- package/dist/cli/musondaCli.d.ts +30 -0
- package/dist/cli/musondaCli.js +269 -0
- package/dist/cli/musondaCli.js.map +1 -0
- package/dist/cli/ui.d.ts +49 -0
- package/dist/cli/ui.js +90 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.js +315 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/loader.d.ts +12 -0
- package/dist/config/loader.js +217 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/paths.d.ts +11 -0
- package/dist/config/paths.js +18 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/types.d.ts +246 -0
- package/dist/config/types.js +155 -0
- package/dist/config/types.js.map +1 -0
- package/dist/gateway/channels/cli.d.ts +37 -0
- package/dist/gateway/channels/cli.js +298 -0
- package/dist/gateway/channels/cli.js.map +1 -0
- package/dist/gateway/channels/discord.d.ts +18 -0
- package/dist/gateway/channels/discord.js +419 -0
- package/dist/gateway/channels/discord.js.map +1 -0
- package/dist/gateway/channels/slack.d.ts +26 -0
- package/dist/gateway/channels/slack.js +470 -0
- package/dist/gateway/channels/slack.js.map +1 -0
- package/dist/gateway/channels/webhook.d.ts +18 -0
- package/dist/gateway/channels/webhook.js +49 -0
- package/dist/gateway/channels/webhook.js.map +1 -0
- package/dist/gateway/http.d.ts +33 -0
- package/dist/gateway/http.js +605 -0
- package/dist/gateway/http.js.map +1 -0
- package/dist/gateway/server.d.ts +38 -0
- package/dist/gateway/server.js +233 -0
- package/dist/gateway/server.js.map +1 -0
- package/dist/gateway/types.d.ts +28 -0
- package/dist/gateway/types.js +2 -0
- package/dist/gateway/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/memoryManager.d.ts +22 -0
- package/dist/memory/memoryManager.js +200 -0
- package/dist/memory/memoryManager.js.map +1 -0
- package/dist/memory/storage.d.ts +24 -0
- package/dist/memory/storage.js +187 -0
- package/dist/memory/storage.js.map +1 -0
- package/dist/memory/types.d.ts +43 -0
- package/dist/memory/types.js +2 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/plugins/manifest.d.ts +23 -0
- package/dist/plugins/manifest.js +185 -0
- package/dist/plugins/manifest.js.map +1 -0
- package/dist/plugins/mcp/mcpBridge.d.ts +31 -0
- package/dist/plugins/mcp/mcpBridge.js +115 -0
- package/dist/plugins/mcp/mcpBridge.js.map +1 -0
- package/dist/plugins/mcp/mcpClient.d.ts +43 -0
- package/dist/plugins/mcp/mcpClient.js +309 -0
- package/dist/plugins/mcp/mcpClient.js.map +1 -0
- package/dist/plugins/mcp/mcpConfig.d.ts +34 -0
- package/dist/plugins/mcp/mcpConfig.js +326 -0
- package/dist/plugins/mcp/mcpConfig.js.map +1 -0
- package/dist/plugins/mcp/types.d.ts +48 -0
- package/dist/plugins/mcp/types.js +2 -0
- package/dist/plugins/mcp/types.js.map +1 -0
- package/dist/plugins/pluginManager.d.ts +164 -0
- package/dist/plugins/pluginManager.js +1016 -0
- package/dist/plugins/pluginManager.js.map +1 -0
- package/dist/plugins/skills/frontmatterParser.d.ts +28 -0
- package/dist/plugins/skills/frontmatterParser.js +189 -0
- package/dist/plugins/skills/frontmatterParser.js.map +1 -0
- package/dist/plugins/skills/skillDiscovery.d.ts +15 -0
- package/dist/plugins/skills/skillDiscovery.js +148 -0
- package/dist/plugins/skills/skillDiscovery.js.map +1 -0
- package/dist/plugins/skills/skillTools.d.ts +8 -0
- package/dist/plugins/skills/skillTools.js +195 -0
- package/dist/plugins/skills/skillTools.js.map +1 -0
- package/dist/plugins/skills/types.d.ts +25 -0
- package/dist/plugins/skills/types.js +2 -0
- package/dist/plugins/skills/types.js.map +1 -0
- package/dist/plugins/types.d.ts +30 -0
- package/dist/plugins/types.js +2 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/scheduler/scheduler.d.ts +25 -0
- package/dist/scheduler/scheduler.js +239 -0
- package/dist/scheduler/scheduler.js.map +1 -0
- package/dist/scheduler/types.d.ts +39 -0
- package/dist/scheduler/types.js +2 -0
- package/dist/scheduler/types.js.map +1 -0
- package/dist/security/childProcessEnv.d.ts +5 -0
- package/dist/security/childProcessEnv.js +42 -0
- package/dist/security/childProcessEnv.js.map +1 -0
- package/dist/security/fileSandbox.d.ts +153 -0
- package/dist/security/fileSandbox.js +779 -0
- package/dist/security/fileSandbox.js.map +1 -0
- package/dist/service/index.d.ts +30 -0
- package/dist/service/index.js +41 -0
- package/dist/service/index.js.map +1 -0
- package/dist/service/systemd.d.ts +36 -0
- package/dist/service/systemd.js +409 -0
- package/dist/service/systemd.js.map +1 -0
- package/dist/service/types.d.ts +118 -0
- package/dist/service/types.js +6 -0
- package/dist/service/types.js.map +1 -0
- package/dist/tools/builtin/calcTools.d.ts +2 -0
- package/dist/tools/builtin/calcTools.js +51 -0
- package/dist/tools/builtin/calcTools.js.map +1 -0
- package/dist/tools/builtin/fileTools.d.ts +11 -0
- package/dist/tools/builtin/fileTools.js +352 -0
- package/dist/tools/builtin/fileTools.js.map +1 -0
- package/dist/tools/builtin/memoryTools.d.ts +4 -0
- package/dist/tools/builtin/memoryTools.js +123 -0
- package/dist/tools/builtin/memoryTools.js.map +1 -0
- package/dist/tools/builtin/noteTools.d.ts +4 -0
- package/dist/tools/builtin/noteTools.js +91 -0
- package/dist/tools/builtin/noteTools.js.map +1 -0
- package/dist/tools/builtin/pluginTools.d.ts +29 -0
- package/dist/tools/builtin/pluginTools.js +406 -0
- package/dist/tools/builtin/pluginTools.js.map +1 -0
- package/dist/tools/builtin/scheduleTools.d.ts +4 -0
- package/dist/tools/builtin/scheduleTools.js +156 -0
- package/dist/tools/builtin/scheduleTools.js.map +1 -0
- package/dist/tools/builtin/timeTools.d.ts +2 -0
- package/dist/tools/builtin/timeTools.js +41 -0
- package/dist/tools/builtin/timeTools.js.map +1 -0
- package/dist/tools/builtin/webTools.d.ts +12 -0
- package/dist/tools/builtin/webTools.js +325 -0
- package/dist/tools/builtin/webTools.js.map +1 -0
- package/dist/tools/registry.d.ts +15 -0
- package/dist/tools/registry.js +111 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +41 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/utils/logger.d.ts +29 -0
- package/dist/utils/logger.js +124 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/wizard/onboarding.d.ts +3 -0
- package/dist/wizard/onboarding.js +408 -0
- package/dist/wizard/onboarding.js.map +1 -0
- package/package.json +69 -0
- package/plugins/example-calc/mcp.json +11 -0
- package/plugins/example-calc/plugin.json +12 -0
- package/plugins/example-calc/server.mjs +92 -0
- package/plugins/example-calc/skills/math-assistant/SKILL.md +15 -0
- package/plugins/plugin-builder/plugin.json +12 -0
- package/plugins/plugin-builder/skills/create-plugin/SKILL.md +149 -0
- package/plugins/plugin-builder/skills/manage-plugins/SKILL.md +157 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import dotenv from 'dotenv';
|
|
4
|
+
import { MusondaConfigSchema, } from './types.js';
|
|
5
|
+
import { getDefaultConfigPath, getMusondaHomeDir } from './paths.js';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
dotenv.config();
|
|
8
|
+
export class ConfigLoader {
|
|
9
|
+
configPath;
|
|
10
|
+
constructor(configPath) {
|
|
11
|
+
this.configPath = configPath || process.env.MUSONDA_CONFIG_PATH || getDefaultConfigPath();
|
|
12
|
+
}
|
|
13
|
+
getConfigPath() {
|
|
14
|
+
return this.configPath;
|
|
15
|
+
}
|
|
16
|
+
resolveConfigFilePath() {
|
|
17
|
+
if (fs.existsSync(this.configPath)) {
|
|
18
|
+
return this.configPath;
|
|
19
|
+
}
|
|
20
|
+
// Check fallback locations for migration
|
|
21
|
+
const legacyCandidates = [
|
|
22
|
+
path.join(getMusondaHomeDir(), 'musonda.config.json'),
|
|
23
|
+
path.resolve(process.cwd(), 'musonda.config.json'),
|
|
24
|
+
path.resolve(process.cwd(), 'config.json'),
|
|
25
|
+
];
|
|
26
|
+
for (const candidate of legacyCandidates) {
|
|
27
|
+
if (fs.existsSync(candidate)) {
|
|
28
|
+
return candidate;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
exists() {
|
|
34
|
+
return this.resolveConfigFilePath() !== null;
|
|
35
|
+
}
|
|
36
|
+
isConfigured() {
|
|
37
|
+
if (!this.exists())
|
|
38
|
+
return false;
|
|
39
|
+
try {
|
|
40
|
+
const config = this.load();
|
|
41
|
+
return Boolean(config.isOnboarded && config.model.apiKey);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
load() {
|
|
48
|
+
let rawConfig = {
|
|
49
|
+
model: {
|
|
50
|
+
apiKey: process.env.OPENAI_API_KEY || '',
|
|
51
|
+
model: process.env.OPENAI_MODEL || 'gpt-5.6-luna',
|
|
52
|
+
baseUrl: process.env.OPENAI_BASE_URL || undefined,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
const resolvedPath = this.resolveConfigFilePath();
|
|
56
|
+
if (resolvedPath) {
|
|
57
|
+
try {
|
|
58
|
+
const fileContent = fs.readFileSync(resolvedPath, 'utf-8');
|
|
59
|
+
rawConfig = JSON.parse(fileContent);
|
|
60
|
+
// If config was found in a legacy location, migrate it into ~/.musonda/config.json
|
|
61
|
+
if (resolvedPath !== this.configPath) {
|
|
62
|
+
logger.info(`Migrating security configuration from "${resolvedPath}" to "${this.configPath}"...`);
|
|
63
|
+
this.save(rawConfig);
|
|
64
|
+
if (resolvedPath.startsWith(process.cwd())) {
|
|
65
|
+
try {
|
|
66
|
+
fs.unlinkSync(resolvedPath);
|
|
67
|
+
logger.info(`Removed legacy configuration file from workspace: "${resolvedPath}"`);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
logger.warn(`Could not remove legacy file "${resolvedPath}": ${err.message}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
logger.error(`Failed to read config file from ${resolvedPath}:`, err);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Overlay environment variables
|
|
80
|
+
if (process.env.OPENAI_API_KEY) {
|
|
81
|
+
if (!rawConfig.model)
|
|
82
|
+
rawConfig.model = { apiKey: process.env.OPENAI_API_KEY };
|
|
83
|
+
else
|
|
84
|
+
rawConfig.model.apiKey = process.env.OPENAI_API_KEY;
|
|
85
|
+
}
|
|
86
|
+
if (process.env.OPENAI_MODEL) {
|
|
87
|
+
if (!rawConfig.model)
|
|
88
|
+
rawConfig.model = { apiKey: '', model: process.env.OPENAI_MODEL };
|
|
89
|
+
else
|
|
90
|
+
rawConfig.model.model = process.env.OPENAI_MODEL;
|
|
91
|
+
}
|
|
92
|
+
if (process.env.OPENAI_BASE_URL && rawConfig.model) {
|
|
93
|
+
rawConfig.model.baseUrl = process.env.OPENAI_BASE_URL;
|
|
94
|
+
}
|
|
95
|
+
if (process.env.DISCORD_BOT_TOKEN) {
|
|
96
|
+
if (!rawConfig.channels)
|
|
97
|
+
rawConfig.channels = {};
|
|
98
|
+
if (!rawConfig.channels.discord)
|
|
99
|
+
rawConfig.channels.discord = {};
|
|
100
|
+
rawConfig.channels.discord.token = process.env.DISCORD_BOT_TOKEN;
|
|
101
|
+
rawConfig.channels.discord.enabled = true;
|
|
102
|
+
}
|
|
103
|
+
if (process.env.DISCORD_CLIENT_ID && rawConfig.channels?.discord) {
|
|
104
|
+
rawConfig.channels.discord.clientId = process.env.DISCORD_CLIENT_ID;
|
|
105
|
+
}
|
|
106
|
+
if (process.env.MUSONDA_NAME) {
|
|
107
|
+
if (!rawConfig.assistant)
|
|
108
|
+
rawConfig.assistant = {};
|
|
109
|
+
rawConfig.assistant.name = process.env.MUSONDA_NAME;
|
|
110
|
+
}
|
|
111
|
+
if (process.env.SLACK_BOT_TOKEN) {
|
|
112
|
+
if (!rawConfig.channels)
|
|
113
|
+
rawConfig.channels = {};
|
|
114
|
+
if (!rawConfig.channels.slack)
|
|
115
|
+
rawConfig.channels.slack = {};
|
|
116
|
+
rawConfig.channels.slack.botToken = process.env.SLACK_BOT_TOKEN;
|
|
117
|
+
rawConfig.channels.slack.enabled = true;
|
|
118
|
+
}
|
|
119
|
+
if (process.env.SLACK_APP_TOKEN) {
|
|
120
|
+
if (!rawConfig.channels)
|
|
121
|
+
rawConfig.channels = {};
|
|
122
|
+
if (!rawConfig.channels.slack)
|
|
123
|
+
rawConfig.channels.slack = {};
|
|
124
|
+
rawConfig.channels.slack.appToken = process.env.SLACK_APP_TOKEN;
|
|
125
|
+
rawConfig.channels.slack.socketMode = true;
|
|
126
|
+
}
|
|
127
|
+
if (process.env.SLACK_SIGNING_SECRET && rawConfig.channels?.slack) {
|
|
128
|
+
rawConfig.channels.slack.signingSecret = process.env.SLACK_SIGNING_SECRET;
|
|
129
|
+
}
|
|
130
|
+
if (process.env.SLACK_ALLOWED_USERS && rawConfig.channels?.slack) {
|
|
131
|
+
rawConfig.channels.slack.allowedUsers = process.env.SLACK_ALLOWED_USERS.split(',').map((s) => s.trim()).filter(Boolean);
|
|
132
|
+
}
|
|
133
|
+
if (process.env.SLACK_ALLOWED_CHANNELS && rawConfig.channels?.slack) {
|
|
134
|
+
rawConfig.channels.slack.allowedChannels = process.env.SLACK_ALLOWED_CHANNELS.split(',').map((s) => s.trim()).filter(Boolean);
|
|
135
|
+
}
|
|
136
|
+
if (process.env.SLACK_ALLOW_PUBLIC !== undefined && rawConfig.channels?.slack) {
|
|
137
|
+
rawConfig.channels.slack.allowPublic = process.env.SLACK_ALLOW_PUBLIC.toLowerCase() === 'true';
|
|
138
|
+
}
|
|
139
|
+
if (process.env.DISCORD_ALLOWED_USERS && rawConfig.channels?.discord) {
|
|
140
|
+
rawConfig.channels.discord.allowedUsers = process.env.DISCORD_ALLOWED_USERS.split(',').map((s) => s.trim()).filter(Boolean);
|
|
141
|
+
}
|
|
142
|
+
if (process.env.DISCORD_ALLOWED_CHANNELS && rawConfig.channels?.discord) {
|
|
143
|
+
rawConfig.channels.discord.allowedChannels = process.env.DISCORD_ALLOWED_CHANNELS.split(',').map((s) => s.trim()).filter(Boolean);
|
|
144
|
+
}
|
|
145
|
+
if (process.env.DISCORD_ALLOWED_GUILDS && rawConfig.channels?.discord) {
|
|
146
|
+
rawConfig.channels.discord.allowedGuilds = process.env.DISCORD_ALLOWED_GUILDS.split(',').map((s) => s.trim()).filter(Boolean);
|
|
147
|
+
}
|
|
148
|
+
if (process.env.DISCORD_ALLOW_PUBLIC !== undefined && rawConfig.channels?.discord) {
|
|
149
|
+
rawConfig.channels.discord.allowPublic = process.env.DISCORD_ALLOW_PUBLIC.toLowerCase() === 'true';
|
|
150
|
+
}
|
|
151
|
+
if (process.env.GATEWAY_HOST || process.env.HOST) {
|
|
152
|
+
if (!rawConfig.gateway)
|
|
153
|
+
rawConfig.gateway = {};
|
|
154
|
+
rawConfig.gateway.host = (process.env.GATEWAY_HOST || process.env.HOST).trim();
|
|
155
|
+
}
|
|
156
|
+
if (process.env.GATEWAY_PORT || process.env.PORT) {
|
|
157
|
+
if (!rawConfig.gateway)
|
|
158
|
+
rawConfig.gateway = {};
|
|
159
|
+
rawConfig.gateway.port = parseInt(process.env.GATEWAY_PORT || process.env.PORT, 10);
|
|
160
|
+
}
|
|
161
|
+
if (process.env.GATEWAY_API_KEY || process.env.GATEWAY_AUTH_TOKEN) {
|
|
162
|
+
if (!rawConfig.gateway)
|
|
163
|
+
rawConfig.gateway = {};
|
|
164
|
+
rawConfig.gateway.apiKey = (process.env.GATEWAY_API_KEY || process.env.GATEWAY_AUTH_TOKEN).trim();
|
|
165
|
+
}
|
|
166
|
+
if (process.env.GATEWAY_TRUST_PROXY !== undefined) {
|
|
167
|
+
if (!rawConfig.gateway)
|
|
168
|
+
rawConfig.gateway = {};
|
|
169
|
+
rawConfig.gateway.trustProxy = process.env.GATEWAY_TRUST_PROXY.toLowerCase() === 'true';
|
|
170
|
+
}
|
|
171
|
+
if (process.env.FILE_SANDBOX_ALLOWED_ROOTS) {
|
|
172
|
+
if (!rawConfig.fileSandbox)
|
|
173
|
+
rawConfig.fileSandbox = {};
|
|
174
|
+
rawConfig.fileSandbox.allowedRoots = process.env.FILE_SANDBOX_ALLOWED_ROOTS
|
|
175
|
+
.split(',')
|
|
176
|
+
.map((s) => s.trim())
|
|
177
|
+
.filter(Boolean);
|
|
178
|
+
}
|
|
179
|
+
if (process.env.FILE_SANDBOX_ENABLED !== undefined) {
|
|
180
|
+
if (!rawConfig.fileSandbox)
|
|
181
|
+
rawConfig.fileSandbox = {};
|
|
182
|
+
rawConfig.fileSandbox.enabled = process.env.FILE_SANDBOX_ENABLED !== 'false';
|
|
183
|
+
}
|
|
184
|
+
const hasCliArg = process.argv.slice(2).some((arg) => arg === '--cli' || arg === 'cli' || arg === '-c');
|
|
185
|
+
const hasCliEnv = process.env.MUSONDA_CLI === 'true' || process.env.CLI_CHANNEL === 'true';
|
|
186
|
+
if (hasCliArg || hasCliEnv) {
|
|
187
|
+
if (!rawConfig.channels)
|
|
188
|
+
rawConfig.channels = {};
|
|
189
|
+
if (!rawConfig.channels.cli)
|
|
190
|
+
rawConfig.channels.cli = {};
|
|
191
|
+
rawConfig.channels.cli.enabled = true;
|
|
192
|
+
}
|
|
193
|
+
const parsed = MusondaConfigSchema.safeParse(rawConfig);
|
|
194
|
+
if (!parsed.success) {
|
|
195
|
+
logger.warn('Configuration issues detected:', parsed.error.issues);
|
|
196
|
+
// Fallback with minimal valid defaults if missing apiKey
|
|
197
|
+
return MusondaConfigSchema.parse({
|
|
198
|
+
...rawConfig,
|
|
199
|
+
model: {
|
|
200
|
+
apiKey: rawConfig.model?.apiKey || 'placeholder-key',
|
|
201
|
+
model: rawConfig.model?.model || 'gpt-5.6-luna',
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
return parsed.data;
|
|
206
|
+
}
|
|
207
|
+
save(config) {
|
|
208
|
+
const dir = path.dirname(this.configPath);
|
|
209
|
+
if (!fs.existsSync(dir)) {
|
|
210
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
211
|
+
}
|
|
212
|
+
fs.writeFileSync(this.configPath, JSON.stringify(config, null, 2), { encoding: 'utf-8', mode: 0o600 });
|
|
213
|
+
logger.info(`Configuration successfully written to ${this.configPath}`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
export const configLoader = new ConfigLoader();
|
|
217
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns the path to the .musonda directory in the system user's home directory across any OS:
|
|
3
|
+
* - Windows: C:\Users\<username>\.musonda
|
|
4
|
+
* - Linux: /home/<username>/.musonda
|
|
5
|
+
* - macOS: /Users/<username>/.musonda
|
|
6
|
+
*/
|
|
7
|
+
export declare function getMusondaHomeDir(): string;
|
|
8
|
+
/**
|
|
9
|
+
* Returns the primary configuration file path (~/.musonda/config.json).
|
|
10
|
+
*/
|
|
11
|
+
export declare function getDefaultConfigPath(): string;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Returns the path to the .musonda directory in the system user's home directory across any OS:
|
|
5
|
+
* - Windows: C:\Users\<username>\.musonda
|
|
6
|
+
* - Linux: /home/<username>/.musonda
|
|
7
|
+
* - macOS: /Users/<username>/.musonda
|
|
8
|
+
*/
|
|
9
|
+
export function getMusondaHomeDir() {
|
|
10
|
+
return path.join(os.homedir(), '.musonda');
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Returns the primary configuration file path (~/.musonda/config.json).
|
|
14
|
+
*/
|
|
15
|
+
export function getDefaultConfigPath() {
|
|
16
|
+
return path.join(getMusondaHomeDir(), 'config.json');
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,aAAa,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const AssistantConfigSchema: z.ZodObject<{
|
|
3
|
+
name: z.ZodDefault<z.ZodString>;
|
|
4
|
+
customName: z.ZodOptional<z.ZodString>;
|
|
5
|
+
title: z.ZodDefault<z.ZodString>;
|
|
6
|
+
tone: z.ZodDefault<z.ZodString>;
|
|
7
|
+
systemInstructions: z.ZodOptional<z.ZodString>;
|
|
8
|
+
}, z.core.$strip>;
|
|
9
|
+
export declare const UserProfileSchema: z.ZodObject<{
|
|
10
|
+
name: z.ZodDefault<z.ZodString>;
|
|
11
|
+
bio: z.ZodDefault<z.ZodString>;
|
|
12
|
+
interests: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
13
|
+
timezone: z.ZodDefault<z.ZodString>;
|
|
14
|
+
communicationStyle: z.ZodDefault<z.ZodEnum<{
|
|
15
|
+
concise: "concise";
|
|
16
|
+
detailed: "detailed";
|
|
17
|
+
friendly: "friendly";
|
|
18
|
+
technical: "technical";
|
|
19
|
+
}>>;
|
|
20
|
+
notes: z.ZodDefault<z.ZodString>;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
export declare const ModelConfigSchema: z.ZodObject<{
|
|
23
|
+
provider: z.ZodDefault<z.ZodLiteral<"openai">>;
|
|
24
|
+
model: z.ZodDefault<z.ZodString>;
|
|
25
|
+
apiKey: z.ZodString;
|
|
26
|
+
baseUrl: z.ZodOptional<z.ZodString>;
|
|
27
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
28
|
+
maxOutputTokens: z.ZodDefault<z.ZodNumber>;
|
|
29
|
+
reasoningEffort: z.ZodOptional<z.ZodEnum<{
|
|
30
|
+
high: "high";
|
|
31
|
+
low: "low";
|
|
32
|
+
medium: "medium";
|
|
33
|
+
}>>;
|
|
34
|
+
}, z.core.$strip>;
|
|
35
|
+
export declare const DiscordConfigSchema: z.ZodObject<{
|
|
36
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
37
|
+
token: z.ZodDefault<z.ZodString>;
|
|
38
|
+
clientId: z.ZodOptional<z.ZodString>;
|
|
39
|
+
allowedGuilds: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
40
|
+
allowedChannels: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
41
|
+
allowedUsers: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
42
|
+
allowPublic: z.ZodDefault<z.ZodBoolean>;
|
|
43
|
+
requireMentionInGuild: z.ZodDefault<z.ZodBoolean>;
|
|
44
|
+
statusMessage: z.ZodDefault<z.ZodString>;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
export declare const SlackConfigSchema: z.ZodObject<{
|
|
47
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
48
|
+
botToken: z.ZodDefault<z.ZodString>;
|
|
49
|
+
appToken: z.ZodDefault<z.ZodString>;
|
|
50
|
+
signingSecret: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
51
|
+
socketMode: z.ZodDefault<z.ZodBoolean>;
|
|
52
|
+
allowedChannels: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
53
|
+
allowedUsers: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
54
|
+
allowPublic: z.ZodDefault<z.ZodBoolean>;
|
|
55
|
+
replyInThread: z.ZodDefault<z.ZodBoolean>;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
export declare const CliConfigSchema: z.ZodObject<{
|
|
58
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
59
|
+
prompt: z.ZodDefault<z.ZodString>;
|
|
60
|
+
showBanner: z.ZodDefault<z.ZodBoolean>;
|
|
61
|
+
showThinking: z.ZodDefault<z.ZodBoolean>;
|
|
62
|
+
userId: z.ZodDefault<z.ZodString>;
|
|
63
|
+
userName: z.ZodOptional<z.ZodString>;
|
|
64
|
+
}, z.core.$strip>;
|
|
65
|
+
export declare const GatewayConfigSchema: z.ZodObject<{
|
|
66
|
+
host: z.ZodDefault<z.ZodString>;
|
|
67
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
68
|
+
enableHttp: z.ZodDefault<z.ZodBoolean>;
|
|
69
|
+
apiKey: z.ZodOptional<z.ZodString>;
|
|
70
|
+
corsAllowedOrigins: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
71
|
+
rateLimitPerMinute: z.ZodDefault<z.ZodNumber>;
|
|
72
|
+
trustProxy: z.ZodDefault<z.ZodBoolean>;
|
|
73
|
+
rateLimitMaxClients: z.ZodDefault<z.ZodNumber>;
|
|
74
|
+
}, z.core.$strip>;
|
|
75
|
+
export declare const MemoryConfigSchema: z.ZodObject<{
|
|
76
|
+
storageDir: z.ZodDefault<z.ZodString>;
|
|
77
|
+
sessionsDir: z.ZodDefault<z.ZodString>;
|
|
78
|
+
maxShortTermHistory: z.ZodDefault<z.ZodNumber>;
|
|
79
|
+
autoRecallTopK: z.ZodDefault<z.ZodNumber>;
|
|
80
|
+
}, z.core.$strip>;
|
|
81
|
+
export declare const SandboxRootRuleSchema: z.ZodObject<{
|
|
82
|
+
path: z.ZodString;
|
|
83
|
+
readOnly: z.ZodDefault<z.ZodBoolean>;
|
|
84
|
+
description: z.ZodOptional<z.ZodString>;
|
|
85
|
+
}, z.core.$strip>;
|
|
86
|
+
export declare const FileSandboxConfigSchema: z.ZodObject<{
|
|
87
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
88
|
+
allowedRoots: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
89
|
+
path: z.ZodString;
|
|
90
|
+
readOnly: z.ZodDefault<z.ZodBoolean>;
|
|
91
|
+
description: z.ZodOptional<z.ZodString>;
|
|
92
|
+
}, z.core.$strip>]>>>;
|
|
93
|
+
blockedPatterns: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
94
|
+
maxReadSizeBytes: z.ZodDefault<z.ZodNumber>;
|
|
95
|
+
maxWriteSizeBytes: z.ZodDefault<z.ZodNumber>;
|
|
96
|
+
maxListEntries: z.ZodDefault<z.ZodNumber>;
|
|
97
|
+
allowDelete: z.ZodDefault<z.ZodBoolean>;
|
|
98
|
+
requireDeleteConfirmation: z.ZodDefault<z.ZodBoolean>;
|
|
99
|
+
defaultRoot: z.ZodOptional<z.ZodString>;
|
|
100
|
+
}, z.core.$strip>;
|
|
101
|
+
export declare const PluginsConfigSchema: z.ZodObject<{
|
|
102
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
103
|
+
directories: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
104
|
+
dataDir: z.ZodDefault<z.ZodString>;
|
|
105
|
+
disabledPlugins: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
106
|
+
}, z.core.$strip>;
|
|
107
|
+
export declare const ServiceConfigSchema: z.ZodOptional<z.ZodObject<{
|
|
108
|
+
serviceName: z.ZodDefault<z.ZodString>;
|
|
109
|
+
type: z.ZodDefault<z.ZodEnum<{
|
|
110
|
+
file: "file";
|
|
111
|
+
system: "system";
|
|
112
|
+
user: "user";
|
|
113
|
+
}>>;
|
|
114
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
115
|
+
installedPath: z.ZodOptional<z.ZodString>;
|
|
116
|
+
}, z.core.$strip>>;
|
|
117
|
+
export declare const MusondaConfigSchema: z.ZodObject<{
|
|
118
|
+
version: z.ZodDefault<z.ZodString>;
|
|
119
|
+
isOnboarded: z.ZodDefault<z.ZodBoolean>;
|
|
120
|
+
assistant: z.ZodDefault<z.ZodObject<{
|
|
121
|
+
name: z.ZodDefault<z.ZodString>;
|
|
122
|
+
customName: z.ZodOptional<z.ZodString>;
|
|
123
|
+
title: z.ZodDefault<z.ZodString>;
|
|
124
|
+
tone: z.ZodDefault<z.ZodString>;
|
|
125
|
+
systemInstructions: z.ZodOptional<z.ZodString>;
|
|
126
|
+
}, z.core.$strip>>;
|
|
127
|
+
user: z.ZodDefault<z.ZodObject<{
|
|
128
|
+
name: z.ZodDefault<z.ZodString>;
|
|
129
|
+
bio: z.ZodDefault<z.ZodString>;
|
|
130
|
+
interests: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
131
|
+
timezone: z.ZodDefault<z.ZodString>;
|
|
132
|
+
communicationStyle: z.ZodDefault<z.ZodEnum<{
|
|
133
|
+
concise: "concise";
|
|
134
|
+
detailed: "detailed";
|
|
135
|
+
friendly: "friendly";
|
|
136
|
+
technical: "technical";
|
|
137
|
+
}>>;
|
|
138
|
+
notes: z.ZodDefault<z.ZodString>;
|
|
139
|
+
}, z.core.$strip>>;
|
|
140
|
+
model: z.ZodObject<{
|
|
141
|
+
provider: z.ZodDefault<z.ZodLiteral<"openai">>;
|
|
142
|
+
model: z.ZodDefault<z.ZodString>;
|
|
143
|
+
apiKey: z.ZodString;
|
|
144
|
+
baseUrl: z.ZodOptional<z.ZodString>;
|
|
145
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
146
|
+
maxOutputTokens: z.ZodDefault<z.ZodNumber>;
|
|
147
|
+
reasoningEffort: z.ZodOptional<z.ZodEnum<{
|
|
148
|
+
high: "high";
|
|
149
|
+
low: "low";
|
|
150
|
+
medium: "medium";
|
|
151
|
+
}>>;
|
|
152
|
+
}, z.core.$strip>;
|
|
153
|
+
gateway: z.ZodDefault<z.ZodObject<{
|
|
154
|
+
host: z.ZodDefault<z.ZodString>;
|
|
155
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
156
|
+
enableHttp: z.ZodDefault<z.ZodBoolean>;
|
|
157
|
+
apiKey: z.ZodOptional<z.ZodString>;
|
|
158
|
+
corsAllowedOrigins: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
159
|
+
rateLimitPerMinute: z.ZodDefault<z.ZodNumber>;
|
|
160
|
+
trustProxy: z.ZodDefault<z.ZodBoolean>;
|
|
161
|
+
rateLimitMaxClients: z.ZodDefault<z.ZodNumber>;
|
|
162
|
+
}, z.core.$strip>>;
|
|
163
|
+
channels: z.ZodDefault<z.ZodObject<{
|
|
164
|
+
discord: z.ZodDefault<z.ZodObject<{
|
|
165
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
166
|
+
token: z.ZodDefault<z.ZodString>;
|
|
167
|
+
clientId: z.ZodOptional<z.ZodString>;
|
|
168
|
+
allowedGuilds: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
169
|
+
allowedChannels: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
170
|
+
allowedUsers: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
171
|
+
allowPublic: z.ZodDefault<z.ZodBoolean>;
|
|
172
|
+
requireMentionInGuild: z.ZodDefault<z.ZodBoolean>;
|
|
173
|
+
statusMessage: z.ZodDefault<z.ZodString>;
|
|
174
|
+
}, z.core.$strip>>;
|
|
175
|
+
slack: z.ZodDefault<z.ZodObject<{
|
|
176
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
177
|
+
botToken: z.ZodDefault<z.ZodString>;
|
|
178
|
+
appToken: z.ZodDefault<z.ZodString>;
|
|
179
|
+
signingSecret: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
180
|
+
socketMode: z.ZodDefault<z.ZodBoolean>;
|
|
181
|
+
allowedChannels: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
182
|
+
allowedUsers: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
183
|
+
allowPublic: z.ZodDefault<z.ZodBoolean>;
|
|
184
|
+
replyInThread: z.ZodDefault<z.ZodBoolean>;
|
|
185
|
+
}, z.core.$strip>>;
|
|
186
|
+
cli: z.ZodDefault<z.ZodObject<{
|
|
187
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
188
|
+
prompt: z.ZodDefault<z.ZodString>;
|
|
189
|
+
showBanner: z.ZodDefault<z.ZodBoolean>;
|
|
190
|
+
showThinking: z.ZodDefault<z.ZodBoolean>;
|
|
191
|
+
userId: z.ZodDefault<z.ZodString>;
|
|
192
|
+
userName: z.ZodOptional<z.ZodString>;
|
|
193
|
+
}, z.core.$strip>>;
|
|
194
|
+
}, z.core.$strip>>;
|
|
195
|
+
memory: z.ZodDefault<z.ZodObject<{
|
|
196
|
+
storageDir: z.ZodDefault<z.ZodString>;
|
|
197
|
+
sessionsDir: z.ZodDefault<z.ZodString>;
|
|
198
|
+
maxShortTermHistory: z.ZodDefault<z.ZodNumber>;
|
|
199
|
+
autoRecallTopK: z.ZodDefault<z.ZodNumber>;
|
|
200
|
+
}, z.core.$strip>>;
|
|
201
|
+
fileSandbox: z.ZodDefault<z.ZodObject<{
|
|
202
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
203
|
+
allowedRoots: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
204
|
+
path: z.ZodString;
|
|
205
|
+
readOnly: z.ZodDefault<z.ZodBoolean>;
|
|
206
|
+
description: z.ZodOptional<z.ZodString>;
|
|
207
|
+
}, z.core.$strip>]>>>;
|
|
208
|
+
blockedPatterns: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
209
|
+
maxReadSizeBytes: z.ZodDefault<z.ZodNumber>;
|
|
210
|
+
maxWriteSizeBytes: z.ZodDefault<z.ZodNumber>;
|
|
211
|
+
maxListEntries: z.ZodDefault<z.ZodNumber>;
|
|
212
|
+
allowDelete: z.ZodDefault<z.ZodBoolean>;
|
|
213
|
+
requireDeleteConfirmation: z.ZodDefault<z.ZodBoolean>;
|
|
214
|
+
defaultRoot: z.ZodOptional<z.ZodString>;
|
|
215
|
+
}, z.core.$strip>>;
|
|
216
|
+
plugins: z.ZodDefault<z.ZodObject<{
|
|
217
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
218
|
+
directories: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
219
|
+
dataDir: z.ZodDefault<z.ZodString>;
|
|
220
|
+
disabledPlugins: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
221
|
+
}, z.core.$strip>>;
|
|
222
|
+
service: z.ZodOptional<z.ZodObject<{
|
|
223
|
+
serviceName: z.ZodDefault<z.ZodString>;
|
|
224
|
+
type: z.ZodDefault<z.ZodEnum<{
|
|
225
|
+
file: "file";
|
|
226
|
+
system: "system";
|
|
227
|
+
user: "user";
|
|
228
|
+
}>>;
|
|
229
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
230
|
+
installedPath: z.ZodOptional<z.ZodString>;
|
|
231
|
+
}, z.core.$strip>>;
|
|
232
|
+
}, z.core.$strip>;
|
|
233
|
+
export type AssistantConfig = z.infer<typeof AssistantConfigSchema>;
|
|
234
|
+
export type UserProfile = z.infer<typeof UserProfileSchema>;
|
|
235
|
+
export type ModelConfig = z.infer<typeof ModelConfigSchema>;
|
|
236
|
+
export type DiscordConfig = z.infer<typeof DiscordConfigSchema>;
|
|
237
|
+
export type SlackConfig = z.infer<typeof SlackConfigSchema>;
|
|
238
|
+
export type CliConfig = z.infer<typeof CliConfigSchema>;
|
|
239
|
+
export type GatewayConfig = z.infer<typeof GatewayConfigSchema>;
|
|
240
|
+
export type MemoryConfig = z.infer<typeof MemoryConfigSchema>;
|
|
241
|
+
export type SandboxRootRule = z.infer<typeof SandboxRootRuleSchema>;
|
|
242
|
+
export type FileSandboxConfig = z.infer<typeof FileSandboxConfigSchema>;
|
|
243
|
+
export type PluginsConfig = z.infer<typeof PluginsConfigSchema>;
|
|
244
|
+
export type ServiceConfig = z.infer<typeof ServiceConfigSchema>;
|
|
245
|
+
export type MusondaConfig = z.infer<typeof MusondaConfigSchema>;
|
|
246
|
+
export type PartialMusondaConfig = z.input<typeof MusondaConfigSchema>;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const AssistantConfigSchema = z.object({
|
|
3
|
+
name: z.string().default('Musonda'),
|
|
4
|
+
customName: z.string().optional(),
|
|
5
|
+
title: z.string().default('Personal Autonomous AI Companion'),
|
|
6
|
+
tone: z.string().default('friendly, insightful, adaptive, proactive'),
|
|
7
|
+
systemInstructions: z.string().optional(),
|
|
8
|
+
});
|
|
9
|
+
export const UserProfileSchema = z.object({
|
|
10
|
+
name: z.string().default('Friend'),
|
|
11
|
+
bio: z.string().default(''),
|
|
12
|
+
interests: z.array(z.string()).default([]),
|
|
13
|
+
timezone: z.string().default('UTC'),
|
|
14
|
+
communicationStyle: z.enum(['concise', 'detailed', 'friendly', 'technical']).default('friendly'),
|
|
15
|
+
notes: z.string().default(''),
|
|
16
|
+
});
|
|
17
|
+
export const ModelConfigSchema = z.object({
|
|
18
|
+
provider: z.literal('openai').default('openai'),
|
|
19
|
+
model: z.string().default('gpt-5.6-luna'),
|
|
20
|
+
apiKey: z.string(),
|
|
21
|
+
baseUrl: z.string().optional(),
|
|
22
|
+
temperature: z.number().min(0).max(2).optional(),
|
|
23
|
+
maxOutputTokens: z.number().positive().default(4096),
|
|
24
|
+
reasoningEffort: z.enum(['low', 'medium', 'high']).optional(),
|
|
25
|
+
});
|
|
26
|
+
export const DiscordConfigSchema = z.object({
|
|
27
|
+
enabled: z.boolean().default(false),
|
|
28
|
+
token: z.string().default(''),
|
|
29
|
+
clientId: z.string().optional(),
|
|
30
|
+
allowedGuilds: z.array(z.string()).default([]),
|
|
31
|
+
allowedChannels: z.array(z.string()).default([]),
|
|
32
|
+
allowedUsers: z.array(z.string()).default([]),
|
|
33
|
+
allowPublic: z.boolean().default(false),
|
|
34
|
+
requireMentionInGuild: z.boolean().default(true),
|
|
35
|
+
statusMessage: z.string().default('Running Musonda Gateway | gpt-5.6-luna'),
|
|
36
|
+
});
|
|
37
|
+
export const SlackConfigSchema = z.object({
|
|
38
|
+
enabled: z.boolean().default(false),
|
|
39
|
+
botToken: z.string().default(''), // xoxb-...
|
|
40
|
+
appToken: z.string().default(''), // xapp-... for Socket Mode
|
|
41
|
+
signingSecret: z.string().optional().default(''),
|
|
42
|
+
socketMode: z.boolean().default(true),
|
|
43
|
+
allowedChannels: z.array(z.string()).default([]),
|
|
44
|
+
allowedUsers: z.array(z.string()).default([]),
|
|
45
|
+
allowPublic: z.boolean().default(false),
|
|
46
|
+
replyInThread: z.boolean().default(true),
|
|
47
|
+
});
|
|
48
|
+
export const CliConfigSchema = z.object({
|
|
49
|
+
enabled: z.boolean().default(false),
|
|
50
|
+
prompt: z.string().default('> '),
|
|
51
|
+
showBanner: z.boolean().default(true),
|
|
52
|
+
showThinking: z.boolean().default(true),
|
|
53
|
+
userId: z.string().default('cli-user'),
|
|
54
|
+
userName: z.string().optional(),
|
|
55
|
+
});
|
|
56
|
+
export const GatewayConfigSchema = z.object({
|
|
57
|
+
host: z.string().default('127.0.0.1'),
|
|
58
|
+
port: z.number().default(4141),
|
|
59
|
+
enableHttp: z.boolean().default(true),
|
|
60
|
+
apiKey: z.string().optional(),
|
|
61
|
+
corsAllowedOrigins: z.array(z.string()).default([]),
|
|
62
|
+
rateLimitPerMinute: z.number().default(120),
|
|
63
|
+
trustProxy: z.boolean().default(false),
|
|
64
|
+
rateLimitMaxClients: z.number().int().positive().default(10000),
|
|
65
|
+
});
|
|
66
|
+
export const MemoryConfigSchema = z.object({
|
|
67
|
+
storageDir: z.string().default('./data/memory'),
|
|
68
|
+
sessionsDir: z.string().default('./data/sessions'),
|
|
69
|
+
maxShortTermHistory: z.number().default(30),
|
|
70
|
+
autoRecallTopK: z.number().default(6),
|
|
71
|
+
});
|
|
72
|
+
export const SandboxRootRuleSchema = z.object({
|
|
73
|
+
path: z.string(),
|
|
74
|
+
readOnly: z.boolean().default(false),
|
|
75
|
+
description: z.string().optional(),
|
|
76
|
+
});
|
|
77
|
+
export const FileSandboxConfigSchema = z.object({
|
|
78
|
+
enabled: z.boolean().default(true),
|
|
79
|
+
allowedRoots: z
|
|
80
|
+
.array(z.union([z.string(), SandboxRootRuleSchema]))
|
|
81
|
+
.default(['./data/workspace']),
|
|
82
|
+
blockedPatterns: z
|
|
83
|
+
.array(z.string())
|
|
84
|
+
.default([
|
|
85
|
+
'*.env',
|
|
86
|
+
'*.env.*',
|
|
87
|
+
'**/.env',
|
|
88
|
+
'**/.env.*',
|
|
89
|
+
'**/id_rsa*',
|
|
90
|
+
'**/id_ed25519*',
|
|
91
|
+
'**/*.pem',
|
|
92
|
+
'**/*.key',
|
|
93
|
+
'**/.git/**',
|
|
94
|
+
'**/.git',
|
|
95
|
+
'**/node_modules/**',
|
|
96
|
+
'**/node_modules',
|
|
97
|
+
'**/.musonda/**',
|
|
98
|
+
'**/.musonda',
|
|
99
|
+
'**/config.json',
|
|
100
|
+
'**/musonda.config.json',
|
|
101
|
+
]),
|
|
102
|
+
maxReadSizeBytes: z.number().default(10 * 1024 * 1024), // 10 MB
|
|
103
|
+
maxWriteSizeBytes: z.number().default(25 * 1024 * 1024), // 25 MB
|
|
104
|
+
maxListEntries: z.number().default(500),
|
|
105
|
+
allowDelete: z.boolean().default(true),
|
|
106
|
+
requireDeleteConfirmation: z.boolean().default(true),
|
|
107
|
+
defaultRoot: z.string().optional(),
|
|
108
|
+
});
|
|
109
|
+
export const PluginsConfigSchema = z.object({
|
|
110
|
+
enabled: z.boolean().default(true),
|
|
111
|
+
directories: z.array(z.string()).default(['./data/plugins', './plugins']),
|
|
112
|
+
dataDir: z.string().default('./data/plugin_data'),
|
|
113
|
+
disabledPlugins: z.array(z.string()).default([]),
|
|
114
|
+
});
|
|
115
|
+
const defaultAssistant = AssistantConfigSchema.parse({});
|
|
116
|
+
const defaultUser = UserProfileSchema.parse({});
|
|
117
|
+
const defaultDiscord = DiscordConfigSchema.parse({});
|
|
118
|
+
const defaultSlack = SlackConfigSchema.parse({});
|
|
119
|
+
const defaultCli = CliConfigSchema.parse({});
|
|
120
|
+
const defaultGateway = GatewayConfigSchema.parse({});
|
|
121
|
+
const defaultMemory = MemoryConfigSchema.parse({});
|
|
122
|
+
const defaultFileSandbox = FileSandboxConfigSchema.parse({});
|
|
123
|
+
const defaultPlugins = PluginsConfigSchema.parse({});
|
|
124
|
+
export const ServiceConfigSchema = z
|
|
125
|
+
.object({
|
|
126
|
+
serviceName: z.string().default('musonda'),
|
|
127
|
+
type: z.enum(['user', 'system', 'file']).default('user'),
|
|
128
|
+
enabled: z.boolean().default(false),
|
|
129
|
+
installedPath: z.string().optional(),
|
|
130
|
+
})
|
|
131
|
+
.optional();
|
|
132
|
+
export const MusondaConfigSchema = z.object({
|
|
133
|
+
version: z.string().default('1.0.0'),
|
|
134
|
+
isOnboarded: z.boolean().default(false),
|
|
135
|
+
assistant: AssistantConfigSchema.default(defaultAssistant),
|
|
136
|
+
user: UserProfileSchema.default(defaultUser),
|
|
137
|
+
model: ModelConfigSchema,
|
|
138
|
+
gateway: GatewayConfigSchema.default(defaultGateway),
|
|
139
|
+
channels: z
|
|
140
|
+
.object({
|
|
141
|
+
discord: DiscordConfigSchema.default(defaultDiscord),
|
|
142
|
+
slack: SlackConfigSchema.default(defaultSlack),
|
|
143
|
+
cli: CliConfigSchema.default(defaultCli),
|
|
144
|
+
})
|
|
145
|
+
.default({
|
|
146
|
+
discord: defaultDiscord,
|
|
147
|
+
slack: defaultSlack,
|
|
148
|
+
cli: defaultCli,
|
|
149
|
+
}),
|
|
150
|
+
memory: MemoryConfigSchema.default(defaultMemory),
|
|
151
|
+
fileSandbox: FileSandboxConfigSchema.default(defaultFileSandbox),
|
|
152
|
+
plugins: PluginsConfigSchema.default(defaultPlugins),
|
|
153
|
+
service: ServiceConfigSchema,
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=types.js.map
|