@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.
Files changed (82) hide show
  1. package/dist/cjs/config-loader.d.ts +52 -0
  2. package/dist/cjs/config-loader.d.ts.map +1 -0
  3. package/dist/cjs/config-loader.js +132 -0
  4. package/dist/cjs/config-loader.js.map +1 -0
  5. package/dist/cjs/index.d.ts +12 -0
  6. package/dist/cjs/index.d.ts.map +1 -0
  7. package/dist/cjs/index.js +44 -0
  8. package/dist/cjs/index.js.map +1 -0
  9. package/dist/cjs/package.json +1 -0
  10. package/dist/cjs/skill-registry.d.ts +96 -0
  11. package/dist/cjs/skill-registry.d.ts.map +1 -0
  12. package/dist/cjs/skill-registry.js +222 -0
  13. package/dist/cjs/skill-registry.js.map +1 -0
  14. package/dist/cjs/skills/auto-fix.d.ts +35 -0
  15. package/dist/cjs/skills/auto-fix.d.ts.map +1 -0
  16. package/dist/cjs/skills/auto-fix.js +125 -0
  17. package/dist/cjs/skills/auto-fix.js.map +1 -0
  18. package/dist/cjs/skills/cli-interactive.d.ts +60 -0
  19. package/dist/cjs/skills/cli-interactive.d.ts.map +1 -0
  20. package/dist/cjs/skills/cli-interactive.js +271 -0
  21. package/dist/cjs/skills/cli-interactive.js.map +1 -0
  22. package/dist/cjs/skills/code-review.d.ts +39 -0
  23. package/dist/cjs/skills/code-review.d.ts.map +1 -0
  24. package/dist/cjs/skills/code-review.js +208 -0
  25. package/dist/cjs/skills/code-review.js.map +1 -0
  26. package/dist/cjs/skills/commit-composer.d.ts +51 -0
  27. package/dist/cjs/skills/commit-composer.d.ts.map +1 -0
  28. package/dist/cjs/skills/commit-composer.js +231 -0
  29. package/dist/cjs/skills/commit-composer.js.map +1 -0
  30. package/dist/cjs/skills/container-advisor.d.ts +43 -0
  31. package/dist/cjs/skills/container-advisor.d.ts.map +1 -0
  32. package/dist/cjs/skills/container-advisor.js +278 -0
  33. package/dist/cjs/skills/container-advisor.js.map +1 -0
  34. package/dist/cjs/skills/context-memory.d.ts +44 -0
  35. package/dist/cjs/skills/context-memory.d.ts.map +1 -0
  36. package/dist/cjs/skills/context-memory.js +167 -0
  37. package/dist/cjs/skills/context-memory.js.map +1 -0
  38. package/dist/cjs/skills/dep-audit.d.ts +55 -0
  39. package/dist/cjs/skills/dep-audit.d.ts.map +1 -0
  40. package/dist/cjs/skills/dep-audit.js +255 -0
  41. package/dist/cjs/skills/dep-audit.js.map +1 -0
  42. package/dist/cjs/skills/deploy-provision.d.ts +47 -0
  43. package/dist/cjs/skills/deploy-provision.d.ts.map +1 -0
  44. package/dist/cjs/skills/deploy-provision.js +273 -0
  45. package/dist/cjs/skills/deploy-provision.js.map +1 -0
  46. package/dist/cjs/skills/docs-gen.d.ts +36 -0
  47. package/dist/cjs/skills/docs-gen.d.ts.map +1 -0
  48. package/dist/cjs/skills/docs-gen.js +193 -0
  49. package/dist/cjs/skills/docs-gen.js.map +1 -0
  50. package/dist/cjs/skills/index.d.ts +19 -0
  51. package/dist/cjs/skills/index.d.ts.map +1 -0
  52. package/dist/cjs/skills/index.js +73 -0
  53. package/dist/cjs/skills/index.js.map +1 -0
  54. package/dist/cjs/skills/multi-repo.d.ts +50 -0
  55. package/dist/cjs/skills/multi-repo.d.ts.map +1 -0
  56. package/dist/cjs/skills/multi-repo.js +181 -0
  57. package/dist/cjs/skills/multi-repo.js.map +1 -0
  58. package/dist/cjs/skills/onboarding.d.ts +48 -0
  59. package/dist/cjs/skills/onboarding.d.ts.map +1 -0
  60. package/dist/cjs/skills/onboarding.js +253 -0
  61. package/dist/cjs/skills/onboarding.js.map +1 -0
  62. package/dist/cjs/skills/perf-profile.d.ts +36 -0
  63. package/dist/cjs/skills/perf-profile.d.ts.map +1 -0
  64. package/dist/cjs/skills/perf-profile.js +184 -0
  65. package/dist/cjs/skills/perf-profile.js.map +1 -0
  66. package/dist/cjs/skills/pipeline-aware.d.ts +33 -0
  67. package/dist/cjs/skills/pipeline-aware.d.ts.map +1 -0
  68. package/dist/cjs/skills/pipeline-aware.js +231 -0
  69. package/dist/cjs/skills/pipeline-aware.js.map +1 -0
  70. package/dist/cjs/skills/refactor.d.ts +33 -0
  71. package/dist/cjs/skills/refactor.d.ts.map +1 -0
  72. package/dist/cjs/skills/refactor.js +214 -0
  73. package/dist/cjs/skills/refactor.js.map +1 -0
  74. package/dist/cjs/skills/test-gen.d.ts +36 -0
  75. package/dist/cjs/skills/test-gen.d.ts.map +1 -0
  76. package/dist/cjs/skills/test-gen.js +159 -0
  77. package/dist/cjs/skills/test-gen.js.map +1 -0
  78. package/dist/cjs/types.d.ts +133 -0
  79. package/dist/cjs/types.d.ts.map +1 -0
  80. package/dist/cjs/types.js +9 -0
  81. package/dist/cjs/types.js.map +1 -0
  82. 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.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",