@uvrn/cli 1.0.1 → 1.0.3

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 CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Command-line interface for the UVRN Delta Engine. Transform data bundles into verifiable receipts using deterministic comparison and canonical hashing.
4
4
 
5
+ **Disclaimer:** UVRN is in Alpha testing. The engine measures whether your sources agree with each other — not whether they’re correct. Final trust of output rests with the user. Use at your own risk. Have fun.
6
+
5
7
  ## Install
6
8
 
7
9
  ### Global Installation (Recommended)
@@ -10,10 +12,10 @@ Command-line interface for the UVRN Delta Engine. Transform data bundles into ve
10
12
  npm install -g @uvrn/cli
11
13
  ```
12
14
 
13
- After installation, the `delta-engine` command will be available globally:
15
+ After installation, the `uvrn` command will be available globally (the `delta-engine` alias also works):
14
16
 
15
17
  ```bash
16
- delta-engine --version
18
+ uvrn --version
17
19
  ```
18
20
 
19
21
  ### Local Installation
@@ -25,7 +27,7 @@ npm install @uvrn/cli
25
27
  Then use with npx:
26
28
 
27
29
  ```bash
28
- npx delta-engine --version
30
+ npx uvrn --version
29
31
  ```
30
32
 
31
33
  ## Quick Start
@@ -331,6 +333,8 @@ MIT
331
333
 
332
334
  ## Links
333
335
 
336
+ **Open source:** Source code and issues: [GitHub (uvrn-packages)](https://github.com/UVRN-org/uvrn-packages). Project landing: [UVRN](https://github.com/UVRN-org/uvrn).
337
+
334
338
  - [Repository](https://github.com/UVRN-org/uvrn-packages) — monorepo (this package: `uvrn-cli`)
335
339
  - [CLI Guide](docs/CLI_GUIDE.md) — full command reference
336
340
  - [@uvrn/core](https://www.npmjs.com/package/@uvrn/core) — core engine library
package/package.json CHANGED
@@ -1,11 +1,15 @@
1
1
  {
2
2
  "name": "@uvrn/cli",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
4
7
  "description": "UVRN CLI — bundle to receipt",
5
8
  "main": "dist/index.js",
6
9
  "types": "dist/index.d.ts",
7
10
  "bin": {
8
- "uvrn": "dist/cli.js"
11
+ "uvrn": "dist/cli.js",
12
+ "delta-engine": "dist/cli.js"
9
13
  },
10
14
  "keywords": [
11
15
  "uvrn",
@@ -22,7 +26,7 @@
22
26
  "homepage": "https://github.com/UVRN-org/uvrn-packages#readme",
23
27
  "dependencies": {
24
28
  "commander": "^11.1.0",
25
- "@uvrn/core": "1.0.1"
29
+ "@uvrn/core": "^1.0.3"
26
30
  },
27
31
  "devDependencies": {
28
32
  "@types/jest": "^29.5.0",
@@ -37,6 +41,10 @@
37
41
  "engines": {
38
42
  "node": ">=18.0.0"
39
43
  },
44
+ "files": [
45
+ "dist",
46
+ "README.md"
47
+ ],
40
48
  "scripts": {
41
49
  "build": "tsc",
42
50
  "test": "jest",
package/docs/CLI_GUIDE.md DELETED
@@ -1,618 +0,0 @@
1
- # Loosechain Delta Engine CLI - Comprehensive Guide
2
-
3
- ## Table of Contents
4
-
5
- 1. [Introduction](#introduction)
6
- 2. [Installation](#installation)
7
- 3. [Core Concepts](#core-concepts)
8
- 4. [Command Reference](#command-reference)
9
- 5. [Input/Output Formats](#inputoutput-formats)
10
- 6. [Workflows & Examples](#workflows--examples)
11
- 7. [Integration Patterns](#integration-patterns)
12
- 8. [Advanced Usage](#advanced-usage)
13
- 9. [Troubleshooting](#troubleshooting)
14
-
15
- ---
16
-
17
- ## Introduction
18
-
19
- The Loosechain Delta Engine CLI provides command-line access to Layer-1 protocol functionality. It transforms data bundles into cryptographically verifiable receipts without requiring any adapter code or external data sources.
20
-
21
- ### What Does It Do?
22
-
23
- The CLI performs three core operations:
24
-
25
- 1. **Validation** - Verify bundle structure conforms to protocol schema
26
- 2. **Execution** - Run the delta engine and produce a receipt
27
- 3. **Verification** - Replay receipt hash computation to ensure integrity
28
-
29
- ### Protocol Guarantees
30
-
31
- - **Determinism**: Same bundle → same receipt → same hash
32
- - **No External Calls**: Pure computation, no network/file I/O during execution
33
- - **Layer-1 Only**: No adapter logic, no data collection, no enrichment
34
-
35
- ---
36
-
37
- ## Installation
38
-
39
- ### Global Installation
40
-
41
- ```bash
42
- npm install -g @uvrn/cli
43
- ```
44
-
45
- Verify installation:
46
-
47
- ```bash
48
- delta-engine --version
49
- # Output: 1.0.0
50
- ```
51
-
52
- ### Local/Project Installation
53
-
54
- ```bash
55
- npm install @uvrn/cli --save-dev
56
- ```
57
-
58
- Use with npx:
59
-
60
- ```bash
61
- npx delta-engine --version
62
- ```
63
-
64
- ### From Source
65
-
66
- ```bash
67
- git clone https://github.com/uvrn/lc_delta-core.git
68
- cd lc_delta-core
69
- git checkout phase-a/cli-v1
70
- npm install
71
- npm run build --workspace=@uvrn/cli
72
- node packages/uvrn-cli/dist/cli.js --version
73
- ```
74
-
75
- ---
76
-
77
- ## Core Concepts
78
-
79
- ### Bundles
80
-
81
- A **DeltaBundle** is the input to the engine. It contains:
82
-
83
- - Multiple data sources (DataSpec[])
84
- - A claim being verified
85
- - A variance threshold
86
-
87
- ### Receipts
88
-
89
- A **DeltaReceipt** is the output. It contains:
90
-
91
- - Computed deltas (variances)
92
- - Round-by-round analysis
93
- - Consensus outcome
94
- - Cryptographic hash
95
-
96
- ### The Delta Engine
97
-
98
- The engine compares metrics across sources and computes variances. If variance stays within the threshold, the bundle achieves **consensus**. Otherwise, it's **indeterminate**.
99
-
100
- ---
101
-
102
- ## Command Reference
103
-
104
- ### `delta-engine run`
105
-
106
- **Purpose**: Execute the delta engine on a bundle.
107
-
108
- **Syntax**:
109
- ```bash
110
- delta-engine run [bundle] [options]
111
- ```
112
-
113
- **Arguments**:
114
- - `[bundle]` - Path to bundle file, URL, or omit for stdin
115
-
116
- **Options**:
117
- - `-o, --output <file>` - Write receipt to file
118
- - `-q, --quiet` - Suppress console messages
119
- - `-p, --pretty` - Pretty-print JSON
120
-
121
- **Examples**:
122
-
123
- ```bash
124
- # File input
125
- delta-engine run bundle.json
126
-
127
- # Pretty output to file
128
- delta-engine run bundle.json --output receipt.json --pretty
129
-
130
- # Stdin input
131
- cat bundle.json | delta-engine run
132
-
133
- # URL input
134
- delta-engine run https://example.com/data/bundle.json
135
-
136
- # Quiet mode (only JSON output)
137
- delta-engine run bundle.json --quiet
138
- ```
139
-
140
- **Exit Codes**:
141
- - `0` - Success (consensus achieved)
142
- - `1` - Invalid bundle structure
143
- - `2` - Engine error
144
- - `3` - I/O error
145
-
146
- ---
147
-
148
- ### `delta-engine validate`
149
-
150
- **Purpose**: Validate bundle structure without running engine.
151
-
152
- **Syntax**:
153
- ```bash
154
- delta-engine validate [bundle] [options]
155
- ```
156
-
157
- **Arguments**:
158
- - `[bundle]` - Path to bundle file, URL, or omit for stdin
159
-
160
- **Options**:
161
- - `-o, --output <file>` - Write result to file
162
- - `-q, --quiet` - Suppress console messages
163
- - `-p, --pretty` - Pretty-print JSON
164
-
165
- **Examples**:
166
-
167
- ```bash
168
- # Basic validation
169
- delta-engine validate bundle.json
170
-
171
- # With detailed output
172
- delta-engine validate bundle.json --pretty
173
- ```
174
-
175
- **Output Format**:
176
-
177
- Valid bundle:
178
- ```json
179
- {
180
- "valid": true
181
- }
182
- ```
183
-
184
- Invalid bundle:
185
- ```json
186
- {
187
- "valid": false,
188
- "error": "thresholdPct must be > 0 and <= 1"
189
- }
190
- ```
191
-
192
- **Exit Codes**:
193
- - `0` - Bundle is valid
194
- - `1` - Bundle is invalid
195
- - `3` - I/O error
196
-
197
- ---
198
-
199
- ### `delta-engine verify`
200
-
201
- **Purpose**: Verify receipt integrity by recomputing hash.
202
-
203
- **Syntax**:
204
- ```bash
205
- delta-engine verify [receipt] [options]
206
- ```
207
-
208
- **Arguments**:
209
- - `[receipt]` - Path to receipt file, URL, or omit for stdin
210
-
211
- **Options**:
212
- - `-o, --output <file>` - Write result to file
213
- - `-q, --quiet` - Suppress console messages
214
- - `-p, --pretty` - Pretty-print JSON
215
-
216
- **Examples**:
217
-
218
- ```bash
219
- # Verify receipt
220
- delta-engine verify receipt.json
221
-
222
- # Pretty output
223
- delta-engine verify receipt.json --pretty
224
- ```
225
-
226
- **Output Format**:
227
-
228
- Valid receipt:
229
- ```json
230
- {
231
- "verified": true,
232
- "hash": "36247244c63f58e0b2908d2fad115f60677f29b59b67665579b9b6e8db727791"
233
- }
234
- ```
235
-
236
- Invalid receipt:
237
- ```json
238
- {
239
- "verified": false,
240
- "error": "Hash mismatch. Provided: abc..., Computed: def...",
241
- "providedHash": "abc123...",
242
- "recomputedHash": "def456..."
243
- }
244
- ```
245
-
246
- **Exit Codes**:
247
- - `0` - Receipt is valid
248
- - `2` - Receipt verification failed
249
- - `3` - I/O error
250
-
251
- ---
252
-
253
- ## Input/Output Formats
254
-
255
- ### Reading Input
256
-
257
- The CLI supports three input methods:
258
-
259
- #### 1. File Path
260
- ```bash
261
- delta-engine run /path/to/bundle.json
262
- ```
263
-
264
- Both relative and absolute paths work:
265
- ```bash
266
- delta-engine run ./data/bundle.json
267
- delta-engine run ~/bundles/bundle.json
268
- ```
269
-
270
- #### 2. Stdin
271
- ```bash
272
- cat bundle.json | delta-engine run
273
- echo '{"bundleId":"test",...}' | delta-engine run
274
- curl https://api.example.com/bundle | delta-engine run
275
- ```
276
-
277
- Use `-` explicitly:
278
- ```bash
279
- delta-engine run - < bundle.json
280
- ```
281
-
282
- #### 3. URL
283
- ```bash
284
- delta-engine run https://example.com/bundle.json
285
- delta-engine run http://localhost:3000/api/bundle
286
- ```
287
-
288
- Supports both HTTP and HTTPS.
289
-
290
- ### Writing Output
291
-
292
- #### 1. Stdout (Default)
293
- ```bash
294
- delta-engine run bundle.json
295
- # Prints JSON to console
296
- ```
297
-
298
- #### 2. File
299
- ```bash
300
- delta-engine run bundle.json --output receipt.json
301
- # Writes to receipt.json
302
- ```
303
-
304
- #### 3. Pretty Print
305
- ```bash
306
- delta-engine run bundle.json --pretty
307
- # Formatted JSON with indentation
308
- ```
309
-
310
- #### 4. Quiet Mode
311
- ```bash
312
- delta-engine run bundle.json --quiet
313
- # No status messages, only JSON
314
- ```
315
-
316
- ---
317
-
318
- ## Workflows & Examples
319
-
320
- ### Basic Verification Workflow
321
-
322
- ```bash
323
- # Step 1: Validate bundle structure
324
- delta-engine validate bundle.json
325
- # ✓ Bundle is valid
326
-
327
- # Step 2: Run engine
328
- delta-engine run bundle.json --output receipt.json
329
- # Generates receipt
330
-
331
- # Step 3: Verify receipt
332
- delta-engine verify receipt.json
333
- # ✓ Receipt is valid
334
- ```
335
-
336
- ### CI/CD Integration
337
-
338
- ```bash
339
- #!/bin/bash
340
- # verify-security-scan.sh
341
-
342
- BUNDLE="security-scan-bundle.json"
343
- RECEIPT="security-scan-receipt.json"
344
-
345
- # Validate bundle
346
- if ! delta-engine validate "$BUNDLE" --quiet; then
347
- echo "ERROR: Invalid bundle structure"
348
- exit 1
349
- fi
350
-
351
- # Run engine
352
- if delta-engine run "$BUNDLE" --output "$RECEIPT" --quiet; then
353
- echo "✓ Security scan achieved consensus"
354
-
355
- # Verify receipt integrity
356
- delta-engine verify "$RECEIPT" --quiet
357
-
358
- # Archive receipt with timestamp
359
- cp "$RECEIPT" "archive/receipt-$(date +%Y%m%d-%H%M%S).json"
360
- else
361
- echo "✗ Security scan failed to reach consensus"
362
- echo "Review variance in receipt details"
363
- exit 1
364
- fi
365
- ```
366
-
367
- ### Batch Processing
368
-
369
- ```bash
370
- #!/bin/bash
371
- # Process multiple bundles
372
-
373
- for bundle in bundles/*.json; do
374
- name=$(basename "$bundle" .json)
375
- receipt="receipts/${name}-receipt.json"
376
-
377
- echo "Processing $name..."
378
-
379
- if delta-engine run "$bundle" --output "$receipt" --quiet; then
380
- echo " ✓ Generated $receipt"
381
- else
382
- echo " ✗ Failed to process $bundle"
383
- fi
384
- done
385
- ```
386
-
387
- ### Data Pipeline Integration
388
-
389
- ```bash
390
- # Fetch data → Build bundle → Run engine → Store receipt
391
-
392
- curl -X POST https://api.example.com/collect \
393
- -H "Content-Type: application/json" \
394
- -d '{"sources": ["github", "npm", "security-db"]}' | \
395
- delta-engine run --output receipt.json --pretty
396
-
397
- # Then push receipt to storage
398
- aws s3 cp receipt.json s3://receipts/$(date +%Y-%m-%d)/receipt.json
399
- ```
400
-
401
- ---
402
-
403
- ## Integration Patterns
404
-
405
- ### Node.js Scripts
406
-
407
- ```javascript
408
- const { execSync } = require('child_process');
409
- const fs = require('fs');
410
-
411
- // Build bundle
412
- const bundle = {
413
- bundleId: 'script-001',
414
- claim: 'Verify metrics',
415
- thresholdPct: 0.05,
416
- dataSpecs: [/* ... */]
417
- };
418
-
419
- fs.writeFileSync('bundle.json', JSON.stringify(bundle));
420
-
421
- // Run CLI
422
- try {
423
- const receipt = execSync('delta-engine run bundle.json --quiet', {
424
- encoding: 'utf-8'
425
- });
426
-
427
- const receiptObj = JSON.parse(receipt);
428
- console.log('Outcome:', receiptObj.outcome);
429
- console.log('Hash:', receiptObj.hash);
430
- } catch (error) {
431
- console.error('Engine failed:', error.message);
432
- }
433
- ```
434
-
435
- ### Python Integration
436
-
437
- ```python
438
- import subprocess
439
- import json
440
-
441
- # Load bundle
442
- with open('bundle.json', 'r') as f:
443
- bundle = json.load(f)
444
-
445
- # Run CLI
446
- result = subprocess.run(
447
- ['delta-engine', 'run', 'bundle.json', '--quiet'],
448
- capture_output=True,
449
- text=True
450
- )
451
-
452
- if result.returncode == 0:
453
- receipt = json.loads(result.stdout)
454
- print(f"Outcome: {receipt['outcome']}")
455
- print(f"Hash: {receipt['hash']}")
456
- else:
457
- print(f"Error: {result.stderr}")
458
- ```
459
-
460
- ### Shell Functions
461
-
462
- ```bash
463
- # Add to .bashrc or .zshrc
464
-
465
- # Shorthand for validate + run + verify
466
- verify-bundle() {
467
- local bundle="$1"
468
- local receipt="${2:-receipt.json}"
469
-
470
- delta-engine validate "$bundle" && \
471
- delta-engine run "$bundle" --output "$receipt" && \
472
- delta-engine verify "$receipt"
473
- }
474
-
475
- # Usage:
476
- # verify-bundle bundle.json output-receipt.json
477
- ```
478
-
479
- ---
480
-
481
- ## Advanced Usage
482
-
483
- ### Combining with jq
484
-
485
- ```bash
486
- # Extract specific fields
487
- delta-engine run bundle.json | jq '.outcome'
488
- # "consensus"
489
-
490
- delta-engine run bundle.json | jq '.deltaFinal'
491
- # 0.01980198
492
-
493
- # Filter rounds
494
- delta-engine run bundle.json | jq '.rounds[] | select(.withinThreshold == false)'
495
- ```
496
-
497
- ### Environment Variables
498
-
499
- ```bash
500
- # Set default output directory
501
- export DELTA_ENGINE_OUTPUT_DIR="./receipts"
502
-
503
- # Wrapper script
504
- delta-engine run bundle.json --output "$DELTA_ENGINE_OUTPUT_DIR/receipt.json"
505
- ```
506
-
507
- ### Parallel Execution
508
-
509
- ```bash
510
- # Process multiple bundles in parallel (GNU parallel)
511
- ls bundles/*.json | parallel -j 4 \
512
- 'delta-engine run {} --output receipts/{/.}-receipt.json'
513
- ```
514
-
515
- ### Streaming JSON
516
-
517
- ```bash
518
- # Process newline-delimited JSON
519
- while IFS= read -r bundle; do
520
- echo "$bundle" | delta-engine run --quiet
521
- done < bundles.ndjson > receipts.ndjson
522
- ```
523
-
524
- ---
525
-
526
- ## Troubleshooting
527
-
528
- ### Common Issues
529
-
530
- #### Issue: "Cannot find module '@uvrn/core'"
531
-
532
- **Solution**: Rebuild the workspace:
533
- ```bash
534
- cd /path/to/monorepo
535
- npm run build
536
- ```
537
-
538
- #### Issue: "Invalid JSON for bundle"
539
-
540
- **Solution**: Validate JSON syntax:
541
- ```bash
542
- cat bundle.json | jq .
543
- ```
544
-
545
- #### Issue: "thresholdPct must be > 0 and <= 1"
546
-
547
- **Solution**: Check your threshold value:
548
- ```json
549
- {
550
- "thresholdPct": 0.05 // Valid: 5%
551
- }
552
- ```
553
-
554
- Not:
555
- ```json
556
- {
557
- "thresholdPct": 5 // Invalid: Must be 0.0 to 1.0
558
- }
559
- ```
560
-
561
- #### Issue: "dataSpecs must be an array with at least 2 items"
562
-
563
- **Solution**: Ensure at least 2 data sources:
564
- ```json
565
- {
566
- "dataSpecs": [
567
- { "id": "source-1", /* ... */ },
568
- { "id": "source-2", /* ... */ }
569
- ]
570
- }
571
- ```
572
-
573
- ### Debug Mode
574
-
575
- Enable verbose logging:
576
-
577
- ```bash
578
- # Node.js debug
579
- NODE_DEBUG=* delta-engine run bundle.json
580
- ```
581
-
582
- ### Checking Exit Codes
583
-
584
- ```bash
585
- delta-engine run bundle.json
586
- case $? in
587
- 0) echo "Success" ;;
588
- 1) echo "Invalid bundle" ;;
589
- 2) echo "Engine error" ;;
590
- 3) echo "I/O error" ;;
591
- esac
592
- ```
593
-
594
- ---
595
-
596
- ## Best Practices
597
-
598
- 1. **Always validate before running**: Use `validate` to catch structural issues early
599
- 2. **Use --quiet in scripts**: Suppress console output for cleaner automation
600
- 3. **Store receipts with timestamps**: Archive receipts for audit trails
601
- 4. **Verify receipts after generation**: Ensure hash integrity immediately
602
- 5. **Use semantic bundle IDs**: Make bundleId descriptive (e.g., `security-scan-2024-01-14`)
603
-
604
- ---
605
-
606
- ## Next Steps
607
-
608
- - Explore the [API Server](../../uvrn-api/README.md) for HTTP access
609
- - Learn about [MCP Integration](../../uvrn-mcp/README.md) for AI agents
610
- - Read the [Protocol Specification](../../../admin/docs/compass/PROTOCOL.md)
611
-
612
- ---
613
-
614
- ## Support
615
-
616
- - Repository: https://github.com/uvrn/lc_delta-core
617
- - Issues: https://github.com/uvrn/lc_delta-core/issues
618
- - Protocol Docs: See `/admin/docs/compass/` in repository
package/jest.config.js DELETED
@@ -1,12 +0,0 @@
1
- module.exports = {
2
- preset: 'ts-jest',
3
- testEnvironment: 'node',
4
- roots: ['<rootDir>/tests'],
5
- testMatch: ['**/*.test.ts'],
6
- collectCoverageFrom: [
7
- 'src/**/*.ts',
8
- '!src/**/*.d.ts'
9
- ],
10
- coverageDirectory: 'coverage',
11
- coverageReporters: ['text', 'lcov', 'html']
12
- };