capman 0.6.0 → 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.
Files changed (57) hide show
  1. package/dist/cjs/cache.d.ts +9 -0
  2. package/dist/cjs/cache.d.ts.map +1 -1
  3. package/dist/cjs/cache.js +37 -7
  4. package/dist/cjs/cache.js.map +1 -1
  5. package/dist/cjs/engine.d.ts +15 -0
  6. package/dist/cjs/engine.d.ts.map +1 -1
  7. package/dist/cjs/engine.js +111 -21
  8. package/dist/cjs/engine.js.map +1 -1
  9. package/dist/cjs/generator.d.ts.map +1 -1
  10. package/dist/cjs/generator.js +28 -6
  11. package/dist/cjs/generator.js.map +1 -1
  12. package/dist/cjs/index.d.ts +2 -1
  13. package/dist/cjs/index.d.ts.map +1 -1
  14. package/dist/cjs/index.js +3 -1
  15. package/dist/cjs/index.js.map +1 -1
  16. package/dist/cjs/learning.d.ts +7 -0
  17. package/dist/cjs/learning.d.ts.map +1 -1
  18. package/dist/cjs/learning.js +35 -8
  19. package/dist/cjs/learning.js.map +1 -1
  20. package/dist/cjs/matcher.d.ts +38 -1
  21. package/dist/cjs/matcher.d.ts.map +1 -1
  22. package/dist/cjs/matcher.js +106 -23
  23. package/dist/cjs/matcher.js.map +1 -1
  24. package/dist/cjs/parser.js +27 -9
  25. package/dist/cjs/parser.js.map +1 -1
  26. package/dist/cjs/resolver.d.ts +2 -2
  27. package/dist/cjs/resolver.d.ts.map +1 -1
  28. package/dist/cjs/resolver.js +66 -26
  29. package/dist/cjs/resolver.js.map +1 -1
  30. package/dist/cjs/schema.d.ts +821 -68
  31. package/dist/cjs/schema.d.ts.map +1 -1
  32. package/dist/cjs/schema.js +61 -12
  33. package/dist/cjs/schema.js.map +1 -1
  34. package/dist/cjs/types.d.ts +147 -9
  35. package/dist/cjs/types.d.ts.map +1 -1
  36. package/dist/cjs/version.d.ts +1 -1
  37. package/dist/cjs/version.js +1 -1
  38. package/dist/esm/cache.d.ts +9 -0
  39. package/dist/esm/cache.js +37 -7
  40. package/dist/esm/engine.d.ts +15 -0
  41. package/dist/esm/engine.js +112 -22
  42. package/dist/esm/generator.js +28 -6
  43. package/dist/esm/index.d.ts +2 -1
  44. package/dist/esm/index.js +1 -0
  45. package/dist/esm/learning.d.ts +7 -0
  46. package/dist/esm/learning.js +35 -8
  47. package/dist/esm/matcher.d.ts +38 -1
  48. package/dist/esm/matcher.js +104 -23
  49. package/dist/esm/parser.js +27 -9
  50. package/dist/esm/resolver.d.ts +2 -2
  51. package/dist/esm/resolver.js +66 -26
  52. package/dist/esm/schema.d.ts +821 -68
  53. package/dist/esm/schema.js +61 -12
  54. package/dist/esm/types.d.ts +147 -9
  55. package/dist/esm/version.d.ts +1 -1
  56. package/dist/esm/version.js +1 -1
  57. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA4EvB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB9B,CAAA;AAID,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKzB,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"}
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"}
@@ -10,17 +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
- default: zod_1.z.union([zod_1.z.string(), zod_1.z.number(), zod_1.z.boolean()]).optional(),
14
13
  pattern: zod_1.z.string().optional(),
15
- });
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"' });
16
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
+ });
17
26
  const ApiResolverSchema = zod_1.z.object({
18
27
  type: zod_1.z.literal('api'),
19
- endpoints: zod_1.z.array(zod_1.z.object({
20
- method: zod_1.z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']),
21
- path: zod_1.z.string().min(1, 'endpoint path is required'),
22
- params: zod_1.z.array(zod_1.z.string()).optional(),
23
- })).min(1, 'at least one endpoint is required'),
28
+ endpoints: zod_1.z.array(EndpointSchema).min(1, 'at least one endpoint is required'),
24
29
  });
25
30
  const NavResolverSchema = zod_1.z.object({
26
31
  type: zod_1.z.literal('nav'),
@@ -30,11 +35,7 @@ const NavResolverSchema = zod_1.z.object({
30
35
  const HybridResolverSchema = zod_1.z.object({
31
36
  type: zod_1.z.literal('hybrid'),
32
37
  api: zod_1.z.object({
33
- endpoints: zod_1.z.array(zod_1.z.object({
34
- method: zod_1.z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']),
35
- path: zod_1.z.string().min(1),
36
- params: zod_1.z.array(zod_1.z.string()).optional(),
37
- })).min(1),
38
+ endpoints: zod_1.z.array(EndpointSchema).min(1),
38
39
  }),
39
40
  nav: zod_1.z.object({
40
41
  destination: zod_1.z.string().min(1),
@@ -51,6 +52,22 @@ const PrivacyScopeSchema = zod_1.z.object({
51
52
  level: zod_1.z.enum(['public', 'user_owned', 'admin']),
52
53
  note: zod_1.z.string().optional(),
53
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
+ });
54
71
  // ─── Capability Schema ────────────────────────────────────────────────────────
55
72
  const CapabilitySchema = zod_1.z.object({
56
73
  id: zod_1.z.string().min(1, 'capability id is required')
@@ -64,11 +81,39 @@ const CapabilitySchema = zod_1.z.object({
64
81
  returns: zod_1.z.array(zod_1.z.string()),
65
82
  resolver: ResolverSchema,
66
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(),
67
109
  });
68
110
  // ─── Config Schema ────────────────────────────────────────────────────────────
69
111
  exports.CapmanConfigSchema = zod_1.z.object({
70
112
  app: zod_1.z.string().min(1, 'app name is required'),
71
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(),
72
117
  capabilities: zod_1.z.array(CapabilitySchema)
73
118
  .min(1, 'at least one capability is required')
74
119
  .refine(caps => new Set(caps.map(c => c.id)).size === caps.length, 'capability ids must be unique'),
@@ -78,10 +123,14 @@ exports.CapmanConfigSchema = zod_1.z.object({
78
123
  }, { message: 'baseUrl is required when any capability uses an api or hybrid resolver' });
79
124
  // ─── Manifest Schema ──────────────────────────────────────────────────────────
80
125
  exports.ManifestSchema = zod_1.z.object({
126
+ schemaVersion: zod_1.z.string().min(1, 'schemaVersion is required'),
81
127
  version: zod_1.z.string(),
82
128
  app: zod_1.z.string().min(1),
83
129
  generatedAt: zod_1.z.string().datetime(),
84
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(),
85
134
  });
86
135
  function validateConfig(config) {
87
136
  const result = exports.CapmanConfigSchema.safeParse(config);
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
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;
@@ -9,17 +10,49 @@ export interface CapabilityParam {
9
10
  * Optional extraction hint. Either a named type or an example template.
10
11
  * Named types: 'email' | 'date' | 'orderId' | 'url'
11
12
  * Example template: "order {paramName}" — extracts token after "order"
12
- * When provided, pattern matching runs before keyword heuristics.
13
13
  */
14
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;
15
52
  }
16
53
  export interface ApiResolver {
17
54
  type: 'api';
18
- endpoints: Array<{
19
- method: HttpMethod;
20
- path: string;
21
- params?: string[];
22
- }>;
55
+ endpoints: Endpoint[];
23
56
  }
24
57
  export interface NavResolver {
25
58
  type: 'nav';
@@ -36,6 +69,41 @@ export interface PrivacyScope {
36
69
  level: 'public' | 'user_owned' | 'admin';
37
70
  note?: string;
38
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
+ }
39
107
  export interface Capability {
40
108
  id: string;
41
109
  name: string;
@@ -45,17 +113,82 @@ export interface Capability {
45
113
  returns: string[];
46
114
  resolver: Resolver;
47
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;
48
152
  }
49
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 */
50
161
  version: string;
51
162
  app: string;
52
163
  generatedAt: string;
53
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[];
54
179
  }
55
180
  export interface CapmanConfig {
56
181
  app: string;
57
182
  baseUrl?: string;
58
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[];
59
192
  }
60
193
  export interface MatchResult {
61
194
  capability: Capability | null;
@@ -74,15 +207,20 @@ export interface ApiCallResult {
74
207
  status?: number;
75
208
  /** Parsed JSON response body — only present when actually executed */
76
209
  data?: unknown;
210
+ /** Error message — only present on network-level failure (status 0) */
211
+ error?: string;
77
212
  }
78
213
  export interface ResolveResult {
79
214
  success: boolean;
80
215
  resolverType: ResolverType | null;
216
+ error?: string;
217
+ /** Structured error from capability.errors[] when httpStatus matches */
218
+ matchedError?: CapabilityError;
81
219
  apiCalls?: ApiCallResult[];
82
220
  navTarget?: string;
83
- /** Execution time in milliseconds */
221
+ status?: number;
222
+ data?: unknown;
84
223
  durationMs?: number;
85
- error?: string;
86
224
  }
87
225
  export interface ValidationResult {
88
226
  valid: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.5.5";
1
+ export declare const VERSION = "0.6.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  // Auto-generated by scripts/version.js — do not edit manually
5
- exports.VERSION = '0.5.5';
5
+ exports.VERSION = '0.6.0';
6
6
  //# sourceMappingURL=version.js.map
@@ -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
- // Structured keys (cap:/query: prefix from buildCacheKey) are already
106
- // canonical normalizeQuery strips their colons and equals signs.
107
- const storeKey = (k.startsWith('cap:') || k.startsWith('query:'))
108
- ? k
109
- : normalizeQuery(k);
110
- normalized.set(storeKey, v);
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
- await this.save(); // eviction must be persisted
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
  }
@@ -114,6 +114,13 @@ export interface EngineOptions {
114
114
  * When undefined, calibrated automatically from manifest score distribution.
115
115
  */
116
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;
117
124
  }
118
125
  export interface EngineResult {
119
126
  match: MatchResult;
@@ -152,6 +159,7 @@ export declare class CapmanEngine {
152
159
  private bm25B;
153
160
  private marginAwareLLM;
154
161
  private adaptiveMargin;
162
+ private environment?;
155
163
  private maxLLMCallsPerMinute;
156
164
  private llmCooldownMs;
157
165
  private llmCircuitBreakerThreshold;
@@ -191,6 +199,8 @@ export declare class CapmanEngine {
191
199
  */
192
200
  clearCache(): Promise<void>;
193
201
  private checkManifestVersion;
202
+ private checkCapabilityLifecycle;
203
+ private checkMatchHint;
194
204
  /**
195
205
  * Replaces the active manifest without creating a new engine instance.
196
206
  * Useful for hot-reloading manifests in long-running servers without
@@ -252,6 +262,11 @@ export declare class CapmanEngine {
252
262
  * score boost — capped at +15 to avoid overriding strong keyword matches.
253
263
  */
254
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;
255
270
  private resolveOptions;
256
271
  private recordLearning;
257
272
  private calibrateBM25Ceiling;