@openweave/weave-skills 1.0.0 → 1.0.1
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/dist/cjs/config-loader.d.ts +52 -0
- package/dist/cjs/config-loader.d.ts.map +1 -0
- package/dist/cjs/config-loader.js +132 -0
- package/dist/cjs/config-loader.js.map +1 -0
- package/dist/cjs/index.d.ts +12 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +44 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/skill-registry.d.ts +96 -0
- package/dist/cjs/skill-registry.d.ts.map +1 -0
- package/dist/cjs/skill-registry.js +222 -0
- package/dist/cjs/skill-registry.js.map +1 -0
- package/dist/cjs/skills/auto-fix.d.ts +35 -0
- package/dist/cjs/skills/auto-fix.d.ts.map +1 -0
- package/dist/cjs/skills/auto-fix.js +125 -0
- package/dist/cjs/skills/auto-fix.js.map +1 -0
- package/dist/cjs/skills/cli-interactive.d.ts +60 -0
- package/dist/cjs/skills/cli-interactive.d.ts.map +1 -0
- package/dist/cjs/skills/cli-interactive.js +271 -0
- package/dist/cjs/skills/cli-interactive.js.map +1 -0
- package/dist/cjs/skills/code-review.d.ts +39 -0
- package/dist/cjs/skills/code-review.d.ts.map +1 -0
- package/dist/cjs/skills/code-review.js +208 -0
- package/dist/cjs/skills/code-review.js.map +1 -0
- package/dist/cjs/skills/commit-composer.d.ts +51 -0
- package/dist/cjs/skills/commit-composer.d.ts.map +1 -0
- package/dist/cjs/skills/commit-composer.js +231 -0
- package/dist/cjs/skills/commit-composer.js.map +1 -0
- package/dist/cjs/skills/container-advisor.d.ts +43 -0
- package/dist/cjs/skills/container-advisor.d.ts.map +1 -0
- package/dist/cjs/skills/container-advisor.js +278 -0
- package/dist/cjs/skills/container-advisor.js.map +1 -0
- package/dist/cjs/skills/context-memory.d.ts +44 -0
- package/dist/cjs/skills/context-memory.d.ts.map +1 -0
- package/dist/cjs/skills/context-memory.js +167 -0
- package/dist/cjs/skills/context-memory.js.map +1 -0
- package/dist/cjs/skills/dep-audit.d.ts +55 -0
- package/dist/cjs/skills/dep-audit.d.ts.map +1 -0
- package/dist/cjs/skills/dep-audit.js +255 -0
- package/dist/cjs/skills/dep-audit.js.map +1 -0
- package/dist/cjs/skills/deploy-provision.d.ts +47 -0
- package/dist/cjs/skills/deploy-provision.d.ts.map +1 -0
- package/dist/cjs/skills/deploy-provision.js +273 -0
- package/dist/cjs/skills/deploy-provision.js.map +1 -0
- package/dist/cjs/skills/docs-gen.d.ts +36 -0
- package/dist/cjs/skills/docs-gen.d.ts.map +1 -0
- package/dist/cjs/skills/docs-gen.js +193 -0
- package/dist/cjs/skills/docs-gen.js.map +1 -0
- package/dist/cjs/skills/index.d.ts +19 -0
- package/dist/cjs/skills/index.d.ts.map +1 -0
- package/dist/cjs/skills/index.js +73 -0
- package/dist/cjs/skills/index.js.map +1 -0
- package/dist/cjs/skills/multi-repo.d.ts +50 -0
- package/dist/cjs/skills/multi-repo.d.ts.map +1 -0
- package/dist/cjs/skills/multi-repo.js +181 -0
- package/dist/cjs/skills/multi-repo.js.map +1 -0
- package/dist/cjs/skills/onboarding.d.ts +48 -0
- package/dist/cjs/skills/onboarding.d.ts.map +1 -0
- package/dist/cjs/skills/onboarding.js +253 -0
- package/dist/cjs/skills/onboarding.js.map +1 -0
- package/dist/cjs/skills/perf-profile.d.ts +36 -0
- package/dist/cjs/skills/perf-profile.d.ts.map +1 -0
- package/dist/cjs/skills/perf-profile.js +184 -0
- package/dist/cjs/skills/perf-profile.js.map +1 -0
- package/dist/cjs/skills/pipeline-aware.d.ts +33 -0
- package/dist/cjs/skills/pipeline-aware.d.ts.map +1 -0
- package/dist/cjs/skills/pipeline-aware.js +231 -0
- package/dist/cjs/skills/pipeline-aware.js.map +1 -0
- package/dist/cjs/skills/refactor.d.ts +33 -0
- package/dist/cjs/skills/refactor.d.ts.map +1 -0
- package/dist/cjs/skills/refactor.js +214 -0
- package/dist/cjs/skills/refactor.js.map +1 -0
- package/dist/cjs/skills/test-gen.d.ts +36 -0
- package/dist/cjs/skills/test-gen.d.ts.map +1 -0
- package/dist/cjs/skills/test-gen.js +159 -0
- package/dist/cjs/skills/test-gen.js.map +1 -0
- package/dist/cjs/types.d.ts +133 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +9 -0
- package/dist/cjs/types.js.map +1 -0
- package/package.json +5 -3
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Skill: test-gen
|
|
4
|
+
*
|
|
5
|
+
* Detects exported TypeScript functions and classes that have no corresponding
|
|
6
|
+
* test file, then generates Vitest-compatible test stubs.
|
|
7
|
+
*
|
|
8
|
+
* Strategy:
|
|
9
|
+
* 1. Walk ctx.files for *.ts files (excluding *.test.ts and *.d.ts)
|
|
10
|
+
* 2. For each source file, check if a <name>.test.ts exists next to it
|
|
11
|
+
* 3. Parse exported function/class names via regex (fast, no full AST)
|
|
12
|
+
* 4. Generate a stub test file matching the project's Vitest patterns
|
|
13
|
+
*
|
|
14
|
+
* Output data:
|
|
15
|
+
* - untested: UncoveredFile[] — files with no test counterpart
|
|
16
|
+
* - stubs: TestStub[] — generated test stubs (not written to disk)
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.testGenSkill = void 0;
|
|
20
|
+
exports.extractExports = extractExports;
|
|
21
|
+
exports.generateStub = generateStub;
|
|
22
|
+
const node_fs_1 = require("node:fs");
|
|
23
|
+
const node_path_1 = require("node:path");
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Helpers
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
const EXPORT_FN_RE = /^export\s+(?:async\s+)?function\s+(\w+)/gm;
|
|
28
|
+
const EXPORT_CLASS_RE = /^export\s+(?:abstract\s+)?class\s+(\w+)/gm;
|
|
29
|
+
const EXPORT_CONST_FN_RE = /^export\s+(?:const|let)\s+(\w+)\s*[=:]/gm;
|
|
30
|
+
const EXPORT_DEFAULT_RE = /^export\s+default\s+(?:function\s+)?(\w+)/gm;
|
|
31
|
+
const REEXPORT_RE = /^export\s*\{[^}]+\}\s*from/m;
|
|
32
|
+
function extractExports(content) {
|
|
33
|
+
// Skip pure re-export files
|
|
34
|
+
if (REEXPORT_RE.test(content) && !EXPORT_FN_RE.test(content))
|
|
35
|
+
return [];
|
|
36
|
+
const names = new Set();
|
|
37
|
+
let m;
|
|
38
|
+
EXPORT_FN_RE.lastIndex = 0;
|
|
39
|
+
while ((m = EXPORT_FN_RE.exec(content)) !== null)
|
|
40
|
+
names.add(m[1]);
|
|
41
|
+
EXPORT_CLASS_RE.lastIndex = 0;
|
|
42
|
+
while ((m = EXPORT_CLASS_RE.exec(content)) !== null)
|
|
43
|
+
names.add(m[1]);
|
|
44
|
+
EXPORT_CONST_FN_RE.lastIndex = 0;
|
|
45
|
+
while ((m = EXPORT_CONST_FN_RE.exec(content)) !== null) {
|
|
46
|
+
if (m[1] !== 'type' && m[1] !== 'interface')
|
|
47
|
+
names.add(m[1]);
|
|
48
|
+
}
|
|
49
|
+
EXPORT_DEFAULT_RE.lastIndex = 0;
|
|
50
|
+
while ((m = EXPORT_DEFAULT_RE.exec(content)) !== null)
|
|
51
|
+
names.add(m[1]);
|
|
52
|
+
return Array.from(names);
|
|
53
|
+
}
|
|
54
|
+
function testFilePath(sourcePath) {
|
|
55
|
+
const dir = (0, node_path_1.dirname)(sourcePath);
|
|
56
|
+
const base = (0, node_path_1.basename)(sourcePath, (0, node_path_1.extname)(sourcePath));
|
|
57
|
+
return (0, node_path_1.join)(dir, `${base}.test.ts`);
|
|
58
|
+
}
|
|
59
|
+
function generateStub(sourcePath, exportNames) {
|
|
60
|
+
const base = (0, node_path_1.basename)(sourcePath, '.ts');
|
|
61
|
+
const relPath = `./${base}.js`;
|
|
62
|
+
const imports = exportNames.length > 0
|
|
63
|
+
? `import { ${exportNames.join(', ')} } from '${relPath}';\n`
|
|
64
|
+
: `// import { ... } from '${relPath}';\n`;
|
|
65
|
+
const describes = exportNames.map((name) => [
|
|
66
|
+
`describe('${name}', () => {`,
|
|
67
|
+
` it('should be defined', () => {`,
|
|
68
|
+
` expect(${name}).toBeDefined();`,
|
|
69
|
+
` });`,
|
|
70
|
+
``,
|
|
71
|
+
` it('TODO: add meaningful test', () => {`,
|
|
72
|
+
` // Arrange`,
|
|
73
|
+
` // Act`,
|
|
74
|
+
` // Assert`,
|
|
75
|
+
` expect(true).toBe(true);`,
|
|
76
|
+
` });`,
|
|
77
|
+
`});`,
|
|
78
|
+
].join('\n'));
|
|
79
|
+
return [
|
|
80
|
+
`import { describe, it, expect } from 'vitest';`,
|
|
81
|
+
imports,
|
|
82
|
+
...describes,
|
|
83
|
+
].join('\n');
|
|
84
|
+
}
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// Skill
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
exports.testGenSkill = {
|
|
89
|
+
id: 'test-gen',
|
|
90
|
+
name: 'Test Generator',
|
|
91
|
+
description: 'Detects untested exported functions/classes and generates Vitest test stubs',
|
|
92
|
+
version: '1.0.0',
|
|
93
|
+
enabled: false,
|
|
94
|
+
tags: ['dev', 'quality'],
|
|
95
|
+
async execute(ctx) {
|
|
96
|
+
const tsFiles = ctx.files
|
|
97
|
+
.filter((f) => f.endsWith('.ts') &&
|
|
98
|
+
!f.endsWith('.test.ts') &&
|
|
99
|
+
!f.endsWith('.d.ts') &&
|
|
100
|
+
!f.includes('node_modules') &&
|
|
101
|
+
!f.includes('/dist/'));
|
|
102
|
+
if (tsFiles.length === 0) {
|
|
103
|
+
return {
|
|
104
|
+
success: true,
|
|
105
|
+
output: 'No TypeScript source files found in context.',
|
|
106
|
+
data: { untested: [], stubs: [], totalSourceFiles: 0, testedCount: 0 },
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const untested = [];
|
|
110
|
+
let testedCount = 0;
|
|
111
|
+
for (const relPath of tsFiles) {
|
|
112
|
+
const absPath = (0, node_path_1.join)(ctx.projectRoot, relPath);
|
|
113
|
+
const testPath = testFilePath(absPath);
|
|
114
|
+
if ((0, node_fs_1.existsSync)(testPath)) {
|
|
115
|
+
testedCount++;
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
let content = '';
|
|
119
|
+
try {
|
|
120
|
+
content = (0, node_fs_1.readFileSync)(absPath, 'utf-8');
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const exports = extractExports(content);
|
|
126
|
+
if (exports.length > 0) {
|
|
127
|
+
untested.push({ sourcePath: relPath, exports });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const stubs = untested.map((u) => ({
|
|
131
|
+
testFilePath: testFilePath((0, node_path_1.join)(ctx.projectRoot, u.sourcePath)),
|
|
132
|
+
sourcePath: u.sourcePath,
|
|
133
|
+
content: generateStub(u.sourcePath, u.exports),
|
|
134
|
+
}));
|
|
135
|
+
const lines = [
|
|
136
|
+
`🧪 Test Generator`,
|
|
137
|
+
`Source files: ${tsFiles.length} | Tested: ${testedCount} | Missing tests: ${untested.length}`,
|
|
138
|
+
'',
|
|
139
|
+
];
|
|
140
|
+
if (untested.length === 0) {
|
|
141
|
+
lines.push(' ✅ All exported files have test counterparts.');
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
lines.push(' Files missing tests:');
|
|
145
|
+
for (const u of untested) {
|
|
146
|
+
lines.push(` ⬜ ${u.sourcePath}`);
|
|
147
|
+
lines.push(` Exports: ${u.exports.slice(0, 5).join(', ')}${u.exports.length > 5 ? '…' : ''}`);
|
|
148
|
+
}
|
|
149
|
+
lines.push('');
|
|
150
|
+
lines.push(` 💡 ${stubs.length} test stub(s) generated (see data.stubs)`);
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
success: true,
|
|
154
|
+
output: lines.join('\n'),
|
|
155
|
+
data: { untested, stubs, totalSourceFiles: tsFiles.length, testedCount },
|
|
156
|
+
};
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
//# sourceMappingURL=test-gen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-gen.js","sourceRoot":"","sources":["../../../src/skills/test-gen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WeaveSkills — Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Core contracts for the Skill Module system (M19).
|
|
5
|
+
* All skill modules implement SkillModule; the registry manages their lifecycle.
|
|
6
|
+
*/
|
|
7
|
+
/** Git state available to skills that need to inspect staged/unstaged changes. */
|
|
8
|
+
export interface SkillGitContext {
|
|
9
|
+
/** Current branch name */
|
|
10
|
+
branch: string;
|
|
11
|
+
/** Paths of staged files (`git diff --name-only --cached`) */
|
|
12
|
+
stagedFiles: string[];
|
|
13
|
+
/** Paths of unstaged modified files */
|
|
14
|
+
unstagedFiles: string[];
|
|
15
|
+
/** Full diff of staged changes (may be truncated) */
|
|
16
|
+
stagedDiff: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Context object injected into every skill at execution time.
|
|
20
|
+
* Skills may use any subset — unused fields can be null when unavailable.
|
|
21
|
+
*/
|
|
22
|
+
export interface SkillContext {
|
|
23
|
+
/** Absolute path to the project root */
|
|
24
|
+
projectRoot: string;
|
|
25
|
+
/** File paths in the project (relative to projectRoot) */
|
|
26
|
+
files: string[];
|
|
27
|
+
/**
|
|
28
|
+
* Opaque knowledge-graph snapshot.
|
|
29
|
+
* Typed as unknown to avoid a circular dependency on @openweave/weave-graph.
|
|
30
|
+
* Skills that need the graph should cast to the WeaveGraph types they import.
|
|
31
|
+
*/
|
|
32
|
+
graph: unknown | null;
|
|
33
|
+
/** Active session metadata */
|
|
34
|
+
session: {
|
|
35
|
+
id: string;
|
|
36
|
+
chatId?: string;
|
|
37
|
+
} | null;
|
|
38
|
+
/** Git workspace state — null if not a git repository */
|
|
39
|
+
git: SkillGitContext | null;
|
|
40
|
+
}
|
|
41
|
+
/** Structured result returned by every skill execution. */
|
|
42
|
+
export interface SkillResult {
|
|
43
|
+
/** Whether the skill completed successfully */
|
|
44
|
+
success: boolean;
|
|
45
|
+
/** Human-readable summary of the outcome (for CLI / agent logging) */
|
|
46
|
+
output: string;
|
|
47
|
+
/** Arbitrary structured payload — skill-specific */
|
|
48
|
+
data?: unknown;
|
|
49
|
+
/** Error message when success === false */
|
|
50
|
+
error?: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Base contract every skill module must implement.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* import type { SkillModule, SkillContext, SkillResult } from '@openweave/weave-skills';
|
|
58
|
+
*
|
|
59
|
+
* export const mySkill: SkillModule = {
|
|
60
|
+
* id: 'my-skill',
|
|
61
|
+
* name: 'My Skill',
|
|
62
|
+
* description: 'Does something useful',
|
|
63
|
+
* version: '1.0.0',
|
|
64
|
+
* enabled: true,
|
|
65
|
+
* tags: ['dev'],
|
|
66
|
+
* async execute(ctx: SkillContext): Promise<SkillResult> {
|
|
67
|
+
* return { success: true, output: 'done' };
|
|
68
|
+
* },
|
|
69
|
+
* };
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export interface SkillModule {
|
|
73
|
+
/** Unique kebab-case identifier (e.g. 'auto-fix', 'code-review') */
|
|
74
|
+
id: string;
|
|
75
|
+
/** Display name */
|
|
76
|
+
name: string;
|
|
77
|
+
/** Short description shown in `weave skills list` */
|
|
78
|
+
description: string;
|
|
79
|
+
/** Semver string */
|
|
80
|
+
version: string;
|
|
81
|
+
/**
|
|
82
|
+
* Whether this skill is active by default when first registered.
|
|
83
|
+
* The registry always defers to the loaded SkillConfig over this value.
|
|
84
|
+
*/
|
|
85
|
+
enabled: boolean;
|
|
86
|
+
/** Optional categorisation tags ('dev' | 'devops' | 'dx' | 'custom') */
|
|
87
|
+
tags?: string[];
|
|
88
|
+
/**
|
|
89
|
+
* Execute the skill.
|
|
90
|
+
* @param context - Runtime context (files, graph, session, git)
|
|
91
|
+
* @returns Structured result with success flag, output message and optional data
|
|
92
|
+
*/
|
|
93
|
+
execute(context: SkillContext): Promise<SkillResult>;
|
|
94
|
+
}
|
|
95
|
+
/** Internal record maintained by SkillRegistry for each registered skill. */
|
|
96
|
+
export interface RegisteredSkill {
|
|
97
|
+
module: SkillModule;
|
|
98
|
+
/** Current enabled state — authoritative source of truth at runtime */
|
|
99
|
+
enabled: boolean;
|
|
100
|
+
/** When the skill was registered in this process */
|
|
101
|
+
registeredAt: Date;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Persisted skill configuration stored in `.weave.config.json`.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```json
|
|
108
|
+
* {
|
|
109
|
+
* "skills": {
|
|
110
|
+
* "auto-fix": true,
|
|
111
|
+
* "code-review": false,
|
|
112
|
+
* "test-gen": true
|
|
113
|
+
* }
|
|
114
|
+
* }
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export interface SkillConfig {
|
|
118
|
+
/** Map of skill id → enabled flag */
|
|
119
|
+
skills: Record<string, boolean>;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Shape of the full `.weave.config.json` file.
|
|
123
|
+
* Only the `skills` section is managed by weave-skills; other properties are preserved.
|
|
124
|
+
*/
|
|
125
|
+
export interface WeaveConfig {
|
|
126
|
+
/** Project name */
|
|
127
|
+
projectName?: string;
|
|
128
|
+
/** Skill enable/disable flags */
|
|
129
|
+
skills?: Record<string, boolean>;
|
|
130
|
+
/** Other config keys are preserved verbatim */
|
|
131
|
+
[key: string]: unknown;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,kFAAkF;AAClF,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,uCAAuC;IACvC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;;;OAIG;IACH,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,8BAA8B;IAC9B,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChD,yDAAyD;IACzD,GAAG,EAAE,eAAe,GAAG,IAAI,CAAC;CAC7B;AAMD,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACtD;AAMD,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,uEAAuE;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,YAAY,EAAE,IAAI,CAAC;CACpB;AAMD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,+CAA+C;IAC/C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* WeaveSkills — Type Definitions
|
|
4
|
+
*
|
|
5
|
+
* Core contracts for the Skill Module system (M19).
|
|
6
|
+
* All skill modules implement SkillModule; the registry manages their lifecycle.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openweave/weave-skills",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "WeaveSkills — Skill Module Registry for OpenWeave agent extensibility",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
|
-
"main": "./dist/index.js",
|
|
8
|
+
"main": "./dist/cjs/index.js",
|
|
9
|
+
"module": "./dist/index.js",
|
|
9
10
|
"types": "./dist/index.d.ts",
|
|
10
11
|
"files": [
|
|
11
12
|
"dist",
|
|
@@ -13,6 +14,7 @@
|
|
|
13
14
|
],
|
|
14
15
|
"exports": {
|
|
15
16
|
".": {
|
|
17
|
+
"require": "./dist/cjs/index.js",
|
|
16
18
|
"import": "./dist/index.js",
|
|
17
19
|
"types": "./dist/index.d.ts"
|
|
18
20
|
}
|
|
@@ -30,7 +32,7 @@
|
|
|
30
32
|
"vitest": "3.0.0"
|
|
31
33
|
},
|
|
32
34
|
"scripts": {
|
|
33
|
-
"build": "tsc",
|
|
35
|
+
"build": "tsc && tsc -p tsconfig.cjs.json && node -e \"require('fs').writeFileSync('dist/cjs/package.json', '{\\\"type\\\":\\\"commonjs\\\"}')\" ",
|
|
34
36
|
"dev": "tsc --watch",
|
|
35
37
|
"test": "vitest",
|
|
36
38
|
"lint": "eslint src --max-warnings 0",
|