hackwriter 0.0.11 → 0.0.13
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 +6 -6
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +7 -8
- 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 +5 -3
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Logger } from './Logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Optimized rate limiter using sliding window algorithm
|
|
4
|
+
* More efficient than filtering entire array on every request
|
|
5
|
+
*/
|
|
6
|
+
export class SlidingWindowRateLimiter {
|
|
7
|
+
maxRequests;
|
|
8
|
+
windowMs;
|
|
9
|
+
requests = [];
|
|
10
|
+
/**
|
|
11
|
+
* @param maxRequests - Maximum number of requests allowed
|
|
12
|
+
* @param windowMs - Time window in milliseconds
|
|
13
|
+
*/
|
|
14
|
+
constructor(maxRequests, windowMs) {
|
|
15
|
+
this.maxRequests = maxRequests;
|
|
16
|
+
this.windowMs = windowMs;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Acquire permission to make a request
|
|
20
|
+
* Will wait if rate limit is exceeded
|
|
21
|
+
*/
|
|
22
|
+
async acquire() {
|
|
23
|
+
const now = Date.now();
|
|
24
|
+
const windowStart = now - this.windowMs;
|
|
25
|
+
// Remove expired entries from the front (O(1) amortized)
|
|
26
|
+
while (this.requests.length > 0 && this.requests[0] < windowStart) {
|
|
27
|
+
this.requests.shift();
|
|
28
|
+
}
|
|
29
|
+
if (this.requests.length >= this.maxRequests) {
|
|
30
|
+
const oldestRequest = this.requests[0];
|
|
31
|
+
const waitTime = this.windowMs - (now - oldestRequest);
|
|
32
|
+
Logger.debug('SlidingWindowRateLimiter', `Rate limit reached, waiting ${waitTime}ms`, { maxRequests: this.maxRequests, windowMs: this.windowMs });
|
|
33
|
+
await new Promise(resolve => setTimeout(resolve, waitTime));
|
|
34
|
+
return this.acquire(); // Retry after waiting
|
|
35
|
+
}
|
|
36
|
+
// Add new request timestamp (maintains chronological order)
|
|
37
|
+
this.requests.push(now);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if a request can be made without waiting
|
|
41
|
+
*/
|
|
42
|
+
canAcquire() {
|
|
43
|
+
const now = Date.now();
|
|
44
|
+
const windowStart = now - this.windowMs;
|
|
45
|
+
// Remove expired entries
|
|
46
|
+
while (this.requests.length > 0 && this.requests[0] < windowStart) {
|
|
47
|
+
this.requests.shift();
|
|
48
|
+
}
|
|
49
|
+
return this.requests.length < this.maxRequests;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get current usage statistics
|
|
53
|
+
*/
|
|
54
|
+
getStats() {
|
|
55
|
+
const now = Date.now();
|
|
56
|
+
const windowStart = now - this.windowMs;
|
|
57
|
+
// Remove expired entries
|
|
58
|
+
while (this.requests.length > 0 && this.requests[0] < windowStart) {
|
|
59
|
+
this.requests.shift();
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
current: this.requests.length,
|
|
63
|
+
max: this.maxRequests,
|
|
64
|
+
windowMs: this.windowMs,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Reset the rate limiter
|
|
69
|
+
*/
|
|
70
|
+
reset() {
|
|
71
|
+
this.requests = [];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=SlidingWindowRateLimiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SlidingWindowRateLimiter.js","sourceRoot":"","sources":["../../src/utils/SlidingWindowRateLimiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;GAGG;AACH,MAAM,OAAO,wBAAwB;IAQzB;IACA;IARF,QAAQ,GAAa,EAAE,CAAC;IAEhC;;;OAGG;IACH,YACU,WAAmB,EACnB,QAAgB;QADhB,gBAAW,GAAX,WAAW,CAAQ;QACnB,aAAQ,GAAR,QAAQ,CAAQ;IACvB,CAAC;IAEJ;;;OAGG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QAExC,yDAAyD;QACzD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC;YAClE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC;YAEvD,MAAM,CAAC,KAAK,CACV,0BAA0B,EAC1B,+BAA+B,QAAQ,IAAI,EAC3C,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC3D,CAAC;YAEF,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,sBAAsB;QAC/C,CAAC;QAED,4DAA4D;QAC5D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QAExC,yBAAyB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC;YAClE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QAExC,yBAAyB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC;YAClE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;YAC7B,GAAG,EAAE,IAAI,CAAC,WAAW;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hackwriter",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"description": "Writing agent for HackMD",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cli.js",
|
|
@@ -38,7 +38,6 @@
|
|
|
38
38
|
"commander": "^14.0.2",
|
|
39
39
|
"ollama-ai-provider-v2": "^3.0.1",
|
|
40
40
|
"ora": "^9.0.0",
|
|
41
|
-
"uuid": "^13.0.0",
|
|
42
41
|
"zod": "^4.1.13"
|
|
43
42
|
},
|
|
44
43
|
"devDependencies": {
|
|
@@ -48,6 +47,7 @@
|
|
|
48
47
|
"@vitest/coverage-v8": "^4.0.13",
|
|
49
48
|
"@vitest/ui": "^4.0.13",
|
|
50
49
|
"eslint": "^9.39.1",
|
|
50
|
+
"knip": "^5.82.1",
|
|
51
51
|
"tsx": "^4.20.6",
|
|
52
52
|
"typescript": "^5.9.3",
|
|
53
53
|
"typescript-eslint": "^8.47.0",
|
|
@@ -61,8 +61,10 @@
|
|
|
61
61
|
"dev": "tsx src/cli.ts",
|
|
62
62
|
"start": "node dist/cli.js",
|
|
63
63
|
"typecheck": "tsc --noEmit",
|
|
64
|
+
"lint": "eslint --fix",
|
|
65
|
+
"knip": "knip --fix",
|
|
64
66
|
"test": "vitest run",
|
|
65
|
-
"
|
|
67
|
+
"check": "pnpm run typecheck && pnpm run lint && pnpm run knip",
|
|
66
68
|
"release": "pnpx standard-version && git push --follow-tags && pnpm publish"
|
|
67
69
|
}
|
|
68
70
|
}
|