@openweave/weave-skills 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/LICENSE +21 -0
- package/README.md +154 -0
- package/dist/config-loader.d.ts +52 -0
- package/dist/config-loader.d.ts.map +1 -0
- package/dist/config-loader.js +123 -0
- package/dist/config-loader.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/skill-registry.d.ts +96 -0
- package/dist/skill-registry.d.ts.map +1 -0
- package/dist/skill-registry.js +218 -0
- package/dist/skill-registry.js.map +1 -0
- package/dist/skills/auto-fix.d.ts +35 -0
- package/dist/skills/auto-fix.d.ts.map +1 -0
- package/dist/skills/auto-fix.js +121 -0
- package/dist/skills/auto-fix.js.map +1 -0
- package/dist/skills/cli-interactive.d.ts +60 -0
- package/dist/skills/cli-interactive.d.ts.map +1 -0
- package/dist/skills/cli-interactive.js +264 -0
- package/dist/skills/cli-interactive.js.map +1 -0
- package/dist/skills/code-review.d.ts +39 -0
- package/dist/skills/code-review.d.ts.map +1 -0
- package/dist/skills/code-review.js +204 -0
- package/dist/skills/code-review.js.map +1 -0
- package/dist/skills/commit-composer.d.ts +51 -0
- package/dist/skills/commit-composer.d.ts.map +1 -0
- package/dist/skills/commit-composer.js +223 -0
- package/dist/skills/commit-composer.js.map +1 -0
- package/dist/skills/container-advisor.d.ts +43 -0
- package/dist/skills/container-advisor.d.ts.map +1 -0
- package/dist/skills/container-advisor.js +274 -0
- package/dist/skills/container-advisor.js.map +1 -0
- package/dist/skills/context-memory.d.ts +44 -0
- package/dist/skills/context-memory.d.ts.map +1 -0
- package/dist/skills/context-memory.js +160 -0
- package/dist/skills/context-memory.js.map +1 -0
- package/dist/skills/dep-audit.d.ts +55 -0
- package/dist/skills/dep-audit.d.ts.map +1 -0
- package/dist/skills/dep-audit.js +248 -0
- package/dist/skills/dep-audit.js.map +1 -0
- package/dist/skills/deploy-provision.d.ts +47 -0
- package/dist/skills/deploy-provision.d.ts.map +1 -0
- package/dist/skills/deploy-provision.js +270 -0
- package/dist/skills/deploy-provision.js.map +1 -0
- package/dist/skills/docs-gen.d.ts +36 -0
- package/dist/skills/docs-gen.d.ts.map +1 -0
- package/dist/skills/docs-gen.js +187 -0
- package/dist/skills/docs-gen.js.map +1 -0
- package/dist/skills/index.d.ts +19 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +55 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/multi-repo.d.ts +50 -0
- package/dist/skills/multi-repo.d.ts.map +1 -0
- package/dist/skills/multi-repo.js +175 -0
- package/dist/skills/multi-repo.js.map +1 -0
- package/dist/skills/onboarding.d.ts +48 -0
- package/dist/skills/onboarding.d.ts.map +1 -0
- package/dist/skills/onboarding.js +245 -0
- package/dist/skills/onboarding.js.map +1 -0
- package/dist/skills/perf-profile.d.ts +36 -0
- package/dist/skills/perf-profile.d.ts.map +1 -0
- package/dist/skills/perf-profile.js +179 -0
- package/dist/skills/perf-profile.js.map +1 -0
- package/dist/skills/pipeline-aware.d.ts +33 -0
- package/dist/skills/pipeline-aware.d.ts.map +1 -0
- package/dist/skills/pipeline-aware.js +226 -0
- package/dist/skills/pipeline-aware.js.map +1 -0
- package/dist/skills/refactor.d.ts +33 -0
- package/dist/skills/refactor.d.ts.map +1 -0
- package/dist/skills/refactor.js +210 -0
- package/dist/skills/refactor.js.map +1 -0
- package/dist/skills/test-gen.d.ts +36 -0
- package/dist/skills/test-gen.d.ts.map +1 -0
- package/dist/skills/test-gen.js +154 -0
- package/dist/skills/test-gen.js.map +1 -0
- package/dist/types.d.ts +133 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill: deploy-provision
|
|
3
|
+
*
|
|
4
|
+
* Interactive production provisioning guide. Validates prerequisites
|
|
5
|
+
* (DNS resolution, open ports, Docker availability, required env vars)
|
|
6
|
+
* and optionally invokes `scripts/deploy/setup.sh` step by step.
|
|
7
|
+
*
|
|
8
|
+
* Integrates with M23 — the deploy scripts live in `scripts/deploy/`.
|
|
9
|
+
*
|
|
10
|
+
* Modes (ctx.graph['mode']):
|
|
11
|
+
* - 'validate' — check prerequisites only (default, safe)
|
|
12
|
+
* - 'provision' — run setup.sh steps (requires confirmRun: true)
|
|
13
|
+
*
|
|
14
|
+
* Input options (ctx.graph):
|
|
15
|
+
* - `domain` {string} — FQDN to check DNS for
|
|
16
|
+
* - `apiKey` {string} — WEAVE_API_KEY value to validate
|
|
17
|
+
* - `ports` {number[]} — ports to check (default: [80, 443, 3001])
|
|
18
|
+
* - `dryRun` {boolean} — simulate without executing shell commands
|
|
19
|
+
* - `confirmRun` {boolean} — must be true to allow mode='provision'
|
|
20
|
+
* - `env` {Record<string,string>} — inject env for testing
|
|
21
|
+
*/
|
|
22
|
+
import { existsSync } from 'node:fs';
|
|
23
|
+
import { join } from 'node:path';
|
|
24
|
+
import { execSync } from 'node:child_process';
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Prerequisite validators
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
function checkDocker(dryRun) {
|
|
29
|
+
if (dryRun)
|
|
30
|
+
return { id: 'docker', name: 'Docker available', status: 'skip', message: 'dry-run' };
|
|
31
|
+
try {
|
|
32
|
+
execSync('docker --version', { stdio: 'pipe' });
|
|
33
|
+
return { id: 'docker', name: 'Docker available', status: 'ok', message: 'Docker is installed' };
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return {
|
|
37
|
+
id: 'docker',
|
|
38
|
+
name: 'Docker available',
|
|
39
|
+
status: 'fail',
|
|
40
|
+
message: 'Docker not found in PATH',
|
|
41
|
+
fix: 'Install Docker Engine: https://docs.docker.com/engine/install/',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function checkDns(domain, dryRun) {
|
|
46
|
+
if (!domain) {
|
|
47
|
+
return { id: 'dns', name: 'DNS resolution', status: 'warn', message: 'No domain provided — skipping DNS check' };
|
|
48
|
+
}
|
|
49
|
+
if (dryRun) {
|
|
50
|
+
return { id: 'dns', name: 'DNS resolution', status: 'skip', message: `dry-run (would resolve ${domain})` };
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
execSync(`nslookup ${domain}`, { stdio: 'pipe' });
|
|
54
|
+
return { id: 'dns', name: 'DNS resolution', status: 'ok', message: `${domain} resolves` };
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
try {
|
|
58
|
+
execSync(`ping -c 1 ${domain}`, { stdio: 'pipe' });
|
|
59
|
+
return { id: 'dns', name: 'DNS resolution', status: 'ok', message: `${domain} reachable` };
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return {
|
|
63
|
+
id: 'dns',
|
|
64
|
+
name: 'DNS resolution',
|
|
65
|
+
status: 'fail',
|
|
66
|
+
message: `Cannot resolve ${domain}`,
|
|
67
|
+
fix: `Ensure an A record for ${domain} points to this server's public IP`,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function checkPorts(ports, dryRun) {
|
|
73
|
+
if (dryRun) {
|
|
74
|
+
return ports.map((p) => ({
|
|
75
|
+
id: `port-${p}`,
|
|
76
|
+
name: `Port ${p} reachable`,
|
|
77
|
+
status: 'skip',
|
|
78
|
+
message: 'dry-run',
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
return ports.map((p) => {
|
|
82
|
+
try {
|
|
83
|
+
// Check if port is already in use (potential conflict)
|
|
84
|
+
execSync(`lsof -i :${p} -sTCP:LISTEN`, { stdio: 'pipe' });
|
|
85
|
+
return {
|
|
86
|
+
id: `port-${p}`,
|
|
87
|
+
name: `Port ${p} available`,
|
|
88
|
+
status: 'warn',
|
|
89
|
+
message: `Port ${p} is already in use — may conflict with new service`,
|
|
90
|
+
fix: `Stop the existing process on port ${p} before provisioning`,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// lsof returns non-zero when nothing is listening — that means the port is free
|
|
95
|
+
return {
|
|
96
|
+
id: `port-${p}`,
|
|
97
|
+
name: `Port ${p} available`,
|
|
98
|
+
status: 'ok',
|
|
99
|
+
message: `Port ${p} is free`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
function checkEnvVars(required, env) {
|
|
105
|
+
return required.map((key) => {
|
|
106
|
+
const val = env[key];
|
|
107
|
+
if (!val) {
|
|
108
|
+
return {
|
|
109
|
+
id: `env-${key}`,
|
|
110
|
+
name: `Env: ${key}`,
|
|
111
|
+
status: 'fail',
|
|
112
|
+
message: `${key} is not set`,
|
|
113
|
+
fix: `export ${key}=<value>`,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
if (val.length < 8 && key.toLowerCase().includes('key')) {
|
|
117
|
+
return {
|
|
118
|
+
id: `env-${key}`,
|
|
119
|
+
name: `Env: ${key}`,
|
|
120
|
+
status: 'warn',
|
|
121
|
+
message: `${key} looks too short — use a strong random value`,
|
|
122
|
+
fix: `weave-link keygen`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
id: `env-${key}`,
|
|
127
|
+
name: `Env: ${key}`,
|
|
128
|
+
status: 'ok',
|
|
129
|
+
message: `${key} is set`,
|
|
130
|
+
};
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
function checkDeployScripts(projectRoot) {
|
|
134
|
+
const setupPath = join(projectRoot, 'scripts', 'deploy', 'setup.sh');
|
|
135
|
+
if (existsSync(setupPath)) {
|
|
136
|
+
return { id: 'scripts', name: 'Deploy scripts present', status: 'ok', message: setupPath };
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
id: 'scripts',
|
|
140
|
+
name: 'Deploy scripts present',
|
|
141
|
+
status: 'warn',
|
|
142
|
+
message: 'scripts/deploy/setup.sh not found — M23 scripts not yet implemented',
|
|
143
|
+
fix: 'Implement M23 deploy scripts or set mode=validate to skip provisioning',
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
// ---------------------------------------------------------------------------
|
|
147
|
+
// Provision steps (M23 integration)
|
|
148
|
+
// ---------------------------------------------------------------------------
|
|
149
|
+
const PROVISION_STEPS = [
|
|
150
|
+
{ id: 'validate-env', name: 'Validate environment variables', script: 'scripts/deploy/validate-env.sh' },
|
|
151
|
+
{ id: 'install-docker', name: 'Ensure Docker is installed', script: 'scripts/deploy/docker.sh' },
|
|
152
|
+
{ id: 'setup-firewall', name: 'Configure firewall (ufw)', script: 'scripts/deploy/firewall.sh' },
|
|
153
|
+
{ id: 'start-compose', name: 'Start weave-link container', script: 'scripts/deploy/compose.yml' },
|
|
154
|
+
{ id: 'setup-nginx', name: 'Configure nginx reverse proxy', script: 'scripts/deploy/nginx.sh' },
|
|
155
|
+
{ id: 'setup-tls', name: 'Obtain TLS certificate (Let\'s Encrypt)', script: 'scripts/deploy/certbot.sh' },
|
|
156
|
+
{ id: 'verify', name: 'Smoke-test HTTPS endpoint', script: 'scripts/deploy/verify.sh' },
|
|
157
|
+
];
|
|
158
|
+
function runProvisionStep(step, projectRoot, dryRun) {
|
|
159
|
+
if (dryRun) {
|
|
160
|
+
return { ...step, status: 'done', output: `[dry-run] would execute ${step.script}` };
|
|
161
|
+
}
|
|
162
|
+
const absScript = join(projectRoot, step.script);
|
|
163
|
+
if (!existsSync(absScript)) {
|
|
164
|
+
return { ...step, status: 'skipped', output: `Script not found: ${step.script}` };
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
const output = execSync(`bash "${absScript}"`, {
|
|
168
|
+
cwd: projectRoot,
|
|
169
|
+
stdio: 'pipe',
|
|
170
|
+
encoding: 'utf-8',
|
|
171
|
+
timeout: 120_000,
|
|
172
|
+
});
|
|
173
|
+
return { ...step, status: 'done', output: output.slice(0, 500) };
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
const e = err;
|
|
177
|
+
return { ...step, status: 'failed', error: String(e.stderr ?? e.message ?? 'unknown error').slice(0, 300) };
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// ---------------------------------------------------------------------------
|
|
181
|
+
// Skill
|
|
182
|
+
// ---------------------------------------------------------------------------
|
|
183
|
+
export const deployProvisionSkill = {
|
|
184
|
+
id: 'deploy-provision',
|
|
185
|
+
name: 'Deploy & Provision',
|
|
186
|
+
description: 'Validates production prerequisites (DNS, Docker, ports, env vars) and optionally runs scripts/deploy/setup.sh',
|
|
187
|
+
version: '1.0.0',
|
|
188
|
+
enabled: false,
|
|
189
|
+
tags: ['devops', 'deploy'],
|
|
190
|
+
async execute(ctx) {
|
|
191
|
+
const opts = ctx.graph ?? {};
|
|
192
|
+
const mode = String(opts['mode'] ?? 'validate');
|
|
193
|
+
const domain = String(opts['domain'] ?? '');
|
|
194
|
+
const dryRun = Boolean(opts['dryRun'] ?? true);
|
|
195
|
+
const confirmRun = Boolean(opts['confirmRun'] ?? false);
|
|
196
|
+
const ports = Array.isArray(opts['ports'])
|
|
197
|
+
? opts['ports']
|
|
198
|
+
: [80, 443, 3001];
|
|
199
|
+
const injectedEnv = opts['env'] ?? process.env;
|
|
200
|
+
// -- Prerequisite validation --
|
|
201
|
+
const prereqs = [
|
|
202
|
+
checkDocker(dryRun),
|
|
203
|
+
checkDns(domain, dryRun),
|
|
204
|
+
...checkPorts(ports, dryRun),
|
|
205
|
+
...checkEnvVars(['WEAVE_API_KEY', 'DOMAIN'], injectedEnv),
|
|
206
|
+
checkDeployScripts(ctx.projectRoot),
|
|
207
|
+
];
|
|
208
|
+
const failedPrereqs = prereqs.filter((p) => p.status === 'fail');
|
|
209
|
+
const warnPrereqs = prereqs.filter((p) => p.status === 'warn');
|
|
210
|
+
// -- Provision steps --
|
|
211
|
+
let steps = [];
|
|
212
|
+
if (mode === 'provision') {
|
|
213
|
+
if (!confirmRun) {
|
|
214
|
+
return {
|
|
215
|
+
success: false,
|
|
216
|
+
output: '❌ Provision mode requires `confirmRun: true` in ctx.graph to prevent accidental execution.',
|
|
217
|
+
error: 'confirmRun not set',
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
if (failedPrereqs.length > 0 && !dryRun) {
|
|
221
|
+
return {
|
|
222
|
+
success: false,
|
|
223
|
+
output: `❌ ${failedPrereqs.length} prerequisite(s) failed — fix them before provisioning.`,
|
|
224
|
+
error: 'prerequisites failed',
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
for (const stepDef of PROVISION_STEPS) {
|
|
228
|
+
const result = runProvisionStep(stepDef, ctx.projectRoot, dryRun);
|
|
229
|
+
steps.push(result);
|
|
230
|
+
if (result.status === 'failed')
|
|
231
|
+
break; // stop on first failure
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const ready = failedPrereqs.length === 0;
|
|
235
|
+
const summary = ready
|
|
236
|
+
? `✅ All prerequisites passed${mode === 'provision' ? ' · provisioning complete' : ''}`
|
|
237
|
+
: `❌ ${failedPrereqs.length} prerequisite(s) failed · ${warnPrereqs.length} warning(s)`;
|
|
238
|
+
const report = { domain, prereqs, steps, ready, summary };
|
|
239
|
+
// -- Format output --
|
|
240
|
+
const lines = [
|
|
241
|
+
`🚀 Deploy Provision (mode: ${mode}${dryRun ? ' · dry-run' : ''})`,
|
|
242
|
+
` ${summary}`,
|
|
243
|
+
'',
|
|
244
|
+
' PREREQUISITES:',
|
|
245
|
+
];
|
|
246
|
+
for (const p of prereqs) {
|
|
247
|
+
const icon = p.status === 'ok' ? '✅' : p.status === 'fail' ? '❌' : p.status === 'warn' ? '⚠️ ' : '⏭ ';
|
|
248
|
+
lines.push(` ${icon} ${p.name}: ${p.message}`);
|
|
249
|
+
if (p.fix)
|
|
250
|
+
lines.push(` 💡 ${p.fix}`);
|
|
251
|
+
}
|
|
252
|
+
if (steps.length > 0) {
|
|
253
|
+
lines.push('', ' PROVISION STEPS:');
|
|
254
|
+
for (const s of steps) {
|
|
255
|
+
const icon = s.status === 'done' ? '✅' : s.status === 'failed' ? '❌' : s.status === 'skipped' ? '⏭ ' : '⏳';
|
|
256
|
+
lines.push(` ${icon} ${s.name}`);
|
|
257
|
+
if (s.output)
|
|
258
|
+
lines.push(` ${s.output.split('\n')[0]}`);
|
|
259
|
+
if (s.error)
|
|
260
|
+
lines.push(` ⚠️ ${s.error.split('\n')[0]}`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return {
|
|
264
|
+
success: ready,
|
|
265
|
+
output: lines.join('\n'),
|
|
266
|
+
data: report,
|
|
267
|
+
};
|
|
268
|
+
},
|
|
269
|
+
};
|
|
270
|
+
//# sourceMappingURL=deploy-provision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-provision.js","sourceRoot":"","sources":["../../src/skills/deploy-provision.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill: docs-gen
|
|
3
|
+
*
|
|
4
|
+
* Generates documentation stubs for exported TypeScript entities that lack JSDoc,
|
|
5
|
+
* and produces a CHANGELOG draft from conventional commits.
|
|
6
|
+
*
|
|
7
|
+
* Two modes (controlled via ctx.graph options):
|
|
8
|
+
* - `mode: 'jsdoc'` — scan for undocumented exports → generate JSDoc stubs
|
|
9
|
+
* - `mode: 'changelog'` — parse git log → draft CHANGELOG.md section
|
|
10
|
+
* - `mode: 'both'` — run both (default)
|
|
11
|
+
*/
|
|
12
|
+
import type { SkillModule } from '../types.js';
|
|
13
|
+
export interface UndocumentedEntity {
|
|
14
|
+
file: string;
|
|
15
|
+
line: number;
|
|
16
|
+
name: string;
|
|
17
|
+
kind: 'function' | 'class' | 'const' | 'interface' | 'type';
|
|
18
|
+
stub: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ChangelogEntry {
|
|
21
|
+
hash: string;
|
|
22
|
+
type: string;
|
|
23
|
+
scope: string;
|
|
24
|
+
message: string;
|
|
25
|
+
}
|
|
26
|
+
export interface DocsGenResult {
|
|
27
|
+
undocumented: UndocumentedEntity[];
|
|
28
|
+
changelog: ChangelogEntry[];
|
|
29
|
+
jsDocStubs: string;
|
|
30
|
+
changelogSection: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function findUndocumentedExports(source: string, filePath: string): UndocumentedEntity[];
|
|
33
|
+
export declare function parseConventionalCommits(gitLog: string): ChangelogEntry[];
|
|
34
|
+
export declare function renderChangelogSection(entries: ChangelogEntry[], version?: string): string;
|
|
35
|
+
export declare const docsGenSkill: SkillModule;
|
|
36
|
+
//# sourceMappingURL=docs-gen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-gen.d.ts","sourceRoot":"","sources":["../../src/skills/docs-gen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,WAAW,EAA6B,MAAM,aAAa,CAAC;AAM1E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC;IAC5D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AASD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA4B9F;AA0BD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,CAYzE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,SAAe,GAAG,MAAM,CA2BhG;AAMD,eAAO,MAAM,YAAY,EAAE,WA6E1B,CAAC"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill: docs-gen
|
|
3
|
+
*
|
|
4
|
+
* Generates documentation stubs for exported TypeScript entities that lack JSDoc,
|
|
5
|
+
* and produces a CHANGELOG draft from conventional commits.
|
|
6
|
+
*
|
|
7
|
+
* Two modes (controlled via ctx.graph options):
|
|
8
|
+
* - `mode: 'jsdoc'` — scan for undocumented exports → generate JSDoc stubs
|
|
9
|
+
* - `mode: 'changelog'` — parse git log → draft CHANGELOG.md section
|
|
10
|
+
* - `mode: 'both'` — run both (default)
|
|
11
|
+
*/
|
|
12
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { execSync } from 'node:child_process';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// JSDoc analysis
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
const EXPORTED_SYMBOL_RE = /^(export\s+(?:async\s+)?function|export\s+(?:abstract\s+)?class|export\s+(?:const|let|var)\s+\w+|export\s+interface\s+\w+|export\s+type\s+\w+)/;
|
|
19
|
+
const NAME_RE = /(?:function|class|interface|type|const|let|var)\s+(\w+)/;
|
|
20
|
+
export function findUndocumentedExports(source, filePath) {
|
|
21
|
+
const lines = source.split('\n');
|
|
22
|
+
const results = [];
|
|
23
|
+
for (let i = 0; i < lines.length; i++) {
|
|
24
|
+
const line = lines[i];
|
|
25
|
+
if (!EXPORTED_SYMBOL_RE.test(line))
|
|
26
|
+
continue;
|
|
27
|
+
// Check previous lines for a JSDoc block
|
|
28
|
+
const prevLine = lines[i - 1]?.trimEnd() ?? '';
|
|
29
|
+
const hasDocs = prevLine.trimEnd().endsWith('*/') || prevLine.trimStart().startsWith('* ') || prevLine.trimStart().startsWith('/**');
|
|
30
|
+
if (hasDocs)
|
|
31
|
+
continue;
|
|
32
|
+
const nameMatch = NAME_RE.exec(line);
|
|
33
|
+
if (!nameMatch)
|
|
34
|
+
continue;
|
|
35
|
+
const name = nameMatch[1];
|
|
36
|
+
let kind = 'const';
|
|
37
|
+
if (/export\s+(?:async\s+)?function/.test(line))
|
|
38
|
+
kind = 'function';
|
|
39
|
+
else if (/export\s+(?:abstract\s+)?class/.test(line))
|
|
40
|
+
kind = 'class';
|
|
41
|
+
else if (/export\s+interface/.test(line))
|
|
42
|
+
kind = 'interface';
|
|
43
|
+
else if (/export\s+type/.test(line))
|
|
44
|
+
kind = 'type';
|
|
45
|
+
const stub = generateJsDoc(name, kind);
|
|
46
|
+
results.push({ file: filePath, line: i + 1, name, kind, stub });
|
|
47
|
+
}
|
|
48
|
+
return results;
|
|
49
|
+
}
|
|
50
|
+
function generateJsDoc(name, kind) {
|
|
51
|
+
const lines = ['/**'];
|
|
52
|
+
lines.push(` * ${name}`);
|
|
53
|
+
if (kind === 'function') {
|
|
54
|
+
lines.push(` *`);
|
|
55
|
+
lines.push(` * @param args - TODO: document parameters`);
|
|
56
|
+
lines.push(` * @returns TODO: describe return value`);
|
|
57
|
+
}
|
|
58
|
+
else if (kind === 'class') {
|
|
59
|
+
lines.push(` *`);
|
|
60
|
+
lines.push(` * @example`);
|
|
61
|
+
lines.push(` * \`\`\`typescript`);
|
|
62
|
+
lines.push(` * const instance = new ${name}();`);
|
|
63
|
+
lines.push(` * \`\`\``);
|
|
64
|
+
}
|
|
65
|
+
lines.push(` */`);
|
|
66
|
+
return lines.join('\n');
|
|
67
|
+
}
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// Changelog from git log
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
const CONVENTIONAL_RE = /^([a-z]+)(?:\(([^)]+)\))?!?:\s+(.+)$/;
|
|
72
|
+
export function parseConventionalCommits(gitLog) {
|
|
73
|
+
return gitLog
|
|
74
|
+
.split('\n')
|
|
75
|
+
.filter(Boolean)
|
|
76
|
+
.map((line) => {
|
|
77
|
+
const [hash, ...rest] = line.split(' ');
|
|
78
|
+
const msg = rest.join(' ');
|
|
79
|
+
const m = CONVENTIONAL_RE.exec(msg);
|
|
80
|
+
if (!m)
|
|
81
|
+
return null;
|
|
82
|
+
return { hash: hash.slice(0, 7), type: m[1], scope: m[2] ?? '', message: m[3] };
|
|
83
|
+
})
|
|
84
|
+
.filter((e) => e !== null);
|
|
85
|
+
}
|
|
86
|
+
export function renderChangelogSection(entries, version = 'Unreleased') {
|
|
87
|
+
if (entries.length === 0)
|
|
88
|
+
return `## [${version}]\n\n_No conventional commits found._\n`;
|
|
89
|
+
const groups = {};
|
|
90
|
+
for (const e of entries) {
|
|
91
|
+
(groups[e.type] ??= []).push(e);
|
|
92
|
+
}
|
|
93
|
+
const ORDER = ['feat', 'fix', 'perf', 'refactor', 'docs', 'test', 'chore', 'ci'];
|
|
94
|
+
const LABELS = {
|
|
95
|
+
feat: '✨ Features', fix: '🐛 Bug Fixes', perf: '⚡ Performance',
|
|
96
|
+
refactor: '♻️ Refactoring', docs: '📚 Documentation', test: '🧪 Tests',
|
|
97
|
+
chore: '🔧 Chores', ci: '⚙️ CI',
|
|
98
|
+
};
|
|
99
|
+
const lines = [`## [${version}] — ${new Date().toISOString().slice(0, 10)}`, ''];
|
|
100
|
+
for (const type of [...ORDER, ...Object.keys(groups).filter((t) => !ORDER.includes(t))]) {
|
|
101
|
+
if (!groups[type])
|
|
102
|
+
continue;
|
|
103
|
+
lines.push(`### ${LABELS[type] ?? type}`);
|
|
104
|
+
for (const e of groups[type]) {
|
|
105
|
+
const scope = e.scope ? ` **${e.scope}:**` : '';
|
|
106
|
+
lines.push(`- \`${e.hash}\`${scope} ${e.message}`);
|
|
107
|
+
}
|
|
108
|
+
lines.push('');
|
|
109
|
+
}
|
|
110
|
+
return lines.join('\n');
|
|
111
|
+
}
|
|
112
|
+
// ---------------------------------------------------------------------------
|
|
113
|
+
// Skill
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
export const docsGenSkill = {
|
|
116
|
+
id: 'docs-gen',
|
|
117
|
+
name: 'Docs Generator',
|
|
118
|
+
description: 'Generates JSDoc stubs for undocumented exports and drafts CHANGELOG from conventional commits',
|
|
119
|
+
version: '1.0.0',
|
|
120
|
+
enabled: false,
|
|
121
|
+
tags: ['dev', 'docs'],
|
|
122
|
+
async execute(ctx) {
|
|
123
|
+
const opts = ctx.graph ?? {};
|
|
124
|
+
const mode = String(opts['mode'] ?? 'both');
|
|
125
|
+
const version = String(opts['version'] ?? 'Unreleased');
|
|
126
|
+
const undocumented = [];
|
|
127
|
+
const changelog = [];
|
|
128
|
+
let jsDocStubs = '';
|
|
129
|
+
let changelogSection = '';
|
|
130
|
+
// --- JSDoc mode ---
|
|
131
|
+
if (mode === 'jsdoc' || mode === 'both') {
|
|
132
|
+
const tsFiles = ctx.files.filter((f) => f.endsWith('.ts') && !f.endsWith('.test.ts') && !f.endsWith('.d.ts') && !f.includes('/dist/'));
|
|
133
|
+
for (const relPath of tsFiles) {
|
|
134
|
+
const absPath = join(ctx.projectRoot, relPath);
|
|
135
|
+
if (!existsSync(absPath))
|
|
136
|
+
continue;
|
|
137
|
+
try {
|
|
138
|
+
const content = readFileSync(absPath, 'utf-8');
|
|
139
|
+
undocumented.push(...findUndocumentedExports(content, relPath));
|
|
140
|
+
}
|
|
141
|
+
catch { /* skip unreadable */ }
|
|
142
|
+
}
|
|
143
|
+
if (undocumented.length > 0) {
|
|
144
|
+
jsDocStubs = undocumented
|
|
145
|
+
.map((u) => `// ${u.file}:${u.line} — ${u.name}\n${u.stub}`)
|
|
146
|
+
.join('\n\n');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// --- Changelog mode ---
|
|
150
|
+
if (mode === 'changelog' || mode === 'both') {
|
|
151
|
+
try {
|
|
152
|
+
const gitLog = execSync('git log --oneline --no-merges -50', {
|
|
153
|
+
cwd: ctx.projectRoot,
|
|
154
|
+
stdio: 'pipe',
|
|
155
|
+
encoding: 'utf-8',
|
|
156
|
+
});
|
|
157
|
+
const entries = parseConventionalCommits(gitLog);
|
|
158
|
+
changelog.push(...entries);
|
|
159
|
+
changelogSection = renderChangelogSection(entries, version);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
changelogSection = '_(git log unavailable)_';
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const lines = [`📚 Docs Generator`, ''];
|
|
166
|
+
if (mode !== 'changelog') {
|
|
167
|
+
lines.push(` JSDoc gaps: ${undocumented.length} undocumented exports`);
|
|
168
|
+
if (undocumented.length > 0) {
|
|
169
|
+
for (const u of undocumented.slice(0, 10)) {
|
|
170
|
+
lines.push(` ⬜ ${u.file}:${u.line} — ${u.kind} ${u.name}`);
|
|
171
|
+
}
|
|
172
|
+
if (undocumented.length > 10)
|
|
173
|
+
lines.push(` … and ${undocumented.length - 10} more`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (mode !== 'jsdoc') {
|
|
177
|
+
lines.push('');
|
|
178
|
+
lines.push(` CHANGELOG: ${changelog.length} conventional commit(s) parsed`);
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
success: true,
|
|
182
|
+
output: lines.join('\n'),
|
|
183
|
+
data: { undocumented, changelog, jsDocStubs, changelogSection },
|
|
184
|
+
};
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
//# sourceMappingURL=docs-gen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-gen.js","sourceRoot":"","sources":["../../src/skills/docs-gen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export { autoFixSkill } from './auto-fix.js';
|
|
2
|
+
export { codeReviewSkill } from './code-review.js';
|
|
3
|
+
export { testGenSkill } from './test-gen.js';
|
|
4
|
+
export { docsGenSkill } from './docs-gen.js';
|
|
5
|
+
export { refactorSkill } from './refactor.js';
|
|
6
|
+
export { pipelineAwareSkill } from './pipeline-aware.js';
|
|
7
|
+
export { depAuditSkill } from './dep-audit.js';
|
|
8
|
+
export { perfProfileSkill } from './perf-profile.js';
|
|
9
|
+
export { containerAdvisorSkill } from './container-advisor.js';
|
|
10
|
+
export { deployProvisionSkill } from './deploy-provision.js';
|
|
11
|
+
export { onboardingSkill } from './onboarding.js';
|
|
12
|
+
export { commitComposerSkill } from './commit-composer.js';
|
|
13
|
+
export { contextMemorySkill } from './context-memory.js';
|
|
14
|
+
export { multiRepoSkill } from './multi-repo.js';
|
|
15
|
+
export { cliInteractiveSkill } from './cli-interactive.js';
|
|
16
|
+
export declare const CORE_DEV_SKILLS: import("../types.js").SkillModule[];
|
|
17
|
+
export declare const DEVOPS_SKILLS: import("../types.js").SkillModule[];
|
|
18
|
+
export declare const DEV_EXPERIENCE_SKILLS: import("../types.js").SkillModule[];
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAQ7D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAa3D,eAAO,MAAM,eAAe,qCAM3B,CAAC;AAEF,eAAO,MAAM,aAAa,qCAMzB,CAAC;AAEF,eAAO,MAAM,qBAAqB,qCAMjC,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// M20 — Core Dev Skills
|
|
2
|
+
export { autoFixSkill } from './auto-fix.js';
|
|
3
|
+
export { codeReviewSkill } from './code-review.js';
|
|
4
|
+
export { testGenSkill } from './test-gen.js';
|
|
5
|
+
export { docsGenSkill } from './docs-gen.js';
|
|
6
|
+
export { refactorSkill } from './refactor.js';
|
|
7
|
+
// M21 — DevOps Skills
|
|
8
|
+
export { pipelineAwareSkill } from './pipeline-aware.js';
|
|
9
|
+
export { depAuditSkill } from './dep-audit.js';
|
|
10
|
+
export { perfProfileSkill } from './perf-profile.js';
|
|
11
|
+
export { containerAdvisorSkill } from './container-advisor.js';
|
|
12
|
+
export { deployProvisionSkill } from './deploy-provision.js';
|
|
13
|
+
import { autoFixSkill } from './auto-fix.js';
|
|
14
|
+
import { codeReviewSkill } from './code-review.js';
|
|
15
|
+
import { testGenSkill } from './test-gen.js';
|
|
16
|
+
import { docsGenSkill } from './docs-gen.js';
|
|
17
|
+
import { refactorSkill } from './refactor.js';
|
|
18
|
+
// M22 — Developer Experience Skills
|
|
19
|
+
export { onboardingSkill } from './onboarding.js';
|
|
20
|
+
export { commitComposerSkill } from './commit-composer.js';
|
|
21
|
+
export { contextMemorySkill } from './context-memory.js';
|
|
22
|
+
export { multiRepoSkill } from './multi-repo.js';
|
|
23
|
+
export { cliInteractiveSkill } from './cli-interactive.js';
|
|
24
|
+
import { pipelineAwareSkill } from './pipeline-aware.js';
|
|
25
|
+
import { depAuditSkill } from './dep-audit.js';
|
|
26
|
+
import { perfProfileSkill } from './perf-profile.js';
|
|
27
|
+
import { containerAdvisorSkill } from './container-advisor.js';
|
|
28
|
+
import { deployProvisionSkill } from './deploy-provision.js';
|
|
29
|
+
import { onboardingSkill } from './onboarding.js';
|
|
30
|
+
import { commitComposerSkill } from './commit-composer.js';
|
|
31
|
+
import { contextMemorySkill } from './context-memory.js';
|
|
32
|
+
import { multiRepoSkill } from './multi-repo.js';
|
|
33
|
+
import { cliInteractiveSkill } from './cli-interactive.js';
|
|
34
|
+
export const CORE_DEV_SKILLS = [
|
|
35
|
+
autoFixSkill,
|
|
36
|
+
codeReviewSkill,
|
|
37
|
+
testGenSkill,
|
|
38
|
+
docsGenSkill,
|
|
39
|
+
refactorSkill,
|
|
40
|
+
];
|
|
41
|
+
export const DEVOPS_SKILLS = [
|
|
42
|
+
pipelineAwareSkill,
|
|
43
|
+
depAuditSkill,
|
|
44
|
+
perfProfileSkill,
|
|
45
|
+
containerAdvisorSkill,
|
|
46
|
+
deployProvisionSkill,
|
|
47
|
+
];
|
|
48
|
+
export const DEV_EXPERIENCE_SKILLS = [
|
|
49
|
+
onboardingSkill,
|
|
50
|
+
commitComposerSkill,
|
|
51
|
+
contextMemorySkill,
|
|
52
|
+
multiRepoSkill,
|
|
53
|
+
cliInteractiveSkill,
|
|
54
|
+
];
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,sBAAsB;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,oCAAoC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY;IACZ,eAAe;IACf,YAAY;IACZ,YAAY;IACZ,aAAa;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,kBAAkB;IAClB,aAAa;IACb,gBAAgB;IAChB,qBAAqB;IACrB,oBAAoB;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,eAAe;IACf,mBAAmB;IACnB,kBAAkB;IAClB,cAAc;IACd,mBAAmB;CACpB,CAAC"}
|