@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.
Files changed (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +219 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +126 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/config.d.ts +14 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +15 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +69 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/routes/content.d.ts +4 -0
  17. package/dist/routes/content.d.ts.map +1 -0
  18. package/dist/routes/content.js +67 -0
  19. package/dist/routes/content.js.map +1 -0
  20. package/dist/routes/execute.d.ts +4 -0
  21. package/dist/routes/execute.d.ts.map +1 -0
  22. package/dist/routes/execute.js +81 -0
  23. package/dist/routes/execute.js.map +1 -0
  24. package/dist/routes/health.d.ts +4 -0
  25. package/dist/routes/health.d.ts.map +1 -0
  26. package/dist/routes/health.js +42 -0
  27. package/dist/routes/health.js.map +1 -0
  28. package/dist/routes/tools.d.ts +4 -0
  29. package/dist/routes/tools.d.ts.map +1 -0
  30. package/dist/routes/tools.js +43 -0
  31. package/dist/routes/tools.js.map +1 -0
  32. package/dist/routes/triks.d.ts +4 -0
  33. package/dist/routes/triks.d.ts.map +1 -0
  34. package/dist/routes/triks.js +208 -0
  35. package/dist/routes/triks.js.map +1 -0
  36. package/dist/server.d.ts +5 -0
  37. package/dist/server.d.ts.map +1 -0
  38. package/dist/server.js +92 -0
  39. package/dist/server.js.map +1 -0
  40. package/dist/services/skill-loader.d.ts +33 -0
  41. package/dist/services/skill-loader.d.ts.map +1 -0
  42. package/dist/services/skill-loader.js +130 -0
  43. package/dist/services/skill-loader.js.map +1 -0
  44. package/dist/services/skill-validator.d.ts +12 -0
  45. package/dist/services/skill-validator.d.ts.map +1 -0
  46. package/dist/services/skill-validator.js +17 -0
  47. package/dist/services/skill-validator.js.map +1 -0
  48. 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":"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"}
@@ -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
+ }