apcore-js 0.15.0 → 0.16.0

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 (59) hide show
  1. package/README.md +5 -5
  2. package/dist/acl-handlers.d.ts +42 -0
  3. package/dist/acl-handlers.d.ts.map +1 -0
  4. package/dist/acl-handlers.js +128 -0
  5. package/dist/acl-handlers.js.map +1 -0
  6. package/dist/acl.d.ts +11 -0
  7. package/dist/acl.d.ts.map +1 -1
  8. package/dist/acl.js +148 -37
  9. package/dist/acl.js.map +1 -1
  10. package/dist/builtin-steps.d.ts +144 -0
  11. package/dist/builtin-steps.d.ts.map +1 -0
  12. package/dist/builtin-steps.js +582 -0
  13. package/dist/builtin-steps.js.map +1 -0
  14. package/dist/config.d.ts +40 -2
  15. package/dist/config.d.ts.map +1 -1
  16. package/dist/config.js +177 -29
  17. package/dist/config.js.map +1 -1
  18. package/dist/context-key.d.ts +25 -0
  19. package/dist/context-key.d.ts.map +1 -0
  20. package/dist/context-key.js +37 -0
  21. package/dist/context-key.js.map +1 -0
  22. package/dist/context-keys.d.ts +11 -0
  23. package/dist/context-keys.d.ts.map +1 -0
  24. package/dist/context-keys.js +13 -0
  25. package/dist/context-keys.js.map +1 -0
  26. package/dist/context.d.ts +28 -3
  27. package/dist/context.d.ts.map +1 -1
  28. package/dist/context.js +60 -21
  29. package/dist/context.js.map +1 -1
  30. package/dist/errors.d.ts +4 -0
  31. package/dist/errors.d.ts.map +1 -1
  32. package/dist/errors.js +7 -0
  33. package/dist/errors.js.map +1 -1
  34. package/dist/executor.d.ts +24 -0
  35. package/dist/executor.d.ts.map +1 -1
  36. package/dist/executor.js +100 -0
  37. package/dist/executor.js.map +1 -1
  38. package/dist/generated/version.d.ts +1 -1
  39. package/dist/generated/version.js +1 -1
  40. package/dist/index.d.ts +8 -2
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +8 -2
  43. package/dist/index.js.map +1 -1
  44. package/dist/module.d.ts +22 -6
  45. package/dist/module.d.ts.map +1 -1
  46. package/dist/module.js +73 -0
  47. package/dist/module.js.map +1 -1
  48. package/dist/pipeline.d.ts +118 -0
  49. package/dist/pipeline.d.ts.map +1 -0
  50. package/dist/pipeline.js +222 -0
  51. package/dist/pipeline.js.map +1 -0
  52. package/dist/schema/annotations.d.ts.map +1 -1
  53. package/dist/schema/annotations.js +1 -0
  54. package/dist/schema/annotations.js.map +1 -1
  55. package/dist/sys-modules/toggle.d.ts +5 -0
  56. package/dist/sys-modules/toggle.d.ts.map +1 -1
  57. package/dist/sys-modules/toggle.js +5 -0
  58. package/dist/sys-modules/toggle.js.map +1 -1
  59. package/package.json +1 -1
@@ -0,0 +1,582 @@
1
+ /**
2
+ * Built-in pipeline steps extracted from the executor's hardcoded logic.
3
+ *
4
+ * Each class implements the Step interface and wraps one phase of the
5
+ * execution pipeline. Dependencies are injected via the constructor so
6
+ * that each step is independently testable.
7
+ */
8
+ import { Kind } from '@sinclair/typebox';
9
+ import { Value } from '@sinclair/typebox/value';
10
+ import { jsonSchemaToTypeBox } from './schema/loader.js';
11
+ import { createApprovalRequest } from './approval.js';
12
+ import { Context } from './context.js';
13
+ import { ExecutionCancelledError } from './cancel.js';
14
+ import { ModuleTimeoutError, SchemaValidationError, } from './errors.js';
15
+ import { MiddlewareChainError } from './middleware/manager.js';
16
+ import { guardCallChain } from './utils/call-chain.js';
17
+ import { DEFAULT_ANNOTATIONS } from './module.js';
18
+ import { ExecutionStrategy } from './pipeline.js';
19
+ import { redactSensitive, CTX_GLOBAL_DEADLINE, CTX_TRACING_SPANS } from './executor.js';
20
+ // ---------------------------------------------------------------------------
21
+ // Helpers (shared with executor, kept minimal)
22
+ // ---------------------------------------------------------------------------
23
+ function resolveSchema(mod, key) {
24
+ const schema = mod[key];
25
+ if (schema == null)
26
+ return null;
27
+ if (Kind in schema)
28
+ return schema;
29
+ const converted = jsonSchemaToTypeBox(schema);
30
+ mod[key] = converted;
31
+ return converted;
32
+ }
33
+ function validateSchema(schema, data, direction) {
34
+ if (Value.Check(schema, data))
35
+ return;
36
+ const errors = [];
37
+ for (const error of Value.Errors(schema, data)) {
38
+ errors.push({
39
+ field: error.path || '/',
40
+ code: String(error.type),
41
+ message: error.message,
42
+ });
43
+ }
44
+ throw new SchemaValidationError(`${direction} validation failed`, errors);
45
+ }
46
+ function needsApproval(mod) {
47
+ const annotations = mod['annotations'];
48
+ if (annotations == null)
49
+ return false;
50
+ if (typeof annotations !== 'object')
51
+ return false;
52
+ if ('requiresApproval' in annotations) {
53
+ return Boolean(annotations.requiresApproval);
54
+ }
55
+ if ('requires_approval' in annotations) {
56
+ return Boolean(annotations['requires_approval']);
57
+ }
58
+ return false;
59
+ }
60
+ function dictToAnnotations(dict) {
61
+ return {
62
+ readonly: Boolean(dict['readonly'] ?? false),
63
+ destructive: Boolean(dict['destructive'] ?? false),
64
+ idempotent: Boolean(dict['idempotent'] ?? false),
65
+ requiresApproval: Boolean(dict['requiresApproval'] ?? dict['requires_approval'] ?? false),
66
+ openWorld: Boolean(dict['openWorld'] ?? dict['open_world'] ?? true),
67
+ streaming: Boolean(dict['streaming'] ?? false),
68
+ cacheable: Boolean(dict['cacheable'] ?? false),
69
+ cacheTtl: Number(dict['cacheTtl'] ?? dict['cache_ttl'] ?? 0),
70
+ cacheKeyFields: (dict['cacheKeyFields'] ?? dict['cache_key_fields'] ?? null),
71
+ paginated: Boolean(dict['paginated'] ?? false),
72
+ paginationStyle: (dict['paginationStyle'] ?? dict['pagination_style'] ?? 'cursor'),
73
+ extra: Object.freeze(dict['extra'] ?? {}),
74
+ };
75
+ }
76
+ // ---------------------------------------------------------------------------
77
+ // 1. BuiltinContextCreation
78
+ // ---------------------------------------------------------------------------
79
+ /** Creates or inherits execution Context and sets the global deadline. */
80
+ export class BuiltinContextCreation {
81
+ name = 'builtin.context_creation';
82
+ description = 'Create or inherit execution context and set global deadline';
83
+ removable = false;
84
+ replaceable = false;
85
+ _globalTimeout;
86
+ constructor(config) {
87
+ if (config !== null) {
88
+ this._globalTimeout = config.get('executor.global_timeout') ?? 60000;
89
+ }
90
+ else {
91
+ this._globalTimeout = 60000;
92
+ }
93
+ }
94
+ async execute(ctx) {
95
+ // If no context provided, create a fresh one
96
+ if (ctx.context == null) {
97
+ ctx.context = Context.create(null).child(ctx.moduleId);
98
+ }
99
+ // Set global deadline on root call only
100
+ if (!(CTX_GLOBAL_DEADLINE in ctx.context.data) && this._globalTimeout > 0) {
101
+ ctx.context.data[CTX_GLOBAL_DEADLINE] = Date.now() + this._globalTimeout;
102
+ }
103
+ return { action: 'continue' };
104
+ }
105
+ }
106
+ // ---------------------------------------------------------------------------
107
+ // 2. BuiltinSafetyCheck
108
+ // ---------------------------------------------------------------------------
109
+ /** Validates call chain depth, repeat limits, and cancel token. */
110
+ export class BuiltinSafetyCheck {
111
+ name = 'builtin.safety_check';
112
+ description = 'Call chain guard: depth, repeat limits, cancel token';
113
+ removable = true;
114
+ replaceable = true;
115
+ _maxCallDepth;
116
+ _maxModuleRepeat;
117
+ constructor(config) {
118
+ if (config !== null) {
119
+ this._maxCallDepth = config.get('executor.max_call_depth') ?? 32;
120
+ this._maxModuleRepeat = config.get('executor.max_module_repeat') ?? 3;
121
+ }
122
+ else {
123
+ this._maxCallDepth = 32;
124
+ this._maxModuleRepeat = 3;
125
+ }
126
+ }
127
+ async execute(ctx) {
128
+ // Check cancel token first
129
+ if (ctx.context.cancelToken !== null) {
130
+ try {
131
+ ctx.context.cancelToken.check();
132
+ }
133
+ catch (e) {
134
+ if (e instanceof ExecutionCancelledError) {
135
+ return {
136
+ action: 'abort',
137
+ explanation: `Execution cancelled: ${e.message}`,
138
+ };
139
+ }
140
+ throw e;
141
+ }
142
+ }
143
+ // Call chain safety guard
144
+ try {
145
+ guardCallChain(ctx.moduleId, ctx.context.callChain, this._maxCallDepth, this._maxModuleRepeat);
146
+ }
147
+ catch (e) {
148
+ return {
149
+ action: 'abort',
150
+ explanation: e instanceof Error ? e.message : String(e),
151
+ };
152
+ }
153
+ return { action: 'continue' };
154
+ }
155
+ }
156
+ // ---------------------------------------------------------------------------
157
+ // 3. BuiltinModuleLookup
158
+ // ---------------------------------------------------------------------------
159
+ /** Resolves the module from the registry and sets ctx.module. */
160
+ export class BuiltinModuleLookup {
161
+ name = 'builtin.module_lookup';
162
+ description = 'Resolve module from registry';
163
+ removable = false;
164
+ replaceable = false;
165
+ _registry;
166
+ constructor(registry) {
167
+ this._registry = registry;
168
+ }
169
+ async execute(ctx) {
170
+ const mod = this._registry.get(ctx.moduleId);
171
+ if (mod === null) {
172
+ return {
173
+ action: 'abort',
174
+ explanation: `Module not found: ${ctx.moduleId}`,
175
+ };
176
+ }
177
+ ctx.module = mod;
178
+ return { action: 'continue' };
179
+ }
180
+ }
181
+ // ---------------------------------------------------------------------------
182
+ // 4. BuiltinACLCheck
183
+ // ---------------------------------------------------------------------------
184
+ /** Enforces access control via the ACL provider. */
185
+ export class BuiltinACLCheck {
186
+ name = 'builtin.acl_check';
187
+ description = 'Access control list enforcement';
188
+ removable = true;
189
+ replaceable = true;
190
+ _acl;
191
+ constructor(acl) {
192
+ this._acl = acl;
193
+ }
194
+ async execute(ctx) {
195
+ if (this._acl === null) {
196
+ return { action: 'continue' };
197
+ }
198
+ const allowed = this._acl.check(ctx.context.callerId, ctx.moduleId, ctx.context);
199
+ if (!allowed) {
200
+ return {
201
+ action: 'abort',
202
+ explanation: `Access denied: ${ctx.context.callerId} -> ${ctx.moduleId}`,
203
+ };
204
+ }
205
+ return { action: 'continue' };
206
+ }
207
+ }
208
+ // ---------------------------------------------------------------------------
209
+ // 5. BuiltinApprovalGate
210
+ // ---------------------------------------------------------------------------
211
+ /** Handles approval flow for modules that require explicit approval. */
212
+ export class BuiltinApprovalGate {
213
+ name = 'builtin.approval_gate';
214
+ description = 'Approval handler flow';
215
+ removable = true;
216
+ replaceable = true;
217
+ _handler;
218
+ constructor(handler) {
219
+ this._handler = handler;
220
+ }
221
+ async execute(ctx) {
222
+ if (this._handler === null) {
223
+ return { action: 'continue' };
224
+ }
225
+ const mod = ctx.module;
226
+ if (!needsApproval(mod)) {
227
+ return { action: 'continue' };
228
+ }
229
+ let result;
230
+ let cleanInputs = ctx.inputs;
231
+ if ('_approval_token' in ctx.inputs) {
232
+ const token = ctx.inputs['_approval_token'];
233
+ const { _approval_token: _, ...rest } = ctx.inputs;
234
+ cleanInputs = rest;
235
+ result = await this._handler.checkApproval(token);
236
+ }
237
+ else {
238
+ const annotations = mod['annotations'];
239
+ let ann;
240
+ if (annotations != null && typeof annotations === 'object' && 'requiresApproval' in annotations) {
241
+ ann = annotations;
242
+ }
243
+ else if (annotations != null && typeof annotations === 'object') {
244
+ ann = dictToAnnotations(annotations);
245
+ }
246
+ else {
247
+ ann = DEFAULT_ANNOTATIONS;
248
+ }
249
+ const request = createApprovalRequest({
250
+ moduleId: ctx.moduleId,
251
+ arguments: ctx.inputs,
252
+ context: ctx.context,
253
+ annotations: ann,
254
+ description: mod['description'] ?? null,
255
+ tags: mod['tags'] ?? [],
256
+ });
257
+ result = await this._handler.requestApproval(request);
258
+ }
259
+ // Emit audit event
260
+ const spansStack = ctx.context.data[CTX_TRACING_SPANS];
261
+ if (spansStack && spansStack.length > 0) {
262
+ spansStack[spansStack.length - 1].events.push({
263
+ name: 'approval_decision',
264
+ module_id: ctx.moduleId,
265
+ status: result.status,
266
+ approved_by: result.approvedBy ?? '',
267
+ reason: result.reason ?? '',
268
+ approval_id: result.approvalId ?? '',
269
+ });
270
+ }
271
+ if (result.status === 'approved') {
272
+ ctx.inputs = cleanInputs;
273
+ return { action: 'continue' };
274
+ }
275
+ if (result.status === 'timeout') {
276
+ return {
277
+ action: 'abort',
278
+ explanation: `Approval timed out for module ${ctx.moduleId}`,
279
+ };
280
+ }
281
+ if (result.status === 'pending') {
282
+ return {
283
+ action: 'abort',
284
+ explanation: `Approval pending for module ${ctx.moduleId}: ${result.approvalId ?? 'unknown'}`,
285
+ };
286
+ }
287
+ // rejected or unknown
288
+ return {
289
+ action: 'abort',
290
+ explanation: `Approval denied for module ${ctx.moduleId}: ${result.reason ?? 'no reason'}`,
291
+ };
292
+ }
293
+ }
294
+ // ---------------------------------------------------------------------------
295
+ // 6. BuiltinInputValidation
296
+ // ---------------------------------------------------------------------------
297
+ /** Validates inputs against module schema and redacts sensitive fields. */
298
+ export class BuiltinInputValidation {
299
+ name = 'builtin.input_validation';
300
+ description = 'Schema validation and redaction for inputs';
301
+ removable = true;
302
+ replaceable = true;
303
+ async execute(ctx) {
304
+ const mod = ctx.module;
305
+ const inputSchema = resolveSchema(mod, 'inputSchema');
306
+ if (inputSchema == null) {
307
+ ctx.validatedInputs = ctx.inputs;
308
+ return { action: 'continue' };
309
+ }
310
+ try {
311
+ validateSchema(inputSchema, ctx.inputs, 'Input');
312
+ }
313
+ catch (e) {
314
+ if (e instanceof SchemaValidationError) {
315
+ return {
316
+ action: 'abort',
317
+ explanation: e.message,
318
+ };
319
+ }
320
+ throw e;
321
+ }
322
+ ctx.context.redactedInputs = redactSensitive(ctx.inputs, inputSchema);
323
+ ctx.validatedInputs = ctx.inputs;
324
+ return { action: 'continue' };
325
+ }
326
+ }
327
+ // ---------------------------------------------------------------------------
328
+ // 7. BuiltinMiddlewareBefore
329
+ // ---------------------------------------------------------------------------
330
+ /** Executes before-middleware chain via MiddlewareManager. */
331
+ export class BuiltinMiddlewareBefore {
332
+ name = 'builtin.middleware_before';
333
+ description = 'Execute before-middleware chain';
334
+ removable = true;
335
+ replaceable = false;
336
+ _middlewareManager;
337
+ constructor(middlewares) {
338
+ this._middlewareManager = middlewares;
339
+ }
340
+ async execute(ctx) {
341
+ try {
342
+ const [effectiveInputs] = this._middlewareManager.executeBefore(ctx.moduleId, ctx.inputs, ctx.context);
343
+ ctx.inputs = effectiveInputs;
344
+ }
345
+ catch (e) {
346
+ if (e instanceof MiddlewareChainError) {
347
+ return {
348
+ action: 'abort',
349
+ explanation: `Middleware before-chain error: ${e.original.message}`,
350
+ };
351
+ }
352
+ throw e;
353
+ }
354
+ return { action: 'continue' };
355
+ }
356
+ }
357
+ // ---------------------------------------------------------------------------
358
+ // 8. BuiltinExecute
359
+ // ---------------------------------------------------------------------------
360
+ /** Executes the module with timeout enforcement. Sets ctx.output. */
361
+ export class BuiltinExecute {
362
+ name = 'builtin.execute';
363
+ description = 'Execute module with timeout';
364
+ removable = false;
365
+ replaceable = true;
366
+ _defaultTimeout;
367
+ constructor(config) {
368
+ if (config !== null) {
369
+ this._defaultTimeout = config.get('executor.default_timeout') ?? 30000;
370
+ }
371
+ else {
372
+ this._defaultTimeout = 30000;
373
+ }
374
+ }
375
+ async execute(ctx) {
376
+ const mod = ctx.module;
377
+ // Cancel check before execution
378
+ if (ctx.context.cancelToken !== null) {
379
+ try {
380
+ ctx.context.cancelToken.check();
381
+ }
382
+ catch (e) {
383
+ if (e instanceof ExecutionCancelledError) {
384
+ return {
385
+ action: 'abort',
386
+ explanation: `Execution cancelled: ${e.message}`,
387
+ };
388
+ }
389
+ throw e;
390
+ }
391
+ }
392
+ // Streaming path: store the generator on ctx.outputStream
393
+ if (ctx.stream) {
394
+ const streamFn = mod['stream'];
395
+ if (typeof streamFn === 'function') {
396
+ ctx.outputStream = streamFn.call(mod, ctx.inputs, ctx.context);
397
+ return { action: 'continue' };
398
+ }
399
+ // fallback: execute normally and wrap as single-chunk
400
+ }
401
+ // Regular execution with timeout
402
+ let timeoutMs = this._defaultTimeout;
403
+ const globalDeadline = ctx.context.data[CTX_GLOBAL_DEADLINE];
404
+ if (globalDeadline !== undefined) {
405
+ const remaining = globalDeadline - Date.now();
406
+ if (remaining <= 0) {
407
+ return {
408
+ action: 'abort',
409
+ explanation: `Module timed out: ${ctx.moduleId} (global deadline exceeded)`,
410
+ };
411
+ }
412
+ if (timeoutMs === 0 || remaining < timeoutMs) {
413
+ timeoutMs = remaining;
414
+ }
415
+ }
416
+ const executeFn = mod['execute'];
417
+ if (typeof executeFn !== 'function') {
418
+ return {
419
+ action: 'abort',
420
+ explanation: `Module '${ctx.moduleId}' has no execute method`,
421
+ };
422
+ }
423
+ const executionPromise = Promise.resolve(executeFn
424
+ .call(mod, ctx.inputs, ctx.context));
425
+ try {
426
+ if (timeoutMs === 0) {
427
+ ctx.output = await executionPromise;
428
+ }
429
+ else {
430
+ let timer;
431
+ const timeoutPromise = new Promise((_, reject) => {
432
+ timer = setTimeout(() => {
433
+ reject(new ModuleTimeoutError(ctx.moduleId, timeoutMs));
434
+ }, timeoutMs);
435
+ });
436
+ ctx.output = await Promise.race([executionPromise, timeoutPromise]).finally(() => {
437
+ clearTimeout(timer);
438
+ });
439
+ }
440
+ }
441
+ catch (e) {
442
+ if (e instanceof ModuleTimeoutError) {
443
+ return {
444
+ action: 'abort',
445
+ explanation: `Module timed out: ${ctx.moduleId} (${timeoutMs}ms)`,
446
+ };
447
+ }
448
+ throw e;
449
+ }
450
+ return { action: 'continue' };
451
+ }
452
+ }
453
+ // ---------------------------------------------------------------------------
454
+ // 9. BuiltinOutputValidation
455
+ // ---------------------------------------------------------------------------
456
+ /** Validates output against module schema and redacts sensitive fields. */
457
+ export class BuiltinOutputValidation {
458
+ name = 'builtin.output_validation';
459
+ description = 'Schema validation and redaction for output';
460
+ removable = true;
461
+ replaceable = true;
462
+ async execute(ctx) {
463
+ const mod = ctx.module;
464
+ const output = ctx.output ?? {};
465
+ const outputSchema = resolveSchema(mod, 'outputSchema');
466
+ if (outputSchema == null) {
467
+ ctx.validatedOutput = output;
468
+ return { action: 'continue' };
469
+ }
470
+ try {
471
+ validateSchema(outputSchema, output, 'Output');
472
+ }
473
+ catch (e) {
474
+ if (e instanceof SchemaValidationError) {
475
+ return {
476
+ action: 'abort',
477
+ explanation: e.message,
478
+ };
479
+ }
480
+ throw e;
481
+ }
482
+ ctx.validatedOutput = output;
483
+ return { action: 'continue' };
484
+ }
485
+ }
486
+ // ---------------------------------------------------------------------------
487
+ // 10. BuiltinMiddlewareAfter
488
+ // ---------------------------------------------------------------------------
489
+ /** Executes after-middleware chain via MiddlewareManager. */
490
+ export class BuiltinMiddlewareAfter {
491
+ name = 'builtin.middleware_after';
492
+ description = 'Execute after-middleware chain';
493
+ removable = true;
494
+ replaceable = false;
495
+ _middlewareManager;
496
+ constructor(middlewares) {
497
+ this._middlewareManager = middlewares;
498
+ }
499
+ async execute(ctx) {
500
+ const output = ctx.output ?? {};
501
+ const transformed = this._middlewareManager.executeAfter(ctx.moduleId, ctx.inputs, output, ctx.context);
502
+ ctx.output = transformed;
503
+ return { action: 'continue' };
504
+ }
505
+ }
506
+ // ---------------------------------------------------------------------------
507
+ // 11. BuiltinReturnResult
508
+ // ---------------------------------------------------------------------------
509
+ /** Finalizes the pipeline result. Output is already on ctx.output. */
510
+ export class BuiltinReturnResult {
511
+ name = 'builtin.return_result';
512
+ description = 'Finalize pipeline result';
513
+ removable = false;
514
+ replaceable = false;
515
+ async execute(_ctx) {
516
+ // No-op: output is already on ctx.output from previous steps
517
+ return { action: 'continue' };
518
+ }
519
+ }
520
+ /** Build the standard 11-step execution strategy matching the current Executor. */
521
+ export function buildStandardStrategy(deps) {
522
+ return new ExecutionStrategy('standard', [
523
+ new BuiltinContextCreation(deps.config),
524
+ new BuiltinSafetyCheck(deps.config),
525
+ new BuiltinModuleLookup(deps.registry),
526
+ new BuiltinACLCheck(deps.acl),
527
+ new BuiltinApprovalGate(deps.approvalHandler),
528
+ new BuiltinInputValidation(),
529
+ new BuiltinMiddlewareBefore(deps.middlewareManager),
530
+ new BuiltinExecute(deps.config),
531
+ new BuiltinOutputValidation(),
532
+ new BuiltinMiddlewareAfter(deps.middlewareManager),
533
+ new BuiltinReturnResult(),
534
+ ]);
535
+ }
536
+ /**
537
+ * Build an internal-only strategy: skips ACL and approval gates.
538
+ * Suitable for trusted internal service-to-service calls.
539
+ */
540
+ export function buildInternalStrategy(deps) {
541
+ return new ExecutionStrategy('internal', [
542
+ new BuiltinContextCreation(deps.config),
543
+ new BuiltinSafetyCheck(deps.config),
544
+ new BuiltinModuleLookup(deps.registry),
545
+ new BuiltinInputValidation(),
546
+ new BuiltinMiddlewareBefore(deps.middlewareManager),
547
+ new BuiltinExecute(deps.config),
548
+ new BuiltinOutputValidation(),
549
+ new BuiltinMiddlewareAfter(deps.middlewareManager),
550
+ new BuiltinReturnResult(),
551
+ ]);
552
+ }
553
+ /**
554
+ * Build a testing strategy: minimal pipeline with only lookup, execute, and return.
555
+ * No middleware, no validation, no ACL, no approval. Fast and predictable for tests.
556
+ */
557
+ export function buildTestingStrategy(deps) {
558
+ return new ExecutionStrategy('testing', [
559
+ new BuiltinContextCreation(deps.config),
560
+ new BuiltinModuleLookup(deps.registry),
561
+ new BuiltinExecute(deps.config),
562
+ new BuiltinReturnResult(),
563
+ ]);
564
+ }
565
+ /**
566
+ * Build a performance strategy: skips approval gate and output validation.
567
+ * Retains ACL, input validation, and middleware for correctness where it matters.
568
+ */
569
+ export function buildPerformanceStrategy(deps) {
570
+ return new ExecutionStrategy('performance', [
571
+ new BuiltinContextCreation(deps.config),
572
+ new BuiltinSafetyCheck(deps.config),
573
+ new BuiltinModuleLookup(deps.registry),
574
+ new BuiltinACLCheck(deps.acl),
575
+ new BuiltinInputValidation(),
576
+ new BuiltinMiddlewareBefore(deps.middlewareManager),
577
+ new BuiltinExecute(deps.config),
578
+ new BuiltinMiddlewareAfter(deps.middlewareManager),
579
+ new BuiltinReturnResult(),
580
+ ]);
581
+ }
582
+ //# sourceMappingURL=builtin-steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-steps.js","sourceRoot":"","sources":["../src/builtin-steps.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -2,6 +2,35 @@
2
2
  * Configuration loading, validation, and environment variable overrides (Algorithm A12).
3
3
  * Supports legacy mode (flat YAML) and namespace mode (apcore top-level key).
4
4
  */
5
+ export type EnvStyle = 'nested' | 'flat' | 'auto';
6
+ interface NamespaceRegistration {
7
+ name: string;
8
+ schema: object | string | null;
9
+ envPrefix: string;
10
+ defaults: Record<string, unknown> | null;
11
+ envStyle: EnvStyle;
12
+ maxDepth: number;
13
+ envMap: Record<string, string> | null;
14
+ }
15
+ export declare const _globalNsRegistry: Map<string, NamespaceRegistration>;
16
+ export declare const _globalEnvMap: Map<string, string>;
17
+ export declare const _envMapClaimed: Map<string, string>;
18
+ export declare const _envPrefixUsed: Set<string>;
19
+ export declare function applyEnvOverrides(data: Record<string, unknown>): Record<string, unknown>;
20
+ /**
21
+ * Apply per-namespace env overrides using longest-prefix-match dispatch.
22
+ *
23
+ * For each env var, finds the registered namespace whose envPrefix is the
24
+ * longest matching prefix, strips it, converts separators, and writes to
25
+ * that namespace's subtree in data.
26
+ */
27
+ /**
28
+ * Convert env var suffix to dot-path with a depth limit.
29
+ * After max_depth segments, remaining _ are preserved as literal.
30
+ * Double __ always becomes literal _.
31
+ */
32
+ export declare function envSuffixToDotPathWithDepth(suffix: string, maxDepth: number): string;
33
+ export declare function applyNamespaceEnvOverrides(data: Record<string, unknown>): Record<string, unknown>;
5
34
  /**
6
35
  * Search for a config file in the standard discovery order (§9.14).
7
36
  * Returns the path of the first found file, or null if none found.
@@ -23,7 +52,8 @@ export declare class Config {
23
52
  private _yamlPath;
24
53
  private _mode;
25
54
  private _mounts;
26
- constructor(data?: Record<string, unknown>);
55
+ private _envStyle;
56
+ constructor(data?: Record<string, unknown>, envStyle?: EnvStyle);
27
57
  /**
28
58
  * Register a namespace globally.
29
59
  *
@@ -31,14 +61,21 @@ export declare class Config {
31
61
  * - ConfigNamespaceReservedError if name is in the reserved set.
32
62
  * - ConfigNamespaceDuplicateError if name is already registered.
33
63
  * - ConfigEnvPrefixConflictError if envPrefix is already used or matches the
34
- * APCORE_[A-Z0-9] pattern.
64
+ * an already-registered prefix.
35
65
  */
36
66
  static registerNamespace(options: {
37
67
  name: string;
38
68
  schema?: object | string | null;
39
69
  envPrefix?: string | null;
40
70
  defaults?: Record<string, unknown> | null;
71
+ envStyle?: EnvStyle | null;
72
+ maxDepth?: number | null;
73
+ envMap?: Record<string, string> | null;
41
74
  }): void;
75
+ /**
76
+ * Register global bare env var → top-level config key mappings.
77
+ */
78
+ static envMap(mapping: Record<string, string>): void;
42
79
  /**
43
80
  * Return a snapshot of all registered namespaces.
44
81
  */
@@ -110,4 +147,5 @@ export declare class Config {
110
147
  */
111
148
  reload(): void;
112
149
  }
150
+ export {};
113
151
  //# sourceMappingURL=config.d.ts.map