hackwriter 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -59
- package/dist/agent/CompactionPrompt.d.ts +0 -7
- package/dist/agent/CompactionPrompt.d.ts.map +1 -1
- package/dist/agent/CompactionPrompt.js +1 -1
- package/dist/agent/CompactionPrompt.js.map +1 -1
- package/dist/agent/ConversationContext.d.ts +9 -0
- package/dist/agent/ConversationContext.d.ts.map +1 -1
- package/dist/agent/ConversationContext.js +16 -1
- package/dist/agent/ConversationContext.js.map +1 -1
- package/dist/agent/ModelFactory.d.ts.map +1 -1
- package/dist/agent/ModelFactory.js +4 -1
- package/dist/agent/ModelFactory.js.map +1 -1
- package/dist/cli.js +38 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +73 -22
- package/dist/commands/setup.js.map +1 -1
- package/dist/config/ConfigSchema.d.ts +2 -36
- package/dist/config/ConfigSchema.d.ts.map +1 -1
- package/dist/config/ConfigSchema.js +5 -11
- package/dist/config/ConfigSchema.js.map +1 -1
- package/dist/config/ConfigurationLoader.d.ts.map +1 -1
- package/dist/config/ConfigurationLoader.js +41 -6
- package/dist/config/ConfigurationLoader.js.map +1 -1
- package/dist/config/HackMDConfigLoader.d.ts +20 -0
- package/dist/config/HackMDConfigLoader.d.ts.map +1 -0
- package/dist/config/HackMDConfigLoader.js +51 -0
- package/dist/config/HackMDConfigLoader.js.map +1 -0
- package/dist/config/OpenAIDiscovery.d.ts.map +1 -1
- package/dist/config/OpenAIDiscovery.js +4 -1
- package/dist/config/OpenAIDiscovery.js.map +1 -1
- package/dist/config/ProviderRegistry.d.ts +2 -3
- package/dist/config/ProviderRegistry.d.ts.map +1 -1
- package/dist/config/ProviderRegistry.js +0 -6
- package/dist/config/ProviderRegistry.js.map +1 -1
- package/dist/config/constants.d.ts +5 -5
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +6 -7
- package/dist/config/constants.js.map +1 -1
- package/dist/mcp/MCPClient.d.ts +13 -2
- package/dist/mcp/MCPClient.d.ts.map +1 -1
- package/dist/mcp/MCPClient.js +58 -7
- package/dist/mcp/MCPClient.js.map +1 -1
- package/dist/mcp/MCPToolAdapter.d.ts +2 -1
- package/dist/mcp/MCPToolAdapter.d.ts.map +1 -1
- package/dist/mcp/index.d.ts +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/messaging/MessageBus.d.ts +6 -1
- package/dist/messaging/MessageBus.d.ts.map +1 -1
- package/dist/messaging/MessageBus.js +6 -0
- package/dist/messaging/MessageBus.js.map +1 -1
- package/dist/tools/base/Tool.d.ts +0 -1
- package/dist/tools/base/Tool.d.ts.map +1 -1
- package/dist/tools/base/Tool.js.map +1 -1
- package/dist/tools/file/ListFilesTool.d.ts.map +1 -1
- package/dist/tools/file/ListFilesTool.js +10 -8
- package/dist/tools/file/ListFilesTool.js.map +1 -1
- package/dist/tools/file/ReadFileTool.d.ts.map +1 -1
- package/dist/tools/file/ReadFileTool.js +9 -8
- package/dist/tools/file/ReadFileTool.js.map +1 -1
- package/dist/tools/file/WriteFileTool.d.ts.map +1 -1
- package/dist/tools/file/WriteFileTool.js +9 -7
- package/dist/tools/file/WriteFileTool.js.map +1 -1
- package/dist/ui/shell/InteractiveShell.d.ts +6 -1
- package/dist/ui/shell/InteractiveShell.d.ts.map +1 -1
- package/dist/ui/shell/InteractiveShell.js +10 -0
- package/dist/ui/shell/InteractiveShell.js.map +1 -1
- package/dist/utils/AsyncPackageLoader.d.ts +29 -0
- package/dist/utils/AsyncPackageLoader.d.ts.map +1 -0
- package/dist/utils/AsyncPackageLoader.js +56 -0
- package/dist/utils/AsyncPackageLoader.js.map +1 -0
- package/dist/utils/BatchWriter.d.ts +42 -0
- package/dist/utils/BatchWriter.d.ts.map +1 -0
- package/dist/utils/BatchWriter.js +130 -0
- package/dist/utils/BatchWriter.js.map +1 -0
- package/dist/utils/Logger.d.ts.map +1 -1
- package/dist/utils/Logger.js +14 -4
- package/dist/utils/Logger.js.map +1 -1
- package/dist/utils/PathValidator.d.ts +35 -0
- package/dist/utils/PathValidator.d.ts.map +1 -0
- package/dist/utils/PathValidator.js +70 -0
- package/dist/utils/PathValidator.js.map +1 -0
- package/dist/utils/RateLimiter.d.ts +3 -1
- package/dist/utils/RateLimiter.d.ts.map +1 -1
- package/dist/utils/RateLimiter.js +9 -24
- package/dist/utils/RateLimiter.js.map +1 -1
- package/dist/utils/ResourceManager.d.ts +7 -0
- package/dist/utils/ResourceManager.d.ts.map +1 -0
- package/dist/utils/ResourceManager.js +2 -0
- package/dist/utils/ResourceManager.js.map +1 -0
- package/dist/utils/RetryPolicy.d.ts +29 -0
- package/dist/utils/RetryPolicy.d.ts.map +1 -0
- package/dist/utils/RetryPolicy.js +73 -0
- package/dist/utils/RetryPolicy.js.map +1 -0
- package/dist/utils/SensitiveDataRedactor.d.ts +40 -0
- package/dist/utils/SensitiveDataRedactor.d.ts.map +1 -0
- package/dist/utils/SensitiveDataRedactor.js +122 -0
- package/dist/utils/SensitiveDataRedactor.js.map +1 -0
- package/dist/utils/SlidingWindowRateLimiter.d.ts +36 -0
- package/dist/utils/SlidingWindowRateLimiter.d.ts.map +1 -0
- package/dist/utils/SlidingWindowRateLimiter.js +74 -0
- package/dist/utils/SlidingWindowRateLimiter.js.map +1 -0
- package/package.json +15 -12
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
|
-
```
|
|
7
|
+
```sh
|
|
8
8
|
npx hackwriter
|
|
9
9
|
```
|
|
10
10
|
|
|
@@ -16,40 +16,26 @@ If you don't have API keys configured, the setup wizard will guide you through i
|
|
|
16
16
|
|
|
17
17
|
## Installation
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
npx hackwriter
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
**Global install**:
|
|
25
|
-
```bash
|
|
19
|
+
```sh
|
|
26
20
|
npm i -g hackwriter
|
|
27
21
|
|
|
28
22
|
hackwriter
|
|
29
23
|
```
|
|
30
24
|
|
|
31
|
-
---
|
|
32
|
-
|
|
33
25
|
## Features
|
|
34
26
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
**HackMD Operations**:
|
|
42
|
-
- List, read, create, update, delete notes
|
|
43
|
-
- Personal & team notes support
|
|
44
|
-
- Search and export notes
|
|
45
|
-
|
|
46
|
-
---
|
|
27
|
+
- **Zero-Config** - detected existing environment variables
|
|
28
|
+
- **Multi-Provider** - Anthropic, OpenAI, Ollama (auto-detected)
|
|
29
|
+
- **Model Switching** - Switch models on-the-fly with `/model`
|
|
30
|
+
- **Session Persistence** - Resume your work anytime
|
|
31
|
+
- **Smart Approvals** - Confirms destructive actions
|
|
47
32
|
|
|
48
33
|
## Configuration
|
|
49
34
|
|
|
50
35
|
### Automatic Setup
|
|
51
36
|
|
|
52
37
|
Run `hackwriter` and follow the setup wizard. It will ask for:
|
|
38
|
+
|
|
53
39
|
- LLM provider (Anthropic, OpenAI, or Ollama) API key (if needed)
|
|
54
40
|
- HackMD API token
|
|
55
41
|
|
|
@@ -63,11 +49,21 @@ export HACKMD_API_TOKEN=your-token
|
|
|
63
49
|
hackwriter # Starts immediately!
|
|
64
50
|
```
|
|
65
51
|
|
|
66
|
-
| Variable
|
|
67
|
-
|
|
68
|
-
| `ANTHROPIC_API_KEY` | Anthropic API key (optional)
|
|
69
|
-
| `OPENAI_API_KEY`
|
|
70
|
-
| `HACKMD_API_TOKEN`
|
|
52
|
+
| Variable | Description |
|
|
53
|
+
| ------------------- | -------------------------------------------------------------- |
|
|
54
|
+
| `ANTHROPIC_API_KEY` | Anthropic API key (optional) |
|
|
55
|
+
| `OPENAI_API_KEY` | OpenAI API key (optional) |
|
|
56
|
+
| `HACKMD_API_TOKEN` | HackMD API token (required) |
|
|
57
|
+
| `HACKMD_API_URL` | HackMD API URL (optional, default: <https://api.hackmd.io/v1>) |
|
|
58
|
+
|
|
59
|
+
**HackMD CLI Compatibility** - Also supports HackMD CLI environment variables:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
export HMD_API_ACCESS_TOKEN=your-token # Same as HACKMD_API_TOKEN
|
|
63
|
+
export HMD_API_ENDPOINT_URL=https://... # Same as HACKMD_API_URL
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
> **Note:** If you're already using [HackMD CLI](https://github.com/hackmdio/hackmd-cli), HackWriter will automatically detect and use your existing `HMD_API_ACCESS_TOKEN` environment variable. No additional configuration needed!
|
|
71
67
|
|
|
72
68
|
**Config File** - Override defaults with `~/.hackwriter/config.json`:
|
|
73
69
|
|
|
@@ -125,52 +121,26 @@ hackwriter --yolo # Skip all confirmations
|
|
|
125
121
|
## Supported Providers
|
|
126
122
|
|
|
127
123
|
### Anthropic
|
|
124
|
+
|
|
128
125
|
```bash
|
|
129
126
|
export ANTHROPIC_API_KEY=sk-ant-xxx
|
|
130
127
|
```
|
|
128
|
+
|
|
131
129
|
Models: Claude 3.5 Haiku, Sonnet, Opus 4
|
|
132
130
|
|
|
133
131
|
### OpenAI
|
|
132
|
+
|
|
134
133
|
```bash
|
|
135
134
|
export OPENAI_API_KEY=sk-xxx
|
|
136
135
|
```
|
|
136
|
+
|
|
137
137
|
Models: GPT-4o, GPT-4o-mini, o1
|
|
138
138
|
|
|
139
139
|
### Ollama (Local)
|
|
140
|
+
|
|
140
141
|
```bash
|
|
141
142
|
# Ollama auto-detected if running
|
|
142
143
|
ollama serve
|
|
143
144
|
```
|
|
144
|
-
All local models automatically discovered
|
|
145
|
-
|
|
146
|
-
---
|
|
147
145
|
|
|
148
|
-
|
|
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
|
-
```
|
|
146
|
+
All local models automatically discovered
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* System prompt template for context compaction
|
|
3
|
-
*
|
|
4
|
-
* This prompt instructs the model to compress conversation history while
|
|
5
|
-
* preserving essential information for continued execution.
|
|
6
|
-
*/
|
|
7
|
-
export declare const COMPACTION_PROMPT_TEMPLATE = "You are tasked with compacting a conversation context. Focus on:\n1. Current task state and goals\n2. Important errors and solutions\n3. Key decisions made\n4. Pending TODO items\n\nContext to compress:\n{{HISTORY}}\n\nProvide a concise summary that preserves essential information.";
|
|
8
1
|
/**
|
|
9
2
|
* Build the compaction prompt with given history
|
|
10
3
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompactionPrompt.d.ts","sourceRoot":"","sources":["../../src/agent/CompactionPrompt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CompactionPrompt.d.ts","sourceRoot":"","sources":["../../src/agent/CompactionPrompt.ts"],"names":[],"mappings":"AAiBA;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEjE"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This prompt instructs the model to compress conversation history while
|
|
5
5
|
* preserving essential information for continued execution.
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
const COMPACTION_PROMPT_TEMPLATE = `You are tasked with compacting a conversation context. Focus on:
|
|
8
8
|
1. Current task state and goals
|
|
9
9
|
2. Important errors and solutions
|
|
10
10
|
3. Key decisions made
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompactionPrompt.js","sourceRoot":"","sources":["../../src/agent/CompactionPrompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,
|
|
1
|
+
{"version":3,"file":"CompactionPrompt.js","sourceRoot":"","sources":["../../src/agent/CompactionPrompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,0BAA0B,GAAG;;;;;;;;;gEAS6B,CAAC;AAEjE;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,OAAO,0BAA0B,CAAC,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -5,6 +5,7 @@ export declare class ConversationContext {
|
|
|
5
5
|
private checkpointCounter;
|
|
6
6
|
private storageFile;
|
|
7
7
|
private isMemoryMode;
|
|
8
|
+
private batchWriter;
|
|
8
9
|
constructor(storageFile: string);
|
|
9
10
|
loadFromDisk(): Promise<boolean>;
|
|
10
11
|
createCheckpoint(): Promise<number>;
|
|
@@ -15,5 +16,13 @@ export declare class ConversationContext {
|
|
|
15
16
|
get tokenCount(): number;
|
|
16
17
|
get checkpointCount(): number;
|
|
17
18
|
private persistRecord;
|
|
19
|
+
/**
|
|
20
|
+
* Flush any pending writes to disk
|
|
21
|
+
*/
|
|
22
|
+
flush(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Close the conversation context and flush remaining data
|
|
25
|
+
*/
|
|
26
|
+
close(): Promise<void>;
|
|
18
27
|
}
|
|
19
28
|
//# sourceMappingURL=ConversationContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationContext.d.ts","sourceRoot":"","sources":["../../src/agent/ConversationContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ConversationContext.d.ts","sourceRoot":"","sources":["../../src/agent/ConversationContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AASvC,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,WAAW,CAAc;gBAErB,WAAW,EAAE,MAAM;IAMzB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAgDhC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAMnC,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IASjE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0C7D,UAAU,IAAI,YAAY,EAAE;IAI5B,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;YAEa,aAAa;IAO3B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { promises as fs } from "fs";
|
|
2
2
|
import { Logger } from "../utils/Logger.js";
|
|
3
|
+
import { BatchWriter } from "../utils/BatchWriter.js";
|
|
3
4
|
export class ConversationContext {
|
|
4
5
|
messages = [];
|
|
5
6
|
_tokenCount = 0;
|
|
6
7
|
checkpointCounter = 0;
|
|
7
8
|
storageFile;
|
|
8
9
|
isMemoryMode;
|
|
10
|
+
batchWriter;
|
|
9
11
|
constructor(storageFile) {
|
|
10
12
|
this.storageFile = storageFile;
|
|
11
13
|
this.isMemoryMode = storageFile === ":memory:";
|
|
14
|
+
this.batchWriter = new BatchWriter(storageFile);
|
|
12
15
|
}
|
|
13
16
|
async loadFromDisk() {
|
|
14
17
|
if (this.isMemoryMode) {
|
|
@@ -116,7 +119,19 @@ export class ConversationContext {
|
|
|
116
119
|
if (this.isMemoryMode) {
|
|
117
120
|
return;
|
|
118
121
|
}
|
|
119
|
-
await
|
|
122
|
+
await this.batchWriter.write(JSON.stringify(data) + "\n");
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Flush any pending writes to disk
|
|
126
|
+
*/
|
|
127
|
+
async flush() {
|
|
128
|
+
await this.batchWriter.flush();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Close the conversation context and flush remaining data
|
|
132
|
+
*/
|
|
133
|
+
async close() {
|
|
134
|
+
await this.batchWriter.close();
|
|
120
135
|
}
|
|
121
136
|
}
|
|
122
137
|
//# sourceMappingURL=ConversationContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationContext.js","sourceRoot":"","sources":["../../src/agent/ConversationContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ConversationContext.js","sourceRoot":"","sources":["../../src/agent/ConversationContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelFactory.d.ts","sourceRoot":"","sources":["../../src/agent/ModelFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAIxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"ModelFactory.d.ts","sourceRoot":"","sources":["../../src/agent/ModelFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAIxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAI9D,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,MAAM,GACd,aAAa,CAsCf"}
|
|
@@ -2,12 +2,15 @@ import { createAnthropic } from "@ai-sdk/anthropic";
|
|
|
2
2
|
import { createOpenAI } from "@ai-sdk/openai";
|
|
3
3
|
import { createOllama } from "ollama-ai-provider-v2";
|
|
4
4
|
import { Logger } from "../utils/Logger.js";
|
|
5
|
+
import { SensitiveDataRedactor } from "../utils/SensitiveDataRedactor.js";
|
|
5
6
|
export function buildLanguageModel(provider, modelId) {
|
|
7
|
+
// Redact sensitive data before logging
|
|
8
|
+
const redactedProvider = SensitiveDataRedactor.redact(provider);
|
|
6
9
|
Logger.debug("ModelFactory", "Building language model", {
|
|
7
10
|
providerType: provider.type,
|
|
8
11
|
modelId,
|
|
9
12
|
hasApiKey: !!provider.apiKey,
|
|
10
|
-
|
|
13
|
+
provider: redactedProvider,
|
|
11
14
|
});
|
|
12
15
|
switch (provider.type) {
|
|
13
16
|
case "anthropic": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelFactory.js","sourceRoot":"","sources":["../../src/agent/ModelFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ModelFactory.js","sourceRoot":"","sources":["../../src/agent/ModelFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,UAAU,kBAAkB,CAChC,QAAqB,EACrB,OAAe;IAEf,uCAAuC;IACvC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChE,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,yBAAyB,EAAE;QACtD,YAAY,EAAE,QAAQ,CAAC,IAAI;QAC3B,OAAO;QACP,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM;QAC5B,QAAQ,EAAE,gBAAgB;KAC3B,CAAC,CAAC;IAEH,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,SAAS,GAAG,eAAe,CAAC;gBAChC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC,CAAC;YACH,OAAO,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,YAAY,CAAC;gBAC1B,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,YAAY,EAAE,QAAQ,CAAC,cAAc;gBACrC,OAAO,EAAE,QAAQ,CAAC,SAAS;aAC5B,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,YAAY,CAAC;gBAC1B,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,4BAA4B;aAC1D,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,OAAO,CAA6B,CAAC;QACrD,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CACb,8BAA+B,QAA6B,CAAC,IAAI,EAAE,CACpE,CAAC;IACN,CAAC;AACH,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -16,6 +16,7 @@ import { setupCommand } from "./commands/setup.js";
|
|
|
16
16
|
import { buildLanguageModel } from "./agent/ModelFactory.js";
|
|
17
17
|
import { Logger } from "./utils/Logger.js";
|
|
18
18
|
import { ErrorFactory } from "./utils/ErrorTypes.js";
|
|
19
|
+
import { SensitiveDataRedactor } from "./utils/SensitiveDataRedactor.js";
|
|
19
20
|
import { ListNotesTool, ReadNoteTool, CreateNoteTool, UpdateNoteTool, DeleteNoteTool, GetUserInfoTool, ListTeamsTool, GetHistoryTool, SearchNotesTool, ExportNoteTool, } from "./tools/hackmd/index.js";
|
|
20
21
|
import { ReadFileTool, WriteFileTool, ListFilesTool, } from "./tools/file/index.js";
|
|
21
22
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -33,6 +34,8 @@ program
|
|
|
33
34
|
.option("-m, --model <name>", "LLM model to use")
|
|
34
35
|
.action(async (options) => {
|
|
35
36
|
try {
|
|
37
|
+
// Setup cleanup on exit
|
|
38
|
+
setupCleanupHandlers();
|
|
36
39
|
await runAgent(options);
|
|
37
40
|
}
|
|
38
41
|
catch (error) {
|
|
@@ -204,5 +207,40 @@ function registerLocalHackMDTools(toolRegistry, apiToken, approvalManager) {
|
|
|
204
207
|
toolRegistry.register(new ExportNoteTool(hackmdClient));
|
|
205
208
|
Logger.debug("CLI", "Registered local HackMD tools");
|
|
206
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Setup cleanup handlers to clear sensitive data on exit
|
|
212
|
+
*/
|
|
213
|
+
function setupCleanupHandlers() {
|
|
214
|
+
const cleanup = () => {
|
|
215
|
+
Logger.debug("CLI", "Cleaning up sensitive data from memory");
|
|
216
|
+
// Clear environment variables containing sensitive data
|
|
217
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
218
|
+
SensitiveDataRedactor.clearMemory({ ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY });
|
|
219
|
+
delete process.env.ANTHROPIC_API_KEY;
|
|
220
|
+
}
|
|
221
|
+
if (process.env.OPENAI_API_KEY) {
|
|
222
|
+
SensitiveDataRedactor.clearMemory({ OPENAI_API_KEY: process.env.OPENAI_API_KEY });
|
|
223
|
+
delete process.env.OPENAI_API_KEY;
|
|
224
|
+
}
|
|
225
|
+
if (process.env.HACKMD_API_TOKEN) {
|
|
226
|
+
SensitiveDataRedactor.clearMemory({ HACKMD_API_TOKEN: process.env.HACKMD_API_TOKEN });
|
|
227
|
+
delete process.env.HACKMD_API_TOKEN;
|
|
228
|
+
}
|
|
229
|
+
if (process.env.HMD_API_ACCESS_TOKEN) {
|
|
230
|
+
SensitiveDataRedactor.clearMemory({ HMD_API_ACCESS_TOKEN: process.env.HMD_API_ACCESS_TOKEN });
|
|
231
|
+
delete process.env.HMD_API_ACCESS_TOKEN;
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
// Register cleanup handlers
|
|
235
|
+
process.on('exit', cleanup);
|
|
236
|
+
process.on('SIGINT', () => {
|
|
237
|
+
cleanup();
|
|
238
|
+
process.exit(0);
|
|
239
|
+
});
|
|
240
|
+
process.on('SIGTERM', () => {
|
|
241
|
+
cleanup();
|
|
242
|
+
process.exit(0);
|
|
243
|
+
});
|
|
244
|
+
}
|
|
207
245
|
program.parse();
|
|
208
246
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
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":"
|
|
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,CA8JzE"}
|
package/dist/commands/setup.js
CHANGED
|
@@ -2,6 +2,7 @@ import { password, select } from '@inquirer/prompts';
|
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { ConfigurationLoader } from '../config/ConfigurationLoader.js';
|
|
4
4
|
import { discoverProviders, discoverModels } from '../config/ProviderDiscovery.js';
|
|
5
|
+
import { loadHackMDCLIConfig } from '../config/HackMDConfigLoader.js';
|
|
5
6
|
import { DEFAULT_MAX_STEPS_PER_RUN, DEFAULT_MAX_RETRIES_PER_STEP } from '../config/constants.js';
|
|
6
7
|
export async function setupCommand(isAutoTriggered = false) {
|
|
7
8
|
console.log(chalk.bold.cyan('\n🔧 HackWriter Setup\n'));
|
|
@@ -27,9 +28,23 @@ export async function setupCommand(isAutoTriggered = false) {
|
|
|
27
28
|
console.log(chalk.green(` ✓ ${modelCount} model(s) available\n`));
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
|
-
// 2. HackMD token (
|
|
31
|
-
|
|
31
|
+
// 2. HackMD token (check all sources)
|
|
32
|
+
// Priority: HackWriter env > HackMD CLI env > HackMD CLI config file
|
|
33
|
+
let hackmdToken = process.env.HACKMD_API_TOKEN ?? process.env.HMD_API_ACCESS_TOKEN;
|
|
34
|
+
let tokenSource = null;
|
|
35
|
+
// Check HackMD CLI config file if no env var
|
|
32
36
|
if (!hackmdToken) {
|
|
37
|
+
const hackmdCLIConfig = await loadHackMDCLIConfig();
|
|
38
|
+
if (hackmdCLIConfig?.accessToken) {
|
|
39
|
+
hackmdToken = hackmdCLIConfig.accessToken;
|
|
40
|
+
tokenSource = 'config-cli';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
tokenSource = process.env.HACKMD_API_TOKEN ? 'env-hackwriter' : 'env-cli';
|
|
45
|
+
}
|
|
46
|
+
if (!hackmdToken) {
|
|
47
|
+
console.log(chalk.yellow('Configuration needed:\n'));
|
|
33
48
|
hackmdToken = await password({
|
|
34
49
|
message: 'Enter HackMD API token',
|
|
35
50
|
mask: '*',
|
|
@@ -38,9 +53,21 @@ export async function setupCommand(isAutoTriggered = false) {
|
|
|
38
53
|
console.log(chalk.red('\n❌ HackMD token is required'));
|
|
39
54
|
process.exit(1);
|
|
40
55
|
}
|
|
56
|
+
tokenSource = 'prompt';
|
|
41
57
|
}
|
|
42
58
|
else {
|
|
43
|
-
console.log(chalk.green('
|
|
59
|
+
console.log(chalk.green('Configuration:'));
|
|
60
|
+
// Show which source was detected
|
|
61
|
+
if (tokenSource === 'env-hackwriter') {
|
|
62
|
+
console.log(chalk.green(' ✓ HACKMD_API_TOKEN found'));
|
|
63
|
+
}
|
|
64
|
+
else if (tokenSource === 'env-cli') {
|
|
65
|
+
console.log(chalk.green(' ✓ HMD_API_ACCESS_TOKEN found (HackMD CLI compatible)'));
|
|
66
|
+
}
|
|
67
|
+
else if (tokenSource === 'config-cli') {
|
|
68
|
+
console.log(chalk.green(' ✓ HackMD CLI config found (~/.hackmd/config.json)'));
|
|
69
|
+
}
|
|
70
|
+
console.log();
|
|
44
71
|
}
|
|
45
72
|
// 3. If no models available, prompt user to add LLM provider
|
|
46
73
|
let llmApiKey;
|
|
@@ -74,29 +101,53 @@ export async function setupCommand(isAutoTriggered = false) {
|
|
|
74
101
|
}
|
|
75
102
|
console.log(chalk.green(`\n✓ ${providerName} API key configured`));
|
|
76
103
|
}
|
|
77
|
-
// 4. Save configuration
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
104
|
+
// 4. Save configuration (only if token was entered via prompt)
|
|
105
|
+
if (tokenSource === 'prompt') {
|
|
106
|
+
const configToSave = {
|
|
107
|
+
services: {
|
|
108
|
+
hackmd: {
|
|
109
|
+
apiToken: hackmdToken,
|
|
110
|
+
},
|
|
82
111
|
},
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
maxRetriesPerStep: DEFAULT_MAX_RETRIES_PER_STEP,
|
|
87
|
-
},
|
|
88
|
-
};
|
|
89
|
-
// Add LLM provider if configured
|
|
90
|
-
if (llmProvider && llmApiKey) {
|
|
91
|
-
configToSave.providers = {
|
|
92
|
-
[llmProvider]: {
|
|
93
|
-
type: llmProvider,
|
|
94
|
-
apiKey: llmApiKey,
|
|
112
|
+
loopControl: {
|
|
113
|
+
maxStepsPerRun: DEFAULT_MAX_STEPS_PER_RUN,
|
|
114
|
+
maxRetriesPerStep: DEFAULT_MAX_RETRIES_PER_STEP,
|
|
95
115
|
},
|
|
96
116
|
};
|
|
117
|
+
// Add LLM provider if configured
|
|
118
|
+
if (llmProvider && llmApiKey) {
|
|
119
|
+
configToSave.providers = {
|
|
120
|
+
[llmProvider]: {
|
|
121
|
+
type: llmProvider,
|
|
122
|
+
apiKey: llmApiKey,
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
await ConfigurationLoader.save(configToSave);
|
|
127
|
+
console.log(chalk.green('\n✅ Configuration saved!\n'));
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// Token from env or HackMD CLI config - only save LLM provider if configured
|
|
131
|
+
if (llmProvider && llmApiKey) {
|
|
132
|
+
const configToSave = {
|
|
133
|
+
providers: {
|
|
134
|
+
[llmProvider]: {
|
|
135
|
+
type: llmProvider,
|
|
136
|
+
apiKey: llmApiKey,
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
loopControl: {
|
|
140
|
+
maxStepsPerRun: DEFAULT_MAX_STEPS_PER_RUN,
|
|
141
|
+
maxRetriesPerStep: DEFAULT_MAX_RETRIES_PER_STEP,
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
await ConfigurationLoader.save(configToSave);
|
|
145
|
+
console.log(chalk.green('\n✅ Configuration saved!\n'));
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
console.log(chalk.green('\n✅ All set!\n'));
|
|
149
|
+
}
|
|
97
150
|
}
|
|
98
|
-
await ConfigurationLoader.save(configToSave);
|
|
99
|
-
console.log(chalk.green('\n✅ Configuration saved!\n'));
|
|
100
151
|
if (isAutoTriggered) {
|
|
101
152
|
console.log(chalk.cyan('🚀 Starting HackWriter...\n'));
|
|
102
153
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAEjG,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,eAAe,GAAG,KAAK;IACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAExD,oCAAoC;IACpC,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IAE9C,MAAM,eAAe,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IACtD,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IAChD,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAEjF,IAAI,eAAe,IAAI,YAAY,IAAI,eAAe,EAAE,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACnD,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,UAAU,uBAAuB,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
|
|
3
|
-
* Zod schemas for runtime configuration validation
|
|
4
|
-
*/
|
|
5
|
-
export declare const HackMDConfigSchema: z.ZodObject<{
|
|
6
|
-
apiBaseUrl: z.ZodOptional<z.ZodURL>;
|
|
7
|
-
mcpBaseUrl: z.ZodOptional<z.ZodURL>;
|
|
8
|
-
apiToken: z.ZodString;
|
|
9
|
-
}, z.core.$strip>;
|
|
10
|
-
export declare const LLMProviderSchema: z.ZodObject<{
|
|
11
|
-
type: z.ZodEnum<{
|
|
12
|
-
anthropic: "anthropic";
|
|
13
|
-
openai: "openai";
|
|
14
|
-
ollama: "ollama";
|
|
15
|
-
}>;
|
|
16
|
-
apiKey: z.ZodOptional<z.ZodString>;
|
|
17
|
-
baseUrl: z.ZodOptional<z.ZodURL>;
|
|
18
|
-
organizationId: z.ZodOptional<z.ZodString>;
|
|
19
|
-
projectId: z.ZodOptional<z.ZodString>;
|
|
20
|
-
}, z.core.$strip>;
|
|
21
|
-
export declare const LLMModelSchema: z.ZodObject<{
|
|
22
|
-
provider: z.ZodString;
|
|
23
|
-
model: z.ZodString;
|
|
24
|
-
maxContextSize: z.ZodNumber;
|
|
25
|
-
}, z.core.$strip>;
|
|
26
|
-
export declare const LoopControlSchema: z.ZodObject<{
|
|
27
|
-
maxStepsPerRun: z.ZodDefault<z.ZodNumber>;
|
|
28
|
-
maxRetriesPerStep: z.ZodDefault<z.ZodNumber>;
|
|
29
|
-
}, z.core.$strip>;
|
|
30
|
-
export declare const ConfigurationSchema: z.ZodObject<{
|
|
2
|
+
declare const ConfigurationSchema: z.ZodObject<{
|
|
31
3
|
defaultModel: z.ZodString;
|
|
32
4
|
models: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
33
5
|
provider: z.ZodString;
|
|
@@ -58,13 +30,6 @@ export declare const ConfigurationSchema: z.ZodObject<{
|
|
|
58
30
|
}, z.core.$strip>;
|
|
59
31
|
}, z.core.$strip>;
|
|
60
32
|
export type ValidatedConfiguration = z.infer<typeof ConfigurationSchema>;
|
|
61
|
-
export type ValidatedHackMDConfig = z.infer<typeof HackMDConfigSchema>;
|
|
62
|
-
export type ValidatedLLMProvider = z.infer<typeof LLMProviderSchema>;
|
|
63
|
-
export type ValidatedLLMModel = z.infer<typeof LLMModelSchema>;
|
|
64
|
-
/**
|
|
65
|
-
* Validate configuration object
|
|
66
|
-
*/
|
|
67
|
-
export declare function validateConfiguration(data: unknown): ValidatedConfiguration;
|
|
68
33
|
/**
|
|
69
34
|
* Safely validate configuration with detailed error messages
|
|
70
35
|
*/
|
|
@@ -76,4 +41,5 @@ export declare function safeValidateConfiguration(data: unknown): {
|
|
|
76
41
|
message: string;
|
|
77
42
|
}[];
|
|
78
43
|
};
|
|
44
|
+
export {};
|
|
79
45
|
//# sourceMappingURL=ConfigSchema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigSchema.d.ts","sourceRoot":"","sources":["../../src/config/ConfigSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"ConfigSchema.d.ts","sourceRoot":"","sources":["../../src/config/ConfigSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkCxB,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQvB,CAAC;AAGH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEzE;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9C,CAaA"}
|