@nexagent-cli/cli 0.7.2 → 0.8.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/commands/sophie.d.ts +2 -0
- package/dist/commands/sophie.d.ts.map +1 -1
- package/dist/commands/sophie.js +3 -53
- package/dist/commands/sophie.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/profiles/sophie.d.ts.map +1 -1
- package/dist/profiles/sophie.js +1 -0
- package/dist/profiles/sophie.js.map +1 -1
- package/dist/runtime/workflow.d.ts +2 -0
- package/dist/runtime/workflow.d.ts.map +1 -1
- package/dist/runtime/workflow.js.map +1 -1
- package/dist/workflows/index.d.ts.map +1 -1
- package/dist/workflows/index.js +8 -0
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/persistence/index.d.ts +5 -0
- package/dist/workflows/persistence/index.d.ts.map +1 -0
- package/dist/workflows/persistence/index.js +8 -0
- package/dist/workflows/persistence/index.js.map +1 -0
- package/dist/workflows/persistence/phase-gates.d.ts +17 -0
- package/dist/workflows/persistence/phase-gates.d.ts.map +1 -0
- package/dist/workflows/persistence/phase-gates.js +55 -0
- package/dist/workflows/persistence/phase-gates.js.map +1 -0
- package/dist/workflows/persistence/status-memory.d.ts +15 -0
- package/dist/workflows/persistence/status-memory.d.ts.map +1 -0
- package/dist/workflows/persistence/status-memory.js +87 -0
- package/dist/workflows/persistence/status-memory.js.map +1 -0
- package/dist/workflows/persistence/workflow-snapshot.d.ts +20 -0
- package/dist/workflows/persistence/workflow-snapshot.d.ts.map +1 -0
- package/dist/workflows/persistence/workflow-snapshot.js +83 -0
- package/dist/workflows/persistence/workflow-snapshot.js.map +1 -0
- package/dist/workflows/persistence/workflow-store.d.ts +16 -0
- package/dist/workflows/persistence/workflow-store.d.ts.map +1 -0
- package/dist/workflows/persistence/workflow-store.js +108 -0
- package/dist/workflows/persistence/workflow-store.js.map +1 -0
- package/dist/workflows/sophie/council.d.ts +3 -0
- package/dist/workflows/sophie/council.d.ts.map +1 -0
- package/dist/workflows/sophie/council.js +264 -0
- package/dist/workflows/sophie/council.js.map +1 -0
- package/dist/workflows/sophie/review.d.ts +3 -0
- package/dist/workflows/sophie/review.d.ts.map +1 -0
- package/dist/workflows/sophie/review.js +245 -0
- package/dist/workflows/sophie/review.js.map +1 -0
- package/dist/workflows/sophie/skill.d.ts +3 -0
- package/dist/workflows/sophie/skill.d.ts.map +1 -0
- package/dist/workflows/sophie/skill.js +193 -0
- package/dist/workflows/sophie/skill.js.map +1 -0
- package/dist/workflows/sophie/status.d.ts +3 -0
- package/dist/workflows/sophie/status.d.ts.map +1 -0
- package/dist/workflows/sophie/status.js +313 -0
- package/dist/workflows/sophie/status.js.map +1 -0
- package/package.json +1 -2
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { readdir, readFile, stat } from 'node:fs/promises';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { saveWorkflowRun, createSnapshot, saveMarkdownReport } from '../persistence/index.js';
|
|
4
|
+
export async function reviewWorkflow(ctx) {
|
|
5
|
+
const target = ctx.input.trim() || ctx.cwd;
|
|
6
|
+
const resolved = resolve(target);
|
|
7
|
+
let targetStat;
|
|
8
|
+
try {
|
|
9
|
+
targetStat = await stat(resolved);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return {
|
|
13
|
+
success: false,
|
|
14
|
+
data: {},
|
|
15
|
+
messages: [`Error: Target path does not exist: ${resolved}`],
|
|
16
|
+
recommendations: ['Provide a valid file path or run without a target to review the current directory.'],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const notes = [];
|
|
20
|
+
let filesReviewed = 0;
|
|
21
|
+
let totalLines = 0;
|
|
22
|
+
const sourceFiles = [];
|
|
23
|
+
// Walk source files (limit depth and count)
|
|
24
|
+
const walk = async (dir, depth) => {
|
|
25
|
+
if (depth > 3 || filesReviewed > 50)
|
|
26
|
+
return;
|
|
27
|
+
try {
|
|
28
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
29
|
+
for (const e of entries) {
|
|
30
|
+
if (e.isDirectory()) {
|
|
31
|
+
const lower = e.name.toLowerCase();
|
|
32
|
+
if (lower === 'node_modules' || lower === '.git' || lower === 'dist' || lower === 'build' || lower === 'coverage')
|
|
33
|
+
continue;
|
|
34
|
+
await walk(join(dir, e.name), depth + 1);
|
|
35
|
+
}
|
|
36
|
+
else if (/\.(ts|tsx|js|jsx|py|go|rs)$/.test(e.name)) {
|
|
37
|
+
const fp = join(dir, e.name);
|
|
38
|
+
sourceFiles.push(fp);
|
|
39
|
+
filesReviewed++;
|
|
40
|
+
try {
|
|
41
|
+
const content = await readFile(fp, 'utf-8');
|
|
42
|
+
totalLines += content.split('\n').length;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// ignore unreadable
|
|
46
|
+
}
|
|
47
|
+
if (filesReviewed > 50)
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// ignore unreadable
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
if (targetStat.isDirectory()) {
|
|
57
|
+
await walk(resolved, 0);
|
|
58
|
+
}
|
|
59
|
+
else if (/\.(ts|tsx|js|jsx|py|go|rs)$/.test(resolved)) {
|
|
60
|
+
sourceFiles.push(resolved);
|
|
61
|
+
filesReviewed = 1;
|
|
62
|
+
try {
|
|
63
|
+
const content = await readFile(resolved, 'utf-8');
|
|
64
|
+
totalLines = content.split('\n').length;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// ignore
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Analyze package.json if present
|
|
71
|
+
let pkg = null;
|
|
72
|
+
const pkgPath = targetStat.isDirectory() ? join(resolved, 'package.json') : join(resolve(resolved, '..'), 'package.json');
|
|
73
|
+
try {
|
|
74
|
+
const raw = await readFile(pkgPath, 'utf-8');
|
|
75
|
+
pkg = JSON.parse(raw);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
pkg = null;
|
|
79
|
+
}
|
|
80
|
+
const scripts = pkg && typeof pkg.scripts === 'object' && pkg.scripts !== null
|
|
81
|
+
? pkg.scripts : {};
|
|
82
|
+
// Architecture notes
|
|
83
|
+
const architectureNotes = [];
|
|
84
|
+
if (pkg) {
|
|
85
|
+
const deps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
|
|
86
|
+
if (deps.express || deps.fastify || deps.koa)
|
|
87
|
+
architectureNotes.push('Backend framework detected — verify route organization follows domain-driven structure.');
|
|
88
|
+
if (deps.react || deps.vue)
|
|
89
|
+
architectureNotes.push('Frontend framework detected — check component hierarchy and state management boundaries.');
|
|
90
|
+
if (deps.typescript)
|
|
91
|
+
architectureNotes.push('TypeScript project — ensure strict mode is enabled and types are exported from entry points.');
|
|
92
|
+
if (deps.zod || deps.joi || deps.yup)
|
|
93
|
+
architectureNotes.push('Schema validation library present — validate schemas are shared between API and client layers.');
|
|
94
|
+
if (deps.prisma || deps.mongoose || deps.typeorm)
|
|
95
|
+
architectureNotes.push('ORM/ODM detected — review migration strategy and connection pooling config.');
|
|
96
|
+
}
|
|
97
|
+
if (filesReviewed > 30)
|
|
98
|
+
architectureNotes.push('Large codebase (>30 files) — consider modularizing into packages or micro-frontends.');
|
|
99
|
+
if (filesReviewed > 0 && totalLines / filesReviewed > 300)
|
|
100
|
+
architectureNotes.push('High average file size — some modules may be doing too much; consider splitting.');
|
|
101
|
+
// Risk points
|
|
102
|
+
const riskPoints = [];
|
|
103
|
+
if (!scripts.test)
|
|
104
|
+
riskPoints.push('No test script — untested changes risk regressions.');
|
|
105
|
+
if (!scripts.build)
|
|
106
|
+
riskPoints.push('No build script — release artifacts may be inconsistent.');
|
|
107
|
+
if (!scripts.lint)
|
|
108
|
+
riskPoints.push('No lint script — style inconsistencies will accumulate.');
|
|
109
|
+
if (!pkg?.private && !pkg?.files)
|
|
110
|
+
riskPoints.push('Package may publish unintended files — define a "files" array.');
|
|
111
|
+
if (sourceFiles.some(f => f.includes('.env')) || sourceFiles.some(f => f.includes('secret'))) {
|
|
112
|
+
riskPoints.push('Potential secret leakage — review for hardcoded credentials or .env files in source.');
|
|
113
|
+
}
|
|
114
|
+
// Test coverage notes
|
|
115
|
+
const testCoverageNotes = [];
|
|
116
|
+
const hasTestDir = targetStat.isDirectory()
|
|
117
|
+
? (await readdir(resolved).catch(() => [])).some(n => /test|spec|__tests__/.test(n))
|
|
118
|
+
: false;
|
|
119
|
+
if (!scripts.test && !hasTestDir) {
|
|
120
|
+
testCoverageNotes.push('No test infrastructure detected — add a test runner and initial coverage.');
|
|
121
|
+
}
|
|
122
|
+
else if (scripts.test) {
|
|
123
|
+
testCoverageNotes.push(`Test script found: "${scripts.test}" — verify coverage thresholds are enforced in CI.`);
|
|
124
|
+
}
|
|
125
|
+
if (!scripts['test:ci'] && !scripts['test:coverage']) {
|
|
126
|
+
testCoverageNotes.push('No CI-specific test script — consider adding test:ci for headless runner execution.');
|
|
127
|
+
}
|
|
128
|
+
// Missing blockers
|
|
129
|
+
const missingBlockers = [];
|
|
130
|
+
if (!pkg)
|
|
131
|
+
missingBlockers.push('No package.json — project metadata and dependency management missing.');
|
|
132
|
+
else {
|
|
133
|
+
if (!pkg.engines)
|
|
134
|
+
missingBlockers.push('No "engines" field — runtime compatibility undefined.');
|
|
135
|
+
if (!pkg.license)
|
|
136
|
+
missingBlockers.push('No license field — legal risk for open-source distribution.');
|
|
137
|
+
}
|
|
138
|
+
const hasCiConfig = targetStat.isDirectory()
|
|
139
|
+
? (await readdir(resolved).catch(() => [])).some(n => n === '.github')
|
|
140
|
+
: false;
|
|
141
|
+
if (!hasCiConfig)
|
|
142
|
+
missingBlockers.push('No CI configuration — automated testing and deployment missing.');
|
|
143
|
+
// Recommended next patch
|
|
144
|
+
const recommendedNextPatch = missingBlockers.length > 0
|
|
145
|
+
? `Address blocker: ${missingBlockers[0]}`
|
|
146
|
+
: riskPoints.length > 0
|
|
147
|
+
? `Mitigate risk: ${riskPoints[0]}`
|
|
148
|
+
: 'Refactor: extract shared utilities into a dedicated module.';
|
|
149
|
+
const review = {
|
|
150
|
+
target: resolved,
|
|
151
|
+
filesReviewed,
|
|
152
|
+
totalLines,
|
|
153
|
+
notes,
|
|
154
|
+
architectureNotes,
|
|
155
|
+
riskPoints,
|
|
156
|
+
testCoverageNotes,
|
|
157
|
+
missingBlockers,
|
|
158
|
+
recommendedNextPatch,
|
|
159
|
+
};
|
|
160
|
+
// Handle save mode
|
|
161
|
+
if (ctx.flags.save) {
|
|
162
|
+
if (ctx.flags.dryRun) {
|
|
163
|
+
return {
|
|
164
|
+
success: true,
|
|
165
|
+
data: { ...review, wouldSave: true },
|
|
166
|
+
messages: ['(dry-run) Would save review to workflow store and generate report.'],
|
|
167
|
+
recommendations: [recommendedNextPatch],
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
const run = await saveWorkflowRun({
|
|
171
|
+
workflow: 'review',
|
|
172
|
+
profile: 'sophie',
|
|
173
|
+
input: ctx.input,
|
|
174
|
+
success: true,
|
|
175
|
+
data: review,
|
|
176
|
+
recommendations: [recommendedNextPatch],
|
|
177
|
+
});
|
|
178
|
+
const snapshot = createSnapshot(run, ctx.cwd, [], ['review', 'auto']);
|
|
179
|
+
const reportPath = await saveMarkdownReport(ctx.cwd, snapshot);
|
|
180
|
+
if (ctx.flags.json) {
|
|
181
|
+
return {
|
|
182
|
+
success: true,
|
|
183
|
+
data: { ...review, saved: true, runId: run.id, reportPath },
|
|
184
|
+
messages: [],
|
|
185
|
+
recommendations: [recommendedNextPatch],
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
const messages = [];
|
|
189
|
+
messages.push(`🔍 Review target: ${resolved}`);
|
|
190
|
+
messages.push(` Files reviewed: ${filesReviewed} | Total lines: ${totalLines}`);
|
|
191
|
+
messages.push('');
|
|
192
|
+
messages.push(`💾 Saved review (run: ${run.id})`);
|
|
193
|
+
messages.push(`📝 Report: ${reportPath}`);
|
|
194
|
+
messages.push('');
|
|
195
|
+
messages.push(`Recommended next patch: ${recommendedNextPatch}`);
|
|
196
|
+
return {
|
|
197
|
+
success: true,
|
|
198
|
+
data: review,
|
|
199
|
+
messages,
|
|
200
|
+
recommendations: [recommendedNextPatch],
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
if (ctx.flags.json) {
|
|
204
|
+
return {
|
|
205
|
+
success: true,
|
|
206
|
+
data: review,
|
|
207
|
+
messages: [],
|
|
208
|
+
recommendations: [recommendedNextPatch],
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
const messages = [];
|
|
212
|
+
messages.push(`🔍 Review target: ${resolved}`);
|
|
213
|
+
messages.push(` Files reviewed: ${filesReviewed} | Total lines: ${totalLines}`);
|
|
214
|
+
messages.push('');
|
|
215
|
+
if (architectureNotes.length) {
|
|
216
|
+
messages.push('Architecture notes:');
|
|
217
|
+
architectureNotes.forEach(n => messages.push(` 🏗 ${n}`));
|
|
218
|
+
messages.push('');
|
|
219
|
+
}
|
|
220
|
+
if (riskPoints.length) {
|
|
221
|
+
messages.push('Risk points:');
|
|
222
|
+
riskPoints.forEach(r => messages.push(` ⚠️ ${r}`));
|
|
223
|
+
messages.push('');
|
|
224
|
+
}
|
|
225
|
+
if (testCoverageNotes.length) {
|
|
226
|
+
messages.push('Test coverage notes:');
|
|
227
|
+
testCoverageNotes.forEach(t => messages.push(` 🧪 ${t}`));
|
|
228
|
+
messages.push('');
|
|
229
|
+
}
|
|
230
|
+
if (missingBlockers.length) {
|
|
231
|
+
messages.push('Missing release blockers:');
|
|
232
|
+
missingBlockers.forEach(b => messages.push(` 🚫 ${b}`));
|
|
233
|
+
messages.push('');
|
|
234
|
+
}
|
|
235
|
+
messages.push(`Recommended next patch: ${recommendedNextPatch}`);
|
|
236
|
+
messages.push('');
|
|
237
|
+
messages.push('Tip: Run `sophie review . --save` to persist this review.');
|
|
238
|
+
return {
|
|
239
|
+
success: true,
|
|
240
|
+
data: review,
|
|
241
|
+
messages,
|
|
242
|
+
recommendations: [recommendedNextPatch],
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/workflows/sophie/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../../src/workflows/sophie/skill.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAoHjF,wBAAsB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CA0GjF"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
const SKILL_TEMPLATES = {
|
|
4
|
+
'code-reviewer': {
|
|
5
|
+
purpose: 'Review code changes for correctness, clarity, and adherence to best practices.',
|
|
6
|
+
inputs: ['file path or diff', 'language context', 'review focus (optional)'],
|
|
7
|
+
tools: [
|
|
8
|
+
{ name: 'file-read', purpose: 'Read source files for review' },
|
|
9
|
+
{ name: 'file-search', purpose: 'Find related files and patterns' },
|
|
10
|
+
],
|
|
11
|
+
executionSteps: [
|
|
12
|
+
'Read the target file(s) or diff',
|
|
13
|
+
'Identify logical errors, edge cases, and style violations',
|
|
14
|
+
'Check for security anti-patterns',
|
|
15
|
+
'Suggest specific improvements with line references',
|
|
16
|
+
'Rate severity: info / warn / critical',
|
|
17
|
+
],
|
|
18
|
+
safety: {
|
|
19
|
+
maxTokens: 8000,
|
|
20
|
+
allowedPaths: ['./src', './lib', './tests'],
|
|
21
|
+
forbiddenCommands: ['rm', 'rmdir', 'del'],
|
|
22
|
+
requireConfirmation: false,
|
|
23
|
+
},
|
|
24
|
+
outputSchema: 'JSON array of { line, severity, message, suggestion }',
|
|
25
|
+
},
|
|
26
|
+
'security-auditor': {
|
|
27
|
+
purpose: 'Scan code for common security vulnerabilities and misconfigurations.',
|
|
28
|
+
inputs: ['project directory', 'scan depth', 'focus areas (optional)'],
|
|
29
|
+
tools: [
|
|
30
|
+
{ name: 'file-read', purpose: 'Read config and source files' },
|
|
31
|
+
{ name: 'file-search', purpose: 'Find secrets, keys, and sensitive patterns' },
|
|
32
|
+
{ name: 'shell-exec', purpose: 'Run dependency audit (npm audit, etc.)' },
|
|
33
|
+
],
|
|
34
|
+
executionSteps: [
|
|
35
|
+
'Scan for hardcoded secrets, API keys, and credentials',
|
|
36
|
+
'Check dependency tree for known CVEs',
|
|
37
|
+
'Review authentication and authorization patterns',
|
|
38
|
+
'Validate input sanitization and output encoding',
|
|
39
|
+
'Produce a risk-ranked findings report',
|
|
40
|
+
],
|
|
41
|
+
safety: {
|
|
42
|
+
maxTokens: 12000,
|
|
43
|
+
allowedPaths: ['./'],
|
|
44
|
+
forbiddenCommands: ['rm', 'rmdir', 'del', 'format', 'mkfs'],
|
|
45
|
+
requireConfirmation: true,
|
|
46
|
+
},
|
|
47
|
+
outputSchema: 'JSON object with { findings: [], riskScore, recommendations: [] }',
|
|
48
|
+
},
|
|
49
|
+
'test-generator': {
|
|
50
|
+
purpose: 'Generate test cases from source code, requirements, or existing tests.',
|
|
51
|
+
inputs: ['source file path', 'test framework', 'coverage target'],
|
|
52
|
+
tools: [
|
|
53
|
+
{ name: 'file-read', purpose: 'Read source and existing tests' },
|
|
54
|
+
{ name: 'file-search', purpose: 'Find related modules and mocks' },
|
|
55
|
+
],
|
|
56
|
+
executionSteps: [
|
|
57
|
+
'Analyze source code for public API surface',
|
|
58
|
+
'Identify edge cases and boundary conditions',
|
|
59
|
+
'Generate unit tests for happy path and error paths',
|
|
60
|
+
'Suggest integration test scenarios',
|
|
61
|
+
'Output test files in the requested framework',
|
|
62
|
+
],
|
|
63
|
+
safety: {
|
|
64
|
+
maxTokens: 10000,
|
|
65
|
+
allowedPaths: ['./src', './tests'],
|
|
66
|
+
forbiddenCommands: ['rm', 'rmdir', 'del'],
|
|
67
|
+
requireConfirmation: false,
|
|
68
|
+
},
|
|
69
|
+
outputSchema: 'JSON array of { testName, description, input, expected, framework }',
|
|
70
|
+
},
|
|
71
|
+
'doc-writer': {
|
|
72
|
+
purpose: 'Write documentation from code comments, types, and structure.',
|
|
73
|
+
inputs: ['source directory', 'output format (markdown/jsdoc)', 'audience level'],
|
|
74
|
+
tools: [
|
|
75
|
+
{ name: 'file-read', purpose: 'Read source and README' },
|
|
76
|
+
{ name: 'file-list', purpose: 'Map project structure' },
|
|
77
|
+
],
|
|
78
|
+
executionSteps: [
|
|
79
|
+
'Map the project structure and entry points',
|
|
80
|
+
'Extract JSDoc/TSDoc comments and type signatures',
|
|
81
|
+
'Generate API reference with usage examples',
|
|
82
|
+
'Write getting-started and contribution guides',
|
|
83
|
+
'Output formatted documentation files',
|
|
84
|
+
],
|
|
85
|
+
safety: {
|
|
86
|
+
maxTokens: 12000,
|
|
87
|
+
allowedPaths: ['./src', './docs', './README.md'],
|
|
88
|
+
forbiddenCommands: ['rm', 'rmdir', 'del'],
|
|
89
|
+
requireConfirmation: false,
|
|
90
|
+
},
|
|
91
|
+
outputSchema: 'Markdown string with sections: Overview, API Reference, Examples, Contributing',
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
export async function skillWorkflow(ctx) {
|
|
95
|
+
const input = ctx.input.trim();
|
|
96
|
+
if (!input) {
|
|
97
|
+
return {
|
|
98
|
+
success: false,
|
|
99
|
+
data: { availableSkills: Object.keys(SKILL_TEMPLATES) },
|
|
100
|
+
messages: [
|
|
101
|
+
'Error: No skill name provided.',
|
|
102
|
+
'',
|
|
103
|
+
'Usage: sophie skill create "<name>"',
|
|
104
|
+
'',
|
|
105
|
+
'Available skill templates:',
|
|
106
|
+
...Object.keys(SKILL_TEMPLATES).map(k => ` • ${k}`),
|
|
107
|
+
],
|
|
108
|
+
recommendations: ['Pick a template name or describe a custom skill.'],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// Parse input: could be "create code-reviewer" or just "code-reviewer"
|
|
112
|
+
const parts = input.split(/\s+/);
|
|
113
|
+
const skillName = parts[parts.length - 1].toLowerCase().replace(/[^a-z0-9-]/g, '-');
|
|
114
|
+
const template = SKILL_TEMPLATES[skillName];
|
|
115
|
+
if (!template) {
|
|
116
|
+
return {
|
|
117
|
+
success: false,
|
|
118
|
+
data: { requested: skillName, available: Object.keys(SKILL_TEMPLATES) },
|
|
119
|
+
messages: [
|
|
120
|
+
`Unknown skill template: "${skillName}"`,
|
|
121
|
+
'',
|
|
122
|
+
'Available templates:',
|
|
123
|
+
...Object.keys(SKILL_TEMPLATES).map(k => ` • ${k}`),
|
|
124
|
+
],
|
|
125
|
+
recommendations: ['Use one of the listed templates, or describe a custom skill.'],
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// Try to detect project context
|
|
129
|
+
let projectName = 'unknown';
|
|
130
|
+
try {
|
|
131
|
+
const pkgRaw = await readFile(join(ctx.cwd, 'package.json'), 'utf-8');
|
|
132
|
+
const pkg = JSON.parse(pkgRaw);
|
|
133
|
+
projectName = pkg.name || 'unknown';
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// ignore
|
|
137
|
+
}
|
|
138
|
+
const skill = {
|
|
139
|
+
skillName,
|
|
140
|
+
purpose: template.purpose || 'Custom skill for project automation.',
|
|
141
|
+
inputs: template.inputs || ['input data'],
|
|
142
|
+
tools: template.tools || [{ name: 'file-read', purpose: 'Read files' }],
|
|
143
|
+
executionSteps: template.executionSteps || ['Analyze input', 'Execute tool chain', 'Produce output'],
|
|
144
|
+
safety: template.safety || {
|
|
145
|
+
maxTokens: 8000,
|
|
146
|
+
allowedPaths: ['./'],
|
|
147
|
+
forbiddenCommands: ['rm', 'rmdir', 'del'],
|
|
148
|
+
requireConfirmation: true,
|
|
149
|
+
},
|
|
150
|
+
outputSchema: template.outputSchema || 'JSON object',
|
|
151
|
+
};
|
|
152
|
+
if (ctx.flags.json) {
|
|
153
|
+
return {
|
|
154
|
+
success: true,
|
|
155
|
+
data: skill,
|
|
156
|
+
messages: [],
|
|
157
|
+
recommendations: [`Save this skill definition to .nexagent/skills/${skillName}.json`],
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const messages = [];
|
|
161
|
+
messages.push(`🛠 Skill: ${skill.skillName}`);
|
|
162
|
+
messages.push(` Project: ${projectName}`);
|
|
163
|
+
messages.push('');
|
|
164
|
+
messages.push(`Purpose:`);
|
|
165
|
+
messages.push(` ${skill.purpose}`);
|
|
166
|
+
messages.push('');
|
|
167
|
+
messages.push('Inputs:');
|
|
168
|
+
skill.inputs.forEach(i => messages.push(` → ${i}`));
|
|
169
|
+
messages.push('');
|
|
170
|
+
messages.push('Tools needed:');
|
|
171
|
+
skill.tools.forEach(t => messages.push(` • ${t.name} — ${t.purpose}`));
|
|
172
|
+
messages.push('');
|
|
173
|
+
messages.push('Execution steps:');
|
|
174
|
+
skill.executionSteps.forEach((s, i) => messages.push(` ${i + 1}. ${s}`));
|
|
175
|
+
messages.push('');
|
|
176
|
+
messages.push('Safety limits:');
|
|
177
|
+
messages.push(` Max tokens: ${skill.safety.maxTokens}`);
|
|
178
|
+
messages.push(` Allowed paths: ${skill.safety.allowedPaths.join(', ')}`);
|
|
179
|
+
messages.push(` Forbidden commands: ${skill.safety.forbiddenCommands.join(', ')}`);
|
|
180
|
+
messages.push(` Require confirmation: ${skill.safety.requireConfirmation ? 'yes' : 'no'}`);
|
|
181
|
+
messages.push('');
|
|
182
|
+
messages.push(`Output schema: ${skill.outputSchema}`);
|
|
183
|
+
return {
|
|
184
|
+
success: true,
|
|
185
|
+
data: skill,
|
|
186
|
+
messages,
|
|
187
|
+
recommendations: [
|
|
188
|
+
`Save to .nexagent/skills/${skillName}.json`,
|
|
189
|
+
`Activate with: sophie skill ${skillName}`,
|
|
190
|
+
],
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/workflows/sophie/skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/workflows/sophie/status.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAmDjF,wBAAsB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAwQlF"}
|