capman 0.5.5 → 0.6.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 +1 -1
- package/bin/lib/cmd-generate.js +156 -12
- package/bin/lib/cmd-help.js +3 -0
- package/dist/cjs/cache.d.ts +9 -0
- package/dist/cjs/cache.d.ts.map +1 -1
- package/dist/cjs/cache.js +37 -7
- package/dist/cjs/cache.js.map +1 -1
- package/dist/cjs/engine.d.ts +68 -1
- package/dist/cjs/engine.d.ts.map +1 -1
- package/dist/cjs/engine.js +313 -13
- package/dist/cjs/engine.js.map +1 -1
- package/dist/cjs/generator.d.ts.map +1 -1
- package/dist/cjs/generator.js +28 -6
- package/dist/cjs/generator.js.map +1 -1
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +5 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/learning.d.ts +7 -0
- package/dist/cjs/learning.d.ts.map +1 -1
- package/dist/cjs/learning.js +44 -23
- package/dist/cjs/learning.js.map +1 -1
- package/dist/cjs/matcher.d.ts +92 -0
- package/dist/cjs/matcher.d.ts.map +1 -1
- package/dist/cjs/matcher.js +354 -35
- package/dist/cjs/matcher.js.map +1 -1
- package/dist/cjs/parser.js +27 -9
- package/dist/cjs/parser.js.map +1 -1
- package/dist/cjs/resolver.d.ts +2 -2
- package/dist/cjs/resolver.d.ts.map +1 -1
- package/dist/cjs/resolver.js +66 -26
- package/dist/cjs/resolver.js.map +1 -1
- package/dist/cjs/schema.d.ts +865 -94
- package/dist/cjs/schema.d.ts.map +1 -1
- package/dist/cjs/schema.js +62 -12
- package/dist/cjs/schema.js.map +1 -1
- package/dist/cjs/types.d.ts +153 -9
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/cache.d.ts +9 -0
- package/dist/esm/cache.js +37 -7
- package/dist/esm/engine.d.ts +68 -1
- package/dist/esm/engine.js +314 -14
- package/dist/esm/generator.js +28 -6
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/learning.d.ts +7 -0
- package/dist/esm/learning.js +45 -24
- package/dist/esm/matcher.d.ts +92 -0
- package/dist/esm/matcher.js +346 -35
- package/dist/esm/parser.js +27 -9
- package/dist/esm/resolver.d.ts +2 -2
- package/dist/esm/resolver.js +66 -26
- package/dist/esm/schema.d.ts +865 -94
- package/dist/esm/schema.js +62 -12
- package/dist/esm/types.d.ts +153 -9
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +1 -1
package/dist/cjs/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAgIvB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoB9B,CAAA;AAID,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASzB,CAAA;AAIF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,mBAAmB,CAQnE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,mBAAmB,CAQvE"}
|
package/dist/cjs/schema.js
CHANGED
|
@@ -10,16 +10,22 @@ const CapabilityParamSchema = zod_1.z.object({
|
|
|
10
10
|
description: zod_1.z.string().min(1, 'param description is required'),
|
|
11
11
|
required: zod_1.z.boolean(),
|
|
12
12
|
source: zod_1.z.enum(['user_query', 'session']),
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
pattern: zod_1.z.string().optional(),
|
|
14
|
+
type: zod_1.z.enum(['string', 'number', 'boolean', 'date', 'email', 'url', 'enum', 'object']).optional(),
|
|
15
|
+
enum: zod_1.z.array(zod_1.z.string()).optional(),
|
|
16
|
+
example: zod_1.z.string().optional(),
|
|
17
|
+
}).refine(p => !(p.type === 'enum' && (!p.enum || p.enum.length === 0)), { message: 'enum values required when type is "enum"' });
|
|
15
18
|
// ─── Resolver Schemas ─────────────────────────────────────────────────────────
|
|
19
|
+
const EndpointSchema = zod_1.z.object({
|
|
20
|
+
method: zod_1.z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']),
|
|
21
|
+
path: zod_1.z.string().min(1, 'endpoint path is required'),
|
|
22
|
+
params: zod_1.z.array(zod_1.z.string()).optional(),
|
|
23
|
+
idempotent: zod_1.z.boolean().optional(),
|
|
24
|
+
idempotencyKey: zod_1.z.string().optional(),
|
|
25
|
+
});
|
|
16
26
|
const ApiResolverSchema = zod_1.z.object({
|
|
17
27
|
type: zod_1.z.literal('api'),
|
|
18
|
-
endpoints: zod_1.z.array(
|
|
19
|
-
method: zod_1.z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']),
|
|
20
|
-
path: zod_1.z.string().min(1, 'endpoint path is required'),
|
|
21
|
-
params: zod_1.z.array(zod_1.z.string()).optional(),
|
|
22
|
-
})).min(1, 'at least one endpoint is required'),
|
|
28
|
+
endpoints: zod_1.z.array(EndpointSchema).min(1, 'at least one endpoint is required'),
|
|
23
29
|
});
|
|
24
30
|
const NavResolverSchema = zod_1.z.object({
|
|
25
31
|
type: zod_1.z.literal('nav'),
|
|
@@ -29,11 +35,7 @@ const NavResolverSchema = zod_1.z.object({
|
|
|
29
35
|
const HybridResolverSchema = zod_1.z.object({
|
|
30
36
|
type: zod_1.z.literal('hybrid'),
|
|
31
37
|
api: zod_1.z.object({
|
|
32
|
-
endpoints: zod_1.z.array(
|
|
33
|
-
method: zod_1.z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']),
|
|
34
|
-
path: zod_1.z.string().min(1),
|
|
35
|
-
params: zod_1.z.array(zod_1.z.string()).optional(),
|
|
36
|
-
})).min(1),
|
|
38
|
+
endpoints: zod_1.z.array(EndpointSchema).min(1),
|
|
37
39
|
}),
|
|
38
40
|
nav: zod_1.z.object({
|
|
39
41
|
destination: zod_1.z.string().min(1),
|
|
@@ -50,6 +52,22 @@ const PrivacyScopeSchema = zod_1.z.object({
|
|
|
50
52
|
level: zod_1.z.enum(['public', 'user_owned', 'admin']),
|
|
51
53
|
note: zod_1.z.string().optional(),
|
|
52
54
|
});
|
|
55
|
+
const LifecycleInfoSchema = zod_1.z.object({
|
|
56
|
+
status: zod_1.z.enum(['stable', 'beta', 'experimental', 'deprecated']),
|
|
57
|
+
deprecatedAt: zod_1.z.string().datetime().optional(),
|
|
58
|
+
sunsetAt: zod_1.z.string().datetime().optional(),
|
|
59
|
+
successor: zod_1.z.string().optional(),
|
|
60
|
+
note: zod_1.z.string().optional(),
|
|
61
|
+
});
|
|
62
|
+
const MatchHintSchema = zod_1.z.object({
|
|
63
|
+
preferredMode: zod_1.z.enum(['cheap', 'balanced', 'accurate']).optional(),
|
|
64
|
+
});
|
|
65
|
+
const CapabilityErrorSchema = zod_1.z.object({
|
|
66
|
+
code: zod_1.z.string().min(1, 'error code is required'),
|
|
67
|
+
description: zod_1.z.string().min(1, 'error description is required'),
|
|
68
|
+
httpStatus: zod_1.z.number().int().min(400).max(599).optional(),
|
|
69
|
+
retryable: zod_1.z.boolean().optional(),
|
|
70
|
+
});
|
|
53
71
|
// ─── Capability Schema ────────────────────────────────────────────────────────
|
|
54
72
|
const CapabilitySchema = zod_1.z.object({
|
|
55
73
|
id: zod_1.z.string().min(1, 'capability id is required')
|
|
@@ -63,11 +81,39 @@ const CapabilitySchema = zod_1.z.object({
|
|
|
63
81
|
returns: zod_1.z.array(zod_1.z.string()),
|
|
64
82
|
resolver: ResolverSchema,
|
|
65
83
|
privacy: PrivacyScopeSchema,
|
|
84
|
+
lifecycle: LifecycleInfoSchema.optional(),
|
|
85
|
+
tags: zod_1.z.array(zod_1.z.string().min(1)).optional(),
|
|
86
|
+
errors: zod_1.z.array(CapabilityErrorSchema).optional(),
|
|
87
|
+
matchHint: MatchHintSchema.optional(),
|
|
88
|
+
});
|
|
89
|
+
const ServerSchema = zod_1.z.object({
|
|
90
|
+
url: zod_1.z.string().url('server url must be a valid URL'),
|
|
91
|
+
description: zod_1.z.string().optional(),
|
|
92
|
+
environment: zod_1.z.string().optional(),
|
|
93
|
+
});
|
|
94
|
+
// ─── ManifestInfo Schema ──────────────────────────────────────────────────────
|
|
95
|
+
const ManifestInfoSchema = zod_1.z.object({
|
|
96
|
+
title: zod_1.z.string().optional(),
|
|
97
|
+
description: zod_1.z.string().optional(),
|
|
98
|
+
version: zod_1.z.string().optional(),
|
|
99
|
+
homepage: zod_1.z.string().url().optional(),
|
|
100
|
+
contact: zod_1.z.object({
|
|
101
|
+
name: zod_1.z.string().optional(),
|
|
102
|
+
email: zod_1.z.string().email().optional(),
|
|
103
|
+
url: zod_1.z.string().url().optional(),
|
|
104
|
+
}).optional(),
|
|
105
|
+
license: zod_1.z.object({
|
|
106
|
+
name: zod_1.z.string().min(1, 'license name is required'),
|
|
107
|
+
url: zod_1.z.string().url().optional(),
|
|
108
|
+
}).optional(),
|
|
66
109
|
});
|
|
67
110
|
// ─── Config Schema ────────────────────────────────────────────────────────────
|
|
68
111
|
exports.CapmanConfigSchema = zod_1.z.object({
|
|
69
112
|
app: zod_1.z.string().min(1, 'app name is required'),
|
|
70
113
|
baseUrl: zod_1.z.string().url().optional(),
|
|
114
|
+
info: ManifestInfoSchema.optional(),
|
|
115
|
+
servers: zod_1.z.array(ServerSchema).optional(),
|
|
116
|
+
tagRegistry: zod_1.z.record(zod_1.z.object({ description: zod_1.z.string() })).optional(),
|
|
71
117
|
capabilities: zod_1.z.array(CapabilitySchema)
|
|
72
118
|
.min(1, 'at least one capability is required')
|
|
73
119
|
.refine(caps => new Set(caps.map(c => c.id)).size === caps.length, 'capability ids must be unique'),
|
|
@@ -77,10 +123,14 @@ exports.CapmanConfigSchema = zod_1.z.object({
|
|
|
77
123
|
}, { message: 'baseUrl is required when any capability uses an api or hybrid resolver' });
|
|
78
124
|
// ─── Manifest Schema ──────────────────────────────────────────────────────────
|
|
79
125
|
exports.ManifestSchema = zod_1.z.object({
|
|
126
|
+
schemaVersion: zod_1.z.string().min(1, 'schemaVersion is required'),
|
|
80
127
|
version: zod_1.z.string(),
|
|
81
128
|
app: zod_1.z.string().min(1),
|
|
82
129
|
generatedAt: zod_1.z.string().datetime(),
|
|
83
130
|
capabilities: zod_1.z.array(CapabilitySchema).min(1),
|
|
131
|
+
tagRegistry: zod_1.z.record(zod_1.z.object({ description: zod_1.z.string() })).optional(),
|
|
132
|
+
servers: zod_1.z.array(ServerSchema).optional(),
|
|
133
|
+
info: ManifestInfoSchema.optional(),
|
|
84
134
|
});
|
|
85
135
|
function validateConfig(config) {
|
|
86
136
|
const result = exports.CapmanConfigSchema.safeParse(config);
|
package/dist/cjs/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -1,19 +1,58 @@
|
|
|
1
1
|
export type ResolverType = 'api' | 'nav' | 'hybrid';
|
|
2
|
-
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
2
|
+
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
|
|
3
|
+
export type ParamType = 'string' | 'number' | 'boolean' | 'date' | 'email' | 'url' | 'enum' | 'object';
|
|
3
4
|
export interface CapabilityParam {
|
|
4
5
|
name: string;
|
|
5
6
|
description: string;
|
|
6
7
|
required: boolean;
|
|
7
8
|
source: 'user_query' | 'session';
|
|
8
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Optional extraction hint. Either a named type or an example template.
|
|
11
|
+
* Named types: 'email' | 'date' | 'orderId' | 'url'
|
|
12
|
+
* Example template: "order {paramName}" — extracts token after "order"
|
|
13
|
+
*/
|
|
14
|
+
pattern?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Semantic type of the parameter value.
|
|
17
|
+
* When set, implies a TYPE_PATTERNS match without requiring pattern to be set.
|
|
18
|
+
* 'email', 'date', 'url' map directly to TYPE_PATTERNS regex.
|
|
19
|
+
* 'enum' requires the enum field to be set with allowed values.
|
|
20
|
+
* 'number', 'boolean', 'object' affect coercion in LLM extraction.
|
|
21
|
+
*/
|
|
22
|
+
type?: ParamType;
|
|
23
|
+
/**
|
|
24
|
+
* Allowed values when type === 'enum'.
|
|
25
|
+
* Extracted values not in this list are rejected and added to missingParams.
|
|
26
|
+
*/
|
|
27
|
+
enum?: string[];
|
|
28
|
+
/**
|
|
29
|
+
* Single concrete example for LLM param prompting.
|
|
30
|
+
* Helps the LLM understand what a valid value looks like.
|
|
31
|
+
* e.g. example: "ORD-12345"
|
|
32
|
+
*/
|
|
33
|
+
example?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface Endpoint {
|
|
36
|
+
method: HttpMethod;
|
|
37
|
+
path: string;
|
|
38
|
+
params?: string[];
|
|
39
|
+
/**
|
|
40
|
+
* Whether this endpoint is idempotent — safe to retry on failure.
|
|
41
|
+
* Defaults: true for GET/HEAD/OPTIONS, false for POST/PUT/PATCH/DELETE.
|
|
42
|
+
* Set explicitly to override — e.g. `idempotent: true` on a POST
|
|
43
|
+
* with an idempotency key allows retries without `retryAllMethods: true`.
|
|
44
|
+
*/
|
|
45
|
+
idempotent?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Name of the param whose value is sent as the `Idempotency-Key` header.
|
|
48
|
+
* When set and the param is available, the header is injected automatically.
|
|
49
|
+
* e.g. idempotencyKey: 'order_id' → `Idempotency-Key: ORD-12345`
|
|
50
|
+
*/
|
|
51
|
+
idempotencyKey?: string;
|
|
9
52
|
}
|
|
10
53
|
export interface ApiResolver {
|
|
11
54
|
type: 'api';
|
|
12
|
-
endpoints:
|
|
13
|
-
method: HttpMethod;
|
|
14
|
-
path: string;
|
|
15
|
-
params?: string[];
|
|
16
|
-
}>;
|
|
55
|
+
endpoints: Endpoint[];
|
|
17
56
|
}
|
|
18
57
|
export interface NavResolver {
|
|
19
58
|
type: 'nav';
|
|
@@ -30,6 +69,41 @@ export interface PrivacyScope {
|
|
|
30
69
|
level: 'public' | 'user_owned' | 'admin';
|
|
31
70
|
note?: string;
|
|
32
71
|
}
|
|
72
|
+
export type LifecycleStatus = 'stable' | 'beta' | 'experimental' | 'deprecated';
|
|
73
|
+
export interface LifecycleInfo {
|
|
74
|
+
status: LifecycleStatus;
|
|
75
|
+
/** ISO 8601 — when the capability was deprecated */
|
|
76
|
+
deprecatedAt?: string;
|
|
77
|
+
/** ISO 8601 — when the capability will stop working */
|
|
78
|
+
sunsetAt?: string;
|
|
79
|
+
/** Capability id to use instead of this one */
|
|
80
|
+
successor?: string;
|
|
81
|
+
/** Human-readable note for consumers */
|
|
82
|
+
note?: string;
|
|
83
|
+
}
|
|
84
|
+
export interface MatchHint {
|
|
85
|
+
/**
|
|
86
|
+
* Advisory preferred matching mode for this capability.
|
|
87
|
+
* The engine logs when it ignores the hint (e.g. engine is in cheap mode
|
|
88
|
+
* but capability prefers accurate). Never enforced — library must not
|
|
89
|
+
* restrict what consumers can do.
|
|
90
|
+
*/
|
|
91
|
+
preferredMode?: MatchMode;
|
|
92
|
+
}
|
|
93
|
+
export interface CapabilityError {
|
|
94
|
+
/** Machine-readable error code e.g. "ORDER_NOT_FOUND", "INSUFFICIENT_FUNDS" */
|
|
95
|
+
code: string;
|
|
96
|
+
/** Human-readable description for developers */
|
|
97
|
+
description: string;
|
|
98
|
+
/** HTTP status code this error maps to */
|
|
99
|
+
httpStatus?: number;
|
|
100
|
+
/**
|
|
101
|
+
* Whether the agent should retry after this error.
|
|
102
|
+
* true — transient (503, timeout) — retry is safe
|
|
103
|
+
* false — permanent (422, 404) — retrying won't help, ask user
|
|
104
|
+
*/
|
|
105
|
+
retryable?: boolean;
|
|
106
|
+
}
|
|
33
107
|
export interface Capability {
|
|
34
108
|
id: string;
|
|
35
109
|
name: string;
|
|
@@ -39,17 +113,82 @@ export interface Capability {
|
|
|
39
113
|
returns: string[];
|
|
40
114
|
resolver: Resolver;
|
|
41
115
|
privacy: PrivacyScope;
|
|
116
|
+
/** Lifecycle status — defaults to 'stable' when absent */
|
|
117
|
+
lifecycle?: LifecycleInfo;
|
|
118
|
+
/** Tags for grouping and filtering capabilities */
|
|
119
|
+
tags?: string[];
|
|
120
|
+
errors?: CapabilityError[];
|
|
121
|
+
matchHint?: MatchHint;
|
|
122
|
+
}
|
|
123
|
+
export interface ManifestInfo {
|
|
124
|
+
/** Human-readable title for the app */
|
|
125
|
+
title?: string;
|
|
126
|
+
/** Brief description of what the app does */
|
|
127
|
+
description?: string;
|
|
128
|
+
/** App's own version — distinct from capman package version */
|
|
129
|
+
version?: string;
|
|
130
|
+
/** URL to the app's homepage or documentation */
|
|
131
|
+
homepage?: string;
|
|
132
|
+
contact?: {
|
|
133
|
+
name?: string;
|
|
134
|
+
email?: string;
|
|
135
|
+
url?: string;
|
|
136
|
+
};
|
|
137
|
+
license?: {
|
|
138
|
+
/** SPDX license identifier e.g. "MIT", "Apache-2.0" */
|
|
139
|
+
name: string;
|
|
140
|
+
url?: string;
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
export interface Server {
|
|
144
|
+
url: string;
|
|
145
|
+
description?: string;
|
|
146
|
+
/**
|
|
147
|
+
* Environment this server belongs to.
|
|
148
|
+
* Engine selects server by matching EngineOptions.environment.
|
|
149
|
+
* Fallback: first server in array when no environment matches.
|
|
150
|
+
*/
|
|
151
|
+
environment?: 'production' | 'staging' | 'development' | string;
|
|
42
152
|
}
|
|
43
153
|
export interface Manifest {
|
|
154
|
+
/**
|
|
155
|
+
* Manifest format version — independent of the capman package version.
|
|
156
|
+
* Consumers use this to determine which parser/validator to apply.
|
|
157
|
+
* "1" = v0.6+ schema (tags, lifecycle, typed params, servers, etc.)
|
|
158
|
+
*/
|
|
159
|
+
schemaVersion: string;
|
|
160
|
+
/** capman package version that generated this manifest */
|
|
44
161
|
version: string;
|
|
45
162
|
app: string;
|
|
46
163
|
generatedAt: string;
|
|
47
164
|
capabilities: Capability[];
|
|
165
|
+
/**
|
|
166
|
+
* Optional registry of known tags with descriptions.
|
|
167
|
+
* Used for documentation and validation — not required for tags to work.
|
|
168
|
+
*/
|
|
169
|
+
tagRegistry?: Record<string, {
|
|
170
|
+
description: string;
|
|
171
|
+
}>;
|
|
172
|
+
/** Optional metadata block for documentation and provenance */
|
|
173
|
+
info?: ManifestInfo;
|
|
174
|
+
/**
|
|
175
|
+
* Server definitions. When present, engine selects baseUrl from this list.
|
|
176
|
+
* Falls back to EngineOptions.baseUrl if servers is absent or no match found.
|
|
177
|
+
*/
|
|
178
|
+
servers?: Server[];
|
|
48
179
|
}
|
|
49
180
|
export interface CapmanConfig {
|
|
50
181
|
app: string;
|
|
51
182
|
baseUrl?: string;
|
|
52
183
|
capabilities: Capability[];
|
|
184
|
+
/** Optional metadata — written to manifest.info */
|
|
185
|
+
info?: ManifestInfo;
|
|
186
|
+
/** Optional tag registry — written to manifest.tagRegistry */
|
|
187
|
+
tagRegistry?: Record<string, {
|
|
188
|
+
description: string;
|
|
189
|
+
}>;
|
|
190
|
+
/** Server definitions — written to manifest.servers */
|
|
191
|
+
servers?: Server[];
|
|
53
192
|
}
|
|
54
193
|
export interface MatchResult {
|
|
55
194
|
capability: Capability | null;
|
|
@@ -68,15 +207,20 @@ export interface ApiCallResult {
|
|
|
68
207
|
status?: number;
|
|
69
208
|
/** Parsed JSON response body — only present when actually executed */
|
|
70
209
|
data?: unknown;
|
|
210
|
+
/** Error message — only present on network-level failure (status 0) */
|
|
211
|
+
error?: string;
|
|
71
212
|
}
|
|
72
213
|
export interface ResolveResult {
|
|
73
214
|
success: boolean;
|
|
74
215
|
resolverType: ResolverType | null;
|
|
216
|
+
error?: string;
|
|
217
|
+
/** Structured error from capability.errors[] when httpStatus matches */
|
|
218
|
+
matchedError?: CapabilityError;
|
|
75
219
|
apiCalls?: ApiCallResult[];
|
|
76
220
|
navTarget?: string;
|
|
77
|
-
|
|
221
|
+
status?: number;
|
|
222
|
+
data?: unknown;
|
|
78
223
|
durationMs?: number;
|
|
79
|
-
error?: string;
|
|
80
224
|
}
|
|
81
225
|
export interface ValidationResult {
|
|
82
226
|
valid: boolean;
|
package/dist/cjs/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAA;AACnD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
1
|
+
export declare const VERSION = "0.6.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cjs/version.js
CHANGED
package/dist/esm/cache.d.ts
CHANGED
|
@@ -31,10 +31,19 @@ export declare class FileCache implements CacheStore {
|
|
|
31
31
|
private store;
|
|
32
32
|
private loadPromise;
|
|
33
33
|
private saveQueue;
|
|
34
|
+
private dirty;
|
|
35
|
+
private saveTimer;
|
|
34
36
|
constructor(filePath?: string);
|
|
35
37
|
private load;
|
|
36
38
|
private _doLoad;
|
|
37
39
|
private save;
|
|
40
|
+
/**
|
|
41
|
+
* Debounced save — batches evictions and rapid writes into a single disk flush.
|
|
42
|
+
* Prevents a flurry of full-file writes when many TTL-expired entries are read
|
|
43
|
+
* in quick succession (e.g. after a server restart with a stale cache file).
|
|
44
|
+
* Mirrors the scheduleSave() pattern in FileLearningStore.
|
|
45
|
+
*/
|
|
46
|
+
private scheduleSave;
|
|
38
47
|
private _doSave;
|
|
39
48
|
get(key: string, ttlMs?: number): Promise<CacheEntry | null>;
|
|
40
49
|
set(key: string, result: MatchResult): Promise<void>;
|
package/dist/esm/cache.js
CHANGED
|
@@ -73,6 +73,8 @@ export class FileCache {
|
|
|
73
73
|
this.store = new Map();
|
|
74
74
|
this.loadPromise = null;
|
|
75
75
|
this.saveQueue = Promise.resolve();
|
|
76
|
+
this.dirty = false;
|
|
77
|
+
this.saveTimer = null;
|
|
76
78
|
const cwd = process.cwd();
|
|
77
79
|
const resolved = path.resolve(cwd, filePath);
|
|
78
80
|
const allowedPrefix = cwd === '/' ? '/' : cwd + path.sep;
|
|
@@ -102,12 +104,20 @@ export class FileCache {
|
|
|
102
104
|
// e.g. "Show me articles" and "show me articles" collapse to the same key.
|
|
103
105
|
const normalized = new Map();
|
|
104
106
|
for (const [k, v] of Object.entries(parsed)) {
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
107
|
+
// Validate entry structure before accepting — a corrupted entry
|
|
108
|
+
// (null result, missing cachedAt) would cause runtime errors deep
|
|
109
|
+
// in the engine when capability fields are accessed.
|
|
110
|
+
if (v !== null && typeof v === 'object' &&
|
|
111
|
+
'result' in v && v.result !== null &&
|
|
112
|
+
typeof v.cachedAt === 'string') {
|
|
113
|
+
const storeKey = (k.startsWith('cap:') || k.startsWith('query:'))
|
|
114
|
+
? k
|
|
115
|
+
: normalizeQuery(k);
|
|
116
|
+
normalized.set(storeKey, v);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
logger.warn(`File cache: skipping invalid entry for key "${k}"`);
|
|
120
|
+
}
|
|
111
121
|
}
|
|
112
122
|
this.store = normalized;
|
|
113
123
|
logger.debug(`File cache loaded: ${this.store.size} entries`);
|
|
@@ -128,6 +138,24 @@ export class FileCache {
|
|
|
128
138
|
this.saveQueue = this.saveQueue.then(() => this._doSave());
|
|
129
139
|
return this.saveQueue;
|
|
130
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Debounced save — batches evictions and rapid writes into a single disk flush.
|
|
143
|
+
* Prevents a flurry of full-file writes when many TTL-expired entries are read
|
|
144
|
+
* in quick succession (e.g. after a server restart with a stale cache file).
|
|
145
|
+
* Mirrors the scheduleSave() pattern in FileLearningStore.
|
|
146
|
+
*/
|
|
147
|
+
scheduleSave(urgencyMs = 5_000) {
|
|
148
|
+
this.dirty = true;
|
|
149
|
+
if (!this.saveTimer) {
|
|
150
|
+
this.saveTimer = setTimeout(() => {
|
|
151
|
+
this.saveTimer = null;
|
|
152
|
+
if (this.dirty) {
|
|
153
|
+
this.dirty = false;
|
|
154
|
+
this.save();
|
|
155
|
+
}
|
|
156
|
+
}, urgencyMs);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
131
159
|
async _doSave() {
|
|
132
160
|
try {
|
|
133
161
|
const dir = path.dirname(this.filePath);
|
|
@@ -147,7 +175,9 @@ export class FileCache {
|
|
|
147
175
|
return null;
|
|
148
176
|
if (ttlMs && Date.now() - new Date(entry.cachedAt).getTime() > ttlMs) {
|
|
149
177
|
this.store.delete(key);
|
|
150
|
-
|
|
178
|
+
// Batch the eviction write — immediate save() on every expired read causes
|
|
179
|
+
// a full file rewrite per request during cold-start with a stale cache.
|
|
180
|
+
this.scheduleSave();
|
|
151
181
|
logger.debug(`Cache entry expired (file): "${key}"`);
|
|
152
182
|
return null;
|
|
153
183
|
}
|
package/dist/esm/engine.d.ts
CHANGED
|
@@ -47,6 +47,10 @@ export interface EngineOptions {
|
|
|
47
47
|
headers?: Record<string, string>;
|
|
48
48
|
/** Confidence threshold for keyword matcher (default: 50) */
|
|
49
49
|
threshold?: number;
|
|
50
|
+
/** BM25 TF saturation parameter (default: 1.5) */
|
|
51
|
+
bm25K1?: number;
|
|
52
|
+
/** BM25 length normalization parameter (default: 0.75) */
|
|
53
|
+
bm25B?: number;
|
|
50
54
|
/**
|
|
51
55
|
* Optional TTL for cache entries in milliseconds.
|
|
52
56
|
* Entries older than this are treated as misses and evicted on read.
|
|
@@ -97,14 +101,42 @@ export interface EngineOptions {
|
|
|
97
101
|
* @default 0.4
|
|
98
102
|
*/
|
|
99
103
|
fuzzyThreshold?: number;
|
|
104
|
+
/**
|
|
105
|
+
* When true, a 'marginal' verdict in balanced/accurate mode triggers a
|
|
106
|
+
* targeted LLM disambiguation between the top-2 candidates.
|
|
107
|
+
* Uses ~200 tokens vs ~4000 for full manifest — 93% cost reduction.
|
|
108
|
+
* Has no effect in cheap mode or when no llm is provided.
|
|
109
|
+
* @default false
|
|
110
|
+
*/
|
|
111
|
+
marginAwareLLM?: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Override the adaptive margin threshold (0-100 points).
|
|
114
|
+
* When undefined, calibrated automatically from manifest score distribution.
|
|
115
|
+
*/
|
|
116
|
+
adaptiveMarginOverride?: number;
|
|
117
|
+
/**
|
|
118
|
+
* Target environment for server selection from manifest.servers[].
|
|
119
|
+
* When manifest.servers is present and this matches a server's environment,
|
|
120
|
+
* that server's URL is used as baseUrl.
|
|
121
|
+
* Falls back to first server, then EngineOptions.baseUrl if no match.
|
|
122
|
+
*/
|
|
123
|
+
environment?: string;
|
|
100
124
|
}
|
|
101
125
|
export interface EngineResult {
|
|
102
126
|
match: MatchResult;
|
|
103
127
|
resolution: ResolveResult;
|
|
104
128
|
resolvedVia: 'cache' | 'keyword' | 'llm';
|
|
105
129
|
durationMs: number;
|
|
106
|
-
/** Full execution trace — always present */
|
|
107
130
|
trace: ExecutionTrace;
|
|
131
|
+
verdict: 'clear' | 'marginal' | 'uncertain';
|
|
132
|
+
margin: number;
|
|
133
|
+
/**
|
|
134
|
+
* Required params that could not be extracted from the query.
|
|
135
|
+
* Only populated when extraction failed AND LLM was not used.
|
|
136
|
+
* When present, the agent should prompt the user for these values.
|
|
137
|
+
* Undefined when all required params were successfully extracted.
|
|
138
|
+
*/
|
|
139
|
+
missingParams?: string[];
|
|
108
140
|
}
|
|
109
141
|
export declare class CapmanEngine {
|
|
110
142
|
/** Maximum allowed query length in characters. Queries exceeding this throw RangeError. */
|
|
@@ -121,6 +153,13 @@ export declare class CapmanEngine {
|
|
|
121
153
|
private cacheTtlMs;
|
|
122
154
|
private fuzzyMatch;
|
|
123
155
|
private fuzzyThreshold;
|
|
156
|
+
private bm25Index;
|
|
157
|
+
private bm25Ceiling;
|
|
158
|
+
private bm25K1;
|
|
159
|
+
private bm25B;
|
|
160
|
+
private marginAwareLLM;
|
|
161
|
+
private adaptiveMargin;
|
|
162
|
+
private environment?;
|
|
124
163
|
private maxLLMCallsPerMinute;
|
|
125
164
|
private llmCooldownMs;
|
|
126
165
|
private llmCircuitBreakerThreshold;
|
|
@@ -160,6 +199,8 @@ export declare class CapmanEngine {
|
|
|
160
199
|
*/
|
|
161
200
|
clearCache(): Promise<void>;
|
|
162
201
|
private checkManifestVersion;
|
|
202
|
+
private checkCapabilityLifecycle;
|
|
203
|
+
private checkMatchHint;
|
|
163
204
|
/**
|
|
164
205
|
* Replaces the active manifest without creating a new engine instance.
|
|
165
206
|
* Useful for hot-reloading manifests in long-running servers without
|
|
@@ -221,6 +262,32 @@ export declare class CapmanEngine {
|
|
|
221
262
|
* score boost — capped at +15 to avoid overriding strong keyword matches.
|
|
222
263
|
*/
|
|
223
264
|
private applyLearningBoost;
|
|
265
|
+
/**
|
|
266
|
+
* Resolves the effective baseUrl from manifest.servers[] or EngineOptions.baseUrl.
|
|
267
|
+
* Priority: environment-matched server > first server > explicit baseUrl > undefined
|
|
268
|
+
*/
|
|
269
|
+
private resolveBaseUrl;
|
|
224
270
|
private resolveOptions;
|
|
225
271
|
private recordLearning;
|
|
272
|
+
private calibrateBM25Ceiling;
|
|
273
|
+
/**
|
|
274
|
+
* Calibrates the adaptive margin threshold from the manifest's own score
|
|
275
|
+
* distribution. Runs each capability's first example against all other
|
|
276
|
+
* capabilities to find the typical inter-capability score spread.
|
|
277
|
+
* Dense overlapping vocabulary → lower margin (harder to separate).
|
|
278
|
+
* Sparse vocabulary → higher margin (easier to separate).
|
|
279
|
+
*
|
|
280
|
+
* Complexity: O(capabilities²) — runs at constructor time and on loadManifest().
|
|
281
|
+
* For manifests with ≤100 capabilities this is negligible (<10ms).
|
|
282
|
+
* For very large manifests (500+ capabilities), consider passing
|
|
283
|
+
* `adaptiveMarginOverride` to skip calibration.
|
|
284
|
+
*/
|
|
285
|
+
private calibrateAdaptiveMargin;
|
|
286
|
+
private computeVerdict;
|
|
287
|
+
/**
|
|
288
|
+
* Targeted disambiguation between top-2 candidates.
|
|
289
|
+
* Sends ~200 tokens instead of full manifest (~4000 tokens) — 93% cost reduction.
|
|
290
|
+
* Returns updated matchResult with LLM-preferred winner, or original on failure.
|
|
291
|
+
*/
|
|
292
|
+
private disambiguateLLM;
|
|
226
293
|
}
|