@marcopeg/hal 1.0.11

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.
Files changed (106) hide show
  1. package/README.md +655 -0
  2. package/dist/agent/index.d.ts +17 -0
  3. package/dist/agent/index.d.ts.map +1 -0
  4. package/dist/agent/index.js +30 -0
  5. package/dist/agent/index.js.map +1 -0
  6. package/dist/bot/commands/clear.d.ts +7 -0
  7. package/dist/bot/commands/clear.d.ts.map +1 -0
  8. package/dist/bot/commands/clear.js +23 -0
  9. package/dist/bot/commands/clear.js.map +1 -0
  10. package/dist/bot/commands/help.d.ts +3 -0
  11. package/dist/bot/commands/help.d.ts.map +1 -0
  12. package/dist/bot/commands/help.js +16 -0
  13. package/dist/bot/commands/help.js.map +1 -0
  14. package/dist/bot/commands/loader.d.ts +26 -0
  15. package/dist/bot/commands/loader.d.ts.map +1 -0
  16. package/dist/bot/commands/loader.js +206 -0
  17. package/dist/bot/commands/loader.js.map +1 -0
  18. package/dist/bot/commands/start.d.ts +3 -0
  19. package/dist/bot/commands/start.d.ts.map +1 -0
  20. package/dist/bot/commands/start.js +10 -0
  21. package/dist/bot/commands/start.js.map +1 -0
  22. package/dist/bot/commands/watcher.d.ts +11 -0
  23. package/dist/bot/commands/watcher.d.ts.map +1 -0
  24. package/dist/bot/commands/watcher.js +106 -0
  25. package/dist/bot/commands/watcher.js.map +1 -0
  26. package/dist/bot/handlers/document.d.ts +7 -0
  27. package/dist/bot/handlers/document.d.ts.map +1 -0
  28. package/dist/bot/handlers/document.js +128 -0
  29. package/dist/bot/handlers/document.js.map +1 -0
  30. package/dist/bot/handlers/index.d.ts +5 -0
  31. package/dist/bot/handlers/index.d.ts.map +1 -0
  32. package/dist/bot/handlers/index.js +5 -0
  33. package/dist/bot/handlers/index.js.map +1 -0
  34. package/dist/bot/handlers/photo.d.ts +7 -0
  35. package/dist/bot/handlers/photo.d.ts.map +1 -0
  36. package/dist/bot/handlers/photo.js +87 -0
  37. package/dist/bot/handlers/photo.js.map +1 -0
  38. package/dist/bot/handlers/text.d.ts +7 -0
  39. package/dist/bot/handlers/text.d.ts.map +1 -0
  40. package/dist/bot/handlers/text.js +186 -0
  41. package/dist/bot/handlers/text.js.map +1 -0
  42. package/dist/bot/handlers/voice.d.ts +7 -0
  43. package/dist/bot/handlers/voice.d.ts.map +1 -0
  44. package/dist/bot/handlers/voice.js +147 -0
  45. package/dist/bot/handlers/voice.js.map +1 -0
  46. package/dist/bot/middleware/auth.d.ts +7 -0
  47. package/dist/bot/middleware/auth.d.ts.map +1 -0
  48. package/dist/bot/middleware/auth.js +23 -0
  49. package/dist/bot/middleware/auth.js.map +1 -0
  50. package/dist/bot/middleware/rateLimit.d.ts +11 -0
  51. package/dist/bot/middleware/rateLimit.d.ts.map +1 -0
  52. package/dist/bot/middleware/rateLimit.js +49 -0
  53. package/dist/bot/middleware/rateLimit.js.map +1 -0
  54. package/dist/bot.d.ts +11 -0
  55. package/dist/bot.d.ts.map +1 -0
  56. package/dist/bot.js +93 -0
  57. package/dist/bot.js.map +1 -0
  58. package/dist/claude/executor.d.ts +21 -0
  59. package/dist/claude/executor.d.ts.map +1 -0
  60. package/dist/claude/executor.js +185 -0
  61. package/dist/claude/executor.js.map +1 -0
  62. package/dist/claude/parser.d.ts +13 -0
  63. package/dist/claude/parser.d.ts.map +1 -0
  64. package/dist/claude/parser.js +63 -0
  65. package/dist/claude/parser.js.map +1 -0
  66. package/dist/cli.d.ts +3 -0
  67. package/dist/cli.d.ts.map +1 -0
  68. package/dist/cli.js +192 -0
  69. package/dist/cli.js.map +1 -0
  70. package/dist/config.d.ts +216 -0
  71. package/dist/config.d.ts.map +1 -0
  72. package/dist/config.js +396 -0
  73. package/dist/config.js.map +1 -0
  74. package/dist/context/resolver.d.ts +19 -0
  75. package/dist/context/resolver.d.ts.map +1 -0
  76. package/dist/context/resolver.js +171 -0
  77. package/dist/context/resolver.js.map +1 -0
  78. package/dist/index.d.ts +7 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +5 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/logger.d.ts +17 -0
  83. package/dist/logger.d.ts.map +1 -0
  84. package/dist/logger.js +44 -0
  85. package/dist/logger.js.map +1 -0
  86. package/dist/telegram/chunker.d.ts +10 -0
  87. package/dist/telegram/chunker.d.ts.map +1 -0
  88. package/dist/telegram/chunker.js +88 -0
  89. package/dist/telegram/chunker.js.map +1 -0
  90. package/dist/telegram/fileSender.d.ts +8 -0
  91. package/dist/telegram/fileSender.d.ts.map +1 -0
  92. package/dist/telegram/fileSender.js +46 -0
  93. package/dist/telegram/fileSender.js.map +1 -0
  94. package/dist/transcription/whisper.d.ts +11 -0
  95. package/dist/transcription/whisper.d.ts.map +1 -0
  96. package/dist/transcription/whisper.js +58 -0
  97. package/dist/transcription/whisper.js.map +1 -0
  98. package/dist/types.d.ts +22 -0
  99. package/dist/types.d.ts.map +1 -0
  100. package/dist/types.js +2 -0
  101. package/dist/types.js.map +1 -0
  102. package/dist/user/setup.d.ts +26 -0
  103. package/dist/user/setup.d.ts.map +1 -0
  104. package/dist/user/setup.js +73 -0
  105. package/dist/user/setup.js.map +1 -0
  106. package/package.json +56 -0
package/dist/cli.js ADDED
@@ -0,0 +1,192 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync } from "node:fs";
3
+ import { writeFile } from "node:fs/promises";
4
+ import { join, resolve } from "node:path";
5
+ import { startBot } from "./bot.js";
6
+ import { loadMultiConfig, resolveProjectConfig, validateProjects, } from "./config.js";
7
+ import { evaluateBootTimeShells } from "./context/resolver.js";
8
+ import { createProjectLogger, createStartupLogger } from "./logger.js";
9
+ // ─── Config template ──────────────────────────────────────────────────────────
10
+ const CONFIG_TEMPLATE = `{
11
+ "globals": {
12
+ "claude": {
13
+ "command": "claude"
14
+ },
15
+ "logging": {
16
+ "level": "info",
17
+ "flow": true,
18
+ "persist": false
19
+ },
20
+ "rateLimit": {
21
+ "max": 10,
22
+ "windowMs": 60000
23
+ },
24
+ "access": {
25
+ "allowedUserIds": []
26
+ }
27
+ },
28
+ "projects": [
29
+ {
30
+ "name": "my-project",
31
+ "cwd": ".",
32
+ "telegram": {
33
+ "botToken": "YOUR_BOT_TOKEN_HERE"
34
+ },
35
+ "access": {
36
+ "allowedUserIds": []
37
+ }
38
+ }
39
+ ]
40
+ }
41
+ `;
42
+ function showHelp() {
43
+ console.log(`
44
+ HAL - Claude Code Personal Assistant for Telegram
45
+
46
+ Usage:
47
+ npx @marcopeg/hal [command] [options]
48
+
49
+ Commands:
50
+ init Create hal.config.json in the working directory
51
+ start Start the bots (default)
52
+
53
+ Options:
54
+ --cwd <path> Directory containing hal.config.json (default: current directory)
55
+ --help, -h Show this help message
56
+
57
+ Examples:
58
+ npx @marcopeg/hal init
59
+ npx @marcopeg/hal init --cwd ./workspace
60
+ npx @marcopeg/hal
61
+ npx @marcopeg/hal --cwd ./workspace
62
+
63
+ Configuration (hal.config.json):
64
+ {
65
+ "globals": {
66
+ "claude": { "command": "claude" },
67
+ "logging": { "level": "info", "flow": true, "persist": false },
68
+ "rateLimit": { "max": 10, "windowMs": 60000 }
69
+ },
70
+ "projects": [
71
+ {
72
+ "name": "my-project",
73
+ "cwd": "./path/to/project",
74
+ "telegram": { "botToken": "your-bot-token" },
75
+ "access": { "allowedUserIds": [123456789] }
76
+ }
77
+ ]
78
+ }
79
+ `);
80
+ }
81
+ function parseArgs() {
82
+ const args = process.argv.slice(2);
83
+ let cwd = process.cwd();
84
+ let command = "start";
85
+ for (let i = 0; i < args.length; i++) {
86
+ const arg = args[i];
87
+ if (arg === "--cwd" && args[i + 1]) {
88
+ cwd = resolve(process.cwd(), args[i + 1]);
89
+ i++;
90
+ }
91
+ else if (arg.startsWith("--cwd=")) {
92
+ cwd = resolve(process.cwd(), arg.slice(6));
93
+ }
94
+ else if (arg === "--help" || arg === "-h") {
95
+ showHelp();
96
+ process.exit(0);
97
+ }
98
+ else if (arg === "init") {
99
+ command = "init";
100
+ }
101
+ else if (arg === "start") {
102
+ command = "start";
103
+ }
104
+ }
105
+ return { command, cwd };
106
+ }
107
+ // ─── init command ─────────────────────────────────────────────────────────────
108
+ async function runInit(cwd) {
109
+ const configPath = join(cwd, "hal.config.json");
110
+ if (existsSync(configPath)) {
111
+ console.error(`Error: hal.config.json already exists in ${cwd}`);
112
+ process.exit(1);
113
+ }
114
+ await writeFile(configPath, CONFIG_TEMPLATE, "utf-8");
115
+ console.log(`Created hal.config.json in ${cwd}`);
116
+ console.log(`\nNext steps:`);
117
+ console.log(`1. Edit hal.config.json and set your Telegram bot token in projects[0].telegram.botToken`);
118
+ console.log(`2. Set the project cwd to the folder Claude should work in`);
119
+ console.log(`3. Add allowed user IDs to the "allowedUserIds" array`);
120
+ console.log(`4. Run: npx @marcopeg/hal --cwd ${cwd}`);
121
+ process.exit(0);
122
+ }
123
+ // ─── start command ────────────────────────────────────────────────────────────
124
+ async function runStart(configDir) {
125
+ const startupLogger = createStartupLogger();
126
+ startupLogger.info({ configDir }, "Loading configuration");
127
+ // Load and validate the multi-project config
128
+ const { config: multiConfig, loadedFiles } = loadMultiConfig(configDir);
129
+ const globals = multiConfig.globals ?? {};
130
+ // Resolve all project configs
131
+ const rootContext = multiConfig.context;
132
+ const resolvedProjects = multiConfig.projects.map((project) => resolveProjectConfig(project, globals, configDir, rootContext));
133
+ // Boot-time validation (unique cwds, tokens, names)
134
+ validateProjects(resolvedProjects);
135
+ // Boot-time sourcing log
136
+ const sourceLines = loadedFiles.map((f, i) => {
137
+ const isLocal = f.endsWith("hal.config.local.json");
138
+ const suffix = isLocal ? " [local override]" : "";
139
+ return ` ${i + 1}. ${f}${suffix}`;
140
+ });
141
+ sourceLines.push(" env: process.env (bash context, last resort)");
142
+ startupLogger.info(`Configuration sourced:\n${sourceLines.join("\n")}`);
143
+ startupLogger.info({ count: resolvedProjects.length }, "Configuration loaded");
144
+ // Build project contexts (evaluate boot-time #{} shell commands per project)
145
+ const contexts = resolvedProjects.map((config) => {
146
+ const logger = createProjectLogger(config);
147
+ const shellCache = config.context
148
+ ? evaluateBootTimeShells(config.context, logger)
149
+ : {};
150
+ return { config, logger, bootContext: { shellCache } };
151
+ });
152
+ // Emit startup notices for flow=false projects
153
+ for (const { config } of contexts) {
154
+ if (!config.logging.flow) {
155
+ startupLogger.info(`Bot "${config.slug}" has terminal logging suppressed.${config.logging.persist ? ` Persisted logs can be read at: ${config.logDir}` : ""}`);
156
+ }
157
+ }
158
+ // Start all bots concurrently — abort all if any fails
159
+ let handles;
160
+ try {
161
+ handles = await Promise.all(contexts.map((ctx) => startBot(ctx)));
162
+ }
163
+ catch (err) {
164
+ startupLogger.error({ error: err instanceof Error ? err.message : String(err) }, "Failed to start one or more bots — aborting");
165
+ process.exit(1);
166
+ }
167
+ startupLogger.info({ count: handles.length }, "All bots running");
168
+ // Graceful shutdown handler
169
+ async function shutdown(signal) {
170
+ startupLogger.info({ signal }, "Received shutdown signal");
171
+ await Promise.all(handles.map((h) => h.stop().catch(() => { })));
172
+ startupLogger.info("All bots stopped");
173
+ process.exit(0);
174
+ }
175
+ process.on("SIGINT", () => shutdown("SIGINT"));
176
+ process.on("SIGTERM", () => shutdown("SIGTERM"));
177
+ }
178
+ // ─── Entry point ──────────────────────────────────────────────────────────────
179
+ async function main() {
180
+ const { command, cwd } = parseArgs();
181
+ if (command === "init") {
182
+ await runInit(cwd);
183
+ }
184
+ else {
185
+ await runStart(cwd);
186
+ }
187
+ }
188
+ main().catch((error) => {
189
+ console.error("Failed to start:", error.message || error);
190
+ process.exit(1);
191
+ });
192
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,216 @@
1
+ import { z } from "zod";
2
+ declare const GlobalsFileSchema: z.ZodOptional<z.ZodObject<{
3
+ access: z.ZodOptional<z.ZodObject<{
4
+ allowedUserIds: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
5
+ }, z.core.$strip>>;
6
+ claude: z.ZodOptional<z.ZodObject<{
7
+ command: z.ZodOptional<z.ZodString>;
8
+ }, z.core.$strip>>;
9
+ logging: z.ZodOptional<z.ZodObject<{
10
+ level: z.ZodOptional<z.ZodEnum<{
11
+ error: "error";
12
+ warn: "warn";
13
+ info: "info";
14
+ debug: "debug";
15
+ }>>;
16
+ flow: z.ZodOptional<z.ZodBoolean>;
17
+ persist: z.ZodOptional<z.ZodBoolean>;
18
+ }, z.core.$strip>>;
19
+ rateLimit: z.ZodOptional<z.ZodObject<{
20
+ max: z.ZodOptional<z.ZodNumber>;
21
+ windowMs: z.ZodOptional<z.ZodNumber>;
22
+ }, z.core.$strip>>;
23
+ transcription: z.ZodOptional<z.ZodObject<{
24
+ model: z.ZodOptional<z.ZodEnum<{
25
+ tiny: "tiny";
26
+ "tiny.en": "tiny.en";
27
+ base: "base";
28
+ "base.en": "base.en";
29
+ small: "small";
30
+ "small.en": "small.en";
31
+ medium: "medium";
32
+ "medium.en": "medium.en";
33
+ "large-v1": "large-v1";
34
+ large: "large";
35
+ "large-v3-turbo": "large-v3-turbo";
36
+ }>>;
37
+ showTranscription: z.ZodOptional<z.ZodBoolean>;
38
+ }, z.core.$strip>>;
39
+ dataDir: z.ZodOptional<z.ZodString>;
40
+ }, z.core.$strip>>;
41
+ declare const ProjectFileSchema: z.ZodObject<{
42
+ name: z.ZodOptional<z.ZodString>;
43
+ cwd: z.ZodString;
44
+ telegram: z.ZodObject<{
45
+ botToken: z.ZodString;
46
+ }, z.core.$strip>;
47
+ access: z.ZodOptional<z.ZodObject<{
48
+ allowedUserIds: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
49
+ }, z.core.$strip>>;
50
+ claude: z.ZodOptional<z.ZodObject<{
51
+ command: z.ZodOptional<z.ZodString>;
52
+ }, z.core.$strip>>;
53
+ logging: z.ZodOptional<z.ZodObject<{
54
+ level: z.ZodOptional<z.ZodEnum<{
55
+ error: "error";
56
+ warn: "warn";
57
+ info: "info";
58
+ debug: "debug";
59
+ }>>;
60
+ flow: z.ZodOptional<z.ZodBoolean>;
61
+ persist: z.ZodOptional<z.ZodBoolean>;
62
+ }, z.core.$strip>>;
63
+ rateLimit: z.ZodOptional<z.ZodObject<{
64
+ max: z.ZodOptional<z.ZodNumber>;
65
+ windowMs: z.ZodOptional<z.ZodNumber>;
66
+ }, z.core.$strip>>;
67
+ transcription: z.ZodOptional<z.ZodObject<{
68
+ model: z.ZodOptional<z.ZodEnum<{
69
+ tiny: "tiny";
70
+ "tiny.en": "tiny.en";
71
+ base: "base";
72
+ "base.en": "base.en";
73
+ small: "small";
74
+ "small.en": "small.en";
75
+ medium: "medium";
76
+ "medium.en": "medium.en";
77
+ "large-v1": "large-v1";
78
+ large: "large";
79
+ "large-v3-turbo": "large-v3-turbo";
80
+ }>>;
81
+ showTranscription: z.ZodOptional<z.ZodBoolean>;
82
+ }, z.core.$strip>>;
83
+ dataDir: z.ZodOptional<z.ZodString>;
84
+ context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
85
+ }, z.core.$strip>;
86
+ declare const MultiConfigFileSchema: z.ZodObject<{
87
+ globals: z.ZodOptional<z.ZodObject<{
88
+ access: z.ZodOptional<z.ZodObject<{
89
+ allowedUserIds: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
90
+ }, z.core.$strip>>;
91
+ claude: z.ZodOptional<z.ZodObject<{
92
+ command: z.ZodOptional<z.ZodString>;
93
+ }, z.core.$strip>>;
94
+ logging: z.ZodOptional<z.ZodObject<{
95
+ level: z.ZodOptional<z.ZodEnum<{
96
+ error: "error";
97
+ warn: "warn";
98
+ info: "info";
99
+ debug: "debug";
100
+ }>>;
101
+ flow: z.ZodOptional<z.ZodBoolean>;
102
+ persist: z.ZodOptional<z.ZodBoolean>;
103
+ }, z.core.$strip>>;
104
+ rateLimit: z.ZodOptional<z.ZodObject<{
105
+ max: z.ZodOptional<z.ZodNumber>;
106
+ windowMs: z.ZodOptional<z.ZodNumber>;
107
+ }, z.core.$strip>>;
108
+ transcription: z.ZodOptional<z.ZodObject<{
109
+ model: z.ZodOptional<z.ZodEnum<{
110
+ tiny: "tiny";
111
+ "tiny.en": "tiny.en";
112
+ base: "base";
113
+ "base.en": "base.en";
114
+ small: "small";
115
+ "small.en": "small.en";
116
+ medium: "medium";
117
+ "medium.en": "medium.en";
118
+ "large-v1": "large-v1";
119
+ large: "large";
120
+ "large-v3-turbo": "large-v3-turbo";
121
+ }>>;
122
+ showTranscription: z.ZodOptional<z.ZodBoolean>;
123
+ }, z.core.$strip>>;
124
+ dataDir: z.ZodOptional<z.ZodString>;
125
+ }, z.core.$strip>>;
126
+ context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
127
+ projects: z.ZodArray<z.ZodObject<{
128
+ name: z.ZodOptional<z.ZodString>;
129
+ cwd: z.ZodString;
130
+ telegram: z.ZodObject<{
131
+ botToken: z.ZodString;
132
+ }, z.core.$strip>;
133
+ access: z.ZodOptional<z.ZodObject<{
134
+ allowedUserIds: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
135
+ }, z.core.$strip>>;
136
+ claude: z.ZodOptional<z.ZodObject<{
137
+ command: z.ZodOptional<z.ZodString>;
138
+ }, z.core.$strip>>;
139
+ logging: z.ZodOptional<z.ZodObject<{
140
+ level: z.ZodOptional<z.ZodEnum<{
141
+ error: "error";
142
+ warn: "warn";
143
+ info: "info";
144
+ debug: "debug";
145
+ }>>;
146
+ flow: z.ZodOptional<z.ZodBoolean>;
147
+ persist: z.ZodOptional<z.ZodBoolean>;
148
+ }, z.core.$strip>>;
149
+ rateLimit: z.ZodOptional<z.ZodObject<{
150
+ max: z.ZodOptional<z.ZodNumber>;
151
+ windowMs: z.ZodOptional<z.ZodNumber>;
152
+ }, z.core.$strip>>;
153
+ transcription: z.ZodOptional<z.ZodObject<{
154
+ model: z.ZodOptional<z.ZodEnum<{
155
+ tiny: "tiny";
156
+ "tiny.en": "tiny.en";
157
+ base: "base";
158
+ "base.en": "base.en";
159
+ small: "small";
160
+ "small.en": "small.en";
161
+ medium: "medium";
162
+ "medium.en": "medium.en";
163
+ "large-v1": "large-v1";
164
+ large: "large";
165
+ "large-v3-turbo": "large-v3-turbo";
166
+ }>>;
167
+ showTranscription: z.ZodOptional<z.ZodBoolean>;
168
+ }, z.core.$strip>>;
169
+ dataDir: z.ZodOptional<z.ZodString>;
170
+ context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
171
+ }, z.core.$strip>>;
172
+ }, z.core.$strip>;
173
+ type ProjectFileEntry = z.infer<typeof ProjectFileSchema>;
174
+ type GlobalsFile = NonNullable<z.infer<typeof GlobalsFileSchema>>;
175
+ type MultiConfigFile = z.infer<typeof MultiConfigFileSchema>;
176
+ export interface ResolvedProjectConfig {
177
+ slug: string;
178
+ name: string | undefined;
179
+ cwd: string;
180
+ configDir: string;
181
+ dataDir: string;
182
+ logDir: string;
183
+ telegram: {
184
+ botToken: string;
185
+ };
186
+ access: {
187
+ allowedUserIds: number[];
188
+ };
189
+ claude: {
190
+ command: string;
191
+ };
192
+ logging: {
193
+ level: string;
194
+ flow: boolean;
195
+ persist: boolean;
196
+ };
197
+ rateLimit: {
198
+ max: number;
199
+ windowMs: number;
200
+ };
201
+ transcription: {
202
+ model: string;
203
+ showTranscription: boolean;
204
+ } | undefined;
205
+ context: Record<string, string> | undefined;
206
+ }
207
+ export interface LoadedConfigResult {
208
+ config: MultiConfigFile;
209
+ loadedFiles: string[];
210
+ }
211
+ export declare function deriveSlug(name: string | undefined, cwd: string): string;
212
+ export declare function resolveProjectConfig(project: ProjectFileEntry, globals: GlobalsFile, configDir: string, rootContext?: Record<string, string>): ResolvedProjectConfig;
213
+ export declare function validateProjects(projects: ResolvedProjectConfig[]): void;
214
+ export declare function loadMultiConfig(configDir: string): LoadedConfigResult;
215
+ export {};
216
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsBxB,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4BV,CAAC;AAId,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgCrB,CAAC;AAIH,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMzB,CAAC;AAiBH,KAAK,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC1D,KAAK,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC;AAClE,KAAK,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAK7D,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,MAAM,EAAE;QAAE,cAAc,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACrC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5D,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,aAAa,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAC;IACzE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC7C;AAID,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAID,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CASxE;AAwBD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,qBAAqB,CA2DvB;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAgCxE;AA0MD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,CA0ErE"}