capman 0.4.5 → 0.5.1
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/CHANGELOG.md +89 -0
- package/CODEBASE.md +94 -156
- package/README.md +23 -0
- package/bin/lib/cmd-generate.js +20 -3
- package/dist/cjs/cache.d.ts +6 -4
- package/dist/cjs/cache.d.ts.map +1 -1
- package/dist/cjs/cache.js +38 -11
- package/dist/cjs/cache.js.map +1 -1
- package/dist/cjs/engine.d.ts +46 -4
- package/dist/cjs/engine.d.ts.map +1 -1
- package/dist/cjs/engine.js +157 -211
- package/dist/cjs/engine.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/learning.d.ts +16 -1
- package/dist/cjs/learning.d.ts.map +1 -1
- package/dist/cjs/learning.js +161 -10
- package/dist/cjs/learning.js.map +1 -1
- package/dist/cjs/matcher.d.ts +23 -0
- package/dist/cjs/matcher.d.ts.map +1 -1
- package/dist/cjs/matcher.js +53 -18
- package/dist/cjs/matcher.js.map +1 -1
- package/dist/cjs/parser.js +15 -1
- package/dist/cjs/parser.js.map +1 -1
- package/dist/cjs/resolver.d.ts.map +1 -1
- package/dist/cjs/resolver.js +22 -5
- package/dist/cjs/resolver.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/cache.d.ts +6 -4
- package/dist/esm/cache.js +38 -11
- package/dist/esm/engine.d.ts +46 -4
- package/dist/esm/engine.js +158 -212
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/learning.d.ts +16 -1
- package/dist/esm/learning.js +161 -10
- package/dist/esm/matcher.d.ts +23 -0
- package/dist/esm/matcher.js +49 -16
- package/dist/esm/parser.js +15 -1
- package/dist/esm/resolver.js +22 -5
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +1 -1
package/dist/cjs/cache.js
CHANGED
|
@@ -65,10 +65,17 @@ class MemoryCache {
|
|
|
65
65
|
constructor() {
|
|
66
66
|
this.store = new Map();
|
|
67
67
|
}
|
|
68
|
-
async get(key) {
|
|
68
|
+
async get(key, ttlMs) {
|
|
69
69
|
const entry = this.store.get(key);
|
|
70
70
|
if (entry) {
|
|
71
|
+
if (ttlMs && Date.now() - new Date(entry.cachedAt).getTime() > ttlMs) {
|
|
72
|
+
this.store.delete(key);
|
|
73
|
+
logger_1.logger.debug(`Cache entry expired (memory): "${key}"`);
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
71
76
|
entry.hits++;
|
|
77
|
+
this.store.delete(key);
|
|
78
|
+
this.store.set(key, entry);
|
|
72
79
|
logger_1.logger.debug(`Cache hit (memory): "${key}"`);
|
|
73
80
|
return entry;
|
|
74
81
|
}
|
|
@@ -94,10 +101,12 @@ class MemoryCache {
|
|
|
94
101
|
}
|
|
95
102
|
exports.MemoryCache = MemoryCache;
|
|
96
103
|
// ─── File Cache ───────────────────────────────────────────────────────────────
|
|
104
|
+
const FILE_CACHE_MAX = 2048;
|
|
97
105
|
class FileCache {
|
|
98
106
|
constructor(filePath = '.capman/cache.json') {
|
|
99
107
|
this.store = new Map();
|
|
100
108
|
this.loaded = false;
|
|
109
|
+
this.saveQueue = Promise.resolve();
|
|
101
110
|
this.filePath = path.resolve(process.cwd(), filePath);
|
|
102
111
|
logger_1.logger.info(`FileCache initialized — writing to: ${this.filePath}`);
|
|
103
112
|
}
|
|
@@ -120,28 +129,47 @@ class FileCache {
|
|
|
120
129
|
}
|
|
121
130
|
this.loaded = true;
|
|
122
131
|
}
|
|
123
|
-
|
|
132
|
+
save() {
|
|
133
|
+
this.saveQueue = this.saveQueue.then(() => this._doSave());
|
|
134
|
+
return this.saveQueue;
|
|
135
|
+
}
|
|
136
|
+
async _doSave() {
|
|
124
137
|
try {
|
|
125
138
|
const dir = path.dirname(this.filePath);
|
|
126
139
|
await fs.promises.mkdir(dir, { recursive: true });
|
|
127
140
|
await fs.promises.writeFile(this.filePath, JSON.stringify(Object.fromEntries(this.store), null, 2));
|
|
128
141
|
}
|
|
129
|
-
catch {
|
|
130
|
-
logger_1.logger.warn(`Failed to save file cache to ${this.filePath}`);
|
|
142
|
+
catch (err) {
|
|
143
|
+
logger_1.logger.warn(`Failed to save file cache to ${this.filePath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
131
144
|
}
|
|
132
145
|
}
|
|
133
|
-
async get(key) {
|
|
146
|
+
async get(key, ttlMs) {
|
|
134
147
|
await this.load();
|
|
135
148
|
const entry = this.store.get(key);
|
|
136
149
|
if (entry) {
|
|
150
|
+
if (ttlMs && Date.now() - new Date(entry.cachedAt).getTime() > ttlMs) {
|
|
151
|
+
this.store.delete(key);
|
|
152
|
+
await this.save();
|
|
153
|
+
logger_1.logger.debug(`Cache entry expired (file): "${key}"`);
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
137
156
|
entry.hits++;
|
|
157
|
+
this.store.delete(key);
|
|
158
|
+
this.store.set(key, entry);
|
|
138
159
|
logger_1.logger.debug(`Cache hit (file): "${key}"`);
|
|
139
|
-
|
|
160
|
+
await this.save();
|
|
140
161
|
}
|
|
141
|
-
return null;
|
|
162
|
+
return entry ?? null;
|
|
142
163
|
}
|
|
143
164
|
async set(key, result) {
|
|
144
165
|
await this.load();
|
|
166
|
+
if (this.store.size >= FILE_CACHE_MAX) {
|
|
167
|
+
const oldest = this.store.keys().next().value;
|
|
168
|
+
if (oldest !== undefined) {
|
|
169
|
+
this.store.delete(oldest);
|
|
170
|
+
logger_1.logger.debug(`File cache evicted oldest entry (max size ${FILE_CACHE_MAX} reached)`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
145
173
|
this.store.set(key, {
|
|
146
174
|
query: key,
|
|
147
175
|
result,
|
|
@@ -167,14 +195,13 @@ class ComboCache {
|
|
|
167
195
|
this.memory = new MemoryCache();
|
|
168
196
|
this.file = new FileCache(filePath);
|
|
169
197
|
}
|
|
170
|
-
async get(key) {
|
|
171
|
-
const memHit = await this.memory.get(key);
|
|
198
|
+
async get(key, ttlMs) {
|
|
199
|
+
const memHit = await this.memory.get(key, ttlMs);
|
|
172
200
|
if (memHit)
|
|
173
201
|
return memHit;
|
|
174
|
-
const fileHit = await this.file.get(key);
|
|
202
|
+
const fileHit = await this.file.get(key, ttlMs);
|
|
175
203
|
if (fileHit) {
|
|
176
204
|
await this.memory.set(key, fileHit.result);
|
|
177
|
-
logger_1.logger.debug(`Cache promoted to memory: "${key}"`);
|
|
178
205
|
return fileHit;
|
|
179
206
|
}
|
|
180
207
|
return null;
|
package/dist/cjs/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,wCAEC;AASD,sCAYC;AAhDD,uCAAwB;AACxB,2CAA4B;AAE5B,qCAAiC;AAoBjC,iFAAiF;AAEjF,SAAgB,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AACxD,CAAC;AAED;;;;;GAKG;AAEH,SAAgB,aAAa,CAC3B,KAAa,EACb,YAA2B,EAC3B,eAA8C;IAE9C,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,cAAc,CAAC,KAAK,CAAC,EAAE,CAAA;IAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;SAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;SAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5B,IAAI,CAAC,GAAG,CAAC,CAAA;IACZ,OAAO,OAAO,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AAC/D,CAAC;AAED,iFAAiF;AAEjF,MAAM,gBAAgB,GAAG,GAAG,CAAA;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/engine.d.ts
CHANGED
|
@@ -2,8 +2,27 @@ import type { Manifest, MatchResult, ResolveResult, ExecutionTrace, ExplainResul
|
|
|
2
2
|
import type { LLMMatcherOptions } from './matcher';
|
|
3
3
|
import type { ResolveOptions, AuthContext } from './resolver';
|
|
4
4
|
import type { CacheStore } from './cache';
|
|
5
|
-
import type { LearningStore
|
|
5
|
+
import type { LearningStore } from './learning';
|
|
6
6
|
import type { MatchMode } from './index';
|
|
7
|
+
/**
|
|
8
|
+
* Options for constructing a CapmanEngine instance.
|
|
9
|
+
*
|
|
10
|
+
* ⚠️ CONCURRENCY: CapmanEngine is not safe for sharing across concurrent
|
|
11
|
+
* async request handlers. The LLM rate limiter, circuit breaker, and
|
|
12
|
+
* learning index cache are all instance-level mutable state. In an
|
|
13
|
+
* Express/Fastify/etc. server, either:
|
|
14
|
+
* (a) Create one engine per request — safest, no shared state
|
|
15
|
+
* (b) Use a single instance only with cheap mode (no LLM calls)
|
|
16
|
+
* (c) Add an external mutex around LLM calls if sharing is required
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // Safe — per-request engine
|
|
20
|
+
* app.post('/ask', async (req, res) => {
|
|
21
|
+
* const engine = new CapmanEngine({ manifest, llm, mode: 'balanced' })
|
|
22
|
+
* const result = await engine.ask(req.body.query)
|
|
23
|
+
* res.json(result)
|
|
24
|
+
* })
|
|
25
|
+
*/
|
|
7
26
|
export interface EngineOptions {
|
|
8
27
|
/** The capability manifest to use */
|
|
9
28
|
manifest: Manifest;
|
|
@@ -28,6 +47,19 @@ export interface EngineOptions {
|
|
|
28
47
|
headers?: Record<string, string>;
|
|
29
48
|
/** Confidence threshold for keyword matcher (default: 50) */
|
|
30
49
|
threshold?: number;
|
|
50
|
+
/**
|
|
51
|
+
* Optional TTL for cache entries in milliseconds.
|
|
52
|
+
* Entries older than this are treated as misses and evicted on read.
|
|
53
|
+
* Default: no expiry.
|
|
54
|
+
*
|
|
55
|
+
* Useful when capabilities are frequently updated or removed — ensures
|
|
56
|
+
* stale entries don't persist indefinitely after a manifest change.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* // Expire cache entries after 1 hour
|
|
60
|
+
* new CapmanEngine({ manifest, cacheTtlMs: 60 * 60 * 1000 })
|
|
61
|
+
*/
|
|
62
|
+
cacheTtlMs?: number;
|
|
31
63
|
/**
|
|
32
64
|
* Maximum LLM calls per minute in balanced/accurate mode.
|
|
33
65
|
* After limit is hit, falls back to keyword result.
|
|
@@ -70,12 +102,11 @@ export declare class CapmanEngine {
|
|
|
70
102
|
private auth?;
|
|
71
103
|
private headers?;
|
|
72
104
|
private threshold;
|
|
105
|
+
private cacheTtlMs;
|
|
73
106
|
private maxLLMCallsPerMinute;
|
|
74
107
|
private llmCooldownMs;
|
|
75
108
|
private llmCircuitBreakerThreshold;
|
|
76
109
|
private llmCircuitBreakerResetMs;
|
|
77
|
-
private cachedStats;
|
|
78
|
-
private statsInvalidated;
|
|
79
110
|
private llmCallsThisMinute;
|
|
80
111
|
private llmWindowStart;
|
|
81
112
|
private llmLastCallAt;
|
|
@@ -98,7 +129,7 @@ export declare class CapmanEngine {
|
|
|
98
129
|
* Get stats from the learning store.
|
|
99
130
|
* Shows which capabilities are most used, LLM vs keyword ratio, cache hit rate.
|
|
100
131
|
*/
|
|
101
|
-
getStats(): Promise<KeywordStats | null>;
|
|
132
|
+
getStats(): Promise<import("./learning").KeywordStats | null>;
|
|
102
133
|
/**
|
|
103
134
|
* Get the most frequently matched capabilities.
|
|
104
135
|
*/
|
|
@@ -141,6 +172,17 @@ export declare class CapmanEngine {
|
|
|
141
172
|
* Records a failed LLM call — may open the circuit breaker.
|
|
142
173
|
*/
|
|
143
174
|
private recordLLMFailure;
|
|
175
|
+
/**
|
|
176
|
+
* Runs the matching pipeline for a query — shared by ask() and explain().
|
|
177
|
+
* Handles cheap / balanced / accurate mode dispatch and LLM rate limiting.
|
|
178
|
+
* Returns the match result and which resolver was used.
|
|
179
|
+
*/
|
|
180
|
+
private _runMatch;
|
|
181
|
+
/**
|
|
182
|
+
* Applies learning boost to a MatchResult and returns the updated result.
|
|
183
|
+
* Shared by ask() and explain() to avoid logic divergence.
|
|
184
|
+
*/
|
|
185
|
+
private applyBoostToMatchResult;
|
|
144
186
|
/**
|
|
145
187
|
* Applies learning boost to match candidates based on historical usage.
|
|
146
188
|
* Capabilities that have previously matched similar keywords get a small
|
package/dist/cjs/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAa,aAAa,EAA4F,MAAM,SAAS,CAAA;AACvM,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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"}
|