apcore-js 0.16.0 → 0.17.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 +1 -1
- package/dist/builtin-steps.d.ts +49 -16
- package/dist/builtin-steps.d.ts.map +1 -1
- package/dist/builtin-steps.js +123 -144
- package/dist/builtin-steps.js.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/executor.d.ts +27 -30
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +232 -395
- package/dist/executor.js.map +1 -1
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/pipeline-config.d.ts +68 -0
- package/dist/pipeline-config.d.ts.map +1 -0
- package/dist/pipeline-config.js +153 -0
- package/dist/pipeline-config.js.map +1 -0
- package/dist/pipeline.d.ts +22 -0
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +106 -2
- package/dist/pipeline.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ apcore is an AI-Perceivable module standard that makes every interface naturally
|
|
|
19
19
|
## Features
|
|
20
20
|
|
|
21
21
|
- **Schema-driven modules** — Define input/output schemas with TypeBox for runtime validation
|
|
22
|
-
- **Executor pipeline** — Secured execution lifecycle: context →
|
|
22
|
+
- **Executor pipeline** — Secured execution lifecycle: context → call chain guard → lookup → ACL → approval gate → middleware before → validation → execute → output validation → middleware after → return
|
|
23
23
|
- **Registry system** — File-based module discovery with metadata, dependencies, and topological ordering
|
|
24
24
|
- **Binding loader** — YAML-based module registration for no-code integration
|
|
25
25
|
- **Access control (ACL)** — Pattern-based rules with identity types, roles, and call-depth conditions
|
package/dist/builtin-steps.d.ts
CHANGED
|
@@ -14,20 +14,24 @@ import type { Step, StepResult, PipelineContext } from './pipeline.js';
|
|
|
14
14
|
import { ExecutionStrategy } from './pipeline.js';
|
|
15
15
|
/** Creates or inherits execution Context and sets the global deadline. */
|
|
16
16
|
export declare class BuiltinContextCreation implements Step {
|
|
17
|
-
readonly name = "
|
|
17
|
+
readonly name = "context_creation";
|
|
18
18
|
readonly description = "Create or inherit execution context and set global deadline";
|
|
19
19
|
readonly removable = false;
|
|
20
20
|
readonly replaceable = false;
|
|
21
|
+
readonly pure = true;
|
|
22
|
+
readonly provides: readonly ["context"];
|
|
21
23
|
private _globalTimeout;
|
|
22
24
|
constructor(config: Config | null);
|
|
23
25
|
execute(ctx: PipelineContext): Promise<StepResult>;
|
|
24
26
|
}
|
|
25
27
|
/** Validates call chain depth, repeat limits, and cancel token. */
|
|
26
|
-
export declare class
|
|
27
|
-
readonly name = "
|
|
28
|
+
export declare class BuiltinCallChainGuard implements Step {
|
|
29
|
+
readonly name = "call_chain_guard";
|
|
28
30
|
readonly description = "Call chain guard: depth, repeat limits, cancel token";
|
|
29
31
|
readonly removable = true;
|
|
30
32
|
readonly replaceable = true;
|
|
33
|
+
readonly pure = true;
|
|
34
|
+
readonly requires: readonly ["context"];
|
|
31
35
|
private _maxCallDepth;
|
|
32
36
|
private _maxModuleRepeat;
|
|
33
37
|
constructor(config: Config | null);
|
|
@@ -35,86 +39,109 @@ export declare class BuiltinSafetyCheck implements Step {
|
|
|
35
39
|
}
|
|
36
40
|
/** Resolves the module from the registry and sets ctx.module. */
|
|
37
41
|
export declare class BuiltinModuleLookup implements Step {
|
|
38
|
-
readonly name = "
|
|
42
|
+
readonly name = "module_lookup";
|
|
39
43
|
readonly description = "Resolve module from registry";
|
|
40
44
|
readonly removable = false;
|
|
41
45
|
readonly replaceable = false;
|
|
46
|
+
readonly pure = true;
|
|
47
|
+
readonly provides: readonly ["module"];
|
|
42
48
|
private _registry;
|
|
43
49
|
constructor(registry: Registry);
|
|
44
50
|
execute(ctx: PipelineContext): Promise<StepResult>;
|
|
45
51
|
}
|
|
46
52
|
/** Enforces access control via the ACL provider. */
|
|
47
53
|
export declare class BuiltinACLCheck implements Step {
|
|
48
|
-
readonly name = "
|
|
54
|
+
readonly name = "acl_check";
|
|
49
55
|
readonly description = "Access control list enforcement";
|
|
50
56
|
readonly removable = true;
|
|
51
57
|
readonly replaceable = true;
|
|
58
|
+
readonly requires: readonly ["context", "module"];
|
|
59
|
+
readonly pure = true;
|
|
52
60
|
private _acl;
|
|
53
61
|
constructor(acl: ACL | null);
|
|
62
|
+
/** Update the ACL provider at runtime. */
|
|
63
|
+
setAcl(acl: ACL): void;
|
|
54
64
|
execute(ctx: PipelineContext): Promise<StepResult>;
|
|
55
65
|
}
|
|
56
66
|
/** Handles approval flow for modules that require explicit approval. */
|
|
57
67
|
export declare class BuiltinApprovalGate implements Step {
|
|
58
|
-
readonly name = "
|
|
68
|
+
readonly name = "approval_gate";
|
|
59
69
|
readonly description = "Approval handler flow";
|
|
60
70
|
readonly removable = true;
|
|
61
71
|
readonly replaceable = true;
|
|
72
|
+
readonly requires: readonly ["context", "module"];
|
|
73
|
+
readonly pure = false;
|
|
62
74
|
private _handler;
|
|
63
75
|
constructor(handler: ApprovalHandler | null);
|
|
76
|
+
/** Update the approval handler at runtime. */
|
|
77
|
+
setApprovalHandler(handler: ApprovalHandler): void;
|
|
64
78
|
execute(ctx: PipelineContext): Promise<StepResult>;
|
|
65
79
|
}
|
|
66
80
|
/** Validates inputs against module schema and redacts sensitive fields. */
|
|
67
81
|
export declare class BuiltinInputValidation implements Step {
|
|
68
|
-
readonly name = "
|
|
82
|
+
readonly name = "input_validation";
|
|
69
83
|
readonly description = "Schema validation and redaction for inputs";
|
|
70
84
|
readonly removable = true;
|
|
71
85
|
readonly replaceable = true;
|
|
86
|
+
readonly pure = true;
|
|
87
|
+
readonly requires: readonly ["module"];
|
|
88
|
+
readonly provides: readonly ["validated_inputs"];
|
|
72
89
|
execute(ctx: PipelineContext): Promise<StepResult>;
|
|
73
90
|
}
|
|
74
91
|
/** Executes before-middleware chain via MiddlewareManager. */
|
|
75
92
|
export declare class BuiltinMiddlewareBefore implements Step {
|
|
76
|
-
readonly name = "
|
|
93
|
+
readonly name = "middleware_before";
|
|
77
94
|
readonly description = "Execute before-middleware chain";
|
|
78
95
|
readonly removable = true;
|
|
79
96
|
readonly replaceable = false;
|
|
97
|
+
readonly pure = false;
|
|
80
98
|
private _middlewareManager;
|
|
81
99
|
constructor(middlewares: MiddlewareManager);
|
|
82
100
|
execute(ctx: PipelineContext): Promise<StepResult>;
|
|
83
101
|
}
|
|
84
102
|
/** Executes the module with timeout enforcement. Sets ctx.output. */
|
|
85
103
|
export declare class BuiltinExecute implements Step {
|
|
86
|
-
readonly name = "
|
|
104
|
+
readonly name = "execute";
|
|
87
105
|
readonly description = "Execute module with timeout";
|
|
88
106
|
readonly removable = false;
|
|
89
107
|
readonly replaceable = true;
|
|
108
|
+
readonly requires: readonly ["module"];
|
|
109
|
+
readonly provides: readonly ["output"];
|
|
110
|
+
readonly pure = false;
|
|
90
111
|
private _defaultTimeout;
|
|
91
112
|
constructor(config: Config | null);
|
|
92
113
|
execute(ctx: PipelineContext): Promise<StepResult>;
|
|
93
114
|
}
|
|
94
115
|
/** Validates output against module schema and redacts sensitive fields. */
|
|
95
116
|
export declare class BuiltinOutputValidation implements Step {
|
|
96
|
-
readonly name = "
|
|
117
|
+
readonly name = "output_validation";
|
|
97
118
|
readonly description = "Schema validation and redaction for output";
|
|
98
119
|
readonly removable = true;
|
|
120
|
+
readonly requires: readonly ["module", "output"];
|
|
121
|
+
readonly provides: readonly ["validated_output"];
|
|
99
122
|
readonly replaceable = true;
|
|
123
|
+
readonly pure = true;
|
|
100
124
|
execute(ctx: PipelineContext): Promise<StepResult>;
|
|
101
125
|
}
|
|
102
126
|
/** Executes after-middleware chain via MiddlewareManager. */
|
|
103
127
|
export declare class BuiltinMiddlewareAfter implements Step {
|
|
104
|
-
readonly name = "
|
|
128
|
+
readonly name = "middleware_after";
|
|
105
129
|
readonly description = "Execute after-middleware chain";
|
|
106
130
|
readonly removable = true;
|
|
107
131
|
readonly replaceable = false;
|
|
132
|
+
readonly pure = false;
|
|
108
133
|
private _middlewareManager;
|
|
109
134
|
constructor(middlewares: MiddlewareManager);
|
|
110
135
|
execute(ctx: PipelineContext): Promise<StepResult>;
|
|
111
136
|
}
|
|
112
137
|
/** Finalizes the pipeline result. Output is already on ctx.output. */
|
|
113
138
|
export declare class BuiltinReturnResult implements Step {
|
|
114
|
-
readonly name = "
|
|
139
|
+
readonly name = "return_result";
|
|
115
140
|
readonly description = "Finalize pipeline result";
|
|
116
141
|
readonly removable = false;
|
|
142
|
+
readonly requires: readonly ["output"];
|
|
117
143
|
readonly replaceable = false;
|
|
144
|
+
readonly pure = true;
|
|
118
145
|
execute(_ctx: PipelineContext): Promise<StepResult>;
|
|
119
146
|
}
|
|
120
147
|
export interface StandardStrategyDeps {
|
|
@@ -132,13 +159,19 @@ export declare function buildStandardStrategy(deps: StandardStrategyDeps): Execu
|
|
|
132
159
|
*/
|
|
133
160
|
export declare function buildInternalStrategy(deps: StandardStrategyDeps): ExecutionStrategy;
|
|
134
161
|
/**
|
|
135
|
-
* Build a testing strategy:
|
|
136
|
-
*
|
|
162
|
+
* Build a testing strategy: standard minus ACL, approval, and call chain guard.
|
|
163
|
+
* Retains middleware and validation for correctness. Fast and predictable for tests.
|
|
137
164
|
*/
|
|
138
165
|
export declare function buildTestingStrategy(deps: StandardStrategyDeps): ExecutionStrategy;
|
|
139
166
|
/**
|
|
140
|
-
* Build a performance strategy: skips
|
|
141
|
-
* Retains ACL,
|
|
167
|
+
* Build a performance strategy: skips middleware before/after for reduced overhead.
|
|
168
|
+
* Retains ACL, approval, and validation for correctness.
|
|
142
169
|
*/
|
|
143
170
|
export declare function buildPerformanceStrategy(deps: StandardStrategyDeps): ExecutionStrategy;
|
|
171
|
+
/**
|
|
172
|
+
* Build a minimal strategy: context → lookup → execute → return only.
|
|
173
|
+
* No safety checks, no ACL, no approval, no validation, no middleware.
|
|
174
|
+
* Suitable for pre-validated internal hot paths. Use with caution.
|
|
175
|
+
*/
|
|
176
|
+
export declare function buildMinimalStrategy(deps: StandardStrategyDeps): ExecutionStrategy;
|
|
144
177
|
//# sourceMappingURL=builtin-steps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtin-steps.d.ts","sourceRoot":"","sources":["../src/builtin-steps.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAmC,MAAM,eAAe,CAAC;AAEtF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAc1C,OAAO,EAAwB,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAIlF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAmElD,0EAA0E;AAC1E,qBAAa,sBAAuB,YAAW,IAAI;IACjD,QAAQ,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"builtin-steps.d.ts","sourceRoot":"","sources":["../src/builtin-steps.ts"],"names":[],"mappings":"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"}
|