opencode-lazy-loader 1.0.0 → 1.0.2
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 +81 -3
- package/dist/__tests__/normalize-command.test.d.ts +2 -0
- package/dist/__tests__/normalize-command.test.d.ts.map +1 -0
- package/dist/__tests__/normalize-command.test.js +187 -0
- package/dist/__tests__/normalize-command.test.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/skill-loader.d.ts +27 -0
- package/dist/skill-loader.d.ts.map +1 -0
- package/dist/skill-loader.js +197 -0
- package/dist/skill-loader.js.map +1 -0
- package/dist/skill-mcp-manager.d.ts +26 -0
- package/dist/skill-mcp-manager.d.ts.map +1 -0
- package/dist/skill-mcp-manager.js +279 -0
- package/dist/skill-mcp-manager.js.map +1 -0
- package/dist/tools/skill-mcp.d.ts +13 -0
- package/dist/tools/skill-mcp.d.ts.map +1 -0
- package/dist/tools/skill-mcp.js +162 -0
- package/dist/tools/skill-mcp.js.map +1 -0
- package/dist/tools/skill.d.ts +13 -0
- package/dist/tools/skill.d.ts.map +1 -0
- package/dist/tools/skill.js +160 -0
- package/dist/tools/skill.js.map +1 -0
- package/dist/types.d.ts +88 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/env-vars.d.ts +18 -0
- package/dist/utils/env-vars.d.ts.map +1 -0
- package/dist/utils/env-vars.js +100 -0
- package/dist/utils/env-vars.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +10 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +44 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/package.json +18 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/tools/skill.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for an MCP server
|
|
3
|
+
*
|
|
4
|
+
* Command formats:
|
|
5
|
+
* 1. Array format: command: ["npx", "-y", "@some/mcp-server"]
|
|
6
|
+
* 2. String + args: command: "npx", args: ["-y", "@some/mcp-server"]
|
|
7
|
+
*
|
|
8
|
+
* Environment variable formats:
|
|
9
|
+
* 1. Object format (oh-my-opencode): env: { "KEY": "value" }
|
|
10
|
+
* 2. Array format (OpenCode): env: ["KEY=value"]
|
|
11
|
+
*/
|
|
12
|
+
export interface McpServerConfig {
|
|
13
|
+
command?: string | string[];
|
|
14
|
+
args?: string[];
|
|
15
|
+
env?: Record<string, string> | string[];
|
|
16
|
+
/** @deprecated Use `env` instead */
|
|
17
|
+
environment?: Record<string, string>;
|
|
18
|
+
}
|
|
19
|
+
export interface NormalizedCommand {
|
|
20
|
+
command: string;
|
|
21
|
+
args: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface NormalizedEnv {
|
|
24
|
+
env: Record<string, string>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Skill scope - where the skill was loaded from
|
|
28
|
+
*/
|
|
29
|
+
export type SkillScope = 'opencode' | 'opencode-project';
|
|
30
|
+
/**
|
|
31
|
+
* Lazy content loader for skill templates
|
|
32
|
+
*/
|
|
33
|
+
export interface LazyContent {
|
|
34
|
+
loaded: boolean;
|
|
35
|
+
content?: string;
|
|
36
|
+
load: () => Promise<string>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Skill definition stored with the skill
|
|
40
|
+
*/
|
|
41
|
+
export interface SkillDefinition {
|
|
42
|
+
name: string;
|
|
43
|
+
description: string;
|
|
44
|
+
template: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A loaded skill with all metadata
|
|
48
|
+
*/
|
|
49
|
+
export interface LoadedSkill {
|
|
50
|
+
name: string;
|
|
51
|
+
path?: string;
|
|
52
|
+
resolvedPath?: string;
|
|
53
|
+
definition: SkillDefinition;
|
|
54
|
+
scope: SkillScope;
|
|
55
|
+
mcpConfig?: Record<string, McpServerConfig>;
|
|
56
|
+
lazyContent?: LazyContent;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Information needed to identify an MCP client connection
|
|
60
|
+
*/
|
|
61
|
+
export interface McpClientInfo {
|
|
62
|
+
sessionID: string;
|
|
63
|
+
skillName: string;
|
|
64
|
+
serverName: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Context for MCP operations
|
|
68
|
+
*/
|
|
69
|
+
export interface McpContext {
|
|
70
|
+
config: McpServerConfig;
|
|
71
|
+
skillName: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Parsed frontmatter data from skill markdown
|
|
75
|
+
*/
|
|
76
|
+
export interface SkillFrontmatter {
|
|
77
|
+
name?: string;
|
|
78
|
+
description?: string;
|
|
79
|
+
mcp?: Record<string, McpServerConfig>;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Result of parsing a markdown file with frontmatter
|
|
83
|
+
*/
|
|
84
|
+
export interface ParsedFrontmatter {
|
|
85
|
+
data: SkillFrontmatter;
|
|
86
|
+
body: string;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAA;IACvC,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,EAAE,CAAA;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC5B;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,kBAAkB,CAAA;AAExD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,eAAe,CAAA;IAC3B,KAAK,EAAE,UAAU,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC3C,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,eAAe,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,gBAAgB,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;CACb"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { McpServerConfig, NormalizedCommand, NormalizedEnv } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Expand environment variables in a string
|
|
4
|
+
* Supports ${VAR} and ${VAR:-default} syntax
|
|
5
|
+
*/
|
|
6
|
+
export declare function expandEnvVars(value: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* Recursively expand environment variables in an object
|
|
9
|
+
*/
|
|
10
|
+
export declare function expandEnvVarsInObject<T>(obj: T): T;
|
|
11
|
+
/**
|
|
12
|
+
* Create a clean environment for MCP processes
|
|
13
|
+
* Merges process.env with custom env vars, expanding variables
|
|
14
|
+
*/
|
|
15
|
+
export declare function createCleanMcpEnvironment(customEnv?: Record<string, string>): Record<string, string>;
|
|
16
|
+
export declare function normalizeCommand(config: McpServerConfig): NormalizedCommand;
|
|
17
|
+
export declare function normalizeEnv(config: McpServerConfig): NormalizedEnv;
|
|
18
|
+
//# sourceMappingURL=env-vars.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-vars.d.ts","sourceRoot":"","sources":["../../src/utils/env-vars.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEpF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAkBlD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgCxB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,CAiB3E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,aAAa,CAyBnE"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expand environment variables in a string
|
|
3
|
+
* Supports ${VAR} and ${VAR:-default} syntax
|
|
4
|
+
*/
|
|
5
|
+
export function expandEnvVars(value) {
|
|
6
|
+
return value.replace(/\$\{([^}:]+)(?::-([^}]*))?\}/g, (_, varName, defaultValue) => {
|
|
7
|
+
return process.env[varName] ?? defaultValue ?? '';
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Recursively expand environment variables in an object
|
|
12
|
+
*/
|
|
13
|
+
export function expandEnvVarsInObject(obj) {
|
|
14
|
+
if (typeof obj === 'string') {
|
|
15
|
+
return expandEnvVars(obj);
|
|
16
|
+
}
|
|
17
|
+
if (Array.isArray(obj)) {
|
|
18
|
+
return obj.map(expandEnvVarsInObject);
|
|
19
|
+
}
|
|
20
|
+
if (obj && typeof obj === 'object') {
|
|
21
|
+
const result = {};
|
|
22
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
23
|
+
result[key] = expandEnvVarsInObject(value);
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
return obj;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create a clean environment for MCP processes
|
|
31
|
+
* Merges process.env with custom env vars, expanding variables
|
|
32
|
+
*/
|
|
33
|
+
export function createCleanMcpEnvironment(customEnv) {
|
|
34
|
+
const baseEnv = {};
|
|
35
|
+
// Copy essential environment variables
|
|
36
|
+
const essentialVars = [
|
|
37
|
+
'PATH',
|
|
38
|
+
'HOME',
|
|
39
|
+
'USER',
|
|
40
|
+
'SHELL',
|
|
41
|
+
'TERM',
|
|
42
|
+
'NODE_ENV',
|
|
43
|
+
'TMPDIR',
|
|
44
|
+
'LANG',
|
|
45
|
+
'LC_ALL',
|
|
46
|
+
'npm_config_registry',
|
|
47
|
+
'npm_config_cache'
|
|
48
|
+
];
|
|
49
|
+
for (const varName of essentialVars) {
|
|
50
|
+
if (process.env[varName]) {
|
|
51
|
+
baseEnv[varName] = process.env[varName];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Merge custom env vars with expansion
|
|
55
|
+
if (customEnv) {
|
|
56
|
+
for (const [key, value] of Object.entries(customEnv)) {
|
|
57
|
+
baseEnv[key] = expandEnvVars(value);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return baseEnv;
|
|
61
|
+
}
|
|
62
|
+
export function normalizeCommand(config) {
|
|
63
|
+
if (Array.isArray(config.command)) {
|
|
64
|
+
if (config.command.length === 0) {
|
|
65
|
+
throw new Error('Invalid MCP command configuration: command array must not be empty');
|
|
66
|
+
}
|
|
67
|
+
const [cmd, ...cmdArgs] = config.command.map(String);
|
|
68
|
+
return { command: cmd, args: cmdArgs };
|
|
69
|
+
}
|
|
70
|
+
if (typeof config.command === 'string') {
|
|
71
|
+
return {
|
|
72
|
+
command: config.command,
|
|
73
|
+
args: config.args?.map(String) ?? []
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
throw new Error('Invalid MCP command configuration: command must be a string or array');
|
|
77
|
+
}
|
|
78
|
+
export function normalizeEnv(config) {
|
|
79
|
+
const envValue = config.env ?? config.environment;
|
|
80
|
+
if (!envValue) {
|
|
81
|
+
return { env: {} };
|
|
82
|
+
}
|
|
83
|
+
if (Array.isArray(envValue)) {
|
|
84
|
+
const env = {};
|
|
85
|
+
for (const entry of envValue) {
|
|
86
|
+
const eqIndex = entry.indexOf('=');
|
|
87
|
+
if (eqIndex > 0) {
|
|
88
|
+
const key = entry.slice(0, eqIndex);
|
|
89
|
+
const value = entry.slice(eqIndex + 1);
|
|
90
|
+
env[key] = value;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return { env };
|
|
94
|
+
}
|
|
95
|
+
if (typeof envValue === 'object') {
|
|
96
|
+
return { env: envValue };
|
|
97
|
+
}
|
|
98
|
+
return { env: {} };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=env-vars.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-vars.js","sourceRoot":"","sources":["../../src/utils/env-vars.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ParsedFrontmatter, McpServerConfig } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse YAML frontmatter from markdown content
|
|
4
|
+
*/
|
|
5
|
+
export declare function parseFrontmatter(content: string): ParsedFrontmatter;
|
|
6
|
+
/**
|
|
7
|
+
* Parse MCP config specifically from frontmatter content
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseSkillMcpConfigFromFrontmatter(content: string): Record<string, McpServerConfig> | undefined;
|
|
10
|
+
//# sourceMappingURL=frontmatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAoB,eAAe,EAAE,MAAM,aAAa,CAAA;AAEvF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAoBnE;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,CAiB7C"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as yaml from 'js-yaml';
|
|
2
|
+
/**
|
|
3
|
+
* Parse YAML frontmatter from markdown content
|
|
4
|
+
*/
|
|
5
|
+
export function parseFrontmatter(content) {
|
|
6
|
+
const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
7
|
+
if (!frontmatterMatch) {
|
|
8
|
+
return {
|
|
9
|
+
data: {},
|
|
10
|
+
body: content
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
const data = yaml.load(frontmatterMatch[1]);
|
|
15
|
+
const body = content.slice(frontmatterMatch[0].length).trim();
|
|
16
|
+
return { data: data || {}, body };
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return {
|
|
20
|
+
data: {},
|
|
21
|
+
body: content
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Parse MCP config specifically from frontmatter content
|
|
27
|
+
*/
|
|
28
|
+
export function parseSkillMcpConfigFromFrontmatter(content) {
|
|
29
|
+
const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
30
|
+
if (!frontmatterMatch) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const parsed = yaml.load(frontmatterMatch[1]);
|
|
35
|
+
if (parsed && typeof parsed === 'object' && 'mcp' in parsed && parsed.mcp) {
|
|
36
|
+
return parsed.mcp;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=frontmatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAA;AAG/B;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAErE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO;YACL,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,OAAO;SACd,CAAA;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAqB,CAAA;QAC/D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;QAC7D,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,CAAA;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,OAAO;SACd,CAAA;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kCAAkC,CAChD,OAAe;IAEf,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAErE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAA8C,CAAA;QAC1F,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YAC1E,OAAO,MAAM,CAAC,GAAG,CAAA;QACnB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-lazy-loader",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "OpenCode plugin for lazy-loading skill-embedded MCP servers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=18"
|
|
16
|
+
},
|
|
8
17
|
"scripts": {
|
|
9
|
-
"build": "tsc",
|
|
10
|
-
"watch": "tsc --watch",
|
|
11
|
-
"clean": "rm -rf dist"
|
|
18
|
+
"build": "npx tsc",
|
|
19
|
+
"watch": "npx tsc --watch",
|
|
20
|
+
"clean": "rm -rf dist",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"test:watch": "vitest",
|
|
23
|
+
"prepack": "npm run clean && npm run build"
|
|
12
24
|
},
|
|
13
25
|
"keywords": [
|
|
14
26
|
"opencode",
|
|
@@ -35,6 +47,7 @@
|
|
|
35
47
|
"devDependencies": {
|
|
36
48
|
"@types/js-yaml": "^4.0.9",
|
|
37
49
|
"@types/node": "^22.0.0",
|
|
38
|
-
"typescript": "^5.7.0"
|
|
50
|
+
"typescript": "^5.7.0",
|
|
51
|
+
"vitest": "^4.0.17"
|
|
39
52
|
}
|
|
40
53
|
}
|