johankit-runtime 0.0.2 → 0.4.3
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 +93 -115
- package/dist/src/app.d.ts +7 -0
- package/dist/src/app.d.ts.map +1 -0
- package/dist/src/app.js +18 -0
- package/dist/src/app.js.map +1 -0
- package/dist/src/core/cache.d.ts +6 -0
- package/dist/src/core/cache.d.ts.map +1 -0
- package/dist/src/core/cache.js +18 -0
- package/dist/src/core/cache.js.map +1 -0
- package/dist/src/core/conditions/resolver.d.ts +2 -0
- package/dist/src/core/conditions/resolver.d.ts.map +1 -0
- package/dist/src/core/conditions/resolver.js +20 -0
- package/dist/src/core/conditions/resolver.js.map +1 -0
- package/dist/src/core/config-loader.d.ts +2 -0
- package/dist/src/core/config-loader.d.ts.map +1 -0
- package/dist/src/core/config-loader.js +18 -0
- package/dist/src/core/config-loader.js.map +1 -0
- package/dist/src/core/context.d.ts +2 -0
- package/dist/src/core/context.d.ts.map +1 -0
- package/dist/src/core/context.js +5 -0
- package/dist/src/core/context.js.map +1 -0
- package/dist/src/core/discovery.d.ts +4 -0
- package/dist/src/core/discovery.d.ts.map +1 -0
- package/dist/src/core/discovery.js +6 -0
- package/dist/src/core/discovery.js.map +1 -0
- package/dist/src/core/event/dispatch.d.ts +2 -0
- package/dist/src/core/event/dispatch.d.ts.map +1 -0
- package/dist/src/core/event/dispatch.js +30 -0
- package/dist/src/core/event/dispatch.js.map +1 -0
- package/dist/src/core/mcp/http-server.d.ts +11 -0
- package/dist/src/core/mcp/http-server.d.ts.map +1 -0
- package/dist/src/core/mcp/http-server.js +48 -0
- package/dist/src/core/mcp/http-server.js.map +1 -0
- package/dist/src/core/mcp/tools-mcp.d.ts +14 -0
- package/dist/src/core/mcp/tools-mcp.d.ts.map +1 -0
- package/dist/src/core/mcp/tools-mcp.js +55 -0
- package/dist/src/core/mcp/tools-mcp.js.map +1 -0
- package/dist/src/core/middleware/run.d.ts +3 -0
- package/dist/src/core/middleware/run.d.ts.map +1 -0
- package/dist/src/core/middleware/run.js +39 -0
- package/dist/src/core/middleware/run.js.map +1 -0
- package/dist/src/core/package.d.ts +8 -0
- package/dist/src/core/package.d.ts.map +1 -0
- package/dist/src/core/package.js +68 -0
- package/dist/src/core/package.js.map +1 -0
- package/dist/src/core/parse/cognites.d.ts +5 -0
- package/dist/src/core/parse/cognites.d.ts.map +1 -0
- package/{src → dist/src}/core/parse/cognites.js +7 -10
- package/dist/src/core/parse/cognites.js.map +1 -0
- package/dist/src/core/parse/hooks.d.ts +10 -0
- package/dist/src/core/parse/hooks.d.ts.map +1 -0
- package/dist/src/core/parse/hooks.js +31 -0
- package/dist/src/core/parse/hooks.js.map +1 -0
- package/dist/src/core/parse/middleware.d.ts +6 -0
- package/dist/src/core/parse/middleware.d.ts.map +1 -0
- package/{src → dist/src}/core/parse/middleware.js +9 -14
- package/dist/src/core/parse/middleware.js.map +1 -0
- package/dist/src/core/parse/predicates.d.ts +5 -0
- package/dist/src/core/parse/predicates.d.ts.map +1 -0
- package/{src → dist/src}/core/parse/predicates.js +9 -10
- package/dist/src/core/parse/predicates.js.map +1 -0
- package/dist/src/core/parse/routes.d.ts +6 -0
- package/dist/src/core/parse/routes.d.ts.map +1 -0
- package/{src → dist/src}/core/parse/routes.js +12 -17
- package/dist/src/core/parse/routes.js.map +1 -0
- package/dist/src/core/parse/tools.d.ts +12 -0
- package/dist/src/core/parse/tools.d.ts.map +1 -0
- package/dist/src/core/parse/tools.js +77 -0
- package/dist/src/core/parse/tools.js.map +1 -0
- package/dist/src/core/register/decorators.d.ts +7 -0
- package/dist/src/core/register/decorators.d.ts.map +1 -0
- package/dist/src/core/register/decorators.js +114 -0
- package/dist/src/core/register/decorators.js.map +1 -0
- package/dist/src/core/register/decorators.test.d.ts +2 -0
- package/dist/src/core/register/decorators.test.d.ts.map +1 -0
- package/dist/src/core/register/decorators.test.js +17 -0
- package/dist/src/core/register/decorators.test.js.map +1 -0
- package/dist/src/core/register.d.ts +2 -0
- package/dist/src/core/register.d.ts.map +1 -0
- package/dist/src/core/register.js +12 -0
- package/dist/src/core/register.js.map +1 -0
- package/dist/src/core/routes.d.ts +2 -0
- package/dist/src/core/routes.d.ts.map +1 -0
- package/dist/src/core/routes.js +65 -0
- package/dist/src/core/routes.js.map +1 -0
- package/dist/src/core/schema/export.d.ts +5 -0
- package/dist/src/core/schema/export.d.ts.map +1 -0
- package/dist/src/core/schema/export.js +15 -0
- package/dist/src/core/schema/export.js.map +1 -0
- package/dist/src/core/tools/capabilities.d.ts +2 -0
- package/dist/src/core/tools/capabilities.d.ts.map +1 -0
- package/dist/src/core/tools/capabilities.js +11 -0
- package/dist/src/core/tools/capabilities.js.map +1 -0
- package/dist/src/core/tools/lifecycle.d.ts +2 -0
- package/dist/src/core/tools/lifecycle.d.ts.map +1 -0
- package/dist/src/core/tools/lifecycle.js +6 -0
- package/dist/src/core/tools/lifecycle.js.map +1 -0
- package/dist/src/core/tools/middleware.d.ts +2 -0
- package/dist/src/core/tools/middleware.d.ts.map +1 -0
- package/dist/src/core/tools/middleware.js +7 -0
- package/dist/src/core/tools/middleware.js.map +1 -0
- package/dist/src/core/wiring.d.ts +2 -0
- package/dist/src/core/wiring.d.ts.map +1 -0
- package/dist/src/core/wiring.js +8 -0
- package/dist/src/core/wiring.js.map +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +40 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/server.d.ts +2 -0
- package/dist/src/server.d.ts.map +1 -0
- package/dist/src/server.js +19 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/types.d.ts +87 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/dist/tests/cognites.test.js +21 -0
- package/dist/tests/dispatch.test.js +73 -0
- package/dist/tests/hooks.test.js +31 -0
- package/dist/tests/middleware.test.js +19 -0
- package/dist/tests/predicates.test.js +20 -0
- package/dist/tests/routes.test.js +26 -0
- package/dist/tests/tools.test.js +38 -0
- package/package.json +13 -12
- package/src/app.ts +0 -18
- package/src/core/event/dispatch.js +0 -31
- package/src/core/mcp/http-server.js +0 -52
- package/src/core/mcp/tools-mcp.js +0 -50
- package/src/core/package.js +0 -79
- package/src/core/parse/hooks.js +0 -37
- package/src/core/parse/tools.js +0 -82
- package/src/core/register/decorators.js +0 -150
- package/src/core/register/decorators.test.js +0 -13
- package/src/core/register.js +0 -37
- package/src/core/routes.js +0 -89
- package/src/index.ts +0 -42
- package/src/server.ts +0 -15
- package/src/types.ts +0 -104
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const fs = require('fs').promises;
|
|
3
|
-
|
|
4
|
-
const { parseTool } = require('../parse/tools');
|
|
5
|
-
const { parseHook } = require('../parse/hooks');
|
|
6
|
-
const { parseCognite } = require('../parse/cognites');
|
|
7
|
-
const { parseRouter } = require('../parse/routes');
|
|
8
|
-
const { parsePredicate } = require('../parse/predicates');
|
|
9
|
-
const { parseMiddleware } = require('../parse/middleware');
|
|
10
|
-
|
|
11
|
-
async function getJsFilesRecursively(dir) {
|
|
12
|
-
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
13
|
-
const tasks = entries.map(async entry => {
|
|
14
|
-
const fullPath = path.join(dir, entry.name);
|
|
15
|
-
if (entry.isDirectory()) return getJsFilesRecursively(fullPath);
|
|
16
|
-
if (entry.isFile() && entry.name.endsWith('.js')) return [fullPath];
|
|
17
|
-
return [];
|
|
18
|
-
});
|
|
19
|
-
const results = await Promise.all(tasks);
|
|
20
|
-
return results.flat();
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
async function isRelevantFile(filePath) {
|
|
24
|
-
try {
|
|
25
|
-
const content = await fs.readFile(filePath, 'utf-8');
|
|
26
|
-
return content.includes('@register_');
|
|
27
|
-
} catch {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function extractExportedFunctions(mod) {
|
|
33
|
-
if (typeof mod === 'function') return [mod];
|
|
34
|
-
if (typeof mod === 'object' && mod !== null) return Object.values(mod);
|
|
35
|
-
return [];
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
async function registerGeneric(agentFolder, parser, mapFn) {
|
|
39
|
-
const baseDir = process.env.PACKAGES_PATH || path.resolve(__dirname, '..', '..', 'packages');
|
|
40
|
-
|
|
41
|
-
let folderPath;
|
|
42
|
-
if (path.isAbsolute(String(agentFolder))) {
|
|
43
|
-
folderPath = agentFolder;
|
|
44
|
-
} else if (String(agentFolder).includes('packages')) {
|
|
45
|
-
const folderName = path.basename(agentFolder);
|
|
46
|
-
folderPath = path.join(baseDir, folderName);
|
|
47
|
-
} else {
|
|
48
|
-
folderPath = path.join(baseDir, String(agentFolder));
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
try {
|
|
52
|
-
await fs.access(folderPath);
|
|
53
|
-
} catch {
|
|
54
|
-
throw new Error(`Folder not found: ${folderPath}`);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const files = await getJsFilesRecursively(folderPath);
|
|
58
|
-
|
|
59
|
-
const results = await Promise.all(
|
|
60
|
-
files.map(async filePath => {
|
|
61
|
-
if (!(await isRelevantFile(filePath))) return [];
|
|
62
|
-
try {
|
|
63
|
-
const absolutePath = path.resolve(filePath);
|
|
64
|
-
delete require.cache[require.resolve(absolutePath)];
|
|
65
|
-
const mod = require(absolutePath);
|
|
66
|
-
|
|
67
|
-
return extractExportedFunctions(mod)
|
|
68
|
-
.map(fn => {
|
|
69
|
-
const meta = parser(fn);
|
|
70
|
-
if (!meta) return null;
|
|
71
|
-
return mapFn(meta);
|
|
72
|
-
})
|
|
73
|
-
.filter(Boolean);
|
|
74
|
-
} catch (err) {
|
|
75
|
-
console.warn(`Erro ao registrar em ${filePath}:`, err.message);
|
|
76
|
-
return [];
|
|
77
|
-
}
|
|
78
|
-
})
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
return results.flat();
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function registerTools(agentFolder) {
|
|
85
|
-
return registerGeneric(agentFolder, parseTool, meta => {
|
|
86
|
-
const tool = {
|
|
87
|
-
name: meta.name,
|
|
88
|
-
description: meta.description,
|
|
89
|
-
parameters: {
|
|
90
|
-
type: 'object',
|
|
91
|
-
properties: (meta.parameters || []).reduce((acc, p) => {
|
|
92
|
-
acc[p.name] = { type: p.type === 'array' ? 'array' : p.type, description: p.description };
|
|
93
|
-
if (p.type === 'array') acc[p.name].items = { type: 'object' };
|
|
94
|
-
return acc;
|
|
95
|
-
}, {}),
|
|
96
|
-
required: (meta.parameters || []).filter(p => p.required).map(p => p.name),
|
|
97
|
-
},
|
|
98
|
-
call: meta.call,
|
|
99
|
-
};
|
|
100
|
-
if (meta.condition) tool.condition = meta.condition;
|
|
101
|
-
return tool;
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
function registerHooks(agentFolder) {
|
|
106
|
-
return registerGeneric(agentFolder, parseHook, meta => {
|
|
107
|
-
const hook = { event: meta.event, call: meta.call };
|
|
108
|
-
if (meta.condition) hook.condition = meta.condition;
|
|
109
|
-
return hook;
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function registerCognites(agentFolder) {
|
|
114
|
-
return registerGeneric(agentFolder, parseCognite, meta => ({
|
|
115
|
-
name: meta.name,
|
|
116
|
-
description: meta.description,
|
|
117
|
-
execute: meta.execute,
|
|
118
|
-
options: meta.options || {},
|
|
119
|
-
}));
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function registerRoutes(agentFolder) {
|
|
123
|
-
return registerGeneric(agentFolder, parseRouter, meta => ({
|
|
124
|
-
path: meta.path,
|
|
125
|
-
method: meta.method || 'get',
|
|
126
|
-
handler: meta.handler,
|
|
127
|
-
}));
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
async function registerPredicates(agentFolder) {
|
|
131
|
-
const preds = await registerGeneric(agentFolder, parsePredicate, meta => meta);
|
|
132
|
-
return Object.fromEntries(preds.map(p => [p.name, p.call]));
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
function registerMiddlewares(agentFolder) {
|
|
136
|
-
return registerGeneric(agentFolder, parseMiddleware, meta => ({
|
|
137
|
-
name: meta.name,
|
|
138
|
-
call: meta.call,
|
|
139
|
-
predicates: meta.predicates || []
|
|
140
|
-
}));
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
module.exports = {
|
|
144
|
-
registerTools,
|
|
145
|
-
registerHooks,
|
|
146
|
-
registerCognites,
|
|
147
|
-
registerRoutes,
|
|
148
|
-
registerPredicates,
|
|
149
|
-
registerMiddlewares
|
|
150
|
-
};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
-
import fs from 'fs/promises';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
const { registerTools } = require('./decorators');
|
|
5
|
-
|
|
6
|
-
vi.mock('fs/promises');
|
|
7
|
-
|
|
8
|
-
describe('decorators register', () => {
|
|
9
|
-
it('should throw error if folder does not exist', async () => {
|
|
10
|
-
fs.access.mockRejectedValue(new Error());
|
|
11
|
-
await expect(registerTools('invalid')).rejects.toThrow('Folder not found');
|
|
12
|
-
});
|
|
13
|
-
});
|
package/src/core/register.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
const yaml = require('js-yaml');
|
|
4
|
-
|
|
5
|
-
const { getPackages, registerPackage } = require('./package');
|
|
6
|
-
const { registerRoutes } = require('./routes');
|
|
7
|
-
const { log } = console;
|
|
8
|
-
|
|
9
|
-
const registerPackages = async (app) => {
|
|
10
|
-
try {
|
|
11
|
-
const packagesList = await getPackages();
|
|
12
|
-
|
|
13
|
-
for (const pkg of packagesList) {
|
|
14
|
-
const ymlPath = path.join(__dirname, '..', 'packages', pkg.folder, 'agent.yml');
|
|
15
|
-
|
|
16
|
-
const exists = fs.existsSync(ymlPath);
|
|
17
|
-
if (exists) {
|
|
18
|
-
try {
|
|
19
|
-
const fileContents = fs.readFileSync(ymlPath, 'utf8');
|
|
20
|
-
const ymlObject = yaml.load(fileContents);
|
|
21
|
-
pkg.config = ymlObject;
|
|
22
|
-
|
|
23
|
-
log(`Loaded YAML for package: ${JSON.stringify(pkg.config)}`);
|
|
24
|
-
} catch (err) {
|
|
25
|
-
log(`Error reading YAML for ${pkg.folder}: ${err.message}`);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
await registerRoutes(app, pkg);
|
|
30
|
-
await registerPackage(app, pkg);
|
|
31
|
-
}
|
|
32
|
-
} catch (err) {
|
|
33
|
-
log(JSON.stringify(err), "red");
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
module.exports = { registerPackages };
|
package/src/core/routes.js
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const fs = require('fs');
|
|
3
|
-
const { registerRoutes: routesDecorators, registerCognites, registerPredicates, registerMiddlewares } = require("./register/decorators");
|
|
4
|
-
|
|
5
|
-
const { log } = console;
|
|
6
|
-
|
|
7
|
-
const getRoutes = () => {
|
|
8
|
-
const routes = [];
|
|
9
|
-
const baseDir = process.env.PACKAGES_PATH || path.resolve(__dirname, '..', 'packages');
|
|
10
|
-
|
|
11
|
-
try {
|
|
12
|
-
fs.readdirSync(baseDir).forEach(packageDir => {
|
|
13
|
-
const routesPath = path.join(baseDir, packageDir, 'routes.js');
|
|
14
|
-
|
|
15
|
-
if (fs.existsSync(routesPath)) {
|
|
16
|
-
const routeModule = require(path.resolve(routesPath));
|
|
17
|
-
routeModule.map(router => router.dir = packageDir);
|
|
18
|
-
|
|
19
|
-
routes.push(...routeModule);
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
} catch (error) {
|
|
23
|
-
console.error("Error with Routes:", error);
|
|
24
|
-
return [];
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return routes;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
const registerRoutes = async (app, pkg) => {
|
|
31
|
-
const basePackagesPath = process.env.PACKAGES_PATH || path.resolve(__dirname, '..', 'packages');
|
|
32
|
-
const packageDir = path.join(basePackagesPath, pkg.folder);
|
|
33
|
-
const routesRegex = /^routes\.(js|tsx)$/;
|
|
34
|
-
const files = fs.readdirSync(packageDir);
|
|
35
|
-
const routesFile = files.find((file) => routesRegex.test(file));
|
|
36
|
-
|
|
37
|
-
const _routesDecorators = await routesDecorators(pkg.folder);
|
|
38
|
-
|
|
39
|
-
const predicates = await registerPredicates(pkg.folder);
|
|
40
|
-
const middlewares = await registerMiddlewares(pkg.folder);
|
|
41
|
-
|
|
42
|
-
let allow_middlewares = [];
|
|
43
|
-
|
|
44
|
-
middlewares.map(middleware => {
|
|
45
|
-
middleware.predicates.map(predicate => {
|
|
46
|
-
if (predicates[predicate]) {
|
|
47
|
-
try {
|
|
48
|
-
if ( predicates[predicate]() ) {
|
|
49
|
-
allow_middlewares.push( middleware.call );
|
|
50
|
-
}
|
|
51
|
-
} catch(err) {
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
let _routesFile = [];
|
|
58
|
-
|
|
59
|
-
const allRoutes = [..._routesDecorators, ..._routesFile];
|
|
60
|
-
|
|
61
|
-
if (allRoutes.length === 0) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
allRoutes.forEach((route) => {
|
|
66
|
-
if (route.handler && route.method && route.path) {
|
|
67
|
-
app[route.method](`/${pkg.folder}/${route.path}`, [...allow_middlewares, async (req, res, next) => {
|
|
68
|
-
try {
|
|
69
|
-
const payload = await route.handler(req, res, next);
|
|
70
|
-
const { status = 200, data = payload } = payload || {};
|
|
71
|
-
res.status(status).json(data);
|
|
72
|
-
} catch (err) {
|
|
73
|
-
next(err);
|
|
74
|
-
}
|
|
75
|
-
}]);
|
|
76
|
-
|
|
77
|
-
log(`${pkg.name ?? pkg.folder} registered decorator route [${route.method.toUpperCase()}] /${pkg.folder}/${route.path}`, 'gray');
|
|
78
|
-
}
|
|
79
|
-
else if (route.call && route.method && route.router) {
|
|
80
|
-
app[route.method](`/${pkg.folder}/${route.router}`, route.call);
|
|
81
|
-
log(`${pkg.name} registered file route [${route.method.toUpperCase()}] /${pkg.folder}/${route.router}`, 'gray');
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
log(`Invalid route configuration for ${pkg.name}: ${JSON.stringify(route)}`, 'error');
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
module.exports = { getRoutes, registerRoutes }
|
package/src/index.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import path from 'path'
|
|
2
|
-
import http from 'http'
|
|
3
|
-
import app from './app'
|
|
4
|
-
import { dispatchEvent } from './core/event/dispatch'
|
|
5
|
-
import type { BootstrapConfig, JohankitApp } from './types'
|
|
6
|
-
|
|
7
|
-
export async function bootstrap(config: BootstrapConfig = {}) {
|
|
8
|
-
const customPath = config.workspace || path.join(__dirname, 'packages')
|
|
9
|
-
const resolvedWorkspace = path.isAbsolute(customPath)
|
|
10
|
-
? customPath
|
|
11
|
-
: path.resolve(process.cwd(), customPath)
|
|
12
|
-
|
|
13
|
-
process.env.PACKAGES_PATH = resolvedWorkspace
|
|
14
|
-
|
|
15
|
-
const result: any = {}
|
|
16
|
-
|
|
17
|
-
await app.setup()
|
|
18
|
-
result.app = app as JohankitApp
|
|
19
|
-
|
|
20
|
-
if (config.mcp?.enabled) {
|
|
21
|
-
const { bootstrapMcp } = require('./core/mcp/tools-mcp')
|
|
22
|
-
result.mcp = await bootstrapMcp(resolvedWorkspace)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
if (config.mcp?.http?.enabled) {
|
|
26
|
-
const { createMcpHttpServer } = require('./core/mcp/http-server')
|
|
27
|
-
result.mcpHttp = await createMcpHttpServer({
|
|
28
|
-
workspace: resolvedWorkspace,
|
|
29
|
-
port: config.mcp.http.port
|
|
30
|
-
})
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
if (config.http?.enabled !== false) {
|
|
34
|
-
const port = config.http?.port || (process.env.PORT ? Number(process.env.PORT) : 5040)
|
|
35
|
-
result.server = http.createServer(app)
|
|
36
|
-
result.server.listen(port)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return result
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export { dispatchEvent }
|
package/src/server.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import http from 'http'
|
|
2
|
-
import app from './app'
|
|
3
|
-
|
|
4
|
-
const port = process.env.PORT ? Number(process.env.PORT) : 5040
|
|
5
|
-
|
|
6
|
-
app
|
|
7
|
-
.setup()
|
|
8
|
-
.then(() => {
|
|
9
|
-
http.createServer(app).listen(port, () => {
|
|
10
|
-
console.log(`Server is ready on port: ${port}.\n`)
|
|
11
|
-
})
|
|
12
|
-
})
|
|
13
|
-
.catch(err => {
|
|
14
|
-
console.error('Error during app setup:', err)
|
|
15
|
-
})
|
package/src/types.ts
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import type { Application, Request, Response, NextFunction } from 'express';
|
|
2
|
-
|
|
3
|
-
export interface BootstrapConfig {
|
|
4
|
-
workspace?: string;
|
|
5
|
-
http?: {
|
|
6
|
-
enabled?: boolean;
|
|
7
|
-
port?: number;
|
|
8
|
-
};
|
|
9
|
-
mcp?: {
|
|
10
|
-
enabled?: boolean;
|
|
11
|
-
http?: {
|
|
12
|
-
enabled?: boolean;
|
|
13
|
-
port?: number;
|
|
14
|
-
};
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface RoutePayload {
|
|
19
|
-
status?: number;
|
|
20
|
-
data?: any;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export type RouteHandler = (
|
|
24
|
-
req: Request,
|
|
25
|
-
res: Response,
|
|
26
|
-
next: NextFunction
|
|
27
|
-
) => Promise<RoutePayload | any> | RoutePayload | any;
|
|
28
|
-
|
|
29
|
-
export interface RegisteredRoute {
|
|
30
|
-
path: string;
|
|
31
|
-
method: string;
|
|
32
|
-
handler: RouteHandler;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export interface HookCondition {
|
|
36
|
-
only?: string[];
|
|
37
|
-
never?: string[];
|
|
38
|
-
when?: string[];
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export interface RegisteredHook<T = any> {
|
|
42
|
-
event: string;
|
|
43
|
-
call: (payload: T) => Promise<T | void | null> | T | void | null;
|
|
44
|
-
condition?: HookCondition;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export interface RegisteredPredicate {
|
|
48
|
-
name: string;
|
|
49
|
-
call: () => boolean | Promise<boolean>;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export interface RegisteredMiddleware {
|
|
53
|
-
name: string;
|
|
54
|
-
call: (req: Request, res: Response, next: NextFunction) => any;
|
|
55
|
-
predicates?: string[];
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export interface ToolParameter {
|
|
59
|
-
name: string;
|
|
60
|
-
type: string;
|
|
61
|
-
description?: string;
|
|
62
|
-
required?: boolean;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export interface RegisteredTool {
|
|
66
|
-
name: string;
|
|
67
|
-
description?: string;
|
|
68
|
-
parameters: {
|
|
69
|
-
type: 'object';
|
|
70
|
-
properties: Record<string, any>;
|
|
71
|
-
required?: string[];
|
|
72
|
-
};
|
|
73
|
-
call: (args: any) => any;
|
|
74
|
-
condition?: HookCondition;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export interface RegisteredCognite {
|
|
78
|
-
name: string;
|
|
79
|
-
execute: (...args: any[]) => any;
|
|
80
|
-
description?: string;
|
|
81
|
-
options?: Record<string, any>;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export interface PackageManifest {
|
|
85
|
-
name?: string;
|
|
86
|
-
version?: string;
|
|
87
|
-
entry?: string;
|
|
88
|
-
folder: string;
|
|
89
|
-
dir?: string;
|
|
90
|
-
config?: any;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export interface JohankitApp extends Application {
|
|
94
|
-
setup: () => Promise<void>;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export declare function bootstrap(
|
|
98
|
-
config?: BootstrapConfig
|
|
99
|
-
): Promise<any>;
|
|
100
|
-
|
|
101
|
-
export declare function dispatchEvent<T = any>(
|
|
102
|
-
eventName: string,
|
|
103
|
-
payload: T
|
|
104
|
-
): Promise<T>;
|