harubashi 0.1.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/LICENSE +201 -0
- package/README.md +293 -0
- package/README.ru.md +293 -0
- package/dist/agent/agent.module.d.ts +2 -0
- package/dist/agent/agent.module.js +34 -0
- package/dist/agent/agent.module.js.map +1 -0
- package/dist/agent/agent.processor.d.ts +31 -0
- package/dist/agent/agent.processor.js +266 -0
- package/dist/agent/agent.processor.js.map +1 -0
- package/dist/agent/command-guard.service.d.ts +10 -0
- package/dist/agent/command-guard.service.js +48 -0
- package/dist/agent/command-guard.service.js.map +1 -0
- package/dist/agent/interruption.service.d.ts +11 -0
- package/dist/agent/interruption.service.js +52 -0
- package/dist/agent/interruption.service.js.map +1 -0
- package/dist/agent/system-executor.service.d.ts +32 -0
- package/dist/agent/system-executor.service.js +200 -0
- package/dist/agent/system-executor.service.js.map +1 -0
- package/dist/app.module.d.ts +2 -0
- package/dist/app.module.js +38 -0
- package/dist/app.module.js.map +1 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +137 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +141 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/config.command.d.ts +2 -0
- package/dist/commands/config.command.js +83 -0
- package/dist/commands/config.command.js.map +1 -0
- package/dist/commands/logs.command.d.ts +5 -0
- package/dist/commands/logs.command.js +130 -0
- package/dist/commands/logs.command.js.map +1 -0
- package/dist/commands/profile.command.d.ts +5 -0
- package/dist/commands/profile.command.js +293 -0
- package/dist/commands/profile.command.js.map +1 -0
- package/dist/commands/setup.command.d.ts +1 -0
- package/dist/commands/setup.command.js +94 -0
- package/dist/commands/setup.command.js.map +1 -0
- package/dist/commands/setup.helpers.d.ts +34 -0
- package/dist/commands/setup.helpers.js +265 -0
- package/dist/commands/setup.helpers.js.map +1 -0
- package/dist/commands/skills.command.d.ts +2 -0
- package/dist/commands/skills.command.js +111 -0
- package/dist/commands/skills.command.js.map +1 -0
- package/dist/common/adapters/cli-interaction.adapter.d.ts +8 -0
- package/dist/common/adapters/cli-interaction.adapter.js +67 -0
- package/dist/common/adapters/cli-interaction.adapter.js.map +1 -0
- package/dist/common/adapters/interaction-adapter.interface.d.ts +6 -0
- package/dist/common/adapters/interaction-adapter.interface.js +10 -0
- package/dist/common/adapters/interaction-adapter.interface.js.map +1 -0
- package/dist/common/constants.d.ts +3 -0
- package/dist/common/constants.js +7 -0
- package/dist/common/constants.js.map +1 -0
- package/dist/common/index.d.ts +4 -0
- package/dist/common/index.js +21 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/logger.d.ts +9 -0
- package/dist/common/logger.js +87 -0
- package/dist/common/logger.js.map +1 -0
- package/dist/common/paths.d.ts +12 -0
- package/dist/common/paths.js +28 -0
- package/dist/common/paths.js.map +1 -0
- package/dist/common/types/message.types.d.ts +48 -0
- package/dist/common/types/message.types.js +18 -0
- package/dist/common/types/message.types.js.map +1 -0
- package/dist/common/types/tool.types.d.ts +20 -0
- package/dist/common/types/tool.types.js +3 -0
- package/dist/common/types/tool.types.js.map +1 -0
- package/dist/common/utils/type-guards.d.ts +8 -0
- package/dist/common/utils/type-guards.js +46 -0
- package/dist/common/utils/type-guards.js.map +1 -0
- package/dist/config/config-loader.d.ts +6 -0
- package/dist/config/config-loader.js +90 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config.module.d.ts +2 -0
- package/dist/config/config.module.js +28 -0
- package/dist/config/config.module.js.map +1 -0
- package/dist/config/config.types.d.ts +55 -0
- package/dist/config/config.types.js +21 -0
- package/dist/config/config.types.js.map +1 -0
- package/dist/daemon.d.ts +2 -0
- package/dist/daemon.js +28 -0
- package/dist/daemon.js.map +1 -0
- package/dist/llm/anthropic/anthropic.provider.d.ts +15 -0
- package/dist/llm/anthropic/anthropic.provider.js +162 -0
- package/dist/llm/anthropic/anthropic.provider.js.map +1 -0
- package/dist/llm/google/google.provider.d.ts +14 -0
- package/dist/llm/google/google.provider.js +189 -0
- package/dist/llm/google/google.provider.js.map +1 -0
- package/dist/llm/llm-factory.service.d.ts +24 -0
- package/dist/llm/llm-factory.service.js +76 -0
- package/dist/llm/llm-factory.service.js.map +1 -0
- package/dist/llm/llm.interface.d.ts +19 -0
- package/dist/llm/llm.interface.js +5 -0
- package/dist/llm/llm.interface.js.map +1 -0
- package/dist/llm/llm.module.d.ts +2 -0
- package/dist/llm/llm.module.js +34 -0
- package/dist/llm/llm.module.js.map +1 -0
- package/dist/llm/nvidia/nvidia.provider.d.ts +11 -0
- package/dist/llm/nvidia/nvidia.provider.js +49 -0
- package/dist/llm/nvidia/nvidia.provider.js.map +1 -0
- package/dist/llm/openai/openai.provider.d.ts +9 -0
- package/dist/llm/openai/openai.provider.js +35 -0
- package/dist/llm/openai/openai.provider.js.map +1 -0
- package/dist/llm/openai-compatible/openai-compatible.helper.d.ts +4 -0
- package/dist/llm/openai-compatible/openai-compatible.helper.js +155 -0
- package/dist/llm/openai-compatible/openai-compatible.helper.js.map +1 -0
- package/dist/llm/proxy/proxy.provider.d.ts +9 -0
- package/dist/llm/proxy/proxy.provider.js +35 -0
- package/dist/llm/proxy/proxy.provider.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +14 -0
- package/dist/main.js.map +1 -0
- package/dist/prisma/prisma.module.d.ts +2 -0
- package/dist/prisma/prisma.module.js +22 -0
- package/dist/prisma/prisma.module.js.map +1 -0
- package/dist/prisma/prisma.service.d.ts +9 -0
- package/dist/prisma/prisma.service.js +40 -0
- package/dist/prisma/prisma.service.js.map +1 -0
- package/dist/sessions/sessions.module.d.ts +2 -0
- package/dist/sessions/sessions.module.js +23 -0
- package/dist/sessions/sessions.module.js.map +1 -0
- package/dist/sessions/sessions.service.d.ts +21 -0
- package/dist/sessions/sessions.service.js +82 -0
- package/dist/sessions/sessions.service.js.map +1 -0
- package/dist/skills/definitions/directory_explorer.md +69 -0
- package/dist/skills/definitions/execute_command.md +27 -0
- package/dist/skills/definitions/git_manager.md +98 -0
- package/dist/skills/definitions/read_file.md +25 -0
- package/dist/skills/skills-bundle.d.ts +7 -0
- package/dist/skills/skills-bundle.js +27 -0
- package/dist/skills/skills-bundle.js.map +1 -0
- package/dist/skills/skills-parser.d.ts +8 -0
- package/dist/skills/skills-parser.js +67 -0
- package/dist/skills/skills-parser.js.map +1 -0
- package/dist/skills/skills.module.d.ts +2 -0
- package/dist/skills/skills.module.js +22 -0
- package/dist/skills/skills.module.js.map +1 -0
- package/dist/skills/skills.service.d.ts +22 -0
- package/dist/skills/skills.service.js +150 -0
- package/dist/skills/skills.service.js.map +1 -0
- package/dist/skills/skills.types.d.ts +16 -0
- package/dist/skills/skills.types.js +3 -0
- package/dist/skills/skills.types.js.map +1 -0
- package/dist/soul/prompts/core.md +28 -0
- package/dist/soul/prompts/rules.md +40 -0
- package/dist/soul/prompts/runtime.md +13 -0
- package/dist/soul/prompts/voice.md +45 -0
- package/dist/soul/soul.module.d.ts +2 -0
- package/dist/soul/soul.module.js +22 -0
- package/dist/soul/soul.module.js.map +1 -0
- package/dist/soul/soul.service.d.ts +22 -0
- package/dist/soul/soul.service.js +89 -0
- package/dist/soul/soul.service.js.map +1 -0
- package/dist/telegram/pairing.service.d.ts +11 -0
- package/dist/telegram/pairing.service.js +81 -0
- package/dist/telegram/pairing.service.js.map +1 -0
- package/dist/telegram/telegram-interaction.adapter.d.ts +16 -0
- package/dist/telegram/telegram-interaction.adapter.js +54 -0
- package/dist/telegram/telegram-interaction.adapter.js.map +1 -0
- package/dist/telegram/telegram.module.d.ts +2 -0
- package/dist/telegram/telegram.module.js +25 -0
- package/dist/telegram/telegram.module.js.map +1 -0
- package/dist/telegram/telegram.service.d.ts +28 -0
- package/dist/telegram/telegram.service.js +255 -0
- package/dist/telegram/telegram.service.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +68 -0
- package/prisma/migrations/20260403134611_init/migration.sql +40 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +74 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PROVIDERS = void 0;
|
|
4
|
+
exports.prettyProviderName = prettyProviderName;
|
|
5
|
+
exports.askSelectOrCreateProfile = askSelectOrCreateProfile;
|
|
6
|
+
exports.askProfileName = askProfileName;
|
|
7
|
+
exports.askProvider = askProvider;
|
|
8
|
+
exports.askProviderCredentials = askProviderCredentials;
|
|
9
|
+
exports.askModel = askModel;
|
|
10
|
+
exports.askTelegram = askTelegram;
|
|
11
|
+
exports.databaseExists = databaseExists;
|
|
12
|
+
exports.createDirectories = createDirectories;
|
|
13
|
+
exports.copyBundledSkills = copyBundledSkills;
|
|
14
|
+
exports.initializeDatabase = initializeDatabase;
|
|
15
|
+
exports.upsertDefaultUser = upsertDefaultUser;
|
|
16
|
+
exports.printStep = printStep;
|
|
17
|
+
const fs = require("fs");
|
|
18
|
+
const child_process_1 = require("child_process");
|
|
19
|
+
const prompts_1 = require("@inquirer/prompts");
|
|
20
|
+
const paths_1 = require("../common/paths");
|
|
21
|
+
const constants_1 = require("../common/constants");
|
|
22
|
+
const skills_bundle_1 = require("../skills/skills-bundle");
|
|
23
|
+
exports.PROVIDERS = [
|
|
24
|
+
{
|
|
25
|
+
value: 'nvidia',
|
|
26
|
+
label: 'NVIDIA NIM',
|
|
27
|
+
comingSoon: false,
|
|
28
|
+
models: ['meta/llama-3.1-70b-instruct', 'meta/llama-3.1-405b-instruct'],
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
value: 'google',
|
|
32
|
+
label: 'Google Gemini (AI Studio)',
|
|
33
|
+
comingSoon: false,
|
|
34
|
+
models: ['gemini-1.5-pro', 'gemini-1.5-flash', 'gemini-2.5-flash'],
|
|
35
|
+
},
|
|
36
|
+
{ value: 'anthropic', label: 'Anthropic', comingSoon: true, models: null },
|
|
37
|
+
{ value: 'openai', label: 'OpenAI', comingSoon: true, models: null },
|
|
38
|
+
{ value: 'proxy', label: 'OpenAI-compatible Proxy', comingSoon: true, models: null },
|
|
39
|
+
];
|
|
40
|
+
function prettyProviderName(name) {
|
|
41
|
+
return exports.PROVIDERS.find((p) => p.value === name)?.label || name;
|
|
42
|
+
}
|
|
43
|
+
const CUSTOM_MODEL_SENTINEL = '__custom__';
|
|
44
|
+
async function askSelectOrCreateProfile(config) {
|
|
45
|
+
const CREATE = '__create__';
|
|
46
|
+
const names = Object.keys(config.profiles);
|
|
47
|
+
const choices = [
|
|
48
|
+
{
|
|
49
|
+
name: '\x1b[32m[+] Create new profile...\x1b[0m',
|
|
50
|
+
value: CREATE,
|
|
51
|
+
},
|
|
52
|
+
...names.map((n) => {
|
|
53
|
+
const profile = config.profiles[n];
|
|
54
|
+
const provider = profile.llmProvider;
|
|
55
|
+
const block = profile.providers[provider];
|
|
56
|
+
const model = block?.model || '(no model)';
|
|
57
|
+
const isActive = n === config.activeProfile;
|
|
58
|
+
const activeTag = isActive ? ' \x1b[90m(active)\x1b[0m' : '';
|
|
59
|
+
return {
|
|
60
|
+
name: `${n}${activeTag} \x1b[90m· ${provider} · ${model}\x1b[0m`,
|
|
61
|
+
value: n,
|
|
62
|
+
};
|
|
63
|
+
}),
|
|
64
|
+
];
|
|
65
|
+
const selected = await (0, prompts_1.select)({
|
|
66
|
+
message: 'Select profile to configure:',
|
|
67
|
+
default: config.activeProfile,
|
|
68
|
+
choices,
|
|
69
|
+
});
|
|
70
|
+
return selected === CREATE
|
|
71
|
+
? { mode: 'create' }
|
|
72
|
+
: { mode: 'edit', name: selected };
|
|
73
|
+
}
|
|
74
|
+
async function askProfileName(defaults) {
|
|
75
|
+
return (0, prompts_1.input)({
|
|
76
|
+
message: 'Profile name:',
|
|
77
|
+
default: defaults?.name ?? 'default',
|
|
78
|
+
validate: (v) => {
|
|
79
|
+
if (!/^[a-z0-9_-]+$/i.test(v)) {
|
|
80
|
+
return 'Use only letters, numbers, dashes, underscores';
|
|
81
|
+
}
|
|
82
|
+
if (defaults?.forbidden?.has(v)) {
|
|
83
|
+
return `Profile "${v}" already exists`;
|
|
84
|
+
}
|
|
85
|
+
return true;
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
async function askProvider(defaults) {
|
|
90
|
+
return (0, prompts_1.select)({
|
|
91
|
+
message: 'Choose your LLM provider:',
|
|
92
|
+
default: defaults?.provider,
|
|
93
|
+
choices: exports.PROVIDERS.map((p) => ({
|
|
94
|
+
name: p.comingSoon ? `${p.label} \x1b[33m(coming soon)\x1b[0m` : p.label,
|
|
95
|
+
value: p.value,
|
|
96
|
+
})),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
async function askProviderCredentials(name, defaults) {
|
|
100
|
+
if (name === 'proxy') {
|
|
101
|
+
const prev = defaults?.proxy;
|
|
102
|
+
if (prev?.apiKey) {
|
|
103
|
+
console.log('\x1b[90m ↪ Press Enter to keep the existing API key.\x1b[0m');
|
|
104
|
+
}
|
|
105
|
+
const baseURL = await (0, prompts_1.input)({
|
|
106
|
+
message: 'Proxy Base URL:',
|
|
107
|
+
default: prev?.baseURL,
|
|
108
|
+
validate: (v) => /^https?:\/\//.test(v) || 'Must be a valid http(s) URL',
|
|
109
|
+
});
|
|
110
|
+
const apiKey = await (0, prompts_1.password)({
|
|
111
|
+
message: 'Proxy API Key:',
|
|
112
|
+
mask: '*',
|
|
113
|
+
...(prev?.apiKey ? { default: prev.apiKey } : {}),
|
|
114
|
+
});
|
|
115
|
+
return { proxy: { baseURL, apiKey } };
|
|
116
|
+
}
|
|
117
|
+
const prev = defaults?.[name];
|
|
118
|
+
if (prev?.apiKey) {
|
|
119
|
+
console.log('\x1b[90m ↪ Press Enter to keep the existing API key.\x1b[0m');
|
|
120
|
+
}
|
|
121
|
+
const apiKey = await (0, prompts_1.password)({
|
|
122
|
+
message: `${prettyProviderName(name)} API Key:`,
|
|
123
|
+
mask: '*',
|
|
124
|
+
...(prev?.apiKey ? { default: prev.apiKey } : {}),
|
|
125
|
+
});
|
|
126
|
+
return { [name]: { apiKey } };
|
|
127
|
+
}
|
|
128
|
+
async function askModel(name, defaults) {
|
|
129
|
+
const meta = exports.PROVIDERS.find((p) => p.value === name);
|
|
130
|
+
const curated = meta.models;
|
|
131
|
+
if (!curated) {
|
|
132
|
+
return (0, prompts_1.input)({
|
|
133
|
+
message: `${prettyProviderName(name)} model:`,
|
|
134
|
+
default: defaults?.model,
|
|
135
|
+
validate: (v) => v.trim().length > 0 || 'Model id required',
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
const defaultModel = defaults?.model;
|
|
139
|
+
let preselected;
|
|
140
|
+
if (defaultModel && curated.includes(defaultModel)) {
|
|
141
|
+
preselected = defaultModel;
|
|
142
|
+
}
|
|
143
|
+
else if (defaultModel) {
|
|
144
|
+
preselected = CUSTOM_MODEL_SENTINEL;
|
|
145
|
+
}
|
|
146
|
+
const choice = await (0, prompts_1.select)({
|
|
147
|
+
message: `${prettyProviderName(name)} model:`,
|
|
148
|
+
default: preselected,
|
|
149
|
+
choices: [
|
|
150
|
+
...curated.map((m) => ({ name: m, value: m })),
|
|
151
|
+
{ name: 'Custom...', value: CUSTOM_MODEL_SENTINEL },
|
|
152
|
+
],
|
|
153
|
+
});
|
|
154
|
+
if (choice !== CUSTOM_MODEL_SENTINEL) {
|
|
155
|
+
return choice;
|
|
156
|
+
}
|
|
157
|
+
return (0, prompts_1.input)({
|
|
158
|
+
message: 'Custom model id:',
|
|
159
|
+
default: defaultModel && !curated.includes(defaultModel) ? defaultModel : undefined,
|
|
160
|
+
validate: (v) => v.trim().length > 0 || 'Model id required',
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
async function askTelegram(defaults) {
|
|
164
|
+
const wantsTelegram = await (0, prompts_1.confirm)({
|
|
165
|
+
message: 'Set up Telegram right now?',
|
|
166
|
+
default: defaults?.enabled === true,
|
|
167
|
+
});
|
|
168
|
+
if (!wantsTelegram) {
|
|
169
|
+
console.log('\x1b[90m ↪ Skipped. You can configure it later by editing config.yaml.\x1b[0m');
|
|
170
|
+
return undefined;
|
|
171
|
+
}
|
|
172
|
+
if (defaults?.botToken) {
|
|
173
|
+
console.log('\x1b[90m ↪ Press Enter to keep the existing bot token.\x1b[0m');
|
|
174
|
+
}
|
|
175
|
+
const botToken = await (0, prompts_1.password)({
|
|
176
|
+
message: 'Telegram Bot Token:',
|
|
177
|
+
mask: '*',
|
|
178
|
+
...(defaults?.botToken ? { default: defaults.botToken } : {}),
|
|
179
|
+
});
|
|
180
|
+
return { enabled: true, botToken };
|
|
181
|
+
}
|
|
182
|
+
function databaseExists(profileName) {
|
|
183
|
+
return fs.existsSync(paths_1.HarubashiPaths.databaseFile(profileName));
|
|
184
|
+
}
|
|
185
|
+
function createDirectories() {
|
|
186
|
+
fs.mkdirSync(paths_1.HarubashiPaths.databasesDir, { recursive: true });
|
|
187
|
+
fs.mkdirSync(paths_1.HarubashiPaths.skillsDir, { recursive: true });
|
|
188
|
+
fs.mkdirSync(paths_1.HarubashiPaths.logsDir, { recursive: true });
|
|
189
|
+
console.log(` \x1b[32m✓\x1b[0m Created ${paths_1.HarubashiPaths.root}`);
|
|
190
|
+
}
|
|
191
|
+
function copyBundledSkills() {
|
|
192
|
+
const result = (0, skills_bundle_1.copyBundledSkillsTo)(paths_1.HarubashiPaths.skillsDir);
|
|
193
|
+
if (result.bundleMissing) {
|
|
194
|
+
console.log(` \x1b[33m⚠\x1b[0m No bundled skills found at ${result.src}. Skipping.`);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
if (result.added.length > 0 && result.kept.length === 0) {
|
|
198
|
+
console.log(` \x1b[32m✓\x1b[0m Installed ${result.added.length} skill(s) → ${paths_1.HarubashiPaths.skillsDir}`);
|
|
199
|
+
}
|
|
200
|
+
else if (result.added.length > 0) {
|
|
201
|
+
console.log(` \x1b[32m✓\x1b[0m Added ${result.added.length} new skill(s) ` +
|
|
202
|
+
`\x1b[90m(kept ${result.kept.length} existing)\x1b[0m → ${paths_1.HarubashiPaths.skillsDir}`);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
console.log(` \x1b[90m↪\x1b[0m All ${result.kept.length} bundled skill(s) already present in ${paths_1.HarubashiPaths.skillsDir}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
async function initializeDatabase(profileName) {
|
|
209
|
+
const schemaPath = paths_1.HarubashiPaths.bundledSchemaPath();
|
|
210
|
+
const dbUrl = paths_1.HarubashiPaths.databaseUrl(profileName);
|
|
211
|
+
if (!fs.existsSync(schemaPath)) {
|
|
212
|
+
throw new Error(`Bundled Prisma schema not found at ${schemaPath}. ` +
|
|
213
|
+
`Did you forget to run \`npm run build\`?`);
|
|
214
|
+
}
|
|
215
|
+
console.log(` \x1b[90m↪ prisma db push (schema: ${schemaPath})\x1b[0m`);
|
|
216
|
+
await new Promise((resolve, reject) => {
|
|
217
|
+
const child = (0, child_process_1.spawn)('npx', [
|
|
218
|
+
'prisma',
|
|
219
|
+
'db',
|
|
220
|
+
'push',
|
|
221
|
+
'--schema',
|
|
222
|
+
schemaPath,
|
|
223
|
+
'--skip-generate',
|
|
224
|
+
'--accept-data-loss',
|
|
225
|
+
], {
|
|
226
|
+
env: { ...process.env, DATABASE_URL: dbUrl },
|
|
227
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
228
|
+
shell: true,
|
|
229
|
+
});
|
|
230
|
+
let stderr = '';
|
|
231
|
+
child.stderr?.on('data', (chunk) => (stderr += chunk.toString()));
|
|
232
|
+
child.stdout?.on('data', () => {
|
|
233
|
+
});
|
|
234
|
+
child.on('error', reject);
|
|
235
|
+
child.on('close', (code) => {
|
|
236
|
+
if (code === 0) {
|
|
237
|
+
resolve();
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
reject(new Error(`prisma db push failed with exit code ${code}\n${stderr.trim()}`));
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
console.log(` \x1b[32m✓\x1b[0m Created database at ${paths_1.HarubashiPaths.databaseFile(profileName)}`);
|
|
245
|
+
}
|
|
246
|
+
async function upsertDefaultUser(profileName) {
|
|
247
|
+
const { PrismaClient } = await Promise.resolve().then(() => require('@prisma/client'));
|
|
248
|
+
const url = paths_1.HarubashiPaths.databaseUrl(profileName);
|
|
249
|
+
const prisma = new PrismaClient({ datasources: { db: { url } } });
|
|
250
|
+
try {
|
|
251
|
+
await prisma.user.upsert({
|
|
252
|
+
where: { id: constants_1.DEFAULT_USER_ID },
|
|
253
|
+
update: { name: constants_1.DEFAULT_USER_NAME },
|
|
254
|
+
create: { id: constants_1.DEFAULT_USER_ID, name: constants_1.DEFAULT_USER_NAME },
|
|
255
|
+
});
|
|
256
|
+
console.log(` \x1b[32m✓\x1b[0m Upserted default user "${constants_1.DEFAULT_USER_NAME}"`);
|
|
257
|
+
}
|
|
258
|
+
finally {
|
|
259
|
+
await prisma.$disconnect();
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
function printStep(n, title) {
|
|
263
|
+
console.log(`\n\x1b[36m── Step ${n}: ${title} ──────────────────────────\x1b[0m`);
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=setup.helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.helpers.js","sourceRoot":"","sources":["../../src/commands/setup.helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runSkillsList = runSkillsList;
|
|
4
|
+
exports.runSkillsOpen = runSkillsOpen;
|
|
5
|
+
const child_process_1 = require("child_process");
|
|
6
|
+
const fs = require("fs");
|
|
7
|
+
const paths_1 = require("../common/paths");
|
|
8
|
+
const skills_parser_1 = require("../skills/skills-parser");
|
|
9
|
+
const skills_bundle_1 = require("../skills/skills-bundle");
|
|
10
|
+
function runSkillsList() {
|
|
11
|
+
const dir = paths_1.HarubashiPaths.skillsDir;
|
|
12
|
+
const copy = (0, skills_bundle_1.copyBundledSkillsTo)(dir);
|
|
13
|
+
if (!fs.existsSync(dir)) {
|
|
14
|
+
printEmpty('directory does not exist');
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const skills = (0, skills_parser_1.loadAllSkillFiles)(dir);
|
|
18
|
+
if (skills.length === 0) {
|
|
19
|
+
printEmpty('directory is empty');
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const tools = skills.filter((s) => s.tool);
|
|
23
|
+
const guidance = skills.filter((s) => !s.tool);
|
|
24
|
+
console.log();
|
|
25
|
+
console.log(`\x1b[36m── Skills (in ${dir}) ──\x1b[0m`);
|
|
26
|
+
if (copy.added.length > 0) {
|
|
27
|
+
console.log(` \x1b[32m+ added ${copy.added.length} new bundled skill(s):\x1b[0m \x1b[90m${copy.added.join(', ')}\x1b[0m`);
|
|
28
|
+
}
|
|
29
|
+
console.log();
|
|
30
|
+
if (tools.length > 0) {
|
|
31
|
+
console.log(` \x1b[32mTools (${tools.length}):\x1b[0m`);
|
|
32
|
+
printSection(tools);
|
|
33
|
+
console.log();
|
|
34
|
+
}
|
|
35
|
+
if (guidance.length > 0) {
|
|
36
|
+
console.log(` \x1b[33mGuidance (${guidance.length}):\x1b[0m`);
|
|
37
|
+
printSection(guidance);
|
|
38
|
+
console.log();
|
|
39
|
+
}
|
|
40
|
+
console.log('\x1b[36m────────────────────────────────────────────────────\x1b[0m');
|
|
41
|
+
console.log();
|
|
42
|
+
}
|
|
43
|
+
function printSection(skills) {
|
|
44
|
+
const nameWidth = Math.max(...skills.map((s) => s.name.length));
|
|
45
|
+
const termWidth = process.stdout.columns || 100;
|
|
46
|
+
const descBudget = Math.max(20, termWidth - 4 - nameWidth - 2 - 1);
|
|
47
|
+
for (const skill of skills) {
|
|
48
|
+
const desc = describe(skill);
|
|
49
|
+
const truncated = desc.length > descBudget ? desc.slice(0, descBudget - 1) + '…' : desc;
|
|
50
|
+
console.log(` \x1b[36m${skill.name.padEnd(nameWidth)}\x1b[0m \x1b[90m${truncated}\x1b[0m`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function describe(skill) {
|
|
54
|
+
if (skill.tool?.description)
|
|
55
|
+
return skill.tool.description;
|
|
56
|
+
const firstLine = skill.instructions
|
|
57
|
+
.split(/\r?\n/)
|
|
58
|
+
.map((l) => l.trim())
|
|
59
|
+
.find((l) => l.length > 0 && !l.startsWith('#'));
|
|
60
|
+
return firstLine || '(no description)';
|
|
61
|
+
}
|
|
62
|
+
function printEmpty(reason) {
|
|
63
|
+
console.log();
|
|
64
|
+
console.log(`\x1b[33m No skills found (${reason}).\x1b[0m`);
|
|
65
|
+
console.log();
|
|
66
|
+
console.log(` \x1b[90mSkills directory: ${paths_1.HarubashiPaths.skillsDir}\x1b[0m`);
|
|
67
|
+
console.log();
|
|
68
|
+
console.log('\x1b[90m Run setup to install bundled skills:\x1b[0m');
|
|
69
|
+
console.log(' \x1b[32m$\x1b[0m harubashi setup');
|
|
70
|
+
console.log();
|
|
71
|
+
}
|
|
72
|
+
function runSkillsOpen() {
|
|
73
|
+
const dir = paths_1.HarubashiPaths.skillsDir;
|
|
74
|
+
if (!fs.existsSync(dir)) {
|
|
75
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
76
|
+
}
|
|
77
|
+
const platform = process.platform;
|
|
78
|
+
let command;
|
|
79
|
+
let args;
|
|
80
|
+
if (platform === 'win32') {
|
|
81
|
+
command = 'explorer.exe';
|
|
82
|
+
args = [dir];
|
|
83
|
+
}
|
|
84
|
+
else if (platform === 'darwin') {
|
|
85
|
+
command = 'open';
|
|
86
|
+
args = [dir];
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
command = 'xdg-open';
|
|
90
|
+
args = [dir];
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const child = (0, child_process_1.spawn)(command, args, {
|
|
94
|
+
detached: true,
|
|
95
|
+
stdio: 'ignore',
|
|
96
|
+
});
|
|
97
|
+
child.on('error', () => printFallback(dir));
|
|
98
|
+
child.unref();
|
|
99
|
+
console.log(`\x1b[32m✓\x1b[0m Opening ${dir}`);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
printFallback(dir);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function printFallback(dir) {
|
|
106
|
+
console.log();
|
|
107
|
+
console.log('\x1b[33m Could not auto-open the folder.\x1b[0m');
|
|
108
|
+
console.log(` Path: \x1b[36m${dir}\x1b[0m`);
|
|
109
|
+
console.log();
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=skills.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.command.js","sourceRoot":"","sources":["../../src/commands/skills.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as readline from 'readline';
|
|
2
|
+
import { IInteractionAdapter } from './interaction-adapter.interface';
|
|
3
|
+
export declare class CliInteractionAdapter implements IInteractionAdapter {
|
|
4
|
+
private readonly hostRl?;
|
|
5
|
+
private readonly logger;
|
|
6
|
+
constructor(hostRl?: readline.Interface | undefined);
|
|
7
|
+
askForApproval(command: string): Promise<boolean>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CliInteractionAdapter = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const readline = require("readline");
|
|
6
|
+
class CliInteractionAdapter {
|
|
7
|
+
hostRl;
|
|
8
|
+
logger = new common_1.Logger(CliInteractionAdapter.name);
|
|
9
|
+
constructor(hostRl) {
|
|
10
|
+
this.hostRl = hostRl;
|
|
11
|
+
}
|
|
12
|
+
askForApproval(command) {
|
|
13
|
+
const displayCmd = command.length > 120 ? command.slice(0, 117) + '...' : command;
|
|
14
|
+
const hadHost = !!this.hostRl;
|
|
15
|
+
if (hadHost) {
|
|
16
|
+
this.hostRl.pause();
|
|
17
|
+
this.hostRl.terminal = false;
|
|
18
|
+
}
|
|
19
|
+
return new Promise((resolve) => {
|
|
20
|
+
const rl = readline.createInterface({
|
|
21
|
+
input: process.stdin,
|
|
22
|
+
output: process.stderr,
|
|
23
|
+
terminal: false,
|
|
24
|
+
});
|
|
25
|
+
const writePrompt = () => {
|
|
26
|
+
process.stderr.write(`\n⚠️ [Command Guard] Agent wants to execute:\n` +
|
|
27
|
+
` $ ${displayCmd}\n` +
|
|
28
|
+
` Allow? (y/n): `);
|
|
29
|
+
};
|
|
30
|
+
writePrompt();
|
|
31
|
+
const finish = (approved) => {
|
|
32
|
+
rl.off('line', onLine);
|
|
33
|
+
rl.close();
|
|
34
|
+
if (hadHost) {
|
|
35
|
+
this.hostRl.terminal = true;
|
|
36
|
+
this.hostRl.resume();
|
|
37
|
+
}
|
|
38
|
+
if (approved) {
|
|
39
|
+
this.logger.log(`User approved: ${displayCmd}`);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
this.logger.log(`User rejected: ${displayCmd}`);
|
|
43
|
+
}
|
|
44
|
+
resolve(approved);
|
|
45
|
+
};
|
|
46
|
+
const onLine = (answer) => {
|
|
47
|
+
const normalized = answer.trim().toLowerCase();
|
|
48
|
+
if (normalized === '') {
|
|
49
|
+
writePrompt();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (normalized === 'y' || normalized === 'yes') {
|
|
53
|
+
finish(true);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (normalized === 'n' || normalized === 'no') {
|
|
57
|
+
finish(false);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
process.stderr.write(` Please type "y" to allow or "n" to reject: `);
|
|
61
|
+
};
|
|
62
|
+
rl.on('line', onLine);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.CliInteractionAdapter = CliInteractionAdapter;
|
|
67
|
+
//# sourceMappingURL=cli-interaction.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-interaction.adapter.js","sourceRoot":"","sources":["../../../src/common/adapters/cli-interaction.adapter.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AACxC,qCAAqC;AAkBrC,MAAa,qBAAqB;IAQH;IAPZ,MAAM,GAAG,IAAI,eAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAOjE,YAA6B,MAA2B;QAA3B,WAAM,GAAN,MAAM,CAAqB;IAAG,CAAC;IAE5D,cAAc,CAAC,OAAe;QAC5B,MAAM,UAAU,GACd,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QAGjE,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,MAAO,CAAC,KAAK,EAAE,CAAC;YAEpB,IAAI,CAAC,MAA2C,CAAC,QAAQ,GAAG,KAAK,CAAC;QACrE,CAAC;QAED,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACtC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,GAAG,EAAE;gBACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iDAAiD;oBAC/C,QAAQ,UAAU,IAAI;oBACtB,mBAAmB,CACtB,CAAC;YACJ,CAAC,CAAC;YAEF,WAAW,EAAE,CAAC;YAEd,MAAM,MAAM,GAAG,CAAC,QAAiB,EAAE,EAAE;gBACnC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvB,EAAE,CAAC,KAAK,EAAE,CAAC;gBAEX,IAAI,OAAO,EAAE,CAAC;oBACX,IAAI,CAAC,MAA2C,CAAC,QAAQ,GAAG,IAAI,CAAC;oBAClE,IAAI,CAAC,MAAO,CAAC,MAAM,EAAE,CAAC;gBACxB,CAAC;gBAED,IAAI,QAAQ,EAAE,CAAC;oBACb,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;gBAClD,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;gBAClD,CAAC;gBAED,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC,CAAC;YAEF,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,EAAE;gBAChC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAG/C,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;oBACtB,WAAW,EAAE,CAAC;oBACd,OAAO;gBACT,CAAC;gBAED,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;oBAC/C,MAAM,CAAC,IAAI,CAAC,CAAC;oBACb,OAAO;gBACT,CAAC;gBAED,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;oBAC9C,MAAM,CAAC,KAAK,CAAC,CAAC;oBACd,OAAO;gBACT,CAAC;gBAGD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gDAAgD,CACjD,CAAC;YACJ,CAAC,CAAC;YAEF,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AArFD,sDAqFC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NoopInteractionAdapter = void 0;
|
|
4
|
+
class NoopInteractionAdapter {
|
|
5
|
+
async askForApproval(_command) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
exports.NoopInteractionAdapter = NoopInteractionAdapter;
|
|
10
|
+
//# sourceMappingURL=interaction-adapter.interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction-adapter.interface.js","sourceRoot":"","sources":["../../../src/common/adapters/interaction-adapter.interface.ts"],"names":[],"mappings":";;;AAsBA,MAAa,sBAAsB;IACjC,KAAK,CAAC,cAAc,CAAC,QAAgB;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAJD,wDAIC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_USER_NAME = exports.DEFAULT_USER_ID = exports.DEFAULT_SESSION_ID = void 0;
|
|
4
|
+
exports.DEFAULT_SESSION_ID = 'main';
|
|
5
|
+
exports.DEFAULT_USER_ID = 'default';
|
|
6
|
+
exports.DEFAULT_USER_NAME = 'Harunauts';
|
|
7
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/common/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAAG,MAAM,CAAC;AAC5B,QAAA,eAAe,GAAG,SAAS,CAAC;AAC5B,QAAA,iBAAiB,GAAG,WAAW,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types/message.types"), exports);
|
|
18
|
+
__exportStar(require("./types/tool.types"), exports);
|
|
19
|
+
__exportStar(require("./utils/type-guards"), exports);
|
|
20
|
+
__exportStar(require("./constants"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,qDAAmC;AACnC,sDAAoC;AACpC,8CAA4B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import 'winston-daily-rotate-file';
|
|
2
|
+
import { LoggerService } from '@nestjs/common';
|
|
3
|
+
export interface LoggerOptions {
|
|
4
|
+
appName?: string;
|
|
5
|
+
level?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function createHarubashiLogger(opts?: LoggerOptions): LoggerService;
|
|
8
|
+
export declare function listLogFiles(): string[];
|
|
9
|
+
export declare function latestLogFile(): string | null;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createHarubashiLogger = createHarubashiLogger;
|
|
4
|
+
exports.listLogFiles = listLogFiles;
|
|
5
|
+
exports.latestLogFile = latestLogFile;
|
|
6
|
+
const fs = require("fs");
|
|
7
|
+
const path = require("path");
|
|
8
|
+
const winston = require("winston");
|
|
9
|
+
require("winston-daily-rotate-file");
|
|
10
|
+
const nest_winston_1 = require("nest-winston");
|
|
11
|
+
const paths_1 = require("./paths");
|
|
12
|
+
const SECRET_PATTERNS = [
|
|
13
|
+
{ regex: /(nvapi-)[A-Za-z0-9_\-]{20,}/g, redact: () => 'nvapi-***' },
|
|
14
|
+
{ regex: /(sk-ant-[A-Za-z0-9_\-]{8,})/g, redact: () => 'sk-ant-***' },
|
|
15
|
+
{ regex: /\b(sk-)(?!ant-)[A-Za-z0-9_\-]{20,}/g, redact: () => 'sk-***' },
|
|
16
|
+
{ regex: /\b(AIza)[A-Za-z0-9_\-]{30,}/g, redact: () => 'AIza***' },
|
|
17
|
+
{ regex: /\b\d{6,}:[A-Za-z0-9_-]{30,}\b/g, redact: () => '***BOT_TOKEN***' },
|
|
18
|
+
{ regex: /(Bearer\s+)[A-Za-z0-9._\-]+/gi, redact: () => 'Bearer ***' },
|
|
19
|
+
];
|
|
20
|
+
function maskString(s) {
|
|
21
|
+
let out = s;
|
|
22
|
+
for (const { regex, redact } of SECRET_PATTERNS) {
|
|
23
|
+
out = out.replace(regex, redact);
|
|
24
|
+
}
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
function maskAny(value, depth = 0) {
|
|
28
|
+
if (depth > 6)
|
|
29
|
+
return value;
|
|
30
|
+
if (typeof value === 'string')
|
|
31
|
+
return maskString(value);
|
|
32
|
+
if (Array.isArray(value))
|
|
33
|
+
return value.map((v) => maskAny(v, depth + 1));
|
|
34
|
+
if (value && typeof value === 'object') {
|
|
35
|
+
const out = {};
|
|
36
|
+
for (const [k, v] of Object.entries(value)) {
|
|
37
|
+
out[k] = maskAny(v, depth + 1);
|
|
38
|
+
}
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
const secretMasker = winston.format((info) => {
|
|
44
|
+
for (const key of Object.keys(info)) {
|
|
45
|
+
info[key] = maskAny(info[key]);
|
|
46
|
+
}
|
|
47
|
+
return info;
|
|
48
|
+
});
|
|
49
|
+
function createHarubashiLogger(opts = {}) {
|
|
50
|
+
fs.mkdirSync(paths_1.HarubashiPaths.logsDir, { recursive: true });
|
|
51
|
+
const level = opts.level || process.env.LOG_LEVEL || 'info';
|
|
52
|
+
const appName = opts.appName || 'Harubashi';
|
|
53
|
+
return nest_winston_1.WinstonModule.createLogger({
|
|
54
|
+
level,
|
|
55
|
+
transports: [
|
|
56
|
+
new winston.transports.Console({
|
|
57
|
+
format: winston.format.combine(secretMasker(), winston.format.timestamp(), winston.format.ms(), nest_winston_1.utilities.format.nestLike(appName, {
|
|
58
|
+
colors: true,
|
|
59
|
+
prettyPrint: true,
|
|
60
|
+
})),
|
|
61
|
+
}),
|
|
62
|
+
new winston.transports.DailyRotateFile({
|
|
63
|
+
dirname: paths_1.HarubashiPaths.logsDir,
|
|
64
|
+
filename: 'harubashi-%DATE%.log',
|
|
65
|
+
datePattern: 'YYYY-MM-DD',
|
|
66
|
+
maxFiles: '14d',
|
|
67
|
+
maxSize: '20m',
|
|
68
|
+
zippedArchive: false,
|
|
69
|
+
format: winston.format.combine(secretMasker(), winston.format.timestamp(), winston.format.errors({ stack: true }), winston.format.json()),
|
|
70
|
+
}),
|
|
71
|
+
],
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
function listLogFiles() {
|
|
75
|
+
if (!fs.existsSync(paths_1.HarubashiPaths.logsDir))
|
|
76
|
+
return [];
|
|
77
|
+
const entries = fs.readdirSync(paths_1.HarubashiPaths.logsDir);
|
|
78
|
+
const matches = entries.filter((f) => /^harubashi-\d{4}-\d{2}-\d{2}\.log$/.test(f));
|
|
79
|
+
return matches
|
|
80
|
+
.map((f) => path.join(paths_1.HarubashiPaths.logsDir, f))
|
|
81
|
+
.sort();
|
|
82
|
+
}
|
|
83
|
+
function latestLogFile() {
|
|
84
|
+
const files = listLogFiles();
|
|
85
|
+
return files.length === 0 ? null : files[files.length - 1];
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=logger.js.map
|