@majkapp/plugin-kit 1.0.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 +636 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/plugin-kit.d.ts +39 -0
- package/dist/plugin-kit.d.ts.map +1 -0
- package/dist/plugin-kit.js +695 -0
- package/dist/types.d.ts +170 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/package.json +37 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import http from 'http';
|
|
2
|
+
/**
|
|
3
|
+
* Core types that plugins need
|
|
4
|
+
* We define minimal versions here to avoid coupling
|
|
5
|
+
*/
|
|
6
|
+
export interface PluginLogger {
|
|
7
|
+
debug(message: string, ...args: any[]): void;
|
|
8
|
+
info(message: string, ...args: any[]): void;
|
|
9
|
+
warn(message: string, ...args: any[]): void;
|
|
10
|
+
error(message: string, ...args: any[]): void;
|
|
11
|
+
}
|
|
12
|
+
export interface PluginStorage {
|
|
13
|
+
get<T = any>(key: string): Promise<T | undefined>;
|
|
14
|
+
set<T = any>(key: string, value: T): Promise<void>;
|
|
15
|
+
delete(key: string): Promise<void>;
|
|
16
|
+
clear(): Promise<void>;
|
|
17
|
+
keys(): Promise<string[]>;
|
|
18
|
+
}
|
|
19
|
+
export interface ScopedTimers {
|
|
20
|
+
setTimeout(callback: () => void, ms: number): NodeJS.Timeout;
|
|
21
|
+
setInterval(callback: () => void, ms: number): NodeJS.Timeout;
|
|
22
|
+
clearTimeout(timer: NodeJS.Timeout): void;
|
|
23
|
+
clearInterval(timer: NodeJS.Timeout): void;
|
|
24
|
+
}
|
|
25
|
+
export interface ScopedIpcRegistry {
|
|
26
|
+
handle(channel: string, handler: (...args: any[]) => Promise<any> | any): void;
|
|
27
|
+
removeHandler(channel: string): void;
|
|
28
|
+
send(channel: string, ...args: any[]): void;
|
|
29
|
+
}
|
|
30
|
+
export interface PluginContext {
|
|
31
|
+
pluginId: string;
|
|
32
|
+
pluginRoot: string;
|
|
33
|
+
dataDir: string;
|
|
34
|
+
app: {
|
|
35
|
+
version: string;
|
|
36
|
+
name: string;
|
|
37
|
+
appDataDir: string;
|
|
38
|
+
};
|
|
39
|
+
http: {
|
|
40
|
+
port: number;
|
|
41
|
+
secret: string;
|
|
42
|
+
baseUrl: string;
|
|
43
|
+
};
|
|
44
|
+
majk: any;
|
|
45
|
+
storage: PluginStorage;
|
|
46
|
+
logger: PluginLogger;
|
|
47
|
+
timers?: any;
|
|
48
|
+
ipc?: any;
|
|
49
|
+
}
|
|
50
|
+
export interface PluginCapabilities {
|
|
51
|
+
apiVersion: string;
|
|
52
|
+
capabilities: PluginCapability[];
|
|
53
|
+
}
|
|
54
|
+
export interface PluginCapability {
|
|
55
|
+
type: string;
|
|
56
|
+
[key: string]: any;
|
|
57
|
+
}
|
|
58
|
+
export interface ToolImplementation {
|
|
59
|
+
handler: (input: any, context: any) => Promise<any>;
|
|
60
|
+
inputSchema?: any;
|
|
61
|
+
}
|
|
62
|
+
export interface InProcessPlugin {
|
|
63
|
+
readonly id: string;
|
|
64
|
+
readonly name: string;
|
|
65
|
+
readonly version: string;
|
|
66
|
+
getCapabilities?(): PluginCapabilities | Promise<PluginCapabilities>;
|
|
67
|
+
createTool?(toolName: string, toolConfig: any): ToolImplementation | Promise<ToolImplementation>;
|
|
68
|
+
onLoad?(context: PluginContext): Promise<void>;
|
|
69
|
+
onUnload?(): Promise<void>;
|
|
70
|
+
onAppReady?(): Promise<void>;
|
|
71
|
+
isHealthy?(): Promise<{
|
|
72
|
+
healthy: boolean;
|
|
73
|
+
errors?: string[];
|
|
74
|
+
warnings?: string[];
|
|
75
|
+
}> | {
|
|
76
|
+
healthy: boolean;
|
|
77
|
+
errors?: string[];
|
|
78
|
+
warnings?: string[];
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export interface PluginHealthStatus {
|
|
82
|
+
healthy: boolean;
|
|
83
|
+
errors?: string[];
|
|
84
|
+
warnings?: string[];
|
|
85
|
+
lastChecked?: Date;
|
|
86
|
+
}
|
|
87
|
+
export type ToolHandler<TInput = any, TOutput = any> = (input: TInput, ctx: {
|
|
88
|
+
majk: any;
|
|
89
|
+
storage: any;
|
|
90
|
+
logger: any;
|
|
91
|
+
}) => Promise<TOutput> | TOutput;
|
|
92
|
+
export type ApiMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
93
|
+
export type Scope = 'global' | 'conversation' | 'teammate' | 'project';
|
|
94
|
+
export interface ToolSpec {
|
|
95
|
+
name: string;
|
|
96
|
+
description: string;
|
|
97
|
+
inputSchema: Record<string, any>;
|
|
98
|
+
metadata?: Record<string, any>;
|
|
99
|
+
}
|
|
100
|
+
export interface RequestLike {
|
|
101
|
+
method: ApiMethod;
|
|
102
|
+
url: string;
|
|
103
|
+
pathname: string;
|
|
104
|
+
query: URLSearchParams;
|
|
105
|
+
params: Record<string, string>;
|
|
106
|
+
body: any;
|
|
107
|
+
headers: http.IncomingHttpHeaders;
|
|
108
|
+
}
|
|
109
|
+
export interface ResponseLike {
|
|
110
|
+
status(code: number): ResponseLike;
|
|
111
|
+
json(data: any): void;
|
|
112
|
+
send(data: string | Buffer): void;
|
|
113
|
+
setHeader(key: string, value: string): void;
|
|
114
|
+
}
|
|
115
|
+
export type RouteHandler = (req: RequestLike, res: ResponseLike, ctx: {
|
|
116
|
+
majk: any;
|
|
117
|
+
storage: any;
|
|
118
|
+
logger: any;
|
|
119
|
+
http: any;
|
|
120
|
+
}) => any | Promise<any>;
|
|
121
|
+
export interface ApiRouteDef {
|
|
122
|
+
method: ApiMethod;
|
|
123
|
+
path: `/api/${string}`;
|
|
124
|
+
name: string;
|
|
125
|
+
description: string;
|
|
126
|
+
handler: RouteHandler;
|
|
127
|
+
}
|
|
128
|
+
export type HistoryMode = 'browser' | 'hash';
|
|
129
|
+
export interface UiConfig {
|
|
130
|
+
appDir?: string;
|
|
131
|
+
base?: `/${string}`;
|
|
132
|
+
history?: HistoryMode;
|
|
133
|
+
}
|
|
134
|
+
export interface ScreenBase<Id extends string> {
|
|
135
|
+
id: string;
|
|
136
|
+
name: string;
|
|
137
|
+
description: string;
|
|
138
|
+
route: `/plugin-screens/${Id}/${string}`;
|
|
139
|
+
}
|
|
140
|
+
export interface ReactScreen<Id extends string> extends ScreenBase<Id> {
|
|
141
|
+
reactPath: `/${string}`;
|
|
142
|
+
}
|
|
143
|
+
export type HtmlScreen<Id extends string> = ScreenBase<Id> & ({
|
|
144
|
+
html: string;
|
|
145
|
+
} | {
|
|
146
|
+
htmlFile: `${string}.html`;
|
|
147
|
+
});
|
|
148
|
+
export interface ConfigWizardDef {
|
|
149
|
+
path: `/${string}`;
|
|
150
|
+
title: string;
|
|
151
|
+
width?: number;
|
|
152
|
+
height?: number;
|
|
153
|
+
shouldShow?: (ctx: any) => boolean | Promise<boolean>;
|
|
154
|
+
description?: string;
|
|
155
|
+
}
|
|
156
|
+
export interface SettingsDef {
|
|
157
|
+
path: `/${string}`;
|
|
158
|
+
title: string;
|
|
159
|
+
description?: string;
|
|
160
|
+
}
|
|
161
|
+
export type EntityType = 'mcpServer' | 'teammate' | 'conversation' | 'todo' | 'project' | 'agent';
|
|
162
|
+
export type CleanupFn = () => void;
|
|
163
|
+
export type HealthCheckFn = (ctx: any) => Promise<{
|
|
164
|
+
healthy: boolean;
|
|
165
|
+
details?: any;
|
|
166
|
+
}> | {
|
|
167
|
+
healthy: boolean;
|
|
168
|
+
details?: any;
|
|
169
|
+
};
|
|
170
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@majkapp/plugin-kit",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Fluent builder framework for creating robust MAJK plugins",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/gaiin-platform/majk-plugins.git",
|
|
10
|
+
"directory": "majk-plugin"
|
|
11
|
+
},
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public",
|
|
14
|
+
"registry": "https://registry.npmjs.org/"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"README.md"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc",
|
|
22
|
+
"watch": "tsc --watch",
|
|
23
|
+
"clean": "rm -rf dist"
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"majk",
|
|
27
|
+
"plugin",
|
|
28
|
+
"framework",
|
|
29
|
+
"builder"
|
|
30
|
+
],
|
|
31
|
+
"author": "Majk Contributors",
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@types/node": "^20.0.0",
|
|
34
|
+
"typescript": "^5.0.0"
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {}
|
|
37
|
+
}
|