@nella-labs/cli 0.1.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/README.md ADDED
@@ -0,0 +1,79 @@
1
+ # @nella/cli
2
+
3
+ Command-line interface for Nella - reliability layer for coding agents.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install -g @nella/cli
9
+ ```
10
+
11
+ ## Commands
12
+
13
+ ### `nella check`
14
+
15
+ Pre-flight check: can the task proceed?
16
+
17
+ ```bash
18
+ nella check --task tasks/get-user-by-id --repo ./my-project
19
+ ```
20
+
21
+ Returns exit code 0 if OK to proceed, 1 if should refuse.
22
+
23
+ ### `nella validate`
24
+
25
+ Validate changes against task constraints.
26
+
27
+ ```bash
28
+ nella validate --task tasks/get-user-by-id --repo ./my-project --changes changes.json
29
+ ```
30
+
31
+ ### `nella run`
32
+
33
+ Full run: check + validate + metrics.
34
+
35
+ ```bash
36
+ nella run --task tasks/get-user-by-id --repo ./my-project --changes changes.json
37
+ ```
38
+
39
+ ## Options
40
+
41
+ | Option | Short | Description |
42
+ |--------|-------|-------------|
43
+ | `--task` | `-t` | Path to task.yaml or task directory |
44
+ | `--repo` | `-r` | Path to repository |
45
+ | `--changes` | `-c` | Path to changes.json file |
46
+ | `--skip-validation` | | Skip running test/lint/compile |
47
+ | `--skip-prerequisites` | | Skip prerequisite checks |
48
+ | `--json` | | Output as JSON |
49
+ | `--help` | `-h` | Show help |
50
+
51
+ ## Changes File Format
52
+
53
+ The `--changes` option expects a JSON file:
54
+
55
+ ```json
56
+ {
57
+ "files": [
58
+ {
59
+ "path": "src/users.ts",
60
+ "operation": "modify",
61
+ "content": "// file content..."
62
+ }
63
+ ],
64
+ "diff": "optional git diff string"
65
+ }
66
+ ```
67
+
68
+ ## Examples
69
+
70
+ ```bash
71
+ # Check if task can proceed
72
+ nella check -t tasks/get-user-by-id -r ./project
73
+
74
+ # Validate changes (skip running tests)
75
+ nella validate -t tasks/get-user-by-id -r ./project -c changes.json --skip-validation
76
+
77
+ # Full run with JSON output
78
+ nella run -t tasks/get-user-by-id -r ./project -c changes.json --json
79
+ ```
package/dist/cli.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Nella CLI
4
+ *
5
+ * Commands:
6
+ * nella check - Pre-flight check: can the task proceed?
7
+ * nella validate - Validate changes against task constraints
8
+ * nella run - Full run: check + validate + metrics
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG"}
package/dist/cli.js ADDED
@@ -0,0 +1,340 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Nella CLI
5
+ *
6
+ * Commands:
7
+ * nella check - Pre-flight check: can the task proceed?
8
+ * nella validate - Validate changes against task constraints
9
+ * nella run - Full run: check + validate + metrics
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
47
+ const yaml = __importStar(require("js-yaml"));
48
+ const core_1 = require("@nella-labs/core");
49
+ function parseArgs(args) {
50
+ const result = {
51
+ command: "help",
52
+ output: "pretty",
53
+ };
54
+ let i = 0;
55
+ while (i < args.length) {
56
+ const arg = args[i];
57
+ // Commands
58
+ if (arg === "check" || arg === "validate" || arg === "run" || arg === "help") {
59
+ result.command = arg;
60
+ i++;
61
+ continue;
62
+ }
63
+ // Options
64
+ if (arg === "--task" || arg === "-t") {
65
+ result.taskPath = args[++i];
66
+ }
67
+ else if (arg === "--repo" || arg === "-r") {
68
+ result.repoPath = args[++i];
69
+ }
70
+ else if (arg === "--changes" || arg === "-c") {
71
+ result.changesPath = args[++i];
72
+ }
73
+ else if (arg === "--skip-validation") {
74
+ result.skipValidation = true;
75
+ }
76
+ else if (arg === "--skip-prerequisites") {
77
+ result.skipPrerequisites = true;
78
+ }
79
+ else if (arg === "--json") {
80
+ result.output = "json";
81
+ }
82
+ else if (arg === "--help" || arg === "-h") {
83
+ result.command = "help";
84
+ }
85
+ i++;
86
+ }
87
+ return result;
88
+ }
89
+ // =============================================================================
90
+ // Task Loading
91
+ // =============================================================================
92
+ function loadTask(taskPath) {
93
+ const fullPath = path.resolve(taskPath);
94
+ // Check if it's a directory (look for task.yaml inside)
95
+ let yamlPath = fullPath;
96
+ if (fs.statSync(fullPath).isDirectory()) {
97
+ yamlPath = path.join(fullPath, "task.yaml");
98
+ }
99
+ if (!fs.existsSync(yamlPath)) {
100
+ throw new Error(`Task file not found: ${yamlPath}`);
101
+ }
102
+ const content = fs.readFileSync(yamlPath, "utf-8");
103
+ const raw = yaml.load(content);
104
+ // Transform snake_case to camelCase
105
+ return {
106
+ id: raw.id,
107
+ name: raw.name,
108
+ prompt: raw.prompt,
109
+ category: raw.category,
110
+ difficulty: raw.difficulty,
111
+ fixture: raw.fixture,
112
+ constraints: (raw.constraints ?? []).map((c) => ({
113
+ id: c.id,
114
+ description: c.description,
115
+ rule: c.rule,
116
+ filesNotToModify: c.files_not_to_modify,
117
+ forbiddenPatterns: c.forbidden_patterns,
118
+ })),
119
+ validation: raw.validation ?? {},
120
+ expected: {
121
+ filesToModify: raw.expected?.files_to_modify ?? [],
122
+ filesToIgnore: raw.expected?.files_to_ignore ?? [],
123
+ expectedLineCount: raw.expected?.expected_line_count,
124
+ },
125
+ refusalExpected: raw.refusal_expected,
126
+ refusalPatterns: raw.refusal_patterns,
127
+ timeoutSeconds: raw.timeout_seconds,
128
+ };
129
+ }
130
+ function loadChanges(changesPath) {
131
+ const content = fs.readFileSync(changesPath, "utf-8");
132
+ const data = JSON.parse(content);
133
+ // Expect { files: FileChange[] } or { files: FileChange[], diff: string }
134
+ return {
135
+ files: data.files,
136
+ diff: data.diff,
137
+ };
138
+ }
139
+ // =============================================================================
140
+ // Output Formatting
141
+ // =============================================================================
142
+ function formatPretty(result) {
143
+ const lines = [];
144
+ if (result.passed !== undefined) {
145
+ lines.push(result.passed ? "✅ PASSED" : "❌ FAILED");
146
+ lines.push("");
147
+ }
148
+ if (result.refusal) {
149
+ const refusal = result.refusal;
150
+ if (refusal.shouldRefuse) {
151
+ lines.push("🚫 REFUSAL");
152
+ lines.push(` Reason: ${refusal.reason}`);
153
+ lines.push("");
154
+ }
155
+ }
156
+ if (result.constraints) {
157
+ const constraints = result.constraints;
158
+ if (constraints.length > 0) {
159
+ lines.push("Constraints:");
160
+ for (const c of constraints) {
161
+ const icon = c.passed ? "✓" : "✗";
162
+ lines.push(` ${icon} ${c.id}${c.violationDetails ? `: ${c.violationDetails}` : ""}`);
163
+ }
164
+ lines.push("");
165
+ }
166
+ }
167
+ if (result.validation) {
168
+ const val = result.validation;
169
+ lines.push("Validation:");
170
+ if (val.test)
171
+ lines.push(` Test: ${val.test.success ? "✓" : "✗"}`);
172
+ if (val.lint)
173
+ lines.push(` Lint: ${val.lint.success ? "✓" : "✗"}`);
174
+ if (val.compile)
175
+ lines.push(` Compile: ${val.compile.success ? "✓" : "✗"}`);
176
+ lines.push("");
177
+ }
178
+ if (result.scope) {
179
+ const scope = result.scope;
180
+ lines.push(`Scope Creep: ${(scope.scopeCreepRatio * 100).toFixed(1)}%`);
181
+ if (scope.extraFiles.length > 0) {
182
+ lines.push(` Extra files: ${scope.extraFiles.join(", ")}`);
183
+ }
184
+ lines.push("");
185
+ }
186
+ if (result.metrics) {
187
+ const metrics = result.metrics;
188
+ lines.push("Metrics:");
189
+ lines.push(` Scope Creep: ${metrics.scopeCreep}`);
190
+ lines.push(` Constraint Violations: ${metrics.constraintViolations}`);
191
+ lines.push(` Validation Integrity: ${metrics.validationIntegrity}`);
192
+ if (metrics.refusalCorrectness !== null) {
193
+ lines.push(` Refusal Correctness: ${metrics.refusalCorrectness}`);
194
+ }
195
+ }
196
+ if (result.artifacts) {
197
+ const artifacts = result.artifacts;
198
+ lines.push("");
199
+ lines.push(`Artifacts: ${artifacts.runDir}`);
200
+ }
201
+ return lines.join("\n");
202
+ }
203
+ // =============================================================================
204
+ // Commands
205
+ // =============================================================================
206
+ async function runCheckCommand(args) {
207
+ if (!args.taskPath || !args.repoPath) {
208
+ console.error("Error: --task and --repo are required for check command");
209
+ process.exit(1);
210
+ }
211
+ const task = loadTask(args.taskPath);
212
+ const repoPath = path.resolve(args.repoPath);
213
+ const result = (0, core_1.check)(task, repoPath, {
214
+ skipPrerequisites: args.skipPrerequisites,
215
+ });
216
+ if (args.output === "json") {
217
+ console.log(JSON.stringify(result, null, 2));
218
+ }
219
+ else {
220
+ if (result.shouldRefuse) {
221
+ console.log("🚫 SHOULD REFUSE");
222
+ console.log(` Reason: ${result.reason}`);
223
+ if (result.patternsMatched.length > 0) {
224
+ console.log(` Patterns: ${result.patternsMatched.join(", ")}`);
225
+ }
226
+ console.log(` Confidence: ${(result.confidence * 100).toFixed(0)}%`);
227
+ }
228
+ else {
229
+ console.log("✅ OK TO PROCEED");
230
+ }
231
+ }
232
+ process.exit(result.shouldRefuse ? 1 : 0);
233
+ }
234
+ async function runValidateCommand(args) {
235
+ if (!args.taskPath || !args.repoPath || !args.changesPath) {
236
+ console.error("Error: --task, --repo, and --changes are required for validate command");
237
+ process.exit(1);
238
+ }
239
+ const task = loadTask(args.taskPath);
240
+ const repoPath = path.resolve(args.repoPath);
241
+ const changes = loadChanges(args.changesPath);
242
+ const result = await (0, core_1.runTask)(repoPath, task, changes, {
243
+ skipRefusalCheck: true,
244
+ skipValidation: args.skipValidation,
245
+ skipArtifacts: true,
246
+ });
247
+ if (args.output === "json") {
248
+ console.log(JSON.stringify(result, null, 2));
249
+ }
250
+ else {
251
+ console.log(formatPretty(result));
252
+ }
253
+ process.exit(result.passed ? 0 : 1);
254
+ }
255
+ async function runRunCommand(args) {
256
+ if (!args.taskPath || !args.repoPath) {
257
+ console.error("Error: --task and --repo are required for run command");
258
+ process.exit(1);
259
+ }
260
+ const task = loadTask(args.taskPath);
261
+ const repoPath = path.resolve(args.repoPath);
262
+ // Optionally load changes
263
+ let changes;
264
+ if (args.changesPath) {
265
+ changes = loadChanges(args.changesPath);
266
+ }
267
+ const result = await (0, core_1.runTask)(repoPath, task, changes, {
268
+ skipValidation: args.skipValidation,
269
+ skipPrerequisites: args.skipPrerequisites,
270
+ });
271
+ if (args.output === "json") {
272
+ console.log(JSON.stringify(result, null, 2));
273
+ }
274
+ else {
275
+ console.log(formatPretty(result));
276
+ }
277
+ process.exit(result.passed ? 0 : 1);
278
+ }
279
+ function showHelp() {
280
+ console.log(`
281
+ Nella CLI - Reliability layer for coding agents
282
+
283
+ USAGE:
284
+ nella <command> [options]
285
+
286
+ COMMANDS:
287
+ check Pre-flight check: can the task proceed?
288
+ validate Validate changes against task constraints
289
+ run Full run: check + validate + metrics
290
+ help Show this help message
291
+
292
+ OPTIONS:
293
+ --task, -t <path> Path to task.yaml or task directory
294
+ --repo, -r <path> Path to repository
295
+ --changes, -c <path> Path to changes.json file
296
+ --skip-validation Skip running test/lint/compile commands
297
+ --skip-prerequisites Skip prerequisite checks
298
+ --json Output as JSON
299
+ --help, -h Show help
300
+
301
+ EXAMPLES:
302
+ # Check if a task can proceed
303
+ nella check --task tasks/get-user-by-id --repo ./fixture
304
+
305
+ # Validate changes
306
+ nella validate --task tasks/get-user-by-id --repo ./fixture --changes changes.json
307
+
308
+ # Full run with changes
309
+ nella run --task tasks/get-user-by-id --repo ./fixture --changes changes.json
310
+
311
+ # Full run without changes (just check + metrics)
312
+ nella run --task tasks/get-user-by-id --repo ./fixture --json
313
+ `);
314
+ }
315
+ // =============================================================================
316
+ // Main
317
+ // =============================================================================
318
+ async function main() {
319
+ const args = parseArgs(process.argv.slice(2));
320
+ switch (args.command) {
321
+ case "check":
322
+ await runCheckCommand(args);
323
+ break;
324
+ case "validate":
325
+ await runValidateCommand(args);
326
+ break;
327
+ case "run":
328
+ await runRunCommand(args);
329
+ break;
330
+ case "help":
331
+ default:
332
+ showHelp();
333
+ break;
334
+ }
335
+ }
336
+ main().catch((e) => {
337
+ console.error("Error:", e.message);
338
+ process.exit(1);
339
+ });
340
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Nella CLI - Re-exports from core
3
+ */
4
+ export * from "@nella-labs/core";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Nella CLI - Re-exports from core
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("@nella-labs/core"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,mDAAiC"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@nella-labs/cli",
3
+ "version": "0.1.0",
4
+ "description": "Nella CLI - reliability layer for coding agents",
5
+ "type": "commonjs",
6
+ "bin": {
7
+ "nella": "./dist/cli.js"
8
+ },
9
+ "main": "dist/index.js",
10
+ "types": "dist/index.d.ts",
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsc --watch",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "keywords": [
20
+ "coding-agent",
21
+ "ai",
22
+ "cli",
23
+ "reliability",
24
+ "nella"
25
+ ],
26
+ "author": "Nella Labs",
27
+ "license": "MIT",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "https://github.com/nella-labs/nella.git",
31
+ "directory": "packages/cli"
32
+ },
33
+ "publishConfig": {
34
+ "access": "public"
35
+ },
36
+ "dependencies": {
37
+ "@nella-labs/core": "workspace:*",
38
+ "js-yaml": "^4.1.0"
39
+ },
40
+ "devDependencies": {
41
+ "@types/js-yaml": "^4.0.9",
42
+ "@types/node": "^20.0.0",
43
+ "typescript": "^5.3.0"
44
+ }
45
+ }