hackwriter 0.0.4 → 0.0.6

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 (39) hide show
  1. package/README.md +150 -29
  2. package/dist/cli.js +10 -3
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/setup.d.ts.map +1 -1
  5. package/dist/commands/setup.js +69 -119
  6. package/dist/commands/setup.js.map +1 -1
  7. package/dist/config/AnthropicDiscovery.d.ts +6 -0
  8. package/dist/config/AnthropicDiscovery.d.ts.map +1 -0
  9. package/dist/config/AnthropicDiscovery.js +52 -0
  10. package/dist/config/AnthropicDiscovery.js.map +1 -0
  11. package/dist/config/ConfigurationLoader.d.ts +0 -1
  12. package/dist/config/ConfigurationLoader.d.ts.map +1 -1
  13. package/dist/config/ConfigurationLoader.js +51 -26
  14. package/dist/config/ConfigurationLoader.js.map +1 -1
  15. package/dist/config/OllamaDiscovery.d.ts +6 -0
  16. package/dist/config/OllamaDiscovery.d.ts.map +1 -0
  17. package/dist/config/OllamaDiscovery.js +31 -0
  18. package/dist/config/OllamaDiscovery.js.map +1 -0
  19. package/dist/config/OpenAIDiscovery.d.ts +6 -0
  20. package/dist/config/OpenAIDiscovery.d.ts.map +1 -0
  21. package/dist/config/OpenAIDiscovery.js +74 -0
  22. package/dist/config/OpenAIDiscovery.js.map +1 -0
  23. package/dist/config/ProviderDiscovery.d.ts +5 -0
  24. package/dist/config/ProviderDiscovery.d.ts.map +1 -0
  25. package/dist/config/ProviderDiscovery.js +94 -0
  26. package/dist/config/ProviderDiscovery.js.map +1 -0
  27. package/dist/config/ProviderRegistry.d.ts +16 -0
  28. package/dist/config/ProviderRegistry.d.ts.map +1 -0
  29. package/dist/config/ProviderRegistry.js +56 -0
  30. package/dist/config/ProviderRegistry.js.map +1 -0
  31. package/dist/ui/shell/CommandRegistry.d.ts +5 -3
  32. package/dist/ui/shell/CommandRegistry.d.ts.map +1 -1
  33. package/dist/ui/shell/CommandRegistry.js +103 -24
  34. package/dist/ui/shell/CommandRegistry.js.map +1 -1
  35. package/dist/ui/shell/InteractiveShell.d.ts +18 -2
  36. package/dist/ui/shell/InteractiveShell.d.ts.map +1 -1
  37. package/dist/ui/shell/InteractiveShell.js +47 -24
  38. package/dist/ui/shell/InteractiveShell.js.map +1 -1
  39. package/package.json +12 -13
package/README.md CHANGED
@@ -1,55 +1,176 @@
1
1
  # HackWriter
2
2
 
3
- Writing agent for HackMD
3
+ **Writing Agent for HackMD** - Zero-config, multi-provider LLM support
4
4
 
5
- ## Install
5
+ ## Quick Start
6
6
 
7
- ```sh
7
+ ```bash
8
8
  npx hackwriter
9
9
  ```
10
10
 
11
- Or install globally:
11
+ If you don't have API keys configured, the setup wizard will guide you through it.
12
12
 
13
- ```sh
14
- npm i -g hackwriter
15
- ```
13
+ **That's it!** No config files needed.
14
+
15
+ ---
16
16
 
17
- ## Configure
17
+ ## Installation
18
+
19
+ **One-time use**:
20
+ ```bash
21
+ npx hackwriter
22
+ ```
18
23
 
19
- First run will prompt for setup:
24
+ **Global install**:
25
+ ```bash
26
+ npm i -g hackwriter
20
27
 
21
- ```sh
22
28
  hackwriter
23
29
  ```
24
30
 
25
- You'll need:
31
+ ---
32
+
33
+ ## Features
34
+
35
+ ✅ **Zero-Config** - detected existing environment variables
36
+ ✅ **Multi-Provider** - Anthropic, OpenAI, Ollama (auto-detected)
37
+ ✅ **Model Switching** - Switch models on-the-fly with `/model`
38
+ ✅ **Session Persistence** - Resume your work anytime
39
+ ✅ **Smart Approvals** - Confirms destructive actions
26
40
 
41
+ **HackMD Operations**:
42
+ - List, read, create, update, delete notes
43
+ - Personal & team notes support
44
+ - Search and export notes
45
+
46
+ ---
47
+
48
+ ## Configuration
49
+
50
+ ### Automatic Setup
51
+
52
+ Run `hackwriter` and follow the setup wizard. It will ask for:
53
+ - LLM provider (Anthropic, OpenAI, or Ollama) API key (if needed)
27
54
  - HackMD API token
28
- - LLM provider API key (OpenAI or Anthropic)
55
+
56
+ ### Manual Setup (Optional)
57
+
58
+ **Environment Variables** - Skip setup wizard by setting these:
59
+
60
+ ```bash
61
+ export ANTHROPIC_API_KEY=sk-ant-xxx # or OPENAI_API_KEY
62
+ export HACKMD_API_TOKEN=your-token
63
+ hackwriter # Starts immediately!
64
+ ```
65
+
66
+ | Variable | Description |
67
+ |----------|-------------|
68
+ | `ANTHROPIC_API_KEY` | Anthropic API key (optional) |
69
+ | `OPENAI_API_KEY` | OpenAI API key (optional) |
70
+ | `HACKMD_API_TOKEN` | HackMD API token (required) |
71
+
72
+ **Config File** - Override defaults with `~/.hackwriter/config.json`:
73
+
74
+ ```json
75
+ {
76
+ "defaultModel": "anthropic-claude-3-5-sonnet-latest",
77
+ "models": {
78
+ "fast": {
79
+ "provider": "anthropic",
80
+ "model": "claude-3-5-haiku-latest",
81
+ "maxContextSize": 200000
82
+ }
83
+ }
84
+ }
85
+ ```
86
+
87
+ ---
29
88
 
30
89
  ## Usage
31
90
 
32
- ```sh
33
- hackwriter # interactive shell
34
- hackwriter -c "list notes" # single command
35
- hackwriter --continue # resume session
36
- hackwriter --yolo # auto-approve all
37
- hackwriter --debug # detailed logs
91
+ ### Interactive Shell
92
+
93
+ ```bash
94
+ hackwriter # Start interactive mode
95
+ hackwriter --continue # Resume last session
96
+ hackwriter --debug # Enable debug logging
97
+ hackwriter -m gpt-4o # Use specific model
38
98
  ```
39
99
 
40
- Inside shell: `/help`, `/status`, `/clear`, `exit`
100
+ ### Shell Commands
41
101
 
42
- ## Features
102
+ ```bash
103
+ /help # Show available commands
104
+ /model # List/switch models
105
+ /model openai-gpt-4o # Switch to GPT-4o
106
+ /status # Show current status
107
+ /exit # Exit (or /quit, /q)
108
+ ```
109
+
110
+ ### Single Command
111
+
112
+ ```bash
113
+ hackwriter -c "list my notes"
114
+ hackwriter -c "create a note titled 'Meeting Notes'"
115
+ ```
116
+
117
+ ### Auto-Approve Mode
43
118
 
44
- - Lists, reads, creates, updates, deletes HackMD notes (personal & team)
45
- - Streams agent thoughts with tool-call status
46
- - Persists sessions in `~/.hackwriter/sessions`
47
- - Asks confirmation before destructive actions (unless `--yolo`)
119
+ ```bash
120
+ hackwriter --yolo # Skip all confirmations
121
+ ```
122
+
123
+ ---
48
124
 
49
- ## Development
125
+ ## Supported Providers
50
126
 
51
- ```sh
52
- pnpm install
53
- pnpm run dev
54
- pnpm run test
127
+ ### Anthropic
128
+ ```bash
129
+ export ANTHROPIC_API_KEY=sk-ant-xxx
55
130
  ```
131
+ Models: Claude 3.5 Haiku, Sonnet, Opus 4
132
+
133
+ ### OpenAI
134
+ ```bash
135
+ export OPENAI_API_KEY=sk-xxx
136
+ ```
137
+ Models: GPT-4o, GPT-4o-mini, o1
138
+
139
+ ### Ollama (Local)
140
+ ```bash
141
+ # Ollama auto-detected if running
142
+ ollama serve
143
+ ```
144
+ All local models automatically discovered
145
+
146
+ ---
147
+
148
+ ## Advanced
149
+
150
+ ### Custom Ollama Models
151
+
152
+ ```json
153
+ {
154
+ "models": {
155
+ "llama": {
156
+ "provider": "ollama",
157
+ "model": "llama3.1:70b",
158
+ "maxContextSize": 128000
159
+ }
160
+ },
161
+ "providers": {
162
+ "ollama": {
163
+ "type": "ollama",
164
+ "baseUrl": "http://localhost:11434/api"
165
+ }
166
+ }
167
+ }
168
+ ```
169
+
170
+ ### Model Management
171
+
172
+ ```bash
173
+ /model # Show all available models
174
+ /model anthropic-* # List Anthropic models
175
+ /model ollama-llama3.1 # Switch to specific model
176
+ ```
package/dist/cli.js CHANGED
@@ -49,8 +49,10 @@ async function runAgent(options) {
49
49
  }
50
50
  const config = await ConfigurationLoader.load();
51
51
  Logger.debug("CLI", `Config loaded: ${config.defaultModel || "no default"}, ${Object.keys(config.models).length} model(s)`);
52
+ // Check if we have discovered providers from environment
53
+ const hasDiscoveredProviders = Object.keys(config.providers).some((name) => config.providers[name].apiKey);
52
54
  const needsSetup = !config.services.hackmd?.apiToken ||
53
- (!config.defaultModel && !options.model);
55
+ (!config.defaultModel && !options.model && !hasDiscoveredProviders);
54
56
  if (needsSetup) {
55
57
  console.log(chalk.yellow("⚙️ Configuration needed. Starting setup wizard...\n"));
56
58
  await setupCommand(true);
@@ -108,8 +110,13 @@ async function runAgent(options) {
108
110
  await context.loadFromDisk();
109
111
  // Create executor
110
112
  const executor = new AgentExecutor(agent, context, languageModel, config.loopControl);
111
- // Start interactive shell
112
- const shell = new InteractiveShell(executor);
113
+ const shell = new InteractiveShell(executor, {
114
+ currentModelName: options.model ?? config.defaultModel,
115
+ config,
116
+ context,
117
+ toolRegistry,
118
+ systemPrompt: agent.systemPrompt,
119
+ });
113
120
  await shell.start(options.command);
114
121
  }
115
122
  function buildSystemPrompt(workDir) {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAQA,wBAAsB,YAAY,CAAC,eAAe,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA4JzE"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAMA,wBAAsB,YAAY,CAAC,eAAe,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFzE"}
@@ -1,134 +1,84 @@
1
- import { input, password, select } from "@inquirer/prompts";
2
- import chalk from "chalk";
3
- import { ConfigurationLoader } from "../config/ConfigurationLoader.js";
1
+ import { password } from '@inquirer/prompts';
2
+ import chalk from 'chalk';
3
+ import { ConfigurationLoader } from '../config/ConfigurationLoader.js';
4
+ import { discoverProviders, discoverModels } from '../config/ProviderDiscovery.js';
4
5
  export async function setupCommand(isAutoTriggered = false) {
5
- console.log(chalk.bold.cyan("\n🔧 HackWriter Setup\n"));
6
- const providerType = await select({
7
- message: "Select your primary LLM provider",
8
- choices: [
9
- { name: "Anthropic (Claude)", value: "anthropic" },
10
- { name: "OpenAI (GPT-4/5)", value: "openai" },
11
- { name: "Ollama (Local LLM)", value: "ollama" },
12
- ],
13
- default: "anthropic",
14
- });
15
- const providerName = await input({
16
- message: "Name this provider configuration",
17
- default: `${providerType}-default`,
18
- });
19
- const providerLabel = providerType === "anthropic"
20
- ? "Anthropic (Claude)"
21
- : providerType === "openai"
22
- ? "OpenAI"
23
- : "Ollama";
24
- let llmApiKey;
25
- if (providerType !== "ollama") {
26
- llmApiKey = await password({
27
- message: `Enter ${providerLabel} API key`,
28
- mask: "*",
6
+ console.log(chalk.bold.cyan('\n🔧 HackWriter Setup\n'));
7
+ // 1. Show what's already discovered
8
+ const providers = discoverProviders();
9
+ const models = await discoverModels(providers);
10
+ if (Object.keys(providers).length > 0) {
11
+ console.log(chalk.green('Environment Detection:'));
12
+ for (const [name, provider] of Object.entries(providers)) {
13
+ if (provider.apiKey) {
14
+ console.log(chalk.green(` ✓ ${name.toUpperCase()}_API_KEY found`));
15
+ }
16
+ else if (name === 'ollama') {
17
+ console.log(chalk.green(' ✓ Ollama detected'));
18
+ }
19
+ }
20
+ const modelCount = Object.keys(models).length;
21
+ if (modelCount > 0) {
22
+ console.log(chalk.green(` ✓ ${modelCount} model(s) available\n`));
23
+ }
24
+ }
25
+ else {
26
+ console.log(chalk.yellow('No providers detected in environment'));
27
+ console.log(chalk.gray('\nTo get started, set one of these environment variables:\n'));
28
+ console.log(chalk.cyan(' export ANTHROPIC_API_KEY=sk-ant-...'));
29
+ console.log(chalk.cyan(' export OPENAI_API_KEY=sk-...'));
30
+ console.log(chalk.gray('\nOr install Ollama locally:'));
31
+ console.log(chalk.cyan(' https://ollama.ai\n'));
32
+ }
33
+ // 2. HackMD token (only if not in env)
34
+ let hackmdToken = process.env.HACKMD_API_TOKEN;
35
+ if (!hackmdToken) {
36
+ console.log(chalk.yellow('Configuration needed:\n'));
37
+ hackmdToken = await password({
38
+ message: 'Enter HackMD API token',
39
+ mask: '*',
29
40
  });
30
- if (!llmApiKey) {
31
- console.log(chalk.red("\n❌ API key is required"));
41
+ if (!hackmdToken) {
42
+ console.log(chalk.red('\n❌ HackMD token is required'));
32
43
  process.exit(1);
33
44
  }
34
45
  }
35
- // Model
36
- const modelDefault = providerType === "anthropic"
37
- ? "claude-3-5-haiku-latest"
38
- : providerType === "openai"
39
- ? "gpt-4.1-mini"
40
- : "phi3";
41
- const model = await input({
42
- message: "Enter model name",
43
- default: modelDefault,
44
- });
45
- // Max context size
46
- const contextDefault = providerType === "anthropic"
47
- ? 200000
48
- : providerType === "openai"
49
- ? 128000
50
- : 128000;
51
- const maxContextSizeStr = await input({
52
- message: "Maximum context size (tokens)",
53
- default: String(contextDefault),
54
- });
55
- const parsedContextSize = Number.parseInt(maxContextSizeStr, 10);
56
- const maxContextSize = Number.isFinite(parsedContextSize)
57
- ? parsedContextSize
58
- : contextDefault;
59
- const baseUrlDefault = providerType === "ollama" ? "http://localhost:11434/api" : "";
60
- const baseUrl = await input({
61
- message: providerType === "ollama"
62
- ? "Ollama API URL"
63
- : "Custom base URL (optional)",
64
- default: baseUrlDefault,
65
- });
66
- let organizationId;
67
- let projectId;
68
- if (providerType === "openai") {
69
- organizationId =
70
- (await input({
71
- message: "OpenAI organization ID (optional)",
72
- default: "",
73
- })).trim() || undefined;
74
- projectId =
75
- (await input({
76
- message: "OpenAI project ID (optional)",
77
- default: "",
78
- })).trim() || undefined;
46
+ else {
47
+ console.log(chalk.green('Configuration:'));
48
+ console.log(chalk.green(' ✓ HACKMD_API_TOKEN found\n'));
79
49
  }
80
- // HackMD Token
81
- const hackmdToken = await password({
82
- message: "Enter HackMD API token",
83
- mask: "*",
84
- });
85
- if (!hackmdToken) {
86
- console.log(chalk.red("\n❌ HackMD token is required"));
50
+ // 3. Check if we have any models available
51
+ if (Object.keys(models).length === 0) {
52
+ console.log(chalk.red('\n❌ No LLM providers available!\n'));
53
+ console.log(chalk.yellow('Please set one of these environment variables:\n'));
54
+ console.log(chalk.cyan(' export ANTHROPIC_API_KEY=sk-ant-...'));
55
+ console.log(chalk.cyan(' export OPENAI_API_KEY=sk-...'));
56
+ console.log(chalk.gray('\nOr install and run Ollama:'));
57
+ console.log(chalk.cyan(' https://ollama.ai\n'));
87
58
  process.exit(1);
88
59
  }
89
- const answers = {
90
- provider: providerName,
91
- llmApiKey,
92
- model,
93
- maxContextSize,
94
- hackmdToken,
95
- };
96
- const config = {
97
- defaultModel: "default",
98
- models: {
99
- default: {
100
- provider: answers.provider,
101
- model: answers.model,
102
- maxContextSize: answers.maxContextSize,
103
- },
104
- },
105
- providers: {
106
- [answers.provider]: {
107
- type: providerType,
108
- apiKey: answers.llmApiKey,
109
- baseUrl: baseUrl.trim() || undefined,
110
- organizationId,
111
- projectId,
60
+ // 4. Save (only if needed)
61
+ if (!process.env.HACKMD_API_TOKEN) {
62
+ const config = {
63
+ services: {
64
+ hackmd: {
65
+ baseUrl: 'https://api.hackmd.io/v1',
66
+ apiToken: hackmdToken,
67
+ },
112
68
  },
113
- },
114
- services: {
115
- hackmd: {
116
- baseUrl: "https://api.hackmd.io/v1",
117
- apiToken: answers.hackmdToken,
69
+ loopControl: {
70
+ maxStepsPerRun: 100,
71
+ maxRetriesPerStep: 3,
118
72
  },
119
- },
120
- loopControl: {
121
- maxStepsPerRun: 100,
122
- maxRetriesPerStep: 3,
123
- },
124
- };
125
- await ConfigurationLoader.save(config);
126
- console.log(chalk.green("\n✅ Configuration saved!"));
127
- if (isAutoTriggered) {
128
- console.log(chalk.cyan("\n🚀 Starting HackMD Agent...\n"));
73
+ };
74
+ await ConfigurationLoader.save(config);
75
+ console.log(chalk.green('✅ Configuration saved!\n'));
129
76
  }
130
77
  else {
131
- console.log(chalk.gray("\nYou can now run: hackmd-agent\n"));
78
+ console.log(chalk.green('✅ All set! (using environment variables)\n'));
79
+ }
80
+ if (isAutoTriggered) {
81
+ console.log(chalk.cyan('🚀 Starting HackMD Agent...\n'));
132
82
  }
133
83
  }
134
84
  //# sourceMappingURL=setup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ModelDefinition } from './ProviderRegistry.js';
2
+ /**
3
+ * Discover Anthropic models by calling the API
4
+ */
5
+ export declare function discoverAnthropicModels(apiKey: string): Promise<ModelDefinition[]>;
6
+ //# sourceMappingURL=AnthropicDiscovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnthropicDiscovery.d.ts","sourceRoot":"","sources":["../../src/config/AnthropicDiscovery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAgB7D;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAmCxF"}
@@ -0,0 +1,52 @@
1
+ import { Logger } from '../utils/Logger.js';
2
+ /**
3
+ * Discover Anthropic models by calling the API
4
+ */
5
+ export async function discoverAnthropicModels(apiKey) {
6
+ try {
7
+ const response = await fetch('https://api.anthropic.com/v1/models', {
8
+ headers: {
9
+ 'x-api-key': apiKey,
10
+ 'anthropic-version': '2023-06-01',
11
+ },
12
+ });
13
+ if (!response.ok) {
14
+ Logger.debug('AnthropicDiscovery', `API request failed: ${response.status}`);
15
+ return [];
16
+ }
17
+ const data = await response.json();
18
+ const models = [];
19
+ for (const model of data.data) {
20
+ // Only include chat models (not embeddings, etc.)
21
+ if (model.type === 'model') {
22
+ models.push({
23
+ id: model.id,
24
+ name: model.display_name || model.id,
25
+ contextWindow: getContextWindow(model.id),
26
+ });
27
+ Logger.debug('AnthropicDiscovery', `Discovered model: ${model.id}`);
28
+ }
29
+ }
30
+ return models;
31
+ }
32
+ catch (error) {
33
+ Logger.debug('AnthropicDiscovery', `Failed to discover models: ${String(error)}`);
34
+ return [];
35
+ }
36
+ }
37
+ /**
38
+ * Get context window size based on model ID
39
+ */
40
+ function getContextWindow(modelId) {
41
+ // Claude 3.5 models
42
+ if (modelId.includes('claude-3-5')) {
43
+ return 200000;
44
+ }
45
+ // Claude 3 Opus
46
+ if (modelId.includes('opus')) {
47
+ return 200000;
48
+ }
49
+ // Default
50
+ return 200000;
51
+ }
52
+ //# sourceMappingURL=AnthropicDiscovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnthropicDiscovery.js","sourceRoot":"","sources":["../../src/config/AnthropicDiscovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAiB5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAc;IAC1D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,qCAAqC,EAAE;YAClE,OAAO,EAAE;gBACP,WAAW,EAAE,MAAM;gBACnB,mBAAmB,EAAE,YAAY;aAClC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7E,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6B,CAAC;QAC9D,MAAM,MAAM,GAAsB,EAAE,CAAC;QAErC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,kDAAkD;YAClD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,IAAI,EAAE,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,EAAE;oBACpC,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;iBAC1C,CAAC,CAAC;gBAEH,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,qBAAqB,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,8BAA8B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,oBAAoB;IACpB,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,gBAAgB;IAChB,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,UAAU;IACV,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -3,6 +3,5 @@ export declare class ConfigurationLoader {
3
3
  private static configPath;
4
4
  static load(): Promise<Configuration>;
5
5
  static save(config: Configuration): Promise<void>;
6
- private static getDefaultConfig;
7
6
  }
8
7
  //# sourceMappingURL=ConfigurationLoader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigurationLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigurationLoader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKxD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,UAAU,CAIvB;WAEW,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;WA6C9B,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCvD,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAYhC"}
1
+ {"version":3,"file":"ConfigurationLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigurationLoader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMxD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,UAAU,CAIvB;WAEW,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;WAwF9B,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAiCxD"}