apcore-js 0.4.0 → 0.6.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.
- package/dist/acl.d.ts +27 -0
- package/dist/acl.d.ts.map +1 -0
- package/dist/acl.js +175 -0
- package/dist/acl.js.map +1 -0
- package/dist/async-task.d.ts +90 -0
- package/dist/async-task.d.ts.map +1 -0
- package/dist/async-task.js +215 -0
- package/dist/async-task.js.map +1 -0
- package/dist/bindings.d.ts +12 -0
- package/dist/bindings.d.ts.map +1 -0
- package/dist/bindings.js +185 -0
- package/dist/bindings.js.map +1 -0
- package/dist/cancel.d.ts +14 -0
- package/dist/cancel.d.ts.map +1 -0
- package/dist/cancel.js +27 -0
- package/dist/cancel.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +50 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +87 -0
- package/dist/context.js.map +1 -0
- package/dist/decorator.d.ts +57 -0
- package/dist/decorator.d.ts.map +1 -0
- package/dist/decorator.js +74 -0
- package/dist/decorator.js.map +1 -0
- package/dist/errors.d.ts +215 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +246 -0
- package/dist/errors.js.map +1 -0
- package/dist/executor.d.ts +67 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +372 -0
- package/dist/executor.js.map +1 -0
- package/dist/extensions.d.ts +58 -0
- package/dist/extensions.d.ts.map +1 -0
- package/dist/extensions.js +220 -0
- package/dist/extensions.js.map +1 -0
- package/{src/index.ts → dist/index.d.ts} +14 -59
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/adapters.d.ts +18 -0
- package/dist/middleware/adapters.d.ts.map +1 -0
- package/dist/middleware/adapters.js +25 -0
- package/dist/middleware/adapters.js.map +1 -0
- package/dist/middleware/base.d.ts +10 -0
- package/dist/middleware/base.d.ts.map +1 -0
- package/dist/middleware/base.js +15 -0
- package/dist/middleware/base.js.map +1 -0
- package/{src/middleware/index.ts → dist/middleware/index.d.ts} +1 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +5 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/logging.d.ts +25 -0
- package/dist/middleware/logging.d.ts.map +1 -0
- package/dist/middleware/logging.js +64 -0
- package/dist/middleware/logging.js.map +1 -0
- package/dist/middleware/manager.d.ts +21 -0
- package/dist/middleware/manager.d.ts.map +1 -0
- package/dist/middleware/manager.js +77 -0
- package/dist/middleware/manager.js.map +1 -0
- package/dist/module.d.ts +31 -0
- package/dist/module.d.ts.map +1 -0
- package/dist/module.js +12 -0
- package/dist/module.js.map +1 -0
- package/dist/observability/context-logger.d.ts +54 -0
- package/dist/observability/context-logger.d.ts.map +1 -0
- package/dist/observability/context-logger.js +151 -0
- package/dist/observability/context-logger.js.map +1 -0
- package/{src/observability/index.ts → dist/observability/index.d.ts} +1 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +4 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/metrics.d.ts +30 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +177 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/tracing.d.ts +62 -0
- package/dist/observability/tracing.d.ts.map +1 -0
- package/dist/observability/tracing.js +184 -0
- package/dist/observability/tracing.js.map +1 -0
- package/dist/registry/dependencies.d.ts +6 -0
- package/dist/registry/dependencies.d.ts.map +1 -0
- package/dist/registry/dependencies.js +83 -0
- package/dist/registry/dependencies.js.map +1 -0
- package/dist/registry/entry-point.d.ts +6 -0
- package/dist/registry/entry-point.d.ts.map +1 -0
- package/dist/registry/entry-point.js +55 -0
- package/dist/registry/entry-point.js.map +1 -0
- package/{src/registry/index.ts → dist/registry/index.d.ts} +2 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +8 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/metadata.d.ts +9 -0
- package/dist/registry/metadata.d.ts.map +1 -0
- package/dist/registry/metadata.js +105 -0
- package/dist/registry/metadata.js.map +1 -0
- package/dist/registry/registry.d.ts +102 -0
- package/dist/registry/registry.d.ts.map +1 -0
- package/dist/registry/registry.js +534 -0
- package/dist/registry/registry.js.map +1 -0
- package/dist/registry/scanner.d.ts +7 -0
- package/dist/registry/scanner.d.ts.map +1 -0
- package/dist/registry/scanner.js +164 -0
- package/dist/registry/scanner.js.map +1 -0
- package/dist/registry/schema-export.d.ts +9 -0
- package/dist/registry/schema-export.d.ts.map +1 -0
- package/dist/registry/schema-export.js +132 -0
- package/dist/registry/schema-export.js.map +1 -0
- package/dist/registry/types.d.ts +29 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +5 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/registry/validation.d.ts +9 -0
- package/dist/registry/validation.d.ts.map +1 -0
- package/dist/registry/validation.js +33 -0
- package/dist/registry/validation.js.map +1 -0
- package/dist/schema/annotations.d.ts +8 -0
- package/dist/schema/annotations.d.ts.map +1 -0
- package/dist/schema/annotations.js +52 -0
- package/dist/schema/annotations.js.map +1 -0
- package/dist/schema/exporter.d.ts +13 -0
- package/dist/schema/exporter.d.ts.map +1 -0
- package/dist/schema/exporter.js +71 -0
- package/dist/schema/exporter.js.map +1 -0
- package/dist/schema/index.d.ts +9 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/{src/schema/index.ts → dist/schema/index.js} +1 -7
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/loader.d.ts +30 -0
- package/dist/schema/loader.d.ts.map +1 -0
- package/dist/schema/loader.js +260 -0
- package/dist/schema/loader.js.map +1 -0
- package/dist/schema/ref-resolver.d.ts +19 -0
- package/dist/schema/ref-resolver.d.ts.map +1 -0
- package/dist/schema/ref-resolver.js +212 -0
- package/dist/schema/ref-resolver.js.map +1 -0
- package/dist/schema/strict.d.ts +7 -0
- package/dist/schema/strict.d.ts.map +1 -0
- package/dist/schema/strict.js +127 -0
- package/dist/schema/strict.js.map +1 -0
- package/dist/schema/types.d.ts +53 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +31 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/schema/validator.d.ts +16 -0
- package/dist/schema/validator.d.ts.map +1 -0
- package/dist/schema/validator.js +71 -0
- package/dist/schema/validator.js.map +1 -0
- package/dist/trace-context.d.ts +35 -0
- package/dist/trace-context.d.ts.map +1 -0
- package/dist/trace-context.js +86 -0
- package/dist/trace-context.js.map +1 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +32 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/pattern.d.ts +5 -0
- package/dist/utils/pattern.d.ts.map +1 -0
- package/dist/utils/pattern.js +31 -0
- package/dist/utils/pattern.js.map +1 -0
- package/package.json +8 -2
- package/.claude/settings.local.json +0 -12
- package/.github/workflows/ci.yml +0 -39
- package/.gitmessage +0 -60
- package/.pre-commit-config.yaml +0 -28
- package/CHANGELOG.md +0 -183
- package/CLAUDE.md +0 -68
- package/apcore-logo.svg +0 -79
- package/planning/acl-system/overview.md +0 -54
- package/planning/acl-system/plan.md +0 -92
- package/planning/acl-system/state.json +0 -76
- package/planning/acl-system/tasks/acl-core.md +0 -226
- package/planning/acl-system/tasks/acl-rule.md +0 -92
- package/planning/acl-system/tasks/conditional-rules.md +0 -259
- package/planning/acl-system/tasks/pattern-matching.md +0 -152
- package/planning/acl-system/tasks/yaml-loading.md +0 -271
- package/planning/core-executor/overview.md +0 -53
- package/planning/core-executor/plan.md +0 -88
- package/planning/core-executor/state.json +0 -76
- package/planning/core-executor/tasks/async-support.md +0 -106
- package/planning/core-executor/tasks/execution-pipeline.md +0 -113
- package/planning/core-executor/tasks/redaction.md +0 -85
- package/planning/core-executor/tasks/safety-checks.md +0 -65
- package/planning/core-executor/tasks/setup.md +0 -75
- package/planning/decorator-bindings/overview.md +0 -62
- package/planning/decorator-bindings/plan.md +0 -104
- package/planning/decorator-bindings/state.json +0 -87
- package/planning/decorator-bindings/tasks/binding-directory.md +0 -79
- package/planning/decorator-bindings/tasks/binding-loader.md +0 -148
- package/planning/decorator-bindings/tasks/explicit-schemas.md +0 -85
- package/planning/decorator-bindings/tasks/function-module.md +0 -127
- package/planning/decorator-bindings/tasks/module-factory.md +0 -89
- package/planning/decorator-bindings/tasks/schema-modes.md +0 -142
- package/planning/middleware-system/overview.md +0 -48
- package/planning/middleware-system/plan.md +0 -102
- package/planning/middleware-system/state.json +0 -65
- package/planning/middleware-system/tasks/adapters.md +0 -170
- package/planning/middleware-system/tasks/base.md +0 -115
- package/planning/middleware-system/tasks/logging-middleware.md +0 -304
- package/planning/middleware-system/tasks/manager.md +0 -313
- package/planning/observability/overview.md +0 -53
- package/planning/observability/plan.md +0 -119
- package/planning/observability/state.json +0 -98
- package/planning/observability/tasks/context-logger.md +0 -201
- package/planning/observability/tasks/exporters.md +0 -121
- package/planning/observability/tasks/metrics-collector.md +0 -162
- package/planning/observability/tasks/metrics-middleware.md +0 -141
- package/planning/observability/tasks/obs-logging-middleware.md +0 -179
- package/planning/observability/tasks/span-model.md +0 -120
- package/planning/observability/tasks/tracing-middleware.md +0 -179
- package/planning/overview.md +0 -81
- package/planning/registry-system/overview.md +0 -57
- package/planning/registry-system/plan.md +0 -114
- package/planning/registry-system/state.json +0 -109
- package/planning/registry-system/tasks/dependencies.md +0 -157
- package/planning/registry-system/tasks/entry-point.md +0 -148
- package/planning/registry-system/tasks/metadata.md +0 -198
- package/planning/registry-system/tasks/registry-core.md +0 -323
- package/planning/registry-system/tasks/scanner.md +0 -172
- package/planning/registry-system/tasks/schema-export.md +0 -261
- package/planning/registry-system/tasks/types.md +0 -124
- package/planning/registry-system/tasks/validation.md +0 -177
- package/planning/schema-system/overview.md +0 -56
- package/planning/schema-system/plan.md +0 -121
- package/planning/schema-system/state.json +0 -98
- package/planning/schema-system/tasks/exporter.md +0 -153
- package/planning/schema-system/tasks/loader.md +0 -106
- package/planning/schema-system/tasks/ref-resolver.md +0 -133
- package/planning/schema-system/tasks/strict-mode.md +0 -140
- package/planning/schema-system/tasks/typebox-generation.md +0 -133
- package/planning/schema-system/tasks/types-and-annotations.md +0 -160
- package/planning/schema-system/tasks/validator.md +0 -149
- package/src/acl.ts +0 -200
- package/src/bindings.ts +0 -207
- package/src/config.ts +0 -24
- package/src/context.ts +0 -78
- package/src/decorator.ts +0 -110
- package/src/errors.ts +0 -425
- package/src/executor.ts +0 -475
- package/src/middleware/adapters.ts +0 -54
- package/src/middleware/base.ts +0 -33
- package/src/middleware/logging.ts +0 -103
- package/src/middleware/manager.ts +0 -105
- package/src/module.ts +0 -43
- package/src/observability/context-logger.ts +0 -203
- package/src/observability/metrics.ts +0 -214
- package/src/observability/tracing.ts +0 -188
- package/src/registry/dependencies.ts +0 -99
- package/src/registry/entry-point.ts +0 -64
- package/src/registry/metadata.ts +0 -111
- package/src/registry/registry.ts +0 -360
- package/src/registry/scanner.ts +0 -168
- package/src/registry/schema-export.ts +0 -181
- package/src/registry/types.ts +0 -32
- package/src/registry/validation.ts +0 -38
- package/src/schema/annotations.ts +0 -68
- package/src/schema/exporter.ts +0 -90
- package/src/schema/loader.ts +0 -273
- package/src/schema/ref-resolver.ts +0 -244
- package/src/schema/strict.ts +0 -136
- package/src/schema/types.ts +0 -73
- package/src/schema/validator.ts +0 -82
- package/src/utils/index.ts +0 -5
- package/src/utils/pattern.ts +0 -30
- package/tests/helpers.ts +0 -30
- package/tests/integration/test-acl-safety.test.ts +0 -269
- package/tests/integration/test-binding-executor.test.ts +0 -194
- package/tests/integration/test-e2e-flow.test.ts +0 -117
- package/tests/integration/test-error-propagation.test.ts +0 -259
- package/tests/integration/test-middleware-chain.test.ts +0 -120
- package/tests/integration/test-observability-integration.test.ts +0 -438
- package/tests/observability/test-context-logger.test.ts +0 -123
- package/tests/observability/test-metrics.test.ts +0 -186
- package/tests/observability/test-tracing.test.ts +0 -131
- package/tests/registry/test-dependencies.test.ts +0 -70
- package/tests/registry/test-entry-point.test.ts +0 -133
- package/tests/registry/test-metadata.test.ts +0 -265
- package/tests/registry/test-registry.test.ts +0 -1008
- package/tests/registry/test-scanner.test.ts +0 -257
- package/tests/registry/test-schema-export.test.ts +0 -355
- package/tests/registry/test-validation.test.ts +0 -75
- package/tests/schema/test-annotations.test.ts +0 -137
- package/tests/schema/test-exporter.test.ts +0 -172
- package/tests/schema/test-loader.test.ts +0 -461
- package/tests/schema/test-ref-resolver.test.ts +0 -530
- package/tests/schema/test-strict.test.ts +0 -348
- package/tests/schema/test-validator.test.ts +0 -64
- package/tests/test-acl.test.ts +0 -423
- package/tests/test-bindings.test.ts +0 -227
- package/tests/test-config.test.ts +0 -76
- package/tests/test-context.test.ts +0 -151
- package/tests/test-decorator.test.ts +0 -173
- package/tests/test-errors.test.ts +0 -647
- package/tests/test-executor-stream.test.ts +0 -208
- package/tests/test-executor.test.ts +0 -252
- package/tests/test-logging-middleware.test.ts +0 -150
- package/tests/test-middleware-manager.test.ts +0 -185
- package/tests/test-middleware.test.ts +0 -86
- package/tests/utils/test-pattern.test.ts +0 -109
- package/tsconfig.build.json +0 -8
- package/tsconfig.json +0 -20
- package/vitest.config.ts +0 -18
package/dist/bindings.js
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YAML binding loader for zero-code-modification module integration.
|
|
3
|
+
*/
|
|
4
|
+
import { Type } from '@sinclair/typebox';
|
|
5
|
+
import yaml from 'js-yaml';
|
|
6
|
+
import { FunctionModule } from './decorator.js';
|
|
7
|
+
// Lazy-load Node.js built-in modules for browser compatibility
|
|
8
|
+
let _nodeFs = null;
|
|
9
|
+
let _nodePath = null;
|
|
10
|
+
try {
|
|
11
|
+
_nodeFs = await import('node:fs');
|
|
12
|
+
}
|
|
13
|
+
catch { /* browser environment */ }
|
|
14
|
+
try {
|
|
15
|
+
_nodePath = await import('node:path');
|
|
16
|
+
}
|
|
17
|
+
catch { /* browser environment */ }
|
|
18
|
+
import { BindingCallableNotFoundError, BindingFileInvalidError, BindingInvalidTargetError, BindingModuleNotFoundError, BindingNotCallableError, } from './errors.js';
|
|
19
|
+
import { jsonSchemaToTypeBox } from './schema/loader.js';
|
|
20
|
+
export class BindingLoader {
|
|
21
|
+
async loadBindings(filePath, registry) {
|
|
22
|
+
const { readFileSync } = _nodeFs;
|
|
23
|
+
const { dirname } = _nodePath;
|
|
24
|
+
const bindingFileDir = dirname(filePath);
|
|
25
|
+
let content;
|
|
26
|
+
try {
|
|
27
|
+
content = readFileSync(filePath, 'utf-8');
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
throw new BindingFileInvalidError(filePath, String(e));
|
|
31
|
+
}
|
|
32
|
+
let data;
|
|
33
|
+
try {
|
|
34
|
+
data = yaml.load(content);
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
throw new BindingFileInvalidError(filePath, `YAML parse error: ${e}`);
|
|
38
|
+
}
|
|
39
|
+
if (data === null || data === undefined) {
|
|
40
|
+
throw new BindingFileInvalidError(filePath, 'File is empty');
|
|
41
|
+
}
|
|
42
|
+
const dataObj = data;
|
|
43
|
+
if (!('bindings' in dataObj)) {
|
|
44
|
+
throw new BindingFileInvalidError(filePath, "Missing 'bindings' key");
|
|
45
|
+
}
|
|
46
|
+
const bindings = dataObj['bindings'];
|
|
47
|
+
if (!Array.isArray(bindings)) {
|
|
48
|
+
throw new BindingFileInvalidError(filePath, "'bindings' must be a list");
|
|
49
|
+
}
|
|
50
|
+
const results = [];
|
|
51
|
+
for (const entry of bindings) {
|
|
52
|
+
const entryObj = entry;
|
|
53
|
+
if (!('module_id' in entryObj)) {
|
|
54
|
+
throw new BindingFileInvalidError(filePath, "Binding entry missing 'module_id'");
|
|
55
|
+
}
|
|
56
|
+
if (!('target' in entryObj)) {
|
|
57
|
+
throw new BindingFileInvalidError(filePath, "Binding entry missing 'target'");
|
|
58
|
+
}
|
|
59
|
+
const fm = await this._createModuleFromBinding(entryObj, bindingFileDir);
|
|
60
|
+
registry.register(entryObj['module_id'], fm);
|
|
61
|
+
results.push(fm);
|
|
62
|
+
}
|
|
63
|
+
return results;
|
|
64
|
+
}
|
|
65
|
+
async loadBindingDir(dirPath, registry, pattern = '*.binding.yaml') {
|
|
66
|
+
const { existsSync, statSync, readdirSync } = _nodeFs;
|
|
67
|
+
const { join } = _nodePath;
|
|
68
|
+
if (!existsSync(dirPath) || !statSync(dirPath).isDirectory()) {
|
|
69
|
+
throw new BindingFileInvalidError(dirPath, 'Directory does not exist');
|
|
70
|
+
}
|
|
71
|
+
const files = readdirSync(dirPath)
|
|
72
|
+
.filter((f) => {
|
|
73
|
+
// Simple glob matching for *.binding.yaml
|
|
74
|
+
const suffix = pattern.replace('*', '');
|
|
75
|
+
return f.endsWith(suffix);
|
|
76
|
+
})
|
|
77
|
+
.sort();
|
|
78
|
+
const results = [];
|
|
79
|
+
for (const f of files) {
|
|
80
|
+
const fms = await this.loadBindings(join(dirPath, f), registry);
|
|
81
|
+
results.push(...fms);
|
|
82
|
+
}
|
|
83
|
+
return results;
|
|
84
|
+
}
|
|
85
|
+
async resolveTarget(targetString) {
|
|
86
|
+
if (!targetString.includes(':')) {
|
|
87
|
+
throw new BindingInvalidTargetError(targetString);
|
|
88
|
+
}
|
|
89
|
+
const [modulePath, callableName] = targetString.split(':', 2);
|
|
90
|
+
if (modulePath.includes('..')) {
|
|
91
|
+
throw new BindingInvalidTargetError(`Module path '${modulePath}' must not contain '..' segments`);
|
|
92
|
+
}
|
|
93
|
+
if (modulePath.startsWith('file:')) {
|
|
94
|
+
throw new BindingInvalidTargetError(`Module path '${modulePath}' must not use file: URLs`);
|
|
95
|
+
}
|
|
96
|
+
let mod;
|
|
97
|
+
try {
|
|
98
|
+
mod = await import(modulePath);
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
throw new BindingModuleNotFoundError(modulePath);
|
|
102
|
+
}
|
|
103
|
+
if (callableName.includes('.')) {
|
|
104
|
+
const [className, methodName] = callableName.split('.', 2);
|
|
105
|
+
const cls = mod[className];
|
|
106
|
+
if (cls == null) {
|
|
107
|
+
throw new BindingCallableNotFoundError(className, modulePath);
|
|
108
|
+
}
|
|
109
|
+
let instance;
|
|
110
|
+
try {
|
|
111
|
+
instance = new cls();
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
throw new BindingCallableNotFoundError(callableName, modulePath);
|
|
115
|
+
}
|
|
116
|
+
const method = instance[methodName];
|
|
117
|
+
if (method == null) {
|
|
118
|
+
throw new BindingCallableNotFoundError(callableName, modulePath);
|
|
119
|
+
}
|
|
120
|
+
if (typeof method !== 'function') {
|
|
121
|
+
throw new BindingNotCallableError(targetString);
|
|
122
|
+
}
|
|
123
|
+
return method.bind(instance);
|
|
124
|
+
}
|
|
125
|
+
const result = mod[callableName];
|
|
126
|
+
if (result == null) {
|
|
127
|
+
throw new BindingCallableNotFoundError(callableName, modulePath);
|
|
128
|
+
}
|
|
129
|
+
if (typeof result !== 'function') {
|
|
130
|
+
throw new BindingNotCallableError(targetString);
|
|
131
|
+
}
|
|
132
|
+
return result;
|
|
133
|
+
}
|
|
134
|
+
async _createModuleFromBinding(binding, bindingFileDir) {
|
|
135
|
+
const { existsSync, readFileSync } = _nodeFs;
|
|
136
|
+
const { resolve } = _nodePath;
|
|
137
|
+
const func = await this.resolveTarget(binding['target']);
|
|
138
|
+
const moduleId = binding['module_id'];
|
|
139
|
+
let inputSchema;
|
|
140
|
+
let outputSchema;
|
|
141
|
+
if ('input_schema' in binding || 'output_schema' in binding) {
|
|
142
|
+
const inputSchemaDict = binding['input_schema'] ?? {};
|
|
143
|
+
const outputSchemaDict = binding['output_schema'] ?? {};
|
|
144
|
+
inputSchema = jsonSchemaToTypeBox(inputSchemaDict);
|
|
145
|
+
outputSchema = jsonSchemaToTypeBox(outputSchemaDict);
|
|
146
|
+
}
|
|
147
|
+
else if ('schema_ref' in binding) {
|
|
148
|
+
const refPath = resolve(bindingFileDir, binding['schema_ref']);
|
|
149
|
+
if (!existsSync(refPath)) {
|
|
150
|
+
throw new BindingFileInvalidError(refPath, 'Schema reference file not found');
|
|
151
|
+
}
|
|
152
|
+
let refData;
|
|
153
|
+
try {
|
|
154
|
+
refData = yaml.load(readFileSync(refPath, 'utf-8')) ?? {};
|
|
155
|
+
}
|
|
156
|
+
catch (e) {
|
|
157
|
+
throw new BindingFileInvalidError(refPath, `YAML parse error: ${e}`);
|
|
158
|
+
}
|
|
159
|
+
inputSchema = jsonSchemaToTypeBox(refData['input_schema'] ?? {});
|
|
160
|
+
outputSchema = jsonSchemaToTypeBox(refData['output_schema'] ?? {});
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// No schema, use permissive
|
|
164
|
+
inputSchema = Type.Record(Type.String(), Type.Unknown());
|
|
165
|
+
outputSchema = Type.Record(Type.String(), Type.Unknown());
|
|
166
|
+
}
|
|
167
|
+
return new FunctionModule({
|
|
168
|
+
execute: async (inputs, context) => {
|
|
169
|
+
const result = await func(inputs, context);
|
|
170
|
+
if (result === null || result === undefined)
|
|
171
|
+
return {};
|
|
172
|
+
if (typeof result === 'object' && !Array.isArray(result))
|
|
173
|
+
return result;
|
|
174
|
+
return { result };
|
|
175
|
+
},
|
|
176
|
+
moduleId,
|
|
177
|
+
inputSchema,
|
|
178
|
+
outputSchema,
|
|
179
|
+
description: binding['description'] ?? undefined,
|
|
180
|
+
tags: binding['tags'] ?? null,
|
|
181
|
+
version: binding['version'] ?? '1.0.0',
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bindings.js","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"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"}
|
package/dist/cancel.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cooperative cancellation support for apcore module execution.
|
|
3
|
+
*/
|
|
4
|
+
export declare class ExecutionCancelledError extends Error {
|
|
5
|
+
constructor(message?: string);
|
|
6
|
+
}
|
|
7
|
+
export declare class CancelToken {
|
|
8
|
+
private _cancelled;
|
|
9
|
+
get isCancelled(): boolean;
|
|
10
|
+
cancel(): void;
|
|
11
|
+
check(): void;
|
|
12
|
+
reset(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=cancel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../src/cancel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,GAAE,MAAkC;CAIxD;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAkB;IAEpC,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,MAAM,IAAI,IAAI;IAId,KAAK,IAAI,IAAI;IAMb,KAAK,IAAI,IAAI;CAGd"}
|
package/dist/cancel.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cooperative cancellation support for apcore module execution.
|
|
3
|
+
*/
|
|
4
|
+
export class ExecutionCancelledError extends Error {
|
|
5
|
+
constructor(message = "Execution was cancelled") {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "ExecutionCancelledError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class CancelToken {
|
|
11
|
+
_cancelled = false;
|
|
12
|
+
get isCancelled() {
|
|
13
|
+
return this._cancelled;
|
|
14
|
+
}
|
|
15
|
+
cancel() {
|
|
16
|
+
this._cancelled = true;
|
|
17
|
+
}
|
|
18
|
+
check() {
|
|
19
|
+
if (this._cancelled) {
|
|
20
|
+
throw new ExecutionCancelledError();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
reset() {
|
|
24
|
+
this._cancelled = false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=cancel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel.js","sourceRoot":"","sources":["../src/cancel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,UAAkB,yBAAyB;QACrD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,MAAM,OAAO,WAAW;IACd,UAAU,GAAY,KAAK,CAAC;IAEpC,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,uBAAuB,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;CACF"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAA0B;gBAE3B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI1C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO;CAYlD"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration accessor with dot-path key support.
|
|
3
|
+
*/
|
|
4
|
+
export class Config {
|
|
5
|
+
_data;
|
|
6
|
+
constructor(data) {
|
|
7
|
+
this._data = data ?? {};
|
|
8
|
+
}
|
|
9
|
+
get(key, defaultValue) {
|
|
10
|
+
const parts = key.split('.');
|
|
11
|
+
let current = this._data;
|
|
12
|
+
for (const part of parts) {
|
|
13
|
+
if (current !== null && typeof current === 'object' && part in current) {
|
|
14
|
+
current = current[part];
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
return defaultValue;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return current;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,OAAO,MAAM;IACT,KAAK,CAA0B;IAEvC,YAAY,IAA8B;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,YAAsB;QACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,IAAI,IAAK,OAAmC,EAAE,CAAC;gBACpG,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,OAAO,YAAY,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { CancelToken } from './cancel.js';
|
|
2
|
+
import type { TraceParent } from './trace-context.js';
|
|
3
|
+
/**
|
|
4
|
+
* Execution context, identity, and context creation.
|
|
5
|
+
*/
|
|
6
|
+
export interface Identity {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly type: string;
|
|
9
|
+
readonly roles: readonly string[];
|
|
10
|
+
readonly attrs: Readonly<Record<string, unknown>>;
|
|
11
|
+
}
|
|
12
|
+
export declare function createIdentity(id: string, type?: string, roles?: string[], attrs?: Record<string, unknown>): Identity;
|
|
13
|
+
export declare class Context {
|
|
14
|
+
readonly traceId: string;
|
|
15
|
+
readonly callerId: string | null;
|
|
16
|
+
readonly callChain: readonly string[];
|
|
17
|
+
readonly executor: unknown;
|
|
18
|
+
readonly identity: Identity | null;
|
|
19
|
+
redactedInputs: Record<string, unknown> | null;
|
|
20
|
+
readonly data: Record<string, unknown>;
|
|
21
|
+
readonly cancelToken: CancelToken | null;
|
|
22
|
+
constructor(traceId: string, callerId?: string | null, callChain?: string[], executor?: unknown, identity?: Identity | null, redactedInputs?: Record<string, unknown> | null, data?: Record<string, unknown>, cancelToken?: CancelToken | null);
|
|
23
|
+
/**
|
|
24
|
+
* Create a new top-level Context with a generated UUID v4 traceId.
|
|
25
|
+
*
|
|
26
|
+
* When `traceParent` is provided, its `traceId` (32 hex chars) is
|
|
27
|
+
* converted to UUID format (8-4-4-4-12) and used instead of generating
|
|
28
|
+
* a new one.
|
|
29
|
+
*/
|
|
30
|
+
static create(executor?: unknown, identity?: Identity | null, data?: Record<string, unknown>, traceParent?: TraceParent | null): Context;
|
|
31
|
+
toJSON(): Record<string, unknown>;
|
|
32
|
+
static fromJSON(data: Record<string, unknown>, executor?: unknown): Context;
|
|
33
|
+
get logger(): {
|
|
34
|
+
debug: (...args: unknown[]) => void;
|
|
35
|
+
info: (...args: unknown[]) => void;
|
|
36
|
+
warn: (...args: unknown[]) => void;
|
|
37
|
+
error: (...args: unknown[]) => void;
|
|
38
|
+
};
|
|
39
|
+
child(targetModuleId: string): Context;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Interface for creating Context from framework-specific requests.
|
|
43
|
+
*
|
|
44
|
+
* Web framework integrations should implement this to extract Identity
|
|
45
|
+
* from HTTP requests (e.g., Express request, JWT tokens, API keys).
|
|
46
|
+
*/
|
|
47
|
+
export interface ContextFactory {
|
|
48
|
+
createContext(request: unknown): Context;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;GAEG;AAEH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnD;AAED,wBAAgB,cAAc,CAC5B,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,MAAe,EACrB,KAAK,GAAE,MAAM,EAAO,EACpB,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAClC,QAAQ,CAEV;AAED,qBAAa,OAAO;IAClB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;gBAGvC,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAM,GAAG,IAAW,EAC9B,SAAS,GAAE,MAAM,EAAO,EACxB,QAAQ,GAAE,OAAc,EACxB,QAAQ,GAAE,QAAQ,GAAG,IAAW,EAChC,cAAc,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAW,EACrD,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAClC,WAAW,GAAE,WAAW,GAAG,IAAW;IAYxC;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CACX,QAAQ,GAAE,OAAc,EACxB,QAAQ,GAAE,QAAQ,GAAG,IAAW,EAChC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,GAC/B,OAAO;IAmBV,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAsBjC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO;IAmB3E,IAAI,MAAM,IAAI;QAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAQjK;IAED,KAAK,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;CAYvC;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;CAC1C"}
|
package/dist/context.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
+
export function createIdentity(id, type = 'user', roles = [], attrs = {}) {
|
|
3
|
+
return Object.freeze({ id, type, roles: Object.freeze([...roles]), attrs: Object.freeze({ ...attrs }) });
|
|
4
|
+
}
|
|
5
|
+
export class Context {
|
|
6
|
+
traceId;
|
|
7
|
+
callerId;
|
|
8
|
+
callChain;
|
|
9
|
+
executor;
|
|
10
|
+
identity;
|
|
11
|
+
redactedInputs;
|
|
12
|
+
data;
|
|
13
|
+
cancelToken;
|
|
14
|
+
constructor(traceId, callerId = null, callChain = [], executor = null, identity = null, redactedInputs = null, data = {}, cancelToken = null) {
|
|
15
|
+
this.traceId = traceId;
|
|
16
|
+
this.callerId = callerId;
|
|
17
|
+
this.callChain = Object.freeze([...callChain]);
|
|
18
|
+
this.executor = executor;
|
|
19
|
+
this.identity = identity;
|
|
20
|
+
this.redactedInputs = redactedInputs;
|
|
21
|
+
this.data = data;
|
|
22
|
+
this.cancelToken = cancelToken;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create a new top-level Context with a generated UUID v4 traceId.
|
|
26
|
+
*
|
|
27
|
+
* When `traceParent` is provided, its `traceId` (32 hex chars) is
|
|
28
|
+
* converted to UUID format (8-4-4-4-12) and used instead of generating
|
|
29
|
+
* a new one.
|
|
30
|
+
*/
|
|
31
|
+
static create(executor = null, identity = null, data, traceParent) {
|
|
32
|
+
let traceId;
|
|
33
|
+
if (traceParent) {
|
|
34
|
+
const h = traceParent.traceId;
|
|
35
|
+
traceId = `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20)}`;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
traceId = uuidv4();
|
|
39
|
+
}
|
|
40
|
+
return new Context(traceId, null, [], executor, identity, null, data ?? {});
|
|
41
|
+
}
|
|
42
|
+
toJSON() {
|
|
43
|
+
const publicData = {};
|
|
44
|
+
for (const [key, value] of Object.entries(this.data)) {
|
|
45
|
+
if (!key.startsWith('_')) {
|
|
46
|
+
publicData[key] = value;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
traceId: this.traceId,
|
|
51
|
+
callerId: this.callerId,
|
|
52
|
+
callChain: [...this.callChain],
|
|
53
|
+
identity: this.identity ? {
|
|
54
|
+
id: this.identity.id,
|
|
55
|
+
type: this.identity.type,
|
|
56
|
+
roles: [...this.identity.roles],
|
|
57
|
+
attrs: { ...this.identity.attrs },
|
|
58
|
+
} : null,
|
|
59
|
+
redactedInputs: this.redactedInputs ? { ...this.redactedInputs } : null,
|
|
60
|
+
data: publicData,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
static fromJSON(data, executor) {
|
|
64
|
+
const identityData = data.identity;
|
|
65
|
+
const identity = identityData ? {
|
|
66
|
+
id: identityData.id,
|
|
67
|
+
type: identityData.type ?? 'user',
|
|
68
|
+
roles: Object.freeze([...(Array.isArray(identityData.roles) ? identityData.roles : [])]),
|
|
69
|
+
attrs: Object.freeze((identityData.attrs && typeof identityData.attrs === 'object' ? identityData.attrs : {})),
|
|
70
|
+
} : null;
|
|
71
|
+
return new Context(data.traceId, data.callerId ?? null, data.callChain ?? [], executor ?? null, identity, data.redactedInputs ?? null, data.data ? { ...data.data } : {});
|
|
72
|
+
}
|
|
73
|
+
get logger() {
|
|
74
|
+
const prefix = `[apcore:${this.callerId ?? 'unknown'}]`;
|
|
75
|
+
return {
|
|
76
|
+
debug: (...args) => console.debug(prefix, ...args),
|
|
77
|
+
info: (...args) => console.info(prefix, ...args),
|
|
78
|
+
warn: (...args) => console.warn(prefix, ...args),
|
|
79
|
+
error: (...args) => console.error(prefix, ...args),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
child(targetModuleId) {
|
|
83
|
+
return new Context(this.traceId, this.callChain.length > 0 ? this.callChain[this.callChain.length - 1] : null, [...this.callChain, targetModuleId], this.executor, this.identity, null, this.data, // shared reference
|
|
84
|
+
this.cancelToken);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAepC,MAAM,UAAU,cAAc,CAC5B,EAAU,EACV,OAAe,MAAM,EACrB,QAAkB,EAAE,EACpB,QAAiC,EAAE;IAEnC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3G,CAAC;AAED,MAAM,OAAO,OAAO;IACT,OAAO,CAAS;IAChB,QAAQ,CAAgB;IACxB,SAAS,CAAoB;IAC7B,QAAQ,CAAU;IAClB,QAAQ,CAAkB;IACnC,cAAc,CAAiC;IACtC,IAAI,CAA0B;IAC9B,WAAW,CAAqB;IAEzC,YACE,OAAe,EACf,WAA0B,IAAI,EAC9B,YAAsB,EAAE,EACxB,WAAoB,IAAI,EACxB,WAA4B,IAAI,EAChC,iBAAiD,IAAI,EACrD,OAAgC,EAAE,EAClC,cAAkC,IAAI;QAEtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CACX,WAAoB,IAAI,EACxB,WAA4B,IAAI,EAChC,IAA8B,EAC9B,WAAgC;QAEhC,IAAI,OAAe,CAAC;QACpB,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC;YAC9B,OAAO,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QACtG,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,MAAM,EAAE,CAAC;QACrB,CAAC;QACD,OAAO,IAAI,OAAO,CAChB,OAAO,EACP,IAAI,EACJ,EAAE,EACF,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,IAAI,IAAI,EAAE,CACX,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,MAAM,UAAU,GAA4B,EAAE,CAAC;QAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACxB,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACpB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;gBACxB,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC/B,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;aAClC,CAAC,CAAC,CAAC,IAAI;YACR,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI;YACvE,IAAI,EAAE,UAAU;SACjB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAA6B,EAAE,QAAkB;QAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,QAA0C,CAAC;QACrE,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC;YAC9B,EAAE,EAAE,YAAY,CAAC,EAAY;YAC7B,IAAI,EAAG,YAAY,CAAC,IAAe,IAAI,MAAM;YAC7C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxF,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI,OAAO,YAAY,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;SAC1I,CAAC,CAAC,CAAC,IAAI,CAAC;QACT,OAAO,IAAI,OAAO,CAChB,IAAI,CAAC,OAAiB,EACrB,IAAI,CAAC,QAAmB,IAAI,IAAI,EAChC,IAAI,CAAC,SAAsB,IAAI,EAAE,EAClC,QAAQ,IAAI,IAAI,EAChB,QAAQ,EACP,IAAI,CAAC,cAA0C,IAAI,IAAI,EACxD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAI,IAAI,CAAC,IAAgC,EAAE,CAAC,CAAC,CAAC,EAAE,CAC/D,CAAC;IACJ,CAAC;IAED,IAAI,MAAM;QACR,MAAM,MAAM,GAAG,WAAW,IAAI,CAAC,QAAQ,IAAI,SAAS,GAAG,CAAC;QACxD,OAAO;YACL,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;YAC7D,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;YAC3D,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;YAC3D,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;SAC9D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAsB;QAC1B,OAAO,IAAI,OAAO,CAChB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAC5E,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EACnC,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,EACb,IAAI,EACJ,IAAI,CAAC,IAAI,EAAE,mBAAmB;QAC9B,IAAI,CAAC,WAAW,CACjB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module factory, FunctionModule wrapper.
|
|
3
|
+
*
|
|
4
|
+
* TypeScript version uses explicit TypeBox schemas instead of runtime type inference.
|
|
5
|
+
*/
|
|
6
|
+
import type { TSchema } from '@sinclair/typebox';
|
|
7
|
+
import type { Context } from './context.js';
|
|
8
|
+
import type { ModuleAnnotations, ModuleExample } from './module.js';
|
|
9
|
+
export declare function normalizeResult(result: unknown): Record<string, unknown>;
|
|
10
|
+
export declare class FunctionModule {
|
|
11
|
+
readonly moduleId: string;
|
|
12
|
+
readonly inputSchema: TSchema;
|
|
13
|
+
readonly outputSchema: TSchema;
|
|
14
|
+
readonly description: string;
|
|
15
|
+
readonly documentation: string | null;
|
|
16
|
+
readonly tags: string[] | null;
|
|
17
|
+
readonly version: string;
|
|
18
|
+
readonly annotations: ModuleAnnotations | null;
|
|
19
|
+
readonly metadata: Record<string, unknown> | null;
|
|
20
|
+
readonly examples: ModuleExample[] | null;
|
|
21
|
+
private _executeFn;
|
|
22
|
+
constructor(options: {
|
|
23
|
+
execute: (inputs: Record<string, unknown>, context: Context) => Promise<Record<string, unknown>> | Record<string, unknown>;
|
|
24
|
+
moduleId: string;
|
|
25
|
+
inputSchema: TSchema;
|
|
26
|
+
outputSchema: TSchema;
|
|
27
|
+
description?: string;
|
|
28
|
+
documentation?: string | null;
|
|
29
|
+
tags?: string[] | null;
|
|
30
|
+
version?: string;
|
|
31
|
+
annotations?: ModuleAnnotations | null;
|
|
32
|
+
metadata?: Record<string, unknown> | null;
|
|
33
|
+
examples?: ModuleExample[] | null;
|
|
34
|
+
});
|
|
35
|
+
execute(inputs: Record<string, unknown>, context: Context): Promise<Record<string, unknown>>;
|
|
36
|
+
}
|
|
37
|
+
export declare function makeAutoId(name: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Create a FunctionModule from options. TypeScript version requires explicit schemas.
|
|
40
|
+
*/
|
|
41
|
+
export declare function module(options: {
|
|
42
|
+
id?: string;
|
|
43
|
+
inputSchema: TSchema;
|
|
44
|
+
outputSchema: TSchema;
|
|
45
|
+
description?: string;
|
|
46
|
+
documentation?: string | null;
|
|
47
|
+
annotations?: ModuleAnnotations | null;
|
|
48
|
+
tags?: string[] | null;
|
|
49
|
+
version?: string;
|
|
50
|
+
metadata?: Record<string, unknown> | null;
|
|
51
|
+
examples?: ModuleExample[] | null;
|
|
52
|
+
execute: (inputs: Record<string, unknown>, context: Context) => Promise<Record<string, unknown>> | Record<string, unknown>;
|
|
53
|
+
registry?: {
|
|
54
|
+
register(moduleId: string, module: unknown): void;
|
|
55
|
+
} | null;
|
|
56
|
+
}): FunctionModule;
|
|
57
|
+
//# sourceMappingURL=decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorator.d.ts","sourceRoot":"","sources":["../src/decorator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module factory, FunctionModule wrapper.
|
|
3
|
+
*
|
|
4
|
+
* TypeScript version uses explicit TypeBox schemas instead of runtime type inference.
|
|
5
|
+
*/
|
|
6
|
+
export function normalizeResult(result) {
|
|
7
|
+
if (result === null || result === undefined)
|
|
8
|
+
return {};
|
|
9
|
+
if (typeof result === 'object' && !Array.isArray(result))
|
|
10
|
+
return result;
|
|
11
|
+
return { result };
|
|
12
|
+
}
|
|
13
|
+
export class FunctionModule {
|
|
14
|
+
moduleId;
|
|
15
|
+
inputSchema;
|
|
16
|
+
outputSchema;
|
|
17
|
+
description;
|
|
18
|
+
documentation;
|
|
19
|
+
tags;
|
|
20
|
+
version;
|
|
21
|
+
annotations;
|
|
22
|
+
metadata;
|
|
23
|
+
examples;
|
|
24
|
+
_executeFn;
|
|
25
|
+
constructor(options) {
|
|
26
|
+
this.moduleId = options.moduleId;
|
|
27
|
+
this.inputSchema = options.inputSchema;
|
|
28
|
+
this.outputSchema = options.outputSchema;
|
|
29
|
+
this.description = options.description ?? `Module ${options.moduleId}`;
|
|
30
|
+
this.documentation = options.documentation ?? null;
|
|
31
|
+
this.tags = options.tags ?? null;
|
|
32
|
+
this.version = options.version ?? '1.0.0';
|
|
33
|
+
this.annotations = options.annotations ?? null;
|
|
34
|
+
this.metadata = options.metadata ?? null;
|
|
35
|
+
this.examples = options.examples ?? null;
|
|
36
|
+
this._executeFn = options.execute;
|
|
37
|
+
}
|
|
38
|
+
async execute(inputs, context) {
|
|
39
|
+
const result = await this._executeFn(inputs, context);
|
|
40
|
+
return normalizeResult(result);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function makeAutoId(name) {
|
|
44
|
+
let raw = name.toLowerCase();
|
|
45
|
+
raw = raw.replace(/[^a-z0-9_.]/g, '_');
|
|
46
|
+
const segments = raw.split('.');
|
|
47
|
+
return segments
|
|
48
|
+
.map((s) => (s && s[0] >= '0' && s[0] <= '9' ? '_' + s : s))
|
|
49
|
+
.join('.');
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Create a FunctionModule from options. TypeScript version requires explicit schemas.
|
|
53
|
+
*/
|
|
54
|
+
export function module(options) {
|
|
55
|
+
const moduleId = options.id ?? makeAutoId('anonymous');
|
|
56
|
+
const fm = new FunctionModule({
|
|
57
|
+
execute: options.execute,
|
|
58
|
+
moduleId,
|
|
59
|
+
inputSchema: options.inputSchema,
|
|
60
|
+
outputSchema: options.outputSchema,
|
|
61
|
+
description: options.description,
|
|
62
|
+
documentation: options.documentation,
|
|
63
|
+
tags: options.tags,
|
|
64
|
+
version: options.version,
|
|
65
|
+
annotations: options.annotations,
|
|
66
|
+
metadata: options.metadata,
|
|
67
|
+
examples: options.examples,
|
|
68
|
+
});
|
|
69
|
+
if (options.registry) {
|
|
70
|
+
options.registry.register(fm.moduleId, fm);
|
|
71
|
+
}
|
|
72
|
+
return fm;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorator.js","sourceRoot":"","sources":["../src/decorator.ts"],"names":[],"mappings":"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"}
|