@trikhub/server 0.2.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/LICENSE +21 -0
- package/README.md +219 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +126 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +15 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/routes/content.d.ts +4 -0
- package/dist/routes/content.d.ts.map +1 -0
- package/dist/routes/content.js +67 -0
- package/dist/routes/content.js.map +1 -0
- package/dist/routes/execute.d.ts +4 -0
- package/dist/routes/execute.d.ts.map +1 -0
- package/dist/routes/execute.js +81 -0
- package/dist/routes/execute.js.map +1 -0
- package/dist/routes/health.d.ts +4 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +42 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/tools.d.ts +4 -0
- package/dist/routes/tools.d.ts.map +1 -0
- package/dist/routes/tools.js +43 -0
- package/dist/routes/tools.js.map +1 -0
- package/dist/routes/triks.d.ts +4 -0
- package/dist/routes/triks.d.ts.map +1 -0
- package/dist/routes/triks.js +208 -0
- package/dist/routes/triks.js.map +1 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +92 -0
- package/dist/server.js.map +1 -0
- package/dist/services/skill-loader.d.ts +33 -0
- package/dist/services/skill-loader.d.ts.map +1 -0
- package/dist/services/skill-loader.js +130 -0
- package/dist/services/skill-loader.js.map +1 -0
- package/dist/services/skill-validator.d.ts +12 -0
- package/dist/services/skill-validator.d.ts.map +1 -0
- package/dist/services/skill-validator.js +17 -0
- package/dist/services/skill-validator.js.map +1 -0
- package/package.json +66 -0
package/dist/server.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import Fastify from 'fastify';
|
|
2
|
+
import fastifySwagger from '@fastify/swagger';
|
|
3
|
+
import fastifySwaggerUI from '@fastify/swagger-ui';
|
|
4
|
+
import { createRequire } from 'module';
|
|
5
|
+
import { healthRoutes } from './routes/health.js';
|
|
6
|
+
import { toolsRoutes } from './routes/tools.js';
|
|
7
|
+
import { executeRoutes } from './routes/execute.js';
|
|
8
|
+
import { contentRoutes } from './routes/content.js';
|
|
9
|
+
import { triksRoutes } from './routes/triks.js';
|
|
10
|
+
// Read version from package.json
|
|
11
|
+
const require = createRequire(import.meta.url);
|
|
12
|
+
const pkg = require('../package.json');
|
|
13
|
+
export async function createServer(config, gateway) {
|
|
14
|
+
const fastify = Fastify({
|
|
15
|
+
logger: {
|
|
16
|
+
level: config.logLevel,
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
// Register OpenAPI documentation
|
|
20
|
+
await fastify.register(fastifySwagger, {
|
|
21
|
+
openapi: {
|
|
22
|
+
openapi: '3.1.0',
|
|
23
|
+
info: {
|
|
24
|
+
title: 'Trik Gateway API',
|
|
25
|
+
description: 'HTTP API for executing triks with prompt injection protection',
|
|
26
|
+
version: pkg.version,
|
|
27
|
+
},
|
|
28
|
+
servers: [
|
|
29
|
+
{
|
|
30
|
+
url: `http://localhost:${config.port}`,
|
|
31
|
+
description: 'Local server',
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
components: {
|
|
35
|
+
securitySchemes: {
|
|
36
|
+
bearerAuth: {
|
|
37
|
+
type: 'http',
|
|
38
|
+
scheme: 'bearer',
|
|
39
|
+
description: 'Bearer token authentication',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
security: config.authToken ? [{ bearerAuth: [] }] : [],
|
|
44
|
+
tags: [
|
|
45
|
+
{ name: 'health', description: 'Health check endpoints' },
|
|
46
|
+
{ name: 'tools', description: 'Tool discovery endpoints' },
|
|
47
|
+
{ name: 'execute', description: 'Trik execution endpoints' },
|
|
48
|
+
{ name: 'content', description: 'Passthrough content delivery' },
|
|
49
|
+
{ name: 'triks', description: 'Trik package management' },
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
await fastify.register(fastifySwaggerUI, {
|
|
54
|
+
routePrefix: '/docs',
|
|
55
|
+
uiConfig: {
|
|
56
|
+
docExpansion: 'list',
|
|
57
|
+
deepLinking: true,
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
// Optional auth middleware
|
|
61
|
+
if (config.authToken) {
|
|
62
|
+
fastify.addHook('onRequest', async (request, reply) => {
|
|
63
|
+
// Skip auth for health and docs endpoints
|
|
64
|
+
if (request.url === '/api/v1/health' || request.url.startsWith('/docs'))
|
|
65
|
+
return;
|
|
66
|
+
const authHeader = request.headers.authorization;
|
|
67
|
+
if (!authHeader || !authHeader.startsWith('Bearer ')) {
|
|
68
|
+
return reply.status(401).send({
|
|
69
|
+
success: false,
|
|
70
|
+
code: 'UNAUTHORIZED',
|
|
71
|
+
error: 'Missing or invalid authorization header',
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const token = authHeader.slice(7);
|
|
75
|
+
if (token !== config.authToken) {
|
|
76
|
+
return reply.status(403).send({
|
|
77
|
+
success: false,
|
|
78
|
+
code: 'FORBIDDEN',
|
|
79
|
+
error: 'Invalid token',
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// Register routes
|
|
85
|
+
await healthRoutes(fastify, gateway);
|
|
86
|
+
await toolsRoutes(fastify, gateway);
|
|
87
|
+
await executeRoutes(fastify, gateway);
|
|
88
|
+
await contentRoutes(fastify, gateway);
|
|
89
|
+
await triksRoutes(fastify, gateway, config.configPath);
|
|
90
|
+
return fastify;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { TrikGateway } from '@trikhub/gateway';
|
|
2
|
+
import { type ValidationResult } from './skill-validator.js';
|
|
3
|
+
export interface SkillLoaderConfig {
|
|
4
|
+
skillsDirectory: string;
|
|
5
|
+
/** Path to .trikhub/config.json for loading npm-installed skills */
|
|
6
|
+
configPath?: string;
|
|
7
|
+
lintBeforeLoad: boolean;
|
|
8
|
+
lintWarningsAsErrors: boolean;
|
|
9
|
+
allowedSkills?: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface LoadResult {
|
|
12
|
+
loaded: number;
|
|
13
|
+
failed: number;
|
|
14
|
+
skills: SkillLoadStatus[];
|
|
15
|
+
}
|
|
16
|
+
export interface SkillLoadStatus {
|
|
17
|
+
path: string;
|
|
18
|
+
skillId?: string;
|
|
19
|
+
status: 'loaded' | 'failed' | 'skipped';
|
|
20
|
+
error?: string;
|
|
21
|
+
validation?: ValidationResult;
|
|
22
|
+
}
|
|
23
|
+
export declare class SkillLoader {
|
|
24
|
+
private gateway;
|
|
25
|
+
private validator;
|
|
26
|
+
private config;
|
|
27
|
+
constructor(config: SkillLoaderConfig);
|
|
28
|
+
getGateway(): TrikGateway;
|
|
29
|
+
discoverSkills(): Promise<string[]>;
|
|
30
|
+
loadSkill(skillPath: string): Promise<SkillLoadStatus>;
|
|
31
|
+
discoverAndLoad(): Promise<LoadResult>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=skill-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-loader.d.ts","sourceRoot":"","sources":["../../src/services/skill-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAiB,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE5E,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,EAAE,iBAAiB;IAUrC,UAAU,IAAI,WAAW;IAInB,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA6BnC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAkCtD,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC;CAqD7C"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { readdir, stat } from 'node:fs/promises';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { TrikGateway } from '@trikhub/gateway';
|
|
4
|
+
import { TrikValidator } from './skill-validator.js';
|
|
5
|
+
export class SkillLoader {
|
|
6
|
+
gateway;
|
|
7
|
+
validator;
|
|
8
|
+
config;
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.config = config;
|
|
11
|
+
this.gateway = new TrikGateway({
|
|
12
|
+
allowedTriks: config.allowedSkills,
|
|
13
|
+
});
|
|
14
|
+
this.validator = new TrikValidator({
|
|
15
|
+
warningsAsErrors: config.lintWarningsAsErrors,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
getGateway() {
|
|
19
|
+
return this.gateway;
|
|
20
|
+
}
|
|
21
|
+
async discoverSkills() {
|
|
22
|
+
const baseDir = resolve(this.config.skillsDirectory);
|
|
23
|
+
const skillPaths = [];
|
|
24
|
+
try {
|
|
25
|
+
const entries = await readdir(baseDir, { withFileTypes: true });
|
|
26
|
+
for (const entry of entries) {
|
|
27
|
+
if (entry.isDirectory()) {
|
|
28
|
+
const manifestPath = join(baseDir, entry.name, 'manifest.json');
|
|
29
|
+
try {
|
|
30
|
+
const manifestStat = await stat(manifestPath);
|
|
31
|
+
if (manifestStat.isFile()) {
|
|
32
|
+
skillPaths.push(join(baseDir, entry.name));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// No manifest.json in this directory, skip
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
throw new Error(`Failed to read skills directory "${baseDir}": ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
43
|
+
}
|
|
44
|
+
return skillPaths;
|
|
45
|
+
}
|
|
46
|
+
async loadSkill(skillPath) {
|
|
47
|
+
const status = {
|
|
48
|
+
path: skillPath,
|
|
49
|
+
status: 'failed',
|
|
50
|
+
};
|
|
51
|
+
// Validate with linter if configured
|
|
52
|
+
if (this.config.lintBeforeLoad) {
|
|
53
|
+
try {
|
|
54
|
+
const validation = await this.validator.validate(skillPath);
|
|
55
|
+
status.validation = validation;
|
|
56
|
+
if (!validation.valid) {
|
|
57
|
+
status.error = `Linting failed:\n${validation.summary}`;
|
|
58
|
+
return status;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
status.error = `Linting error: ${error instanceof Error ? error.message : 'Unknown error'}`;
|
|
63
|
+
return status;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Load the skill
|
|
67
|
+
try {
|
|
68
|
+
const manifest = await this.gateway.loadTrik(skillPath);
|
|
69
|
+
status.skillId = manifest.id;
|
|
70
|
+
status.status = 'loaded';
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
status.error = `Load error: ${error instanceof Error ? error.message : 'Unknown error'}`;
|
|
74
|
+
}
|
|
75
|
+
return status;
|
|
76
|
+
}
|
|
77
|
+
async discoverAndLoad() {
|
|
78
|
+
const skills = [];
|
|
79
|
+
let loaded = 0;
|
|
80
|
+
let failed = 0;
|
|
81
|
+
// 1. Load from directory (existing behavior)
|
|
82
|
+
try {
|
|
83
|
+
const skillPaths = await this.discoverSkills();
|
|
84
|
+
for (const skillPath of skillPaths) {
|
|
85
|
+
const status = await this.loadSkill(skillPath);
|
|
86
|
+
skills.push(status);
|
|
87
|
+
if (status.status === 'loaded') {
|
|
88
|
+
loaded++;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
failed++;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
// Directory might not exist, continue with config-based loading
|
|
97
|
+
// Only log if there's no config path either
|
|
98
|
+
if (!this.config.configPath) {
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// 2. Load from config file (npm packages)
|
|
103
|
+
if (this.config.configPath) {
|
|
104
|
+
try {
|
|
105
|
+
const manifests = await this.gateway.loadTriksFromConfig({
|
|
106
|
+
configPath: this.config.configPath,
|
|
107
|
+
});
|
|
108
|
+
for (const manifest of manifests) {
|
|
109
|
+
skills.push({
|
|
110
|
+
path: `npm:${manifest.id}`,
|
|
111
|
+
skillId: manifest.id,
|
|
112
|
+
status: 'loaded',
|
|
113
|
+
});
|
|
114
|
+
loaded++;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
// Config loading failed
|
|
119
|
+
skills.push({
|
|
120
|
+
path: this.config.configPath,
|
|
121
|
+
status: 'failed',
|
|
122
|
+
error: `Config load error: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
123
|
+
});
|
|
124
|
+
failed++;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return { loaded, failed, skills };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=skill-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-loader.js","sourceRoot":"","sources":["../../src/services/skill-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAyB,MAAM,sBAAsB,CAAC;AAyB5E,MAAM,OAAO,WAAW;IACd,OAAO,CAAc;IACrB,SAAS,CAAgB;IACzB,MAAM,CAAoB;IAElC,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC;YAC7B,YAAY,EAAE,MAAM,CAAC,aAAa;SACnC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,GAAG,IAAI,aAAa,CAAC;YACjC,gBAAgB,EAAE,MAAM,CAAC,oBAAoB;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACrD,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAEhE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;oBAChE,IAAI,CAAC;wBACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC;wBAC9C,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;4BAC1B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC7C,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,2CAA2C;oBAC7C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,oCAAoC,OAAO,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAC5G,CAAC;QACJ,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB;QAC/B,MAAM,MAAM,GAAoB;YAC9B,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,QAAQ;SACjB,CAAC;QAEF,qCAAqC;QACrC,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC5D,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;gBAE/B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;oBACtB,MAAM,CAAC,KAAK,GAAG,oBAAoB,UAAU,CAAC,OAAO,EAAE,CAAC;oBACxD,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,GAAG,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;gBAC5F,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACxD,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,GAAG,eAAe,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QAC3F,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,6CAA6C;QAC7C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBAC/C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEpB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC/B,MAAM,EAAE,CAAC;gBACX,CAAC;qBAAM,CAAC;oBACN,MAAM,EAAE,CAAC;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gEAAgE;YAChE,4CAA4C;YAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC5B,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC;oBACvD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;iBACnC,CAAC,CAAC;gBACH,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,OAAO,QAAQ,CAAC,EAAE,EAAE;wBAC1B,OAAO,EAAE,QAAQ,CAAC,EAAE;wBACpB,MAAM,EAAE,QAAQ;qBACjB,CAAC,CAAC;oBACH,MAAM,EAAE,CAAC;gBACX,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,wBAAwB;gBACxB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;oBAC5B,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,sBAAsB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;iBACxF,CAAC,CAAC;gBACH,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type LintResult, type LinterConfig } from '@trikhub/linter';
|
|
2
|
+
export interface ValidationResult {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
results: LintResult[];
|
|
5
|
+
summary: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class TrikValidator {
|
|
8
|
+
private linter;
|
|
9
|
+
constructor(config?: LinterConfig);
|
|
10
|
+
validate(trikPath: string): Promise<ValidationResult>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=skill-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-validator.d.ts","sourceRoot":"","sources":["../../src/services/skill-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEjF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,GAAE,YAAiB;IAI/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAU5D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TrikLinter } from '@trikhub/linter';
|
|
2
|
+
export class TrikValidator {
|
|
3
|
+
linter;
|
|
4
|
+
constructor(config = {}) {
|
|
5
|
+
this.linter = new TrikLinter(config);
|
|
6
|
+
}
|
|
7
|
+
async validate(trikPath) {
|
|
8
|
+
const results = await this.linter.lint(trikPath);
|
|
9
|
+
const hasErrors = this.linter.hasErrors(results);
|
|
10
|
+
return {
|
|
11
|
+
valid: !hasErrors,
|
|
12
|
+
results,
|
|
13
|
+
summary: this.linter.formatResults(results),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=skill-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-validator.js","sourceRoot":"","sources":["../../src/services/skill-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsC,MAAM,iBAAiB,CAAC;AAQjF,MAAM,OAAO,aAAa;IAChB,MAAM,CAAa;IAE3B,YAAY,SAAuB,EAAE;QACnC,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAEjD,OAAO;YACL,KAAK,EAAE,CAAC,SAAS;YACjB,OAAO;YACP,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;SAC5C,CAAC;IACJ,CAAC;CACF"}
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@trikhub/server",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "HTTP server for TrikHub - secure skill execution gateway for AI agents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"trik-server": "./dist/cli.js"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"README.md"
|
|
20
|
+
],
|
|
21
|
+
"keywords": [
|
|
22
|
+
"trikhub",
|
|
23
|
+
"trik",
|
|
24
|
+
"ai",
|
|
25
|
+
"agent",
|
|
26
|
+
"gateway",
|
|
27
|
+
"server",
|
|
28
|
+
"fastify",
|
|
29
|
+
"skills"
|
|
30
|
+
],
|
|
31
|
+
"author": "Muffles",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/Muffles/trikhub.git",
|
|
36
|
+
"directory": "packages/trik-server"
|
|
37
|
+
},
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/Muffles/trikhub/issues"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/Muffles/trikhub/tree/main/packages/trik-server#readme",
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public"
|
|
44
|
+
},
|
|
45
|
+
"engines": {
|
|
46
|
+
"node": ">=18.0.0"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@anthropic-ai/sdk": "^0.39.0",
|
|
50
|
+
"@fastify/swagger": "^9.4.2",
|
|
51
|
+
"@fastify/swagger-ui": "^5.2.1",
|
|
52
|
+
"fastify": "^5.2.1",
|
|
53
|
+
"@trikhub/gateway": "0.4.0",
|
|
54
|
+
"@trikhub/linter": "0.4.0",
|
|
55
|
+
"@trikhub/manifest": "0.4.0"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"tsx": "^4.19.2"
|
|
59
|
+
},
|
|
60
|
+
"scripts": {
|
|
61
|
+
"build": "tsc",
|
|
62
|
+
"dev": "tsx watch src/index.ts",
|
|
63
|
+
"start": "node dist/index.js",
|
|
64
|
+
"clean": "rm -rf dist *.tsbuildinfo"
|
|
65
|
+
}
|
|
66
|
+
}
|