apcore-js 0.5.0 → 0.7.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/README.md +1 -1
- 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/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/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 +204 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +364 -0
- package/dist/errors.js.map +1 -0
- package/dist/executor.d.ts +82 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +489 -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 +239 -0
- package/dist/extensions.js.map +1 -0
- package/{src/index.ts → dist/index.d.ts} +6 -63
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -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} +1 -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 +24 -3
- 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 -214
- 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/async-task.ts +0 -267
- package/src/bindings.ts +0 -207
- package/src/cancel.ts +0 -32
- package/src/config.ts +0 -24
- package/src/context.ts +0 -160
- package/src/decorator.ts +0 -110
- package/src/errors.ts +0 -429
- package/src/executor.ts +0 -493
- package/src/extensions.ts +0 -265
- 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 -252
- 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 -580
- 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/trace-context.ts +0 -102
- package/src/utils/index.ts +0 -5
- package/src/utils/pattern.ts +0 -30
- package/tests/async-task.test.ts +0 -335
- 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 -303
- 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 -1397
- 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-cancel.test.ts +0 -71
- package/tests/test-config.test.ts +0 -76
- package/tests/test-context.test.ts +0 -266
- 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-extensions.test.ts +0 -310
- 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/test-trace-context.test.ts +0 -251
- 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
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Directory scanner for discovering TypeScript/JavaScript extension modules.
|
|
3
|
+
*/
|
|
4
|
+
import type { DiscoveredModule } from './types.js';
|
|
5
|
+
export declare function scanExtensions(root: string, maxDepth?: number, followSymlinks?: boolean): DiscoveredModule[];
|
|
6
|
+
export declare function scanMultiRoot(roots: Array<Record<string, unknown>>, maxDepth?: number, followSymlinks?: boolean): DiscoveredModule[];
|
|
7
|
+
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/registry/scanner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAoBnD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAU,EACpB,cAAc,GAAE,OAAe,GAC9B,gBAAgB,EAAE,CA8GpB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACrC,QAAQ,GAAE,MAAU,EACpB,cAAc,GAAE,OAAe,GAC9B,gBAAgB,EAAE,CA6BpB"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Directory scanner for discovering TypeScript/JavaScript extension modules.
|
|
3
|
+
*/
|
|
4
|
+
import { ConfigError, ConfigNotFoundError } from '../errors.js';
|
|
5
|
+
// Lazy-load Node.js built-in modules for browser compatibility
|
|
6
|
+
let _nodeFs = null;
|
|
7
|
+
let _nodePath = null;
|
|
8
|
+
try {
|
|
9
|
+
_nodeFs = await import('node:fs');
|
|
10
|
+
}
|
|
11
|
+
catch { /* browser environment */ }
|
|
12
|
+
try {
|
|
13
|
+
_nodePath = await import('node:path');
|
|
14
|
+
}
|
|
15
|
+
catch { /* browser environment */ }
|
|
16
|
+
const SKIP_DIR_NAMES = new Set(['node_modules', '__pycache__']);
|
|
17
|
+
const VALID_EXTENSIONS = new Set(['.ts', '.js']);
|
|
18
|
+
const SKIP_SUFFIXES = ['.d.ts', '.test.ts', '.test.js', '.spec.ts', '.spec.js'];
|
|
19
|
+
function existsAndIsDir(p) {
|
|
20
|
+
try {
|
|
21
|
+
return _nodeFs.statSync(p).isDirectory();
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function scanExtensions(root, maxDepth = 8, followSymlinks = false) {
|
|
28
|
+
const { readdirSync, statSync, lstatSync, realpathSync } = _nodeFs;
|
|
29
|
+
const { resolve, relative, join, extname, basename, sep } = _nodePath;
|
|
30
|
+
const rootResolved = resolve(root);
|
|
31
|
+
if (!existsAndIsDir(rootResolved)) {
|
|
32
|
+
throw new ConfigNotFoundError(rootResolved);
|
|
33
|
+
}
|
|
34
|
+
const visitedRealPaths = new Set([realpathSync(rootResolved)]);
|
|
35
|
+
const results = [];
|
|
36
|
+
const seenIds = new Map();
|
|
37
|
+
const seenIdsLower = new Map();
|
|
38
|
+
function scanDir(dirPath, depth) {
|
|
39
|
+
if (depth > maxDepth) {
|
|
40
|
+
console.warn(`[apcore:scanner] Max depth ${maxDepth} exceeded at: ${dirPath}`);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
let entries;
|
|
44
|
+
try {
|
|
45
|
+
entries = readdirSync(dirPath);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
console.warn(`[apcore:scanner] Cannot read directory: ${dirPath}`);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
for (const name of entries) {
|
|
52
|
+
if (name.startsWith('.') || name.startsWith('_'))
|
|
53
|
+
continue;
|
|
54
|
+
if (SKIP_DIR_NAMES.has(name))
|
|
55
|
+
continue;
|
|
56
|
+
const entryPath = join(dirPath, name);
|
|
57
|
+
let lstat;
|
|
58
|
+
try {
|
|
59
|
+
lstat = lstatSync(entryPath);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
console.warn(`[apcore:scanner] Cannot stat entry: ${entryPath}`);
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const isSymlink = lstat.isSymbolicLink();
|
|
66
|
+
let isDir;
|
|
67
|
+
let isFile;
|
|
68
|
+
if (isSymlink) {
|
|
69
|
+
if (!followSymlinks)
|
|
70
|
+
continue;
|
|
71
|
+
const real = realpathSync(entryPath);
|
|
72
|
+
if (visitedRealPaths.has(real))
|
|
73
|
+
continue;
|
|
74
|
+
visitedRealPaths.add(real);
|
|
75
|
+
// Resolve the symlink target to check if it's a dir or file
|
|
76
|
+
let targetStat;
|
|
77
|
+
try {
|
|
78
|
+
targetStat = statSync(entryPath);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
console.warn(`[apcore:scanner] Cannot resolve symlink target: ${entryPath}`);
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
isDir = targetStat.isDirectory();
|
|
85
|
+
isFile = targetStat.isFile();
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
isDir = lstat.isDirectory();
|
|
89
|
+
isFile = lstat.isFile();
|
|
90
|
+
}
|
|
91
|
+
if (isDir) {
|
|
92
|
+
scanDir(entryPath, depth + 1);
|
|
93
|
+
}
|
|
94
|
+
else if (isFile) {
|
|
95
|
+
const ext = extname(name);
|
|
96
|
+
if (!VALID_EXTENSIONS.has(ext))
|
|
97
|
+
continue;
|
|
98
|
+
if (SKIP_SUFFIXES.some((s) => name.endsWith(s)))
|
|
99
|
+
continue;
|
|
100
|
+
const rel = relative(rootResolved, entryPath);
|
|
101
|
+
const canonicalId = rel
|
|
102
|
+
.replace(new RegExp(`\\${sep}`, 'g'), '.')
|
|
103
|
+
.replace(/\.(ts|js)$/, '');
|
|
104
|
+
if (seenIds.has(canonicalId)) {
|
|
105
|
+
console.warn(`[apcore:scanner] Duplicate module ID '${canonicalId}', skipping: ${entryPath}`);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const lowerId = canonicalId.toLowerCase();
|
|
109
|
+
if (seenIdsLower.has(lowerId) && seenIdsLower.get(lowerId) !== canonicalId) {
|
|
110
|
+
console.warn(`[apcore:scanner] Case collision: '${canonicalId}' vs '${seenIdsLower.get(lowerId)}'`);
|
|
111
|
+
}
|
|
112
|
+
// Check for companion metadata file
|
|
113
|
+
const stem = basename(entryPath, ext);
|
|
114
|
+
const metaPath = join(dirPath, stem + '_meta.yaml');
|
|
115
|
+
let metaPathResult = null;
|
|
116
|
+
try {
|
|
117
|
+
if (statSync(metaPath).isFile())
|
|
118
|
+
metaPathResult = metaPath;
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// no meta file
|
|
122
|
+
}
|
|
123
|
+
seenIds.set(canonicalId, entryPath);
|
|
124
|
+
seenIdsLower.set(lowerId, canonicalId);
|
|
125
|
+
results.push({
|
|
126
|
+
filePath: entryPath,
|
|
127
|
+
canonicalId,
|
|
128
|
+
metaPath: metaPathResult,
|
|
129
|
+
namespace: null,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
scanDir(rootResolved, 1);
|
|
135
|
+
return results;
|
|
136
|
+
}
|
|
137
|
+
export function scanMultiRoot(roots, maxDepth = 8, followSymlinks = false) {
|
|
138
|
+
const { basename } = _nodePath;
|
|
139
|
+
const allResults = [];
|
|
140
|
+
const seenNamespaces = new Set();
|
|
141
|
+
const resolved = [];
|
|
142
|
+
for (const entry of roots) {
|
|
143
|
+
const rootPath = entry['root'];
|
|
144
|
+
const namespace = entry['namespace'] || basename(rootPath);
|
|
145
|
+
if (seenNamespaces.has(namespace)) {
|
|
146
|
+
throw new ConfigError(`Duplicate namespace: '${namespace}'`);
|
|
147
|
+
}
|
|
148
|
+
seenNamespaces.add(namespace);
|
|
149
|
+
resolved.push([rootPath, namespace]);
|
|
150
|
+
}
|
|
151
|
+
for (const [rootPath, namespace] of resolved) {
|
|
152
|
+
const modules = scanExtensions(rootPath, maxDepth, followSymlinks);
|
|
153
|
+
for (const m of modules) {
|
|
154
|
+
allResults.push({
|
|
155
|
+
filePath: m.filePath,
|
|
156
|
+
canonicalId: `${namespace}.${m.canonicalId}`,
|
|
157
|
+
metaPath: m.metaPath,
|
|
158
|
+
namespace,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return allResults;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/registry/scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema query and export functions for the registry system.
|
|
3
|
+
*/
|
|
4
|
+
import type { Registry } from './registry.js';
|
|
5
|
+
export declare function getSchema(registry: Registry, moduleId: string): Record<string, unknown> | null;
|
|
6
|
+
export declare function exportSchema(registry: Registry, moduleId: string, format?: string, strict?: boolean, compact?: boolean, profile?: string | null): string;
|
|
7
|
+
export declare function getAllSchemas(registry: Registry): Record<string, Record<string, unknown>>;
|
|
8
|
+
export declare function exportAllSchemas(registry: Registry, format?: string, strict?: boolean, compact?: boolean, profile?: string | null): string;
|
|
9
|
+
//# sourceMappingURL=schema-export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-export.d.ts","sourceRoot":"","sources":["../../src/registry/schema-export.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CA8B9F;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAe,EACvB,MAAM,GAAE,OAAe,EACvB,OAAO,GAAE,OAAe,EACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,MAAM,CAoBR;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CASzF;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,MAAM,GAAE,MAAe,EACvB,MAAM,GAAE,OAAe,EACvB,OAAO,GAAE,OAAe,EACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,MAAM,CAiBR"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema query and export functions for the registry system.
|
|
3
|
+
*/
|
|
4
|
+
import yaml from 'js-yaml';
|
|
5
|
+
import { InvalidInputError, ModuleNotFoundError } from '../errors.js';
|
|
6
|
+
import { deepCopy } from '../utils/index.js';
|
|
7
|
+
import { SchemaExporter } from '../schema/exporter.js';
|
|
8
|
+
import { stripExtensions, toStrictSchema } from '../schema/strict.js';
|
|
9
|
+
import { ExportProfile } from '../schema/types.js';
|
|
10
|
+
export function getSchema(registry, moduleId) {
|
|
11
|
+
const module = registry.get(moduleId);
|
|
12
|
+
if (module === null)
|
|
13
|
+
return null;
|
|
14
|
+
const mod = module;
|
|
15
|
+
// TypeBox schemas are already JSON Schema
|
|
16
|
+
const inputSchemaDict = mod['inputSchema'] ?? {};
|
|
17
|
+
const outputSchemaDict = mod['outputSchema'] ?? {};
|
|
18
|
+
const annotations = mod['annotations'];
|
|
19
|
+
let annotationsDict = null;
|
|
20
|
+
if (annotations) {
|
|
21
|
+
annotationsDict = { ...annotations };
|
|
22
|
+
}
|
|
23
|
+
const examplesRaw = mod['examples'] ?? [];
|
|
24
|
+
const examplesList = examplesRaw.map((ex) => ({ ...ex }));
|
|
25
|
+
return {
|
|
26
|
+
module_id: moduleId,
|
|
27
|
+
name: mod['name'] ?? null,
|
|
28
|
+
description: mod['description'] ?? '',
|
|
29
|
+
version: mod['version'] ?? '1.0.0',
|
|
30
|
+
tags: [...(mod['tags'] ?? [])],
|
|
31
|
+
input_schema: inputSchemaDict,
|
|
32
|
+
output_schema: outputSchemaDict,
|
|
33
|
+
annotations: annotationsDict,
|
|
34
|
+
examples: examplesList,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function exportSchema(registry, moduleId, format = 'json', strict = false, compact = false, profile) {
|
|
38
|
+
const schemaDict = getSchema(registry, moduleId);
|
|
39
|
+
if (schemaDict === null) {
|
|
40
|
+
throw new ModuleNotFoundError(moduleId);
|
|
41
|
+
}
|
|
42
|
+
if (profile != null) {
|
|
43
|
+
return exportWithProfile(registry, moduleId, schemaDict, profile, format);
|
|
44
|
+
}
|
|
45
|
+
const result = deepCopy(schemaDict);
|
|
46
|
+
if (strict) {
|
|
47
|
+
result['input_schema'] = toStrictSchema(result['input_schema']);
|
|
48
|
+
result['output_schema'] = toStrictSchema(result['output_schema']);
|
|
49
|
+
}
|
|
50
|
+
else if (compact) {
|
|
51
|
+
applyCompact(result);
|
|
52
|
+
}
|
|
53
|
+
return serialize(result, format);
|
|
54
|
+
}
|
|
55
|
+
export function getAllSchemas(registry) {
|
|
56
|
+
const result = {};
|
|
57
|
+
for (const moduleId of registry.moduleIds) {
|
|
58
|
+
const schema = getSchema(registry, moduleId);
|
|
59
|
+
if (schema !== null) {
|
|
60
|
+
result[moduleId] = schema;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
export function exportAllSchemas(registry, format = 'json', strict = false, compact = false, profile) {
|
|
66
|
+
const allSchemas = getAllSchemas(registry);
|
|
67
|
+
if (strict || compact) {
|
|
68
|
+
for (const [moduleId, schema] of Object.entries(allSchemas)) {
|
|
69
|
+
const result = deepCopy(schema);
|
|
70
|
+
if (strict) {
|
|
71
|
+
result['input_schema'] = toStrictSchema(result['input_schema']);
|
|
72
|
+
result['output_schema'] = toStrictSchema(result['output_schema']);
|
|
73
|
+
}
|
|
74
|
+
else if (compact) {
|
|
75
|
+
applyCompact(result);
|
|
76
|
+
}
|
|
77
|
+
allSchemas[moduleId] = result;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return serialize(allSchemas, format);
|
|
81
|
+
}
|
|
82
|
+
function exportWithProfile(registry, moduleId, schemaDict, profile, format) {
|
|
83
|
+
const schemaDef = {
|
|
84
|
+
moduleId,
|
|
85
|
+
description: schemaDict['description'],
|
|
86
|
+
inputSchema: schemaDict['input_schema'],
|
|
87
|
+
outputSchema: schemaDict['output_schema'],
|
|
88
|
+
definitions: {},
|
|
89
|
+
version: schemaDict['version'] ?? '1.0.0',
|
|
90
|
+
};
|
|
91
|
+
const module = registry.get(moduleId);
|
|
92
|
+
const annotations = module ? module['annotations'] : undefined;
|
|
93
|
+
const examples = module ? module['examples'] ?? [] : [];
|
|
94
|
+
const name = module ? module['name'] : undefined;
|
|
95
|
+
const validProfiles = new Set(Object.values(ExportProfile));
|
|
96
|
+
if (!validProfiles.has(profile)) {
|
|
97
|
+
throw new InvalidInputError(`Invalid export profile: '${profile}'. Must be one of: ${[...validProfiles].join(', ')}`);
|
|
98
|
+
}
|
|
99
|
+
const exported = new SchemaExporter().export(schemaDef, profile, annotations, examples, name);
|
|
100
|
+
return serialize(exported, format);
|
|
101
|
+
}
|
|
102
|
+
function applyCompact(schemaDict) {
|
|
103
|
+
const desc = schemaDict['description'];
|
|
104
|
+
if (desc) {
|
|
105
|
+
schemaDict['description'] = truncateDescription(desc);
|
|
106
|
+
}
|
|
107
|
+
stripExtensions(schemaDict['input_schema'] ?? {});
|
|
108
|
+
stripExtensions(schemaDict['output_schema'] ?? {});
|
|
109
|
+
delete schemaDict['documentation'];
|
|
110
|
+
delete schemaDict['examples'];
|
|
111
|
+
}
|
|
112
|
+
function truncateDescription(description) {
|
|
113
|
+
const dotSpace = description.indexOf('. ');
|
|
114
|
+
const newline = description.indexOf('\n');
|
|
115
|
+
const candidates = [];
|
|
116
|
+
if (dotSpace >= 0)
|
|
117
|
+
candidates.push(dotSpace + 1);
|
|
118
|
+
if (newline >= 0)
|
|
119
|
+
candidates.push(newline);
|
|
120
|
+
if (candidates.length > 0) {
|
|
121
|
+
const cut = Math.min(...candidates);
|
|
122
|
+
return description.slice(0, cut).trimEnd();
|
|
123
|
+
}
|
|
124
|
+
return description;
|
|
125
|
+
}
|
|
126
|
+
function serialize(data, format) {
|
|
127
|
+
if (format === 'yaml') {
|
|
128
|
+
return yaml.dump(data, { flowLevel: -1 });
|
|
129
|
+
}
|
|
130
|
+
return JSON.stringify(data, null, 2);
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=schema-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-export.js","sourceRoot":"","sources":["../../src/registry/schema-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry types: ModuleDescriptor, DiscoveredModule, DependencyInfo.
|
|
3
|
+
*/
|
|
4
|
+
import type { ModuleAnnotations, ModuleExample } from '../module.js';
|
|
5
|
+
export interface ModuleDescriptor {
|
|
6
|
+
moduleId: string;
|
|
7
|
+
name: string | null;
|
|
8
|
+
description: string;
|
|
9
|
+
documentation: string | null;
|
|
10
|
+
inputSchema: Record<string, unknown>;
|
|
11
|
+
outputSchema: Record<string, unknown>;
|
|
12
|
+
version: string;
|
|
13
|
+
tags: string[];
|
|
14
|
+
annotations: ModuleAnnotations | null;
|
|
15
|
+
examples: ModuleExample[];
|
|
16
|
+
metadata: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
export interface DiscoveredModule {
|
|
19
|
+
filePath: string;
|
|
20
|
+
canonicalId: string;
|
|
21
|
+
metaPath: string | null;
|
|
22
|
+
namespace: string | null;
|
|
23
|
+
}
|
|
24
|
+
export interface DependencyInfo {
|
|
25
|
+
moduleId: string;
|
|
26
|
+
version: string | null;
|
|
27
|
+
optional: boolean;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACtC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module validation for the registry system.
|
|
3
|
+
*
|
|
4
|
+
* In TypeScript, modules use TypeBox TSchema (which are plain objects) instead of
|
|
5
|
+
* Pydantic BaseModel classes. Duck-type checks validate that the module has
|
|
6
|
+
* inputSchema, outputSchema, description, and execute.
|
|
7
|
+
*/
|
|
8
|
+
export declare function validateModule(moduleOrClass: unknown): string[];
|
|
9
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/registry/validation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wBAAgB,cAAc,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,EAAE,CA6B/D"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module validation for the registry system.
|
|
3
|
+
*
|
|
4
|
+
* In TypeScript, modules use TypeBox TSchema (which are plain objects) instead of
|
|
5
|
+
* Pydantic BaseModel classes. Duck-type checks validate that the module has
|
|
6
|
+
* inputSchema, outputSchema, description, and execute.
|
|
7
|
+
*/
|
|
8
|
+
export function validateModule(moduleOrClass) {
|
|
9
|
+
const errors = [];
|
|
10
|
+
const obj = moduleOrClass;
|
|
11
|
+
// Check inputSchema
|
|
12
|
+
const inputSchema = obj['inputSchema'] ?? obj.constructor?.['inputSchema'];
|
|
13
|
+
if (inputSchema == null || typeof inputSchema !== 'object') {
|
|
14
|
+
errors.push('Missing or invalid inputSchema: must be a TSchema object');
|
|
15
|
+
}
|
|
16
|
+
// Check outputSchema
|
|
17
|
+
const outputSchema = obj['outputSchema'] ?? obj.constructor?.['outputSchema'];
|
|
18
|
+
if (outputSchema == null || typeof outputSchema !== 'object') {
|
|
19
|
+
errors.push('Missing or invalid outputSchema: must be a TSchema object');
|
|
20
|
+
}
|
|
21
|
+
// Check description
|
|
22
|
+
const description = obj['description'];
|
|
23
|
+
if (!description || typeof description !== 'string') {
|
|
24
|
+
errors.push('Missing or empty description');
|
|
25
|
+
}
|
|
26
|
+
// Check execute
|
|
27
|
+
const execute = obj['execute'];
|
|
28
|
+
if (execute == null || typeof execute !== 'function') {
|
|
29
|
+
errors.push('Missing execute method');
|
|
30
|
+
}
|
|
31
|
+
return errors;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/registry/validation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,UAAU,cAAc,CAAC,aAAsB;IACnD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,aAAwC,CAAC;IAErD,oBAAoB;IACpB,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,IAAK,GAAG,CAAC,WAAkD,EAAE,CAAC,aAAa,CAAC,CAAC;IACnH,IAAI,WAAW,IAAI,IAAI,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAC1E,CAAC;IAED,qBAAqB;IACrB,MAAM,YAAY,GAAG,GAAG,CAAC,cAAc,CAAC,IAAK,GAAG,CAAC,WAAkD,EAAE,CAAC,cAAc,CAAC,CAAC;IACtH,IAAI,YAAY,IAAI,IAAI,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IAC3E,CAAC;IAED,oBAAoB;IACpB,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;IACvC,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IAED,gBAAgB;IAChB,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/B,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Annotation conflict resolution — merge YAML and code metadata.
|
|
3
|
+
*/
|
|
4
|
+
import type { ModuleAnnotations, ModuleExample } from '../module.js';
|
|
5
|
+
export declare function mergeAnnotations(yamlAnnotations: Record<string, unknown> | null | undefined, codeAnnotations: ModuleAnnotations | null | undefined): ModuleAnnotations;
|
|
6
|
+
export declare function mergeExamples(yamlExamples: Array<Record<string, unknown>> | null | undefined, codeExamples: ModuleExample[] | null | undefined): ModuleExample[];
|
|
7
|
+
export declare function mergeMetadata(yamlMetadata: Record<string, unknown> | null | undefined, codeMetadata: Record<string, unknown> | null | undefined): Record<string, unknown>;
|
|
8
|
+
//# sourceMappingURL=annotations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../src/schema/annotations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAYrE,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EAC3D,eAAe,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,GACpD,iBAAiB,CAqBnB;AAED,wBAAgB,aAAa,CAC3B,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,EAC/D,YAAY,EAAE,aAAa,EAAE,GAAG,IAAI,GAAG,SAAS,GAC/C,aAAa,EAAE,CAWjB;AAED,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EACxD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GACvD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Annotation conflict resolution — merge YAML and code metadata.
|
|
3
|
+
*/
|
|
4
|
+
import { DEFAULT_ANNOTATIONS } from '../module.js';
|
|
5
|
+
const ANNOTATION_FIELDS = [
|
|
6
|
+
'readonly',
|
|
7
|
+
'destructive',
|
|
8
|
+
'idempotent',
|
|
9
|
+
'requiresApproval',
|
|
10
|
+
'openWorld',
|
|
11
|
+
'streaming',
|
|
12
|
+
];
|
|
13
|
+
export function mergeAnnotations(yamlAnnotations, codeAnnotations) {
|
|
14
|
+
const values = {};
|
|
15
|
+
for (const f of ANNOTATION_FIELDS) {
|
|
16
|
+
values[f] = DEFAULT_ANNOTATIONS[f];
|
|
17
|
+
}
|
|
18
|
+
if (codeAnnotations != null) {
|
|
19
|
+
for (const f of ANNOTATION_FIELDS) {
|
|
20
|
+
values[f] = codeAnnotations[f];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (yamlAnnotations != null) {
|
|
24
|
+
for (const [key, val] of Object.entries(yamlAnnotations)) {
|
|
25
|
+
if (ANNOTATION_FIELDS.includes(key)) {
|
|
26
|
+
values[key] = val;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return values;
|
|
31
|
+
}
|
|
32
|
+
export function mergeExamples(yamlExamples, codeExamples) {
|
|
33
|
+
if (yamlExamples != null) {
|
|
34
|
+
return yamlExamples.map((d) => ({
|
|
35
|
+
title: d['title'],
|
|
36
|
+
inputs: d['inputs'] ?? {},
|
|
37
|
+
output: d['output'] ?? {},
|
|
38
|
+
description: d['description'],
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
if (codeExamples != null)
|
|
42
|
+
return codeExamples;
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
export function mergeMetadata(yamlMetadata, codeMetadata) {
|
|
46
|
+
const result = codeMetadata != null ? { ...codeMetadata } : {};
|
|
47
|
+
if (yamlMetadata != null) {
|
|
48
|
+
Object.assign(result, yamlMetadata);
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=annotations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../src/schema/annotations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,iBAAiB,GAA2C;IAChE,UAAU;IACV,aAAa;IACb,YAAY;IACZ,kBAAkB;IAClB,WAAW;IACX,WAAW;CACZ,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAC9B,eAA2D,EAC3D,eAAqD;IAErD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;YAClC,MAAM,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YACzD,IAAK,iBAAuC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3D,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAsC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,YAA+D,EAC/D,YAAgD;IAEhD,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QACzB,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,KAAK,EAAE,CAAC,CAAC,OAAO,CAAW;YAC3B,MAAM,EAAG,CAAC,CAAC,QAAQ,CAA6B,IAAI,EAAE;YACtD,MAAM,EAAG,CAAC,CAAC,QAAQ,CAA6B,IAAI,EAAE;YACtD,WAAW,EAAE,CAAC,CAAC,aAAa,CAAuB;SACpD,CAAC,CAAC,CAAC;IACN,CAAC;IACD,IAAI,YAAY,IAAI,IAAI;QAAE,OAAO,YAAY,CAAC;IAC9C,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,YAAwD,EACxD,YAAwD;IAExD,MAAM,MAAM,GAAG,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SchemaExporter — converts schemas to platform-specific export formats.
|
|
3
|
+
*/
|
|
4
|
+
import type { ModuleAnnotations, ModuleExample } from '../module.js';
|
|
5
|
+
import { ExportProfile, type SchemaDefinition } from './types.js';
|
|
6
|
+
export declare class SchemaExporter {
|
|
7
|
+
export(schemaDef: SchemaDefinition, profile: ExportProfile, annotations?: ModuleAnnotations | null, examples?: ModuleExample[] | null, name?: string | null): Record<string, unknown>;
|
|
8
|
+
exportMcp(schemaDef: SchemaDefinition, annotations?: ModuleAnnotations | null, name?: string | null): Record<string, unknown>;
|
|
9
|
+
exportOpenai(schemaDef: SchemaDefinition): Record<string, unknown>;
|
|
10
|
+
exportAnthropic(schemaDef: SchemaDefinition, examples?: ModuleExample[] | null): Record<string, unknown>;
|
|
11
|
+
exportGeneric(schemaDef: SchemaDefinition): Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=exporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../src/schema/exporter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAElE,qBAAa,cAAc;IACzB,MAAM,CACJ,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,aAAa,EACtB,WAAW,CAAC,EAAE,iBAAiB,GAAG,IAAI,EACtC,QAAQ,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,EACjC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAa1B,SAAS,CACP,SAAS,EAAE,gBAAgB,EAC3B,WAAW,CAAC,EAAE,iBAAiB,GAAG,IAAI,EACtC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAc1B,YAAY,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAelE,eAAe,CACb,SAAS,EAAE,gBAAgB,EAC3B,QAAQ,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,GAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAe1B,aAAa,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CASpE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SchemaExporter — converts schemas to platform-specific export formats.
|
|
3
|
+
*/
|
|
4
|
+
import { deepCopy } from '../utils/index.js';
|
|
5
|
+
import { applyLlmDescriptions, stripExtensions, toStrictSchema } from './strict.js';
|
|
6
|
+
import { ExportProfile } from './types.js';
|
|
7
|
+
export class SchemaExporter {
|
|
8
|
+
export(schemaDef, profile, annotations, examples, name) {
|
|
9
|
+
if (profile === ExportProfile.MCP) {
|
|
10
|
+
return this.exportMcp(schemaDef, annotations, name);
|
|
11
|
+
}
|
|
12
|
+
if (profile === ExportProfile.OpenAI) {
|
|
13
|
+
return this.exportOpenai(schemaDef);
|
|
14
|
+
}
|
|
15
|
+
if (profile === ExportProfile.Anthropic) {
|
|
16
|
+
return this.exportAnthropic(schemaDef, examples);
|
|
17
|
+
}
|
|
18
|
+
return this.exportGeneric(schemaDef);
|
|
19
|
+
}
|
|
20
|
+
exportMcp(schemaDef, annotations, name) {
|
|
21
|
+
return {
|
|
22
|
+
name: name ?? schemaDef.moduleId,
|
|
23
|
+
description: schemaDef.description,
|
|
24
|
+
inputSchema: schemaDef.inputSchema,
|
|
25
|
+
annotations: {
|
|
26
|
+
readOnlyHint: annotations?.readonly ?? false,
|
|
27
|
+
destructiveHint: annotations?.destructive ?? false,
|
|
28
|
+
idempotentHint: annotations?.idempotent ?? false,
|
|
29
|
+
openWorldHint: annotations?.openWorld ?? true,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
exportOpenai(schemaDef) {
|
|
34
|
+
const schema = deepCopy(schemaDef.inputSchema);
|
|
35
|
+
applyLlmDescriptions(schema);
|
|
36
|
+
const strictSchema = toStrictSchema(schema);
|
|
37
|
+
return {
|
|
38
|
+
type: 'function',
|
|
39
|
+
function: {
|
|
40
|
+
name: schemaDef.moduleId.replace(/\./g, '_'),
|
|
41
|
+
description: schemaDef.description,
|
|
42
|
+
parameters: strictSchema,
|
|
43
|
+
strict: true,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
exportAnthropic(schemaDef, examples) {
|
|
48
|
+
const schema = deepCopy(schemaDef.inputSchema);
|
|
49
|
+
applyLlmDescriptions(schema);
|
|
50
|
+
stripExtensions(schema);
|
|
51
|
+
const result = {
|
|
52
|
+
name: schemaDef.moduleId.replace(/\./g, '_'),
|
|
53
|
+
description: schemaDef.description,
|
|
54
|
+
input_schema: schema,
|
|
55
|
+
};
|
|
56
|
+
if (examples && examples.length > 0) {
|
|
57
|
+
result['input_examples'] = examples.map((ex) => ex.inputs);
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
exportGeneric(schemaDef) {
|
|
62
|
+
return {
|
|
63
|
+
module_id: schemaDef.moduleId,
|
|
64
|
+
description: schemaDef.description,
|
|
65
|
+
input_schema: schemaDef.inputSchema,
|
|
66
|
+
output_schema: schemaDef.outputSchema,
|
|
67
|
+
definitions: schemaDef.definitions,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=exporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../src/schema/exporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { SchemaStrategy, ExportProfile, validationResultToError } from './types.js';
|
|
2
|
+
export type { SchemaDefinition, ResolvedSchema, SchemaValidationErrorDetail, SchemaValidationResult, LLMExtensions, } from './types.js';
|
|
3
|
+
export { RefResolver } from './ref-resolver.js';
|
|
4
|
+
export { toStrictSchema, applyLlmDescriptions, stripExtensions } from './strict.js';
|
|
5
|
+
export { mergeAnnotations, mergeExamples, mergeMetadata } from './annotations.js';
|
|
6
|
+
export { SchemaLoader, jsonSchemaToTypeBox } from './loader.js';
|
|
7
|
+
export { SchemaValidator } from './validator.js';
|
|
8
|
+
export { SchemaExporter } from './exporter.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACpF,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,2BAA2B,EAC3B,sBAAsB,EACtB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
export { SchemaStrategy, ExportProfile, validationResultToError } from './types.js';
|
|
2
|
-
export type {
|
|
3
|
-
SchemaDefinition,
|
|
4
|
-
ResolvedSchema,
|
|
5
|
-
SchemaValidationErrorDetail,
|
|
6
|
-
SchemaValidationResult,
|
|
7
|
-
LLMExtensions,
|
|
8
|
-
} from './types.js';
|
|
9
2
|
export { RefResolver } from './ref-resolver.js';
|
|
10
3
|
export { toStrictSchema, applyLlmDescriptions, stripExtensions } from './strict.js';
|
|
11
4
|
export { mergeAnnotations, mergeExamples, mergeMetadata } from './annotations.js';
|
|
12
5
|
export { SchemaLoader, jsonSchemaToTypeBox } from './loader.js';
|
|
13
6
|
export { SchemaValidator } from './validator.js';
|
|
14
7
|
export { SchemaExporter } from './exporter.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|