apcore-js 0.6.0 → 0.7.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/README.md +3 -1
- package/dist/approval.d.ts +85 -0
- package/dist/approval.d.ts.map +1 -0
- package/dist/approval.js +73 -0
- package/dist/approval.js.map +1 -0
- package/dist/errors.d.ts +94 -105
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +145 -27
- package/dist/errors.js.map +1 -1
- package/dist/executor.d.ts +15 -0
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +118 -1
- package/dist/executor.js.map +1 -1
- package/dist/extensions.d.ts +2 -2
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +21 -2
- package/dist/extensions.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/package.json +18 -3
package/dist/errors.js
CHANGED
|
@@ -2,12 +2,17 @@
|
|
|
2
2
|
* Error hierarchy for the apcore framework.
|
|
3
3
|
*/
|
|
4
4
|
export class ModuleError extends Error {
|
|
5
|
+
static DEFAULT_RETRYABLE = null;
|
|
5
6
|
code;
|
|
6
7
|
details;
|
|
7
8
|
cause;
|
|
8
9
|
traceId;
|
|
9
10
|
timestamp;
|
|
10
|
-
|
|
11
|
+
retryable;
|
|
12
|
+
aiGuidance;
|
|
13
|
+
userFixable;
|
|
14
|
+
suggestion;
|
|
15
|
+
constructor(code, message, details, cause, traceId, retryable, aiGuidance, userFixable, suggestion) {
|
|
11
16
|
super(message, cause ? { cause } : undefined);
|
|
12
17
|
this.name = 'ModuleError';
|
|
13
18
|
this.code = code;
|
|
@@ -15,32 +20,69 @@ export class ModuleError extends Error {
|
|
|
15
20
|
this.cause = cause;
|
|
16
21
|
this.traceId = traceId;
|
|
17
22
|
this.timestamp = new Date().toISOString();
|
|
23
|
+
this.retryable = retryable !== undefined ? retryable : this.constructor.DEFAULT_RETRYABLE;
|
|
24
|
+
this.aiGuidance = aiGuidance ?? null;
|
|
25
|
+
this.userFixable = userFixable ?? null;
|
|
26
|
+
this.suggestion = suggestion ?? null;
|
|
18
27
|
}
|
|
19
28
|
toString() {
|
|
20
29
|
return `[${this.code}] ${this.message}`;
|
|
21
30
|
}
|
|
31
|
+
toJSON() {
|
|
32
|
+
const obj = {
|
|
33
|
+
code: this.code,
|
|
34
|
+
message: this.message,
|
|
35
|
+
};
|
|
36
|
+
if (Object.keys(this.details).length > 0) {
|
|
37
|
+
obj.details = this.details;
|
|
38
|
+
}
|
|
39
|
+
if (this.cause !== undefined) {
|
|
40
|
+
obj.cause = String(this.cause);
|
|
41
|
+
}
|
|
42
|
+
if (this.traceId !== undefined) {
|
|
43
|
+
obj.trace_id = this.traceId;
|
|
44
|
+
}
|
|
45
|
+
obj.timestamp = this.timestamp;
|
|
46
|
+
if (this.retryable !== null) {
|
|
47
|
+
obj.retryable = this.retryable;
|
|
48
|
+
}
|
|
49
|
+
if (this.aiGuidance !== null) {
|
|
50
|
+
obj.ai_guidance = this.aiGuidance;
|
|
51
|
+
}
|
|
52
|
+
if (this.userFixable !== null) {
|
|
53
|
+
obj.user_fixable = this.userFixable;
|
|
54
|
+
}
|
|
55
|
+
if (this.suggestion !== null) {
|
|
56
|
+
obj.suggestion = this.suggestion;
|
|
57
|
+
}
|
|
58
|
+
return obj;
|
|
59
|
+
}
|
|
22
60
|
}
|
|
23
61
|
export class ConfigNotFoundError extends ModuleError {
|
|
62
|
+
static DEFAULT_RETRYABLE = false;
|
|
24
63
|
constructor(configPath, options) {
|
|
25
|
-
super('CONFIG_NOT_FOUND', `Configuration file not found: ${configPath}`, { configPath }, options?.cause, options?.traceId);
|
|
64
|
+
super('CONFIG_NOT_FOUND', `Configuration file not found: ${configPath}`, { configPath }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
26
65
|
this.name = 'ConfigNotFoundError';
|
|
27
66
|
}
|
|
28
67
|
}
|
|
29
68
|
export class ConfigError extends ModuleError {
|
|
69
|
+
static DEFAULT_RETRYABLE = false;
|
|
30
70
|
constructor(message, options) {
|
|
31
|
-
super('CONFIG_INVALID', message, {}, options?.cause, options?.traceId);
|
|
71
|
+
super('CONFIG_INVALID', message, {}, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
32
72
|
this.name = 'ConfigError';
|
|
33
73
|
}
|
|
34
74
|
}
|
|
35
75
|
export class ACLRuleError extends ModuleError {
|
|
76
|
+
static DEFAULT_RETRYABLE = false;
|
|
36
77
|
constructor(message, options) {
|
|
37
|
-
super('ACL_RULE_ERROR', message, {}, options?.cause, options?.traceId);
|
|
78
|
+
super('ACL_RULE_ERROR', message, {}, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
38
79
|
this.name = 'ACLRuleError';
|
|
39
80
|
}
|
|
40
81
|
}
|
|
41
82
|
export class ACLDeniedError extends ModuleError {
|
|
83
|
+
static DEFAULT_RETRYABLE = false;
|
|
42
84
|
constructor(callerId, targetId, options) {
|
|
43
|
-
super('ACL_DENIED', `Access denied: ${callerId} -> ${targetId}`, { callerId, targetId }, options?.cause, options?.traceId);
|
|
85
|
+
super('ACL_DENIED', `Access denied: ${callerId} -> ${targetId}`, { callerId, targetId }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
44
86
|
this.name = 'ACLDeniedError';
|
|
45
87
|
}
|
|
46
88
|
get callerId() {
|
|
@@ -51,14 +93,16 @@ export class ACLDeniedError extends ModuleError {
|
|
|
51
93
|
}
|
|
52
94
|
}
|
|
53
95
|
export class ModuleNotFoundError extends ModuleError {
|
|
96
|
+
static DEFAULT_RETRYABLE = false;
|
|
54
97
|
constructor(moduleId, options) {
|
|
55
|
-
super('MODULE_NOT_FOUND', `Module not found: ${moduleId}`, { moduleId }, options?.cause, options?.traceId);
|
|
98
|
+
super('MODULE_NOT_FOUND', `Module not found: ${moduleId}`, { moduleId }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
56
99
|
this.name = 'ModuleNotFoundError';
|
|
57
100
|
}
|
|
58
101
|
}
|
|
59
102
|
export class ModuleTimeoutError extends ModuleError {
|
|
103
|
+
static DEFAULT_RETRYABLE = true;
|
|
60
104
|
constructor(moduleId, timeoutMs, options) {
|
|
61
|
-
super('MODULE_TIMEOUT', `Module ${moduleId} timed out after ${timeoutMs}ms`, { moduleId, timeoutMs }, options?.cause, options?.traceId);
|
|
105
|
+
super('MODULE_TIMEOUT', `Module ${moduleId} timed out after ${timeoutMs}ms`, { moduleId, timeoutMs }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
62
106
|
this.name = 'ModuleTimeoutError';
|
|
63
107
|
}
|
|
64
108
|
get moduleId() {
|
|
@@ -69,32 +113,37 @@ export class ModuleTimeoutError extends ModuleError {
|
|
|
69
113
|
}
|
|
70
114
|
}
|
|
71
115
|
export class SchemaValidationError extends ModuleError {
|
|
116
|
+
static DEFAULT_RETRYABLE = false;
|
|
72
117
|
constructor(message = 'Schema validation failed', errors, options) {
|
|
73
|
-
super('SCHEMA_VALIDATION_ERROR', message, { errors: errors ?? [] }, options?.cause, options?.traceId);
|
|
118
|
+
super('SCHEMA_VALIDATION_ERROR', message, { errors: errors ?? [] }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
74
119
|
this.name = 'SchemaValidationError';
|
|
75
120
|
}
|
|
76
121
|
}
|
|
77
122
|
export class SchemaNotFoundError extends ModuleError {
|
|
123
|
+
static DEFAULT_RETRYABLE = false;
|
|
78
124
|
constructor(schemaId, options) {
|
|
79
|
-
super('SCHEMA_NOT_FOUND', `Schema not found: ${schemaId}`, { schemaId }, options?.cause, options?.traceId);
|
|
125
|
+
super('SCHEMA_NOT_FOUND', `Schema not found: ${schemaId}`, { schemaId }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
80
126
|
this.name = 'SchemaNotFoundError';
|
|
81
127
|
}
|
|
82
128
|
}
|
|
83
129
|
export class SchemaParseError extends ModuleError {
|
|
130
|
+
static DEFAULT_RETRYABLE = false;
|
|
84
131
|
constructor(message, options) {
|
|
85
|
-
super('SCHEMA_PARSE_ERROR', message, {}, options?.cause, options?.traceId);
|
|
132
|
+
super('SCHEMA_PARSE_ERROR', message, {}, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
86
133
|
this.name = 'SchemaParseError';
|
|
87
134
|
}
|
|
88
135
|
}
|
|
89
136
|
export class SchemaCircularRefError extends ModuleError {
|
|
137
|
+
static DEFAULT_RETRYABLE = false;
|
|
90
138
|
constructor(refPath, options) {
|
|
91
|
-
super('SCHEMA_CIRCULAR_REF', `Circular reference detected: ${refPath}`, { refPath }, options?.cause, options?.traceId);
|
|
139
|
+
super('SCHEMA_CIRCULAR_REF', `Circular reference detected: ${refPath}`, { refPath }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
92
140
|
this.name = 'SchemaCircularRefError';
|
|
93
141
|
}
|
|
94
142
|
}
|
|
95
143
|
export class CallDepthExceededError extends ModuleError {
|
|
144
|
+
static DEFAULT_RETRYABLE = false;
|
|
96
145
|
constructor(depth, maxDepth, callChain, options) {
|
|
97
|
-
super('CALL_DEPTH_EXCEEDED', `Call depth ${depth} exceeds maximum ${maxDepth}`, { depth, maxDepth, callChain }, options?.cause, options?.traceId);
|
|
146
|
+
super('CALL_DEPTH_EXCEEDED', `Call depth ${depth} exceeds maximum ${maxDepth}`, { depth, maxDepth, callChain }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
98
147
|
this.name = 'CallDepthExceededError';
|
|
99
148
|
}
|
|
100
149
|
get currentDepth() {
|
|
@@ -105,8 +154,9 @@ export class CallDepthExceededError extends ModuleError {
|
|
|
105
154
|
}
|
|
106
155
|
}
|
|
107
156
|
export class CircularCallError extends ModuleError {
|
|
157
|
+
static DEFAULT_RETRYABLE = false;
|
|
108
158
|
constructor(moduleId, callChain, options) {
|
|
109
|
-
super('CIRCULAR_CALL', `Circular call detected for module ${moduleId}`, { moduleId, callChain }, options?.cause, options?.traceId);
|
|
159
|
+
super('CIRCULAR_CALL', `Circular call detected for module ${moduleId}`, { moduleId, callChain }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
110
160
|
this.name = 'CircularCallError';
|
|
111
161
|
}
|
|
112
162
|
get moduleId() {
|
|
@@ -114,8 +164,9 @@ export class CircularCallError extends ModuleError {
|
|
|
114
164
|
}
|
|
115
165
|
}
|
|
116
166
|
export class CallFrequencyExceededError extends ModuleError {
|
|
167
|
+
static DEFAULT_RETRYABLE = false;
|
|
117
168
|
constructor(moduleId, count, maxRepeat, callChain, options) {
|
|
118
|
-
super('CALL_FREQUENCY_EXCEEDED', `Module ${moduleId} called ${count} times, max is ${maxRepeat}`, { moduleId, count, maxRepeat, callChain }, options?.cause, options?.traceId);
|
|
169
|
+
super('CALL_FREQUENCY_EXCEEDED', `Module ${moduleId} called ${count} times, max is ${maxRepeat}`, { moduleId, count, maxRepeat, callChain }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
119
170
|
this.name = 'CallFrequencyExceededError';
|
|
120
171
|
}
|
|
121
172
|
get moduleId() {
|
|
@@ -129,83 +180,147 @@ export class CallFrequencyExceededError extends ModuleError {
|
|
|
129
180
|
}
|
|
130
181
|
}
|
|
131
182
|
export class InvalidInputError extends ModuleError {
|
|
183
|
+
static DEFAULT_RETRYABLE = false;
|
|
132
184
|
constructor(message = 'Invalid input', options) {
|
|
133
|
-
super('GENERAL_INVALID_INPUT', message, {}, options?.cause, options?.traceId);
|
|
185
|
+
super('GENERAL_INVALID_INPUT', message, {}, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
134
186
|
this.name = 'InvalidInputError';
|
|
135
187
|
}
|
|
136
188
|
}
|
|
137
189
|
export class FuncMissingTypeHintError extends ModuleError {
|
|
190
|
+
static DEFAULT_RETRYABLE = false;
|
|
138
191
|
constructor(functionName, parameterName, options) {
|
|
139
|
-
super('FUNC_MISSING_TYPE_HINT', `Parameter '${parameterName}' in function '${functionName}' has no type annotation. Add a type annotation like '${parameterName}: string'.`, { functionName, parameterName }, options?.cause, options?.traceId);
|
|
192
|
+
super('FUNC_MISSING_TYPE_HINT', `Parameter '${parameterName}' in function '${functionName}' has no type annotation. Add a type annotation like '${parameterName}: string'.`, { functionName, parameterName }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
140
193
|
this.name = 'FuncMissingTypeHintError';
|
|
141
194
|
}
|
|
142
195
|
}
|
|
143
196
|
export class FuncMissingReturnTypeError extends ModuleError {
|
|
197
|
+
static DEFAULT_RETRYABLE = false;
|
|
144
198
|
constructor(functionName, options) {
|
|
145
|
-
super('FUNC_MISSING_RETURN_TYPE', `Function '${functionName}' has no return type annotation. Add a return type like ': Record<string, unknown>'.`, { functionName }, options?.cause, options?.traceId);
|
|
199
|
+
super('FUNC_MISSING_RETURN_TYPE', `Function '${functionName}' has no return type annotation. Add a return type like ': Record<string, unknown>'.`, { functionName }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
146
200
|
this.name = 'FuncMissingReturnTypeError';
|
|
147
201
|
}
|
|
148
202
|
}
|
|
149
203
|
export class BindingInvalidTargetError extends ModuleError {
|
|
204
|
+
static DEFAULT_RETRYABLE = false;
|
|
150
205
|
constructor(target, options) {
|
|
151
|
-
super('BINDING_INVALID_TARGET', `Invalid binding target '${target}'. Expected format: 'module.path:callable_name'.`, { target }, options?.cause, options?.traceId);
|
|
206
|
+
super('BINDING_INVALID_TARGET', `Invalid binding target '${target}'. Expected format: 'module.path:callable_name'.`, { target }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
152
207
|
this.name = 'BindingInvalidTargetError';
|
|
153
208
|
}
|
|
154
209
|
}
|
|
155
210
|
export class BindingModuleNotFoundError extends ModuleError {
|
|
211
|
+
static DEFAULT_RETRYABLE = false;
|
|
156
212
|
constructor(modulePath, options) {
|
|
157
|
-
super('BINDING_MODULE_NOT_FOUND', `Cannot import module '${modulePath}'.`, { modulePath }, options?.cause, options?.traceId);
|
|
213
|
+
super('BINDING_MODULE_NOT_FOUND', `Cannot import module '${modulePath}'.`, { modulePath }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
158
214
|
this.name = 'BindingModuleNotFoundError';
|
|
159
215
|
}
|
|
160
216
|
}
|
|
161
217
|
export class BindingCallableNotFoundError extends ModuleError {
|
|
218
|
+
static DEFAULT_RETRYABLE = false;
|
|
162
219
|
constructor(callableName, modulePath, options) {
|
|
163
|
-
super('BINDING_CALLABLE_NOT_FOUND', `Cannot find callable '${callableName}' in module '${modulePath}'.`, { callableName, modulePath }, options?.cause, options?.traceId);
|
|
220
|
+
super('BINDING_CALLABLE_NOT_FOUND', `Cannot find callable '${callableName}' in module '${modulePath}'.`, { callableName, modulePath }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
164
221
|
this.name = 'BindingCallableNotFoundError';
|
|
165
222
|
}
|
|
166
223
|
}
|
|
167
224
|
export class BindingNotCallableError extends ModuleError {
|
|
225
|
+
static DEFAULT_RETRYABLE = false;
|
|
168
226
|
constructor(target, options) {
|
|
169
|
-
super('BINDING_NOT_CALLABLE', `Resolved target '${target}' is not callable.`, { target }, options?.cause, options?.traceId);
|
|
227
|
+
super('BINDING_NOT_CALLABLE', `Resolved target '${target}' is not callable.`, { target }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
170
228
|
this.name = 'BindingNotCallableError';
|
|
171
229
|
}
|
|
172
230
|
}
|
|
173
231
|
export class BindingSchemaMissingError extends ModuleError {
|
|
232
|
+
static DEFAULT_RETRYABLE = false;
|
|
174
233
|
constructor(target, options) {
|
|
175
|
-
super('BINDING_SCHEMA_MISSING', `No schema available for target '${target}'. Add type hints or provide an explicit schema.`, { target }, options?.cause, options?.traceId);
|
|
234
|
+
super('BINDING_SCHEMA_MISSING', `No schema available for target '${target}'. Add type hints or provide an explicit schema.`, { target }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
176
235
|
this.name = 'BindingSchemaMissingError';
|
|
177
236
|
}
|
|
178
237
|
}
|
|
179
238
|
export class BindingFileInvalidError extends ModuleError {
|
|
239
|
+
static DEFAULT_RETRYABLE = false;
|
|
180
240
|
constructor(filePath, reason, options) {
|
|
181
|
-
super('BINDING_FILE_INVALID', `Invalid binding file '${filePath}': ${reason}`, { filePath, reason }, options?.cause, options?.traceId);
|
|
241
|
+
super('BINDING_FILE_INVALID', `Invalid binding file '${filePath}': ${reason}`, { filePath, reason }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
182
242
|
this.name = 'BindingFileInvalidError';
|
|
183
243
|
}
|
|
184
244
|
}
|
|
185
245
|
export class CircularDependencyError extends ModuleError {
|
|
246
|
+
static DEFAULT_RETRYABLE = false;
|
|
186
247
|
constructor(cyclePath, options) {
|
|
187
|
-
super('CIRCULAR_DEPENDENCY', `Circular dependency detected: ${cyclePath.join(' -> ')}`, { cyclePath }, options?.cause, options?.traceId);
|
|
248
|
+
super('CIRCULAR_DEPENDENCY', `Circular dependency detected: ${cyclePath.join(' -> ')}`, { cyclePath }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
188
249
|
this.name = 'CircularDependencyError';
|
|
189
250
|
}
|
|
190
251
|
}
|
|
191
252
|
export class ModuleLoadError extends ModuleError {
|
|
253
|
+
static DEFAULT_RETRYABLE = false;
|
|
192
254
|
constructor(moduleId, reason, options) {
|
|
193
|
-
super('MODULE_LOAD_ERROR', `Failed to load module '${moduleId}': ${reason}`, { moduleId, reason }, options?.cause, options?.traceId);
|
|
255
|
+
super('MODULE_LOAD_ERROR', `Failed to load module '${moduleId}': ${reason}`, { moduleId, reason }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
194
256
|
this.name = 'ModuleLoadError';
|
|
195
257
|
}
|
|
196
258
|
}
|
|
197
259
|
export class ModuleExecuteError extends ModuleError {
|
|
260
|
+
static DEFAULT_RETRYABLE = null;
|
|
198
261
|
constructor(moduleId, reason, options) {
|
|
199
|
-
super('MODULE_EXECUTE_ERROR', `Failed to execute module '${moduleId}': ${reason}`, { moduleId, reason }, options?.cause, options?.traceId);
|
|
262
|
+
super('MODULE_EXECUTE_ERROR', `Failed to execute module '${moduleId}': ${reason}`, { moduleId, reason }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
200
263
|
this.name = 'ModuleExecuteError';
|
|
201
264
|
}
|
|
202
265
|
}
|
|
203
266
|
export class InternalError extends ModuleError {
|
|
267
|
+
static DEFAULT_RETRYABLE = true;
|
|
204
268
|
constructor(message = 'Internal error', options) {
|
|
205
|
-
super('GENERAL_INTERNAL_ERROR', message, {}, options?.cause, options?.traceId);
|
|
269
|
+
super('GENERAL_INTERNAL_ERROR', message, {}, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
206
270
|
this.name = 'InternalError';
|
|
207
271
|
}
|
|
208
272
|
}
|
|
273
|
+
/**
|
|
274
|
+
* Base error for all approval-related errors.
|
|
275
|
+
* Carries the full ApprovalResult for inspection by callers.
|
|
276
|
+
*/
|
|
277
|
+
export class ApprovalError extends ModuleError {
|
|
278
|
+
static DEFAULT_RETRYABLE = false;
|
|
279
|
+
result;
|
|
280
|
+
constructor(code, message, result, moduleId, options) {
|
|
281
|
+
super(code, message, { moduleId: moduleId ?? null }, options?.cause, options?.traceId, options?.retryable, options?.aiGuidance, options?.userFixable, options?.suggestion);
|
|
282
|
+
this.name = 'ApprovalError';
|
|
283
|
+
this.result = result;
|
|
284
|
+
}
|
|
285
|
+
get moduleId() {
|
|
286
|
+
return this.details['moduleId'];
|
|
287
|
+
}
|
|
288
|
+
get reason() {
|
|
289
|
+
const r = this.result;
|
|
290
|
+
return r?.['reason'] ?? null;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
export class ApprovalDeniedError extends ApprovalError {
|
|
294
|
+
static DEFAULT_RETRYABLE = false;
|
|
295
|
+
constructor(result, moduleId = '', options) {
|
|
296
|
+
const reason = result?.['reason'];
|
|
297
|
+
let msg = `Approval denied for module '${moduleId}'`;
|
|
298
|
+
if (reason) {
|
|
299
|
+
msg += `: ${reason}`;
|
|
300
|
+
}
|
|
301
|
+
super('APPROVAL_DENIED', msg, result, moduleId, options);
|
|
302
|
+
this.name = 'ApprovalDeniedError';
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
export class ApprovalTimeoutError extends ApprovalError {
|
|
306
|
+
static DEFAULT_RETRYABLE = true;
|
|
307
|
+
constructor(result, moduleId = '', options) {
|
|
308
|
+
super('APPROVAL_TIMEOUT', `Approval timed out for module '${moduleId}'`, result, moduleId, options);
|
|
309
|
+
this.name = 'ApprovalTimeoutError';
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
export class ApprovalPendingError extends ApprovalError {
|
|
313
|
+
static DEFAULT_RETRYABLE = false;
|
|
314
|
+
constructor(result, moduleId = '', options) {
|
|
315
|
+
const approvalId = result?.['approvalId'];
|
|
316
|
+
super('APPROVAL_PENDING', `Approval pending for module '${moduleId}'`, result, moduleId, options);
|
|
317
|
+
this.name = 'ApprovalPendingError';
|
|
318
|
+
this.details['approvalId'] = approvalId ?? null;
|
|
319
|
+
}
|
|
320
|
+
get approvalId() {
|
|
321
|
+
return this.details['approvalId'];
|
|
322
|
+
}
|
|
323
|
+
}
|
|
209
324
|
/**
|
|
210
325
|
* All framework error codes as constants.
|
|
211
326
|
* Use these instead of hardcoding error code strings.
|
|
@@ -238,6 +353,9 @@ export const ErrorCodes = Object.freeze({
|
|
|
238
353
|
BINDING_FILE_INVALID: "BINDING_FILE_INVALID",
|
|
239
354
|
CIRCULAR_DEPENDENCY: "CIRCULAR_DEPENDENCY",
|
|
240
355
|
MIDDLEWARE_CHAIN_ERROR: "MIDDLEWARE_CHAIN_ERROR",
|
|
356
|
+
APPROVAL_DENIED: "APPROVAL_DENIED",
|
|
357
|
+
APPROVAL_TIMEOUT: "APPROVAL_TIMEOUT",
|
|
358
|
+
APPROVAL_PENDING: "APPROVAL_PENDING",
|
|
241
359
|
// Forward declarations for Level 2 Phase 2 features.
|
|
242
360
|
// Exception classes will be added when the corresponding features are implemented.
|
|
243
361
|
GENERAL_NOT_IMPLEMENTED: "GENERAL_NOT_IMPLEMENTED",
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/executor.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* Timeout uses Promise.race instead of threading.
|
|
6
6
|
*/
|
|
7
7
|
import type { ACL } from './acl.js';
|
|
8
|
+
import type { ApprovalHandler } from './approval.js';
|
|
8
9
|
import type { Config } from './config.js';
|
|
9
10
|
import { Context } from './context.js';
|
|
10
11
|
import { Middleware } from './middleware/index.js';
|
|
@@ -17,6 +18,7 @@ export declare class Executor {
|
|
|
17
18
|
private _middlewareManager;
|
|
18
19
|
private _acl;
|
|
19
20
|
private _config;
|
|
21
|
+
private _approvalHandler;
|
|
20
22
|
private _defaultTimeout;
|
|
21
23
|
private _maxCallDepth;
|
|
22
24
|
private _maxModuleRepeat;
|
|
@@ -25,11 +27,14 @@ export declare class Executor {
|
|
|
25
27
|
middlewares?: Middleware[] | null;
|
|
26
28
|
acl?: ACL | null;
|
|
27
29
|
config?: Config | null;
|
|
30
|
+
approvalHandler?: ApprovalHandler | null;
|
|
28
31
|
});
|
|
29
32
|
get registry(): Registry;
|
|
30
33
|
get middlewares(): Middleware[];
|
|
31
34
|
/** Set the access control provider. */
|
|
32
35
|
setAcl(acl: ACL): void;
|
|
36
|
+
/** Set the approval handler for Step 4.5 gate. */
|
|
37
|
+
setApprovalHandler(handler: ApprovalHandler): void;
|
|
33
38
|
use(middleware: Middleware): Executor;
|
|
34
39
|
useBefore(callback: (moduleId: string, inputs: Record<string, unknown>, context: Context) => Record<string, unknown> | null): Executor;
|
|
35
40
|
useAfter(callback: (moduleId: string, inputs: Record<string, unknown>, output: Record<string, unknown>, context: Context) => Record<string, unknown> | null): Executor;
|
|
@@ -62,6 +67,16 @@ export declare class Executor {
|
|
|
62
67
|
private _validateOutput;
|
|
63
68
|
validate(moduleId: string, inputs: Record<string, unknown>): ValidationResult;
|
|
64
69
|
private _checkSafety;
|
|
70
|
+
/** Check if a module requires approval, handling both interface and dict annotations. */
|
|
71
|
+
private _needsApproval;
|
|
72
|
+
/** Build an ApprovalRequest from module metadata. */
|
|
73
|
+
private _buildApprovalRequest;
|
|
74
|
+
/** Map an ApprovalResult status to the appropriate action or error. */
|
|
75
|
+
private _handleApprovalResult;
|
|
76
|
+
/** Emit an audit event for the approval decision (logging + span event). */
|
|
77
|
+
private _emitApprovalEvent;
|
|
78
|
+
/** Step 4.5: Approval gate. */
|
|
79
|
+
private _checkApproval;
|
|
65
80
|
private _executeWithTimeout;
|
|
66
81
|
}
|
|
67
82
|
//# sourceMappingURL=executor.d.ts.map
|
package/dist/executor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|
package/dist/executor.js
CHANGED
|
@@ -5,11 +5,13 @@
|
|
|
5
5
|
* Timeout uses Promise.race instead of threading.
|
|
6
6
|
*/
|
|
7
7
|
import { Value } from '@sinclair/typebox/value';
|
|
8
|
+
import { createApprovalRequest } from './approval.js';
|
|
8
9
|
import { Context } from './context.js';
|
|
9
10
|
import { ExecutionCancelledError } from './cancel.js';
|
|
10
|
-
import { ACLDeniedError, CallDepthExceededError, CallFrequencyExceededError, CircularCallError, InvalidInputError, ModuleNotFoundError, ModuleTimeoutError, SchemaValidationError, } from './errors.js';
|
|
11
|
+
import { ACLDeniedError, ApprovalDeniedError, ApprovalPendingError, ApprovalTimeoutError, CallDepthExceededError, CallFrequencyExceededError, CircularCallError, InvalidInputError, ModuleNotFoundError, ModuleTimeoutError, SchemaValidationError, } from './errors.js';
|
|
11
12
|
import { AfterMiddleware, BeforeMiddleware } from './middleware/index.js';
|
|
12
13
|
import { MiddlewareChainError, MiddlewareManager } from './middleware/manager.js';
|
|
14
|
+
import { DEFAULT_ANNOTATIONS } from './module.js';
|
|
13
15
|
export const REDACTED_VALUE = '***REDACTED***';
|
|
14
16
|
export function redactSensitive(data, schemaDict) {
|
|
15
17
|
const redacted = JSON.parse(JSON.stringify(data));
|
|
@@ -65,11 +67,27 @@ function redactSecretPrefix(data) {
|
|
|
65
67
|
}
|
|
66
68
|
}
|
|
67
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Normalize a dict-form annotations object into a ModuleAnnotations interface.
|
|
72
|
+
* Handles both camelCase and snake_case keys (parallel to Python's
|
|
73
|
+
* ``ModuleAnnotations(**{k: v for k, v in annotations.items() if k in valid_fields})``).
|
|
74
|
+
*/
|
|
75
|
+
function dictToAnnotations(dict) {
|
|
76
|
+
return {
|
|
77
|
+
readonly: Boolean(dict['readonly'] ?? false),
|
|
78
|
+
destructive: Boolean(dict['destructive'] ?? false),
|
|
79
|
+
idempotent: Boolean(dict['idempotent'] ?? false),
|
|
80
|
+
requiresApproval: Boolean(dict['requiresApproval'] ?? dict['requires_approval'] ?? false),
|
|
81
|
+
openWorld: Boolean(dict['openWorld'] ?? dict['open_world'] ?? true),
|
|
82
|
+
streaming: Boolean(dict['streaming'] ?? false),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
68
85
|
export class Executor {
|
|
69
86
|
_registry;
|
|
70
87
|
_middlewareManager;
|
|
71
88
|
_acl;
|
|
72
89
|
_config;
|
|
90
|
+
_approvalHandler;
|
|
73
91
|
_defaultTimeout;
|
|
74
92
|
_maxCallDepth;
|
|
75
93
|
_maxModuleRepeat;
|
|
@@ -78,6 +96,7 @@ export class Executor {
|
|
|
78
96
|
this._middlewareManager = new MiddlewareManager();
|
|
79
97
|
this._acl = options.acl ?? null;
|
|
80
98
|
this._config = options.config ?? null;
|
|
99
|
+
this._approvalHandler = options.approvalHandler ?? null;
|
|
81
100
|
if (options.middlewares) {
|
|
82
101
|
for (const mw of options.middlewares) {
|
|
83
102
|
this._middlewareManager.add(mw);
|
|
@@ -104,6 +123,10 @@ export class Executor {
|
|
|
104
123
|
setAcl(acl) {
|
|
105
124
|
this._acl = acl;
|
|
106
125
|
}
|
|
126
|
+
/** Set the approval handler for Step 4.5 gate. */
|
|
127
|
+
setApprovalHandler(handler) {
|
|
128
|
+
this._approvalHandler = handler;
|
|
129
|
+
}
|
|
107
130
|
use(middleware) {
|
|
108
131
|
this._middlewareManager.add(middleware);
|
|
109
132
|
return this;
|
|
@@ -125,6 +148,8 @@ export class Executor {
|
|
|
125
148
|
this._checkSafety(moduleId, ctx);
|
|
126
149
|
const mod = this._lookupModule(moduleId);
|
|
127
150
|
this._checkAcl(moduleId, ctx);
|
|
151
|
+
// Step 4.5 -- Approval Gate
|
|
152
|
+
await this._checkApproval(mod, moduleId, effectiveInputs, ctx);
|
|
128
153
|
effectiveInputs = this._validateInputs(mod, effectiveInputs, ctx);
|
|
129
154
|
return this._executeWithMiddleware(mod, moduleId, effectiveInputs, ctx);
|
|
130
155
|
}
|
|
@@ -152,6 +177,8 @@ export class Executor {
|
|
|
152
177
|
this._checkSafety(moduleId, ctx);
|
|
153
178
|
const mod = this._lookupModule(moduleId);
|
|
154
179
|
this._checkAcl(moduleId, ctx);
|
|
180
|
+
// Step 4.5 -- Approval Gate
|
|
181
|
+
await this._checkApproval(mod, moduleId, effectiveInputs, ctx);
|
|
155
182
|
effectiveInputs = this._validateInputs(mod, effectiveInputs, ctx);
|
|
156
183
|
yield* this._streamWithMiddleware(mod, moduleId, effectiveInputs, ctx);
|
|
157
184
|
}
|
|
@@ -343,6 +370,96 @@ export class Executor {
|
|
|
343
370
|
throw new CallFrequencyExceededError(moduleId, count, this._maxModuleRepeat, [...callChain]);
|
|
344
371
|
}
|
|
345
372
|
}
|
|
373
|
+
/** Check if a module requires approval, handling both interface and dict annotations. */
|
|
374
|
+
_needsApproval(mod) {
|
|
375
|
+
const annotations = mod['annotations'];
|
|
376
|
+
if (annotations == null)
|
|
377
|
+
return false;
|
|
378
|
+
if (typeof annotations !== 'object')
|
|
379
|
+
return false;
|
|
380
|
+
// ModuleAnnotations interface (camelCase)
|
|
381
|
+
if ('requiresApproval' in annotations) {
|
|
382
|
+
return Boolean(annotations.requiresApproval);
|
|
383
|
+
}
|
|
384
|
+
// Dict-form annotations (snake_case)
|
|
385
|
+
if ('requires_approval' in annotations) {
|
|
386
|
+
return Boolean(annotations['requires_approval']);
|
|
387
|
+
}
|
|
388
|
+
return false;
|
|
389
|
+
}
|
|
390
|
+
/** Build an ApprovalRequest from module metadata. */
|
|
391
|
+
_buildApprovalRequest(mod, moduleId, inputs, ctx) {
|
|
392
|
+
const annotations = mod['annotations'];
|
|
393
|
+
let ann;
|
|
394
|
+
if (annotations != null && typeof annotations === 'object' && 'requiresApproval' in annotations) {
|
|
395
|
+
ann = annotations;
|
|
396
|
+
}
|
|
397
|
+
else if (annotations != null && typeof annotations === 'object') {
|
|
398
|
+
ann = dictToAnnotations(annotations);
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
ann = DEFAULT_ANNOTATIONS;
|
|
402
|
+
}
|
|
403
|
+
return createApprovalRequest({
|
|
404
|
+
moduleId,
|
|
405
|
+
arguments: inputs,
|
|
406
|
+
context: ctx,
|
|
407
|
+
annotations: ann,
|
|
408
|
+
description: mod['description'] ?? null,
|
|
409
|
+
tags: mod['tags'] ?? [],
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
/** Map an ApprovalResult status to the appropriate action or error. */
|
|
413
|
+
_handleApprovalResult(result, moduleId) {
|
|
414
|
+
if (result.status === 'approved')
|
|
415
|
+
return;
|
|
416
|
+
if (result.status === 'rejected') {
|
|
417
|
+
throw new ApprovalDeniedError(result, moduleId);
|
|
418
|
+
}
|
|
419
|
+
if (result.status === 'timeout') {
|
|
420
|
+
throw new ApprovalTimeoutError(result, moduleId);
|
|
421
|
+
}
|
|
422
|
+
if (result.status === 'pending') {
|
|
423
|
+
throw new ApprovalPendingError(result, moduleId);
|
|
424
|
+
}
|
|
425
|
+
// Unknown status treated as denied
|
|
426
|
+
console.warn(`[apcore:executor] Unknown approval status '${result.status}' for module ${moduleId}, treating as denied`);
|
|
427
|
+
throw new ApprovalDeniedError(result, moduleId);
|
|
428
|
+
}
|
|
429
|
+
/** Emit an audit event for the approval decision (logging + span event). */
|
|
430
|
+
_emitApprovalEvent(result, moduleId, ctx) {
|
|
431
|
+
console.info(`[apcore:executor] Approval decision: module=${moduleId} status=${result.status} approved_by=${result.approvedBy} reason=${result.reason}`);
|
|
432
|
+
const spansStack = ctx.data['_tracing_spans'];
|
|
433
|
+
if (spansStack && spansStack.length > 0) {
|
|
434
|
+
spansStack[spansStack.length - 1].events.push({
|
|
435
|
+
name: 'approval_decision',
|
|
436
|
+
module_id: moduleId,
|
|
437
|
+
status: result.status,
|
|
438
|
+
approved_by: result.approvedBy ?? '',
|
|
439
|
+
reason: result.reason ?? '',
|
|
440
|
+
approval_id: result.approvalId ?? '',
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
/** Step 4.5: Approval gate. */
|
|
445
|
+
async _checkApproval(mod, moduleId, inputs, ctx) {
|
|
446
|
+
if (this._approvalHandler === null)
|
|
447
|
+
return;
|
|
448
|
+
if (!this._needsApproval(mod))
|
|
449
|
+
return;
|
|
450
|
+
let result;
|
|
451
|
+
if ('_approval_token' in inputs) {
|
|
452
|
+
const token = inputs['_approval_token'];
|
|
453
|
+
delete inputs['_approval_token'];
|
|
454
|
+
result = await this._approvalHandler.checkApproval(token);
|
|
455
|
+
}
|
|
456
|
+
else {
|
|
457
|
+
const request = this._buildApprovalRequest(mod, moduleId, inputs, ctx);
|
|
458
|
+
result = await this._approvalHandler.requestApproval(request);
|
|
459
|
+
}
|
|
460
|
+
this._emitApprovalEvent(result, moduleId, ctx);
|
|
461
|
+
this._handleApprovalResult(result, moduleId);
|
|
462
|
+
}
|
|
346
463
|
async _executeWithTimeout(mod, moduleId, inputs, ctx) {
|
|
347
464
|
const timeoutMs = this._defaultTimeout;
|
|
348
465
|
if (timeoutMs < 0) {
|