@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,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Skill: auto-fix
|
|
4
|
+
*
|
|
5
|
+
* Reads VULN-*.md remediation files and reports what patches need to be applied.
|
|
6
|
+
* In apply mode, writes the patches and creates one git commit per VULN.
|
|
7
|
+
*
|
|
8
|
+
* Input (via SkillContext.graph or options in data):
|
|
9
|
+
* - `sentinelDir` — directory containing VULN-*.md files (default: .sentinel_logs)
|
|
10
|
+
* - `apply` — if true, attempt to apply patches via execSync (default: false / dry-run)
|
|
11
|
+
*
|
|
12
|
+
* Output data:
|
|
13
|
+
* - vulns: VulnReport[] — one entry per VULN file found
|
|
14
|
+
* - applied: number — commits created (only in apply mode)
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.autoFixSkill = void 0;
|
|
18
|
+
exports.parseVulnFile = parseVulnFile;
|
|
19
|
+
const node_fs_1 = require("node:fs");
|
|
20
|
+
const node_path_1 = require("node:path");
|
|
21
|
+
const node_child_process_1 = require("node:child_process");
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Helpers
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
const VULN_PATTERN = /^VULN-\d+\.md$/i;
|
|
26
|
+
const SEVERITY_RE = /\*\*severity:?\*\*[:\s]*(.+)/i;
|
|
27
|
+
const TITLE_RE = /^#\s+(.+)/m;
|
|
28
|
+
const AFFECTED_RE = /\*\*affected[^*]*\*\*[:\s]+([^\n]+)/gi;
|
|
29
|
+
const REMEDIATION_RE = /##\s+remediation[\s\S]*?(?=##|$)/i;
|
|
30
|
+
function parseVulnFile(content, filePath) {
|
|
31
|
+
const id = /VULN-\d+/i.exec(filePath)?.[0]?.toUpperCase() ?? 'VULN-???';
|
|
32
|
+
const titleMatch = TITLE_RE.exec(content);
|
|
33
|
+
const title = titleMatch ? titleMatch[1].trim() : id;
|
|
34
|
+
const severityMatch = SEVERITY_RE.exec(content);
|
|
35
|
+
const severity = severityMatch ? severityMatch[1].trim() : 'Unknown';
|
|
36
|
+
const affectedFiles = [];
|
|
37
|
+
let affectedMatch;
|
|
38
|
+
while ((affectedMatch = AFFECTED_RE.exec(content)) !== null) {
|
|
39
|
+
affectedFiles.push(...affectedMatch[1].split(/[,;]+/).map((s) => s.trim()).filter(Boolean));
|
|
40
|
+
}
|
|
41
|
+
const remMatch = REMEDIATION_RE.exec(content);
|
|
42
|
+
const remediation = remMatch ? remMatch[0].replace(/##\s+remediation/i, '').trim() : '';
|
|
43
|
+
return { id, file: filePath, title, severity, affectedFiles, remediation, status: 'pending' };
|
|
44
|
+
}
|
|
45
|
+
function runGitCommit(projectRoot, vuln) {
|
|
46
|
+
(0, node_child_process_1.execSync)(`git -C "${projectRoot}" add -A`, { stdio: 'pipe' });
|
|
47
|
+
(0, node_child_process_1.execSync)(`git -C "${projectRoot}" commit -m "fix(${vuln.id.toLowerCase()}): ${vuln.title.slice(0, 72)}"`, { stdio: 'pipe' });
|
|
48
|
+
}
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Skill
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
exports.autoFixSkill = {
|
|
53
|
+
id: 'auto-fix',
|
|
54
|
+
name: 'Auto-Fix',
|
|
55
|
+
description: 'Reads VULN-*.md files and reports (or applies) security remediations',
|
|
56
|
+
version: '1.0.0',
|
|
57
|
+
enabled: false,
|
|
58
|
+
tags: ['dev', 'security'],
|
|
59
|
+
async execute(ctx) {
|
|
60
|
+
const opts = ctx.graph ?? {};
|
|
61
|
+
const sentinelDir = String(opts['sentinelDir'] ?? '.sentinel_logs');
|
|
62
|
+
const apply = Boolean(opts['apply'] ?? false);
|
|
63
|
+
const sentinelPath = (0, node_path_1.resolve)(ctx.projectRoot, sentinelDir);
|
|
64
|
+
if (!(0, node_fs_1.existsSync)(sentinelPath)) {
|
|
65
|
+
return {
|
|
66
|
+
success: true,
|
|
67
|
+
output: `No sentinel directory found at ${sentinelPath} — nothing to fix.`,
|
|
68
|
+
data: { vulns: [], applied: 0, skipped: 0, errors: 0, dryRun: !apply },
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const vulnFiles = (0, node_fs_1.readdirSync)(sentinelPath)
|
|
72
|
+
.filter((f) => VULN_PATTERN.test(f))
|
|
73
|
+
.sort();
|
|
74
|
+
if (vulnFiles.length === 0) {
|
|
75
|
+
return {
|
|
76
|
+
success: true,
|
|
77
|
+
output: `No VULN-*.md files found in ${sentinelPath}.`,
|
|
78
|
+
data: { vulns: [], applied: 0, skipped: 0, errors: 0, dryRun: !apply },
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const reports = vulnFiles.map((f) => {
|
|
82
|
+
const filePath = (0, node_path_1.join)(sentinelPath, f);
|
|
83
|
+
return parseVulnFile((0, node_fs_1.readFileSync)(filePath, 'utf-8'), filePath);
|
|
84
|
+
});
|
|
85
|
+
let applied = 0;
|
|
86
|
+
let errors = 0;
|
|
87
|
+
if (apply) {
|
|
88
|
+
for (const vuln of reports) {
|
|
89
|
+
try {
|
|
90
|
+
runGitCommit(ctx.projectRoot, vuln);
|
|
91
|
+
vuln.status = 'applied';
|
|
92
|
+
applied++;
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
vuln.status = 'error';
|
|
96
|
+
vuln.error = err instanceof Error ? err.message : String(err);
|
|
97
|
+
errors++;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const lines = [
|
|
102
|
+
apply ? `🔧 Auto-Fix — Applied mode` : `🔍 Auto-Fix — Dry-run mode`,
|
|
103
|
+
`Found ${reports.length} VULN file(s) in ${sentinelDir}/`,
|
|
104
|
+
'',
|
|
105
|
+
...reports.map((v) => {
|
|
106
|
+
const icon = v.status === 'applied' ? '✅' : v.status === 'error' ? '❌' : '⬜';
|
|
107
|
+
return ` ${icon} ${v.id} [${v.severity}] — ${v.title}`;
|
|
108
|
+
}),
|
|
109
|
+
'',
|
|
110
|
+
apply ? `Applied: ${applied} | Errors: ${errors}` : `Run with apply:true to commit fixes.`,
|
|
111
|
+
];
|
|
112
|
+
return {
|
|
113
|
+
success: errors === 0,
|
|
114
|
+
output: lines.join('\n'),
|
|
115
|
+
data: {
|
|
116
|
+
vulns: reports,
|
|
117
|
+
applied,
|
|
118
|
+
skipped: reports.length - applied - errors,
|
|
119
|
+
errors,
|
|
120
|
+
dryRun: !apply,
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=auto-fix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-fix.js","sourceRoot":"","sources":["../../../src/skills/auto-fix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill: cli-interactive
|
|
3
|
+
*
|
|
4
|
+
* REPL mode descriptor and command dispatcher for `weave chat`.
|
|
5
|
+
* Opens a persistent conversational session with history, command autocompletion
|
|
6
|
+
* and access to all active skills.
|
|
7
|
+
*
|
|
8
|
+
* In practice, the actual REPL loop is handled by the CLI process; this skill
|
|
9
|
+
* provides the session configuration, help text and simulated command dispatch
|
|
10
|
+
* for testing purposes.
|
|
11
|
+
*
|
|
12
|
+
* Input (via SkillContext.graph):
|
|
13
|
+
* - `ctx.graph['command']` — string to simulate a REPL command (for tests)
|
|
14
|
+
* - `ctx.graph['history']` — string[] of previous commands (injectable)
|
|
15
|
+
* - `ctx.graph['skills']` — string[] of active skill IDs for help text
|
|
16
|
+
* - `ctx.graph['sessionId']` — override session ID
|
|
17
|
+
*
|
|
18
|
+
* Output data:
|
|
19
|
+
* - CliInteractiveResult
|
|
20
|
+
*/
|
|
21
|
+
import type { SkillModule } from '../types.js';
|
|
22
|
+
export interface ReplCommand {
|
|
23
|
+
name: string;
|
|
24
|
+
aliases: string[];
|
|
25
|
+
description: string;
|
|
26
|
+
usage: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ReplConfig {
|
|
29
|
+
sessionId: string;
|
|
30
|
+
prompt: string;
|
|
31
|
+
historyFile: string;
|
|
32
|
+
maxHistory: number;
|
|
33
|
+
activeSkills: string[];
|
|
34
|
+
commands: ReplCommand[];
|
|
35
|
+
}
|
|
36
|
+
export interface ReplCommandResult {
|
|
37
|
+
command: string;
|
|
38
|
+
args: string[];
|
|
39
|
+
output: string;
|
|
40
|
+
type: 'info' | 'success' | 'error' | 'skill';
|
|
41
|
+
}
|
|
42
|
+
export interface CliInteractiveResult {
|
|
43
|
+
config: ReplConfig;
|
|
44
|
+
commandResult?: ReplCommandResult;
|
|
45
|
+
helpText: string;
|
|
46
|
+
welcomeMessage: string;
|
|
47
|
+
}
|
|
48
|
+
export declare const REPL_COMMANDS: ReplCommand[];
|
|
49
|
+
export declare function buildHelpText(commands: ReplCommand[], activeSkills: string[]): string;
|
|
50
|
+
export declare function buildWelcomeMessage(sessionId: string): string;
|
|
51
|
+
export declare function parseCommand(input: string): {
|
|
52
|
+
name: string;
|
|
53
|
+
args: string[];
|
|
54
|
+
};
|
|
55
|
+
export declare function dispatchCommand(parsed: {
|
|
56
|
+
name: string;
|
|
57
|
+
args: string[];
|
|
58
|
+
}, config: ReplConfig, history: string[]): ReplCommandResult;
|
|
59
|
+
export declare const cliInteractiveSkill: SkillModule;
|
|
60
|
+
//# sourceMappingURL=cli-interactive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-interactive.d.ts","sourceRoot":"","sources":["../../../src/skills/cli-interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAA6B,MAAM,aAAa,CAAC;AAM1E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;CAC9C;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD,eAAO,MAAM,aAAa,EAAE,WAAW,EA2CtC,CAAC;AAMF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,CAkBrF;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM7D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAG5E;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,EACxC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,MAAM,EAAE,GAChB,iBAAiB,CA2HnB;AAMD,eAAO,MAAM,mBAAmB,EAAE,WA+DjC,CAAC"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Skill: cli-interactive
|
|
4
|
+
*
|
|
5
|
+
* REPL mode descriptor and command dispatcher for `weave chat`.
|
|
6
|
+
* Opens a persistent conversational session with history, command autocompletion
|
|
7
|
+
* and access to all active skills.
|
|
8
|
+
*
|
|
9
|
+
* In practice, the actual REPL loop is handled by the CLI process; this skill
|
|
10
|
+
* provides the session configuration, help text and simulated command dispatch
|
|
11
|
+
* for testing purposes.
|
|
12
|
+
*
|
|
13
|
+
* Input (via SkillContext.graph):
|
|
14
|
+
* - `ctx.graph['command']` — string to simulate a REPL command (for tests)
|
|
15
|
+
* - `ctx.graph['history']` — string[] of previous commands (injectable)
|
|
16
|
+
* - `ctx.graph['skills']` — string[] of active skill IDs for help text
|
|
17
|
+
* - `ctx.graph['sessionId']` — override session ID
|
|
18
|
+
*
|
|
19
|
+
* Output data:
|
|
20
|
+
* - CliInteractiveResult
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.cliInteractiveSkill = exports.REPL_COMMANDS = void 0;
|
|
24
|
+
exports.buildHelpText = buildHelpText;
|
|
25
|
+
exports.buildWelcomeMessage = buildWelcomeMessage;
|
|
26
|
+
exports.parseCommand = parseCommand;
|
|
27
|
+
exports.dispatchCommand = dispatchCommand;
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Built-in REPL commands
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
exports.REPL_COMMANDS = [
|
|
32
|
+
{
|
|
33
|
+
name: 'help',
|
|
34
|
+
aliases: ['?', 'h'],
|
|
35
|
+
description: 'Show available commands and active skills',
|
|
36
|
+
usage: 'help [command]',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'skills',
|
|
40
|
+
aliases: ['ls'],
|
|
41
|
+
description: 'List all active skills',
|
|
42
|
+
usage: 'skills',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'run',
|
|
46
|
+
aliases: ['exec'],
|
|
47
|
+
description: 'Execute a skill by ID',
|
|
48
|
+
usage: 'run <skill-id> [--option value]',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'history',
|
|
52
|
+
aliases: ['hist'],
|
|
53
|
+
description: 'Show command history',
|
|
54
|
+
usage: 'history [n]',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'clear',
|
|
58
|
+
aliases: ['cls'],
|
|
59
|
+
description: 'Clear the terminal screen',
|
|
60
|
+
usage: 'clear',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'session',
|
|
64
|
+
aliases: ['info'],
|
|
65
|
+
description: 'Show current session information',
|
|
66
|
+
usage: 'session',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'quit',
|
|
70
|
+
aliases: ['exit', 'q'],
|
|
71
|
+
description: 'Exit the interactive session',
|
|
72
|
+
usage: 'quit',
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
// Helpers
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
function buildHelpText(commands, activeSkills) {
|
|
79
|
+
const lines = [
|
|
80
|
+
'╔═══════════════════════════════════════╗',
|
|
81
|
+
'║ OpenWeave Interactive (REPL) ║',
|
|
82
|
+
'╚═══════════════════════════════════════╝',
|
|
83
|
+
'',
|
|
84
|
+
'Commands:',
|
|
85
|
+
...commands.map((c) => ` ${c.name.padEnd(12)} ${c.description}`),
|
|
86
|
+
'',
|
|
87
|
+
`Active skills (${activeSkills.length}):`,
|
|
88
|
+
...(activeSkills.length > 0
|
|
89
|
+
? activeSkills.map((s) => ` • ${s}`)
|
|
90
|
+
: [' No skills active — run `weave skills enable <id>`']),
|
|
91
|
+
'',
|
|
92
|
+
'Type `help <command>` for detailed usage.',
|
|
93
|
+
'Type `quit` or press Ctrl+C to exit.',
|
|
94
|
+
];
|
|
95
|
+
return lines.join('\n');
|
|
96
|
+
}
|
|
97
|
+
function buildWelcomeMessage(sessionId) {
|
|
98
|
+
return [
|
|
99
|
+
`🧠 OpenWeave v0.9.0 — Interactive Mode`,
|
|
100
|
+
`Session: ${sessionId}`,
|
|
101
|
+
`Type 'help' for commands, 'quit' to exit.`,
|
|
102
|
+
].join('\n');
|
|
103
|
+
}
|
|
104
|
+
function parseCommand(input) {
|
|
105
|
+
const parts = input.trim().split(/\s+/);
|
|
106
|
+
return { name: parts[0]?.toLowerCase() ?? '', args: parts.slice(1) };
|
|
107
|
+
}
|
|
108
|
+
function dispatchCommand(parsed, config, history) {
|
|
109
|
+
const { name, args } = parsed;
|
|
110
|
+
// Resolve aliases
|
|
111
|
+
const cmd = config.commands.find((c) => c.name === name || c.aliases.includes(name));
|
|
112
|
+
if (!cmd) {
|
|
113
|
+
return {
|
|
114
|
+
command: name,
|
|
115
|
+
args,
|
|
116
|
+
output: `Unknown command: "${name}". Type 'help' for available commands.`,
|
|
117
|
+
type: 'error',
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
switch (cmd.name) {
|
|
121
|
+
case 'help': {
|
|
122
|
+
if (args.length > 0) {
|
|
123
|
+
const target = config.commands.find((c) => c.name === args[0] || c.aliases.includes(args[0] ?? ''));
|
|
124
|
+
if (target) {
|
|
125
|
+
return {
|
|
126
|
+
command: name,
|
|
127
|
+
args,
|
|
128
|
+
output: `${target.name} — ${target.description}\nUsage: ${target.usage}\nAliases: ${target.aliases.join(', ')}`,
|
|
129
|
+
type: 'info',
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
command: name,
|
|
135
|
+
args,
|
|
136
|
+
output: buildHelpText(config.commands, config.activeSkills),
|
|
137
|
+
type: 'info',
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
case 'skills':
|
|
141
|
+
return {
|
|
142
|
+
command: name,
|
|
143
|
+
args,
|
|
144
|
+
output: config.activeSkills.length > 0
|
|
145
|
+
? `Active skills:\n${config.activeSkills.map((s) => ` • ${s}`).join('\n')}`
|
|
146
|
+
: 'No skills active. Run `weave skills enable <id>` to activate skills.',
|
|
147
|
+
type: 'info',
|
|
148
|
+
};
|
|
149
|
+
case 'history': {
|
|
150
|
+
const n = parseInt(args[0] ?? '10', 10);
|
|
151
|
+
const slice = history.slice(-n);
|
|
152
|
+
return {
|
|
153
|
+
command: name,
|
|
154
|
+
args,
|
|
155
|
+
output: slice.length > 0
|
|
156
|
+
? slice.map((h, i) => ` ${i + 1}. ${h}`).join('\n')
|
|
157
|
+
: 'No history yet.',
|
|
158
|
+
type: 'info',
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
case 'session':
|
|
162
|
+
return {
|
|
163
|
+
command: name,
|
|
164
|
+
args,
|
|
165
|
+
output: `Session ID: ${config.sessionId}\nActive skills: ${config.activeSkills.length}\nHistory entries: ${history.length}`,
|
|
166
|
+
type: 'info',
|
|
167
|
+
};
|
|
168
|
+
case 'run': {
|
|
169
|
+
const skillId = args[0];
|
|
170
|
+
if (!skillId) {
|
|
171
|
+
return {
|
|
172
|
+
command: name,
|
|
173
|
+
args,
|
|
174
|
+
output: 'Usage: run <skill-id>',
|
|
175
|
+
type: 'error',
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
if (!config.activeSkills.includes(skillId)) {
|
|
179
|
+
return {
|
|
180
|
+
command: name,
|
|
181
|
+
args,
|
|
182
|
+
output: `Skill "${skillId}" is not active. Enable it with: weave skills enable ${skillId}`,
|
|
183
|
+
type: 'error',
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
command: name,
|
|
188
|
+
args,
|
|
189
|
+
output: `Running skill "${skillId}"… [dispatched to SkillRegistry]`,
|
|
190
|
+
type: 'skill',
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
case 'clear':
|
|
194
|
+
return {
|
|
195
|
+
command: name,
|
|
196
|
+
args,
|
|
197
|
+
output: '\x1B[2J\x1B[0f', // ANSI clear screen
|
|
198
|
+
type: 'success',
|
|
199
|
+
};
|
|
200
|
+
case 'quit':
|
|
201
|
+
return {
|
|
202
|
+
command: name,
|
|
203
|
+
args,
|
|
204
|
+
output: 'Goodbye! 👋',
|
|
205
|
+
type: 'success',
|
|
206
|
+
};
|
|
207
|
+
default:
|
|
208
|
+
return {
|
|
209
|
+
command: name,
|
|
210
|
+
args,
|
|
211
|
+
output: `Command "${cmd.name}" is registered but not yet implemented.`,
|
|
212
|
+
type: 'info',
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// ---------------------------------------------------------------------------
|
|
217
|
+
// Skill
|
|
218
|
+
// ---------------------------------------------------------------------------
|
|
219
|
+
exports.cliInteractiveSkill = {
|
|
220
|
+
id: 'cli-interactive',
|
|
221
|
+
name: 'CLI Interactive (REPL)',
|
|
222
|
+
description: 'Provides configuration and command dispatch for the `weave chat` REPL mode with persistent history and skill access.',
|
|
223
|
+
version: '1.0.0',
|
|
224
|
+
enabled: true,
|
|
225
|
+
tags: ['cli', 'repl', 'dx', 'interactive'],
|
|
226
|
+
async execute(ctx) {
|
|
227
|
+
const opts = (ctx.graph ?? {});
|
|
228
|
+
const sessionId = opts['sessionId'] ??
|
|
229
|
+
ctx.session?.id ??
|
|
230
|
+
`repl-${Date.now()}`;
|
|
231
|
+
const activeSkills = Array.isArray(opts['skills'])
|
|
232
|
+
? opts['skills']
|
|
233
|
+
: [];
|
|
234
|
+
const history = Array.isArray(opts['history'])
|
|
235
|
+
? opts['history']
|
|
236
|
+
: [];
|
|
237
|
+
const config = {
|
|
238
|
+
sessionId,
|
|
239
|
+
prompt: 'weave> ',
|
|
240
|
+
historyFile: '.weave/.repl_history',
|
|
241
|
+
maxHistory: 500,
|
|
242
|
+
activeSkills,
|
|
243
|
+
commands: exports.REPL_COMMANDS,
|
|
244
|
+
};
|
|
245
|
+
const helpText = buildHelpText(exports.REPL_COMMANDS, activeSkills);
|
|
246
|
+
const welcomeMessage = buildWelcomeMessage(sessionId);
|
|
247
|
+
const result = {
|
|
248
|
+
config,
|
|
249
|
+
helpText,
|
|
250
|
+
welcomeMessage,
|
|
251
|
+
};
|
|
252
|
+
// If a command was provided, simulate dispatch
|
|
253
|
+
const rawCommand = opts['command'];
|
|
254
|
+
if (rawCommand) {
|
|
255
|
+
const parsed = parseCommand(rawCommand);
|
|
256
|
+
const cmdResult = dispatchCommand(parsed, config, history);
|
|
257
|
+
result.commandResult = cmdResult;
|
|
258
|
+
return {
|
|
259
|
+
success: cmdResult.type !== 'error',
|
|
260
|
+
output: cmdResult.output,
|
|
261
|
+
data: result,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
success: true,
|
|
266
|
+
output: welcomeMessage,
|
|
267
|
+
data: result,
|
|
268
|
+
};
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
//# sourceMappingURL=cli-interactive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-interactive.js","sourceRoot":"","sources":["../../../src/skills/cli-interactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill: code-review
|
|
3
|
+
*
|
|
4
|
+
* Performs static code review on the current `git diff HEAD`.
|
|
5
|
+
* No LLM required — pure pattern matching on diffs.
|
|
6
|
+
*
|
|
7
|
+
* Checks:
|
|
8
|
+
* - console.log / console.error / debugger statements
|
|
9
|
+
* - TODO / FIXME / HACK / XXX annotations
|
|
10
|
+
* - Lines exceeding 120 characters
|
|
11
|
+
* - Hard-coded secret patterns (password=, api_key=, SECRET, TOKEN in assignments)
|
|
12
|
+
* - Missing `await` on common async patterns
|
|
13
|
+
* - `@ts-ignore` / `@ts-nocheck` suppressions
|
|
14
|
+
* - `any` type annotations in TypeScript
|
|
15
|
+
* - Empty catch blocks
|
|
16
|
+
*/
|
|
17
|
+
import type { SkillModule } from '../types.js';
|
|
18
|
+
export type ReviewCategory = 'debug' | 'note' | 'style' | 'security' | 'performance' | 'type-safety';
|
|
19
|
+
export type ReviewSeverity = 'error' | 'warning' | 'info';
|
|
20
|
+
export interface ReviewComment {
|
|
21
|
+
file: string;
|
|
22
|
+
line: number;
|
|
23
|
+
category: ReviewCategory;
|
|
24
|
+
severity: ReviewSeverity;
|
|
25
|
+
message: string;
|
|
26
|
+
snippet: string;
|
|
27
|
+
}
|
|
28
|
+
export interface CodeReviewResult {
|
|
29
|
+
diff: string;
|
|
30
|
+
comments: ReviewComment[];
|
|
31
|
+
summary: {
|
|
32
|
+
errors: number;
|
|
33
|
+
warnings: number;
|
|
34
|
+
infos: number;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export declare function parseDiff(diff: string): ReviewComment[];
|
|
38
|
+
export declare const codeReviewSkill: SkillModule;
|
|
39
|
+
//# sourceMappingURL=code-review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-review.d.ts","sourceRoot":"","sources":["../../../src/skills/code-review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,WAAW,EAA6B,MAAM,aAAa,CAAC;AAM1E,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC;AACrG,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D;AAoED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CA0DvD;AA4BD,eAAO,MAAM,eAAe,EAAE,WA4D7B,CAAC"}
|