usertrust 0.2.4 → 0.2.6
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/cli/completions.d.ts +14 -0
- package/dist/cli/completions.d.ts.map +1 -0
- package/dist/cli/completions.js +201 -0
- package/dist/cli/completions.js.map +1 -0
- package/dist/cli/health.d.ts +2 -1
- package/dist/cli/health.d.ts.map +1 -1
- package/dist/cli/health.js +69 -16
- package/dist/cli/health.js.map +1 -1
- package/dist/cli/init.d.ts +4 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +31 -6
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/inspect.d.ts +2 -1
- package/dist/cli/inspect.d.ts.map +1 -1
- package/dist/cli/inspect.js +48 -5
- package/dist/cli/inspect.js.map +1 -1
- package/dist/cli/main.d.ts +5 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +67 -15
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/snapshot.d.ts +2 -1
- package/dist/cli/snapshot.d.ts.map +1 -1
- package/dist/cli/snapshot.js +95 -17
- package/dist/cli/snapshot.js.map +1 -1
- package/dist/cli/tb.d.ts +2 -7
- package/dist/cli/tb.d.ts.map +1 -1
- package/dist/cli/tb.js +47 -11
- package/dist/cli/tb.js.map +1 -1
- package/dist/cli/verify.d.ts +2 -1
- package/dist/cli/verify.d.ts.map +1 -1
- package/dist/cli/verify.js +32 -7
- package/dist/cli/verify.js.map +1 -1
- package/package.json +6 -7
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI: usertrust completions <shell> — Output shell completion scripts
|
|
3
|
+
*
|
|
4
|
+
* Outputs completion scripts for bash, zsh, or fish to stdout.
|
|
5
|
+
* Follow the standard pattern used by kubectl, docker, gh, etc.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* usertrust completions bash
|
|
9
|
+
* usertrust completions zsh
|
|
10
|
+
* usertrust completions fish
|
|
11
|
+
*/
|
|
12
|
+
import type { CliOptions } from "./init.js";
|
|
13
|
+
export declare function run(shell?: string, opts?: CliOptions): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=completions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completions.d.ts","sourceRoot":"","sources":["../../src/cli/completions.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAkL5C,wBAAsB,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC1E"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright 2026 Usertools, Inc.
|
|
3
|
+
const SHELLS = ["bash", "zsh", "fish"];
|
|
4
|
+
function bashScript() {
|
|
5
|
+
return `# bash completion for usertrust
|
|
6
|
+
# Install: usertrust completions bash >> ~/.bashrc
|
|
7
|
+
# Or: usertrust completions bash > /etc/bash_completion.d/usertrust
|
|
8
|
+
|
|
9
|
+
_usertrust() {
|
|
10
|
+
local cur prev commands global_flags
|
|
11
|
+
COMPREPLY=()
|
|
12
|
+
cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
13
|
+
prev="\${COMP_WORDS[COMP_CWORD-1]}"
|
|
14
|
+
|
|
15
|
+
commands="init inspect health verify snapshot tb completions"
|
|
16
|
+
global_flags="--json --help"
|
|
17
|
+
|
|
18
|
+
case "\${prev}" in
|
|
19
|
+
snapshot)
|
|
20
|
+
COMPREPLY=( $(compgen -W "create restore list" -- "\${cur}") )
|
|
21
|
+
return 0
|
|
22
|
+
;;
|
|
23
|
+
tb)
|
|
24
|
+
COMPREPLY=( $(compgen -W "start stop status" -- "\${cur}") )
|
|
25
|
+
return 0
|
|
26
|
+
;;
|
|
27
|
+
completions)
|
|
28
|
+
COMPREPLY=( $(compgen -W "bash zsh fish" -- "\${cur}") )
|
|
29
|
+
return 0
|
|
30
|
+
;;
|
|
31
|
+
usertrust)
|
|
32
|
+
COMPREPLY=( $(compgen -W "\${commands}" -- "\${cur}") )
|
|
33
|
+
return 0
|
|
34
|
+
;;
|
|
35
|
+
esac
|
|
36
|
+
|
|
37
|
+
if [[ "\${cur}" == -* ]]; then
|
|
38
|
+
COMPREPLY=( $(compgen -W "\${global_flags}" -- "\${cur}") )
|
|
39
|
+
return 0
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
COMPREPLY=( $(compgen -W "\${commands}" -- "\${cur}") )
|
|
43
|
+
return 0
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
complete -F _usertrust usertrust
|
|
47
|
+
`;
|
|
48
|
+
}
|
|
49
|
+
function zshScript() {
|
|
50
|
+
return `#compdef usertrust
|
|
51
|
+
# zsh completion for usertrust
|
|
52
|
+
# Install: usertrust completions zsh > ~/.zsh/completions/_usertrust
|
|
53
|
+
# Then add to .zshrc: fpath=(~/.zsh/completions $fpath); autoload -Uz compinit; compinit
|
|
54
|
+
|
|
55
|
+
_usertrust() {
|
|
56
|
+
local -a commands
|
|
57
|
+
commands=(
|
|
58
|
+
'init:Initialize trust vault'
|
|
59
|
+
'inspect:Show trust bank statement'
|
|
60
|
+
'health:Show entropy diagnostics'
|
|
61
|
+
'verify:Verify audit chain integrity'
|
|
62
|
+
'snapshot:Create/restore vault snapshots'
|
|
63
|
+
'tb:Manage TigerBeetle process'
|
|
64
|
+
'completions:Output shell completion scripts'
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
local -a global_flags
|
|
68
|
+
global_flags=(
|
|
69
|
+
'--json[Output machine-readable JSON]'
|
|
70
|
+
'--help[Show help]'
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
_arguments -C \\
|
|
74
|
+
'1:command:->command' \\
|
|
75
|
+
'*::arg:->args'
|
|
76
|
+
|
|
77
|
+
case "\$state" in
|
|
78
|
+
command)
|
|
79
|
+
_describe 'usertrust command' commands
|
|
80
|
+
_values 'flags' \${global_flags}
|
|
81
|
+
;;
|
|
82
|
+
args)
|
|
83
|
+
case "\${words[1]}" in
|
|
84
|
+
snapshot)
|
|
85
|
+
local -a snapshot_cmds
|
|
86
|
+
snapshot_cmds=('create:Create a snapshot' 'restore:Restore a snapshot' 'list:List snapshots')
|
|
87
|
+
_describe 'snapshot subcommand' snapshot_cmds
|
|
88
|
+
;;
|
|
89
|
+
tb)
|
|
90
|
+
local -a tb_cmds
|
|
91
|
+
tb_cmds=('start:Start TigerBeetle' 'stop:Stop TigerBeetle' 'status:Show TigerBeetle status')
|
|
92
|
+
_describe 'tb subcommand' tb_cmds
|
|
93
|
+
;;
|
|
94
|
+
completions)
|
|
95
|
+
local -a shells
|
|
96
|
+
shells=('bash:Bash completion' 'zsh:Zsh completion' 'fish:Fish completion')
|
|
97
|
+
_describe 'shell' shells
|
|
98
|
+
;;
|
|
99
|
+
esac
|
|
100
|
+
;;
|
|
101
|
+
esac
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
compdef _usertrust usertrust
|
|
105
|
+
`;
|
|
106
|
+
}
|
|
107
|
+
function fishScript() {
|
|
108
|
+
return `# fish completion for usertrust
|
|
109
|
+
# Install: usertrust completions fish > ~/.config/fish/completions/usertrust.fish
|
|
110
|
+
|
|
111
|
+
# Disable file completions
|
|
112
|
+
complete -c usertrust -f
|
|
113
|
+
|
|
114
|
+
# Commands
|
|
115
|
+
complete -c usertrust -n '__fish_use_subcommand' -a init -d 'Initialize trust vault'
|
|
116
|
+
complete -c usertrust -n '__fish_use_subcommand' -a inspect -d 'Show trust bank statement'
|
|
117
|
+
complete -c usertrust -n '__fish_use_subcommand' -a health -d 'Show entropy diagnostics'
|
|
118
|
+
complete -c usertrust -n '__fish_use_subcommand' -a verify -d 'Verify audit chain integrity'
|
|
119
|
+
complete -c usertrust -n '__fish_use_subcommand' -a snapshot -d 'Create/restore vault snapshots'
|
|
120
|
+
complete -c usertrust -n '__fish_use_subcommand' -a tb -d 'Manage TigerBeetle process'
|
|
121
|
+
complete -c usertrust -n '__fish_use_subcommand' -a completions -d 'Output shell completion scripts'
|
|
122
|
+
|
|
123
|
+
# Global flags
|
|
124
|
+
complete -c usertrust -l json -d 'Output machine-readable JSON'
|
|
125
|
+
complete -c usertrust -l help -d 'Show help'
|
|
126
|
+
|
|
127
|
+
# snapshot subcommands
|
|
128
|
+
complete -c usertrust -n '__fish_seen_subcommand_from snapshot' -a create -d 'Create a snapshot'
|
|
129
|
+
complete -c usertrust -n '__fish_seen_subcommand_from snapshot' -a restore -d 'Restore a snapshot'
|
|
130
|
+
complete -c usertrust -n '__fish_seen_subcommand_from snapshot' -a list -d 'List snapshots'
|
|
131
|
+
|
|
132
|
+
# tb subcommands
|
|
133
|
+
complete -c usertrust -n '__fish_seen_subcommand_from tb' -a start -d 'Start TigerBeetle'
|
|
134
|
+
complete -c usertrust -n '__fish_seen_subcommand_from tb' -a stop -d 'Stop TigerBeetle'
|
|
135
|
+
complete -c usertrust -n '__fish_seen_subcommand_from tb' -a status -d 'Show TigerBeetle status'
|
|
136
|
+
|
|
137
|
+
# completions subcommands
|
|
138
|
+
complete -c usertrust -n '__fish_seen_subcommand_from completions' -a bash -d 'Bash completion'
|
|
139
|
+
complete -c usertrust -n '__fish_seen_subcommand_from completions' -a zsh -d 'Zsh completion'
|
|
140
|
+
complete -c usertrust -n '__fish_seen_subcommand_from completions' -a fish -d 'Fish completion'
|
|
141
|
+
`;
|
|
142
|
+
}
|
|
143
|
+
function isShell(value) {
|
|
144
|
+
return SHELLS.includes(value);
|
|
145
|
+
}
|
|
146
|
+
function getScript(shell) {
|
|
147
|
+
switch (shell) {
|
|
148
|
+
case "bash":
|
|
149
|
+
return bashScript();
|
|
150
|
+
case "zsh":
|
|
151
|
+
return zshScript();
|
|
152
|
+
case "fish":
|
|
153
|
+
return fishScript();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function printUsage() {
|
|
157
|
+
console.log(`Usage: usertrust completions <shell>
|
|
158
|
+
|
|
159
|
+
Generate shell completion scripts.
|
|
160
|
+
|
|
161
|
+
Shells:
|
|
162
|
+
bash Bash completion script
|
|
163
|
+
zsh Zsh completion script
|
|
164
|
+
fish Fish completion script
|
|
165
|
+
|
|
166
|
+
Examples:
|
|
167
|
+
usertrust completions bash >> ~/.bashrc
|
|
168
|
+
usertrust completions zsh > ~/.zsh/completions/_usertrust
|
|
169
|
+
usertrust completions fish > ~/.config/fish/completions/usertrust.fish`);
|
|
170
|
+
}
|
|
171
|
+
export async function run(shell, opts) {
|
|
172
|
+
const json = opts?.json === true;
|
|
173
|
+
if (!shell || !isShell(shell)) {
|
|
174
|
+
if (json) {
|
|
175
|
+
console.log(JSON.stringify({
|
|
176
|
+
command: "completions",
|
|
177
|
+
success: false,
|
|
178
|
+
data: {
|
|
179
|
+
message: shell ? `Unknown shell: ${shell}` : "No shell specified",
|
|
180
|
+
shells: [...SHELLS],
|
|
181
|
+
},
|
|
182
|
+
}));
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
printUsage();
|
|
186
|
+
}
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const script = getScript(shell);
|
|
190
|
+
if (json) {
|
|
191
|
+
console.log(JSON.stringify({
|
|
192
|
+
command: "completions",
|
|
193
|
+
success: true,
|
|
194
|
+
data: { shell, script },
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
process.stdout.write(script);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=completions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completions.js","sourceRoot":"","sources":["../../src/cli/completions.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAgBjC,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAU,CAAC;AAGhD,SAAS,UAAU;IAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CP,CAAC;AACF,CAAC;AAED,SAAS,SAAS;IACjB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDP,CAAC;AACF,CAAC;AAED,SAAS,UAAU;IAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCP,CAAC;AACF,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAc,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,SAAS,CAAC,KAAY;IAC9B,QAAQ,KAAK,EAAE,CAAC;QACf,KAAK,MAAM;YACV,OAAO,UAAU,EAAE,CAAC;QACrB,KAAK,KAAK;YACT,OAAO,SAAS,EAAE,CAAC;QACpB,KAAK,MAAM;YACV,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;AACF,CAAC;AAED,SAAS,UAAU;IAClB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;yEAY4D,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,KAAc,EAAE,IAAiB;IAC1D,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAEjC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,IAAI,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CACV,IAAI,CAAC,SAAS,CAAC;gBACd,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE;oBACL,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC,oBAAoB;oBACjE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;iBACnB;aACD,CAAC,CACF,CAAC;QACH,CAAC;aAAM,CAAC;YACP,UAAU,EAAE,CAAC;QACd,CAAC;QACD,OAAO;IACR,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAEhC,IAAI,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CACV,IAAI,CAAC,SAAS,CAAC;YACd,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;SACvB,CAAC,CACF,CAAC;IACH,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;AACF,CAAC"}
|
package/dist/cli/health.d.ts
CHANGED
package/dist/cli/health.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/cli/health.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/cli/health.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAoE5C,wBAAsB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA4G5E"}
|
package/dist/cli/health.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { existsSync, readFileSync } from "node:fs";
|
|
10
10
|
import { join } from "node:path";
|
|
11
|
+
import pc from "picocolors";
|
|
11
12
|
import { computeEntropyScore, } from "../audit/entropy.js";
|
|
12
13
|
import { verifyChain } from "../audit/verify.js";
|
|
13
14
|
import { VAULT_DIR } from "../shared/constants.js";
|
|
@@ -51,6 +52,16 @@ function levelLabel(level) {
|
|
|
51
52
|
return "critical";
|
|
52
53
|
}
|
|
53
54
|
}
|
|
55
|
+
function coloredLevel(level) {
|
|
56
|
+
switch (level) {
|
|
57
|
+
case "low":
|
|
58
|
+
return pc.green("healthy");
|
|
59
|
+
case "elevated":
|
|
60
|
+
return pc.yellow("elevated");
|
|
61
|
+
case "critical":
|
|
62
|
+
return pc.red("critical");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
54
65
|
function statusTag(value, hits) {
|
|
55
66
|
if (hits === 0)
|
|
56
67
|
return "[ok]";
|
|
@@ -60,11 +71,30 @@ function statusTag(value, hits) {
|
|
|
60
71
|
return "[elevated]";
|
|
61
72
|
return "[critical]";
|
|
62
73
|
}
|
|
63
|
-
|
|
74
|
+
function coloredTag(value, hits) {
|
|
75
|
+
if (hits === 0)
|
|
76
|
+
return pc.green("[ok]");
|
|
77
|
+
if (value < 0.3)
|
|
78
|
+
return pc.green("[low]");
|
|
79
|
+
if (value < 0.6)
|
|
80
|
+
return pc.yellow("[elevated]");
|
|
81
|
+
return pc.red("[critical]");
|
|
82
|
+
}
|
|
83
|
+
export async function run(rootDir, opts) {
|
|
64
84
|
const root = rootDir ?? process.cwd();
|
|
65
85
|
const vaultPath = join(root, VAULT_DIR);
|
|
86
|
+
const json = opts?.json === true;
|
|
66
87
|
if (!existsSync(vaultPath)) {
|
|
67
|
-
|
|
88
|
+
if (json) {
|
|
89
|
+
console.log(JSON.stringify({
|
|
90
|
+
command: "health",
|
|
91
|
+
success: false,
|
|
92
|
+
data: { message: "No trust vault found. Run `usertrust init` first." },
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.log(`${pc.red("No trust vault found.")} Run \`usertrust init\` first.`);
|
|
97
|
+
}
|
|
68
98
|
return;
|
|
69
99
|
}
|
|
70
100
|
const events = loadEvents(vaultPath);
|
|
@@ -91,31 +121,54 @@ export async function run(rootDir) {
|
|
|
91
121
|
}
|
|
92
122
|
}
|
|
93
123
|
const budgetPct = config.budget > 0 ? ((spent / config.budget) * 100).toFixed(1) : "0.0";
|
|
94
|
-
|
|
95
|
-
// Signal 1: Policy violations
|
|
124
|
+
// Signal values
|
|
96
125
|
const policySignal = report.signals.find((s) => s.condition === "policy_violations");
|
|
97
126
|
const policyHits = policySignal?.hits ?? 0;
|
|
98
|
-
const
|
|
127
|
+
const piiSignal = report.signals.find((s) => s.condition === "pii_detections");
|
|
128
|
+
const piiHits = piiSignal?.hits ?? 0;
|
|
129
|
+
const cbSignal = report.signals.find((s) => s.condition === "circuit_breaker_trips");
|
|
130
|
+
const cbHits = cbSignal?.hits ?? 0;
|
|
131
|
+
const pmSignal = report.signals.find((s) => s.condition === "pattern_memory_hits");
|
|
132
|
+
const pmHits = pmSignal?.hits ?? 0;
|
|
133
|
+
if (json) {
|
|
134
|
+
console.log(JSON.stringify({
|
|
135
|
+
command: "health",
|
|
136
|
+
success: true,
|
|
137
|
+
data: {
|
|
138
|
+
score: report.score,
|
|
139
|
+
level: levelLabel(report.level),
|
|
140
|
+
signals: {
|
|
141
|
+
policyViolations: policyHits,
|
|
142
|
+
budgetUtilization: Number.parseFloat(budgetPct),
|
|
143
|
+
chainIntegrity: verification.valid,
|
|
144
|
+
piiDetections: piiHits,
|
|
145
|
+
circuitBreakerTrips: cbHits,
|
|
146
|
+
patternMemoryHits: pmHits,
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
}));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
console.log(`Entropy score: ${report.score}/100 (${coloredLevel(report.level)})`);
|
|
153
|
+
// Signal 1: Policy violations
|
|
154
|
+
const policyStatus = coloredTag(policySignal?.value ?? 0, policyHits);
|
|
99
155
|
console.log(` Policy violations (30d): ${policyHits} ${policyStatus}`);
|
|
100
156
|
// Signal 2: Budget utilization
|
|
101
|
-
const budgetStatus = Number.parseFloat(budgetPct) > 80 ? "[elevated]" : "[ok]";
|
|
157
|
+
const budgetStatus = Number.parseFloat(budgetPct) > 80 ? pc.yellow("[elevated]") : pc.green("[ok]");
|
|
102
158
|
console.log(` Budget utilization: ${budgetPct}% ${budgetStatus}`);
|
|
103
159
|
// Signal 3: Chain integrity
|
|
104
|
-
|
|
160
|
+
const chainColored = verification.valid
|
|
161
|
+
? pc.green(`${chainLabel} ${chainStatus}`)
|
|
162
|
+
: pc.red(`${chainLabel} ${chainStatus}`);
|
|
163
|
+
console.log(` Chain integrity: ${chainColored}`);
|
|
105
164
|
// Signal 4: PII detections
|
|
106
|
-
const
|
|
107
|
-
const piiHits = piiSignal?.hits ?? 0;
|
|
108
|
-
const piiStatus = statusTag(piiSignal?.value ?? 0, piiHits);
|
|
165
|
+
const piiStatus = coloredTag(piiSignal?.value ?? 0, piiHits);
|
|
109
166
|
console.log(` PII detections (30d): ${piiHits} ${piiStatus}`);
|
|
110
167
|
// Signal 5: Circuit breaker trips
|
|
111
|
-
const
|
|
112
|
-
const cbHits = cbSignal?.hits ?? 0;
|
|
113
|
-
const cbStatus = statusTag(cbSignal?.value ?? 0, cbHits);
|
|
168
|
+
const cbStatus = coloredTag(cbSignal?.value ?? 0, cbHits);
|
|
114
169
|
console.log(` Circuit breaker trips: ${cbHits} ${cbStatus}`);
|
|
115
170
|
// Signal 6: Pattern memory hits
|
|
116
|
-
const
|
|
117
|
-
const pmHits = pmSignal?.hits ?? 0;
|
|
118
|
-
const pmStatus = statusTag(pmSignal?.value ?? 0, pmHits);
|
|
171
|
+
const pmStatus = coloredTag(pmSignal?.value ?? 0, pmHits);
|
|
119
172
|
console.log(` Pattern memory hits: ${pmHits} ${pmStatus}`);
|
|
120
173
|
}
|
|
121
174
|
//# sourceMappingURL=health.js.map
|
package/dist/cli/health.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/cli/health.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAGN,mBAAmB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/cli/health.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/init.d.ts
CHANGED
package/dist/cli/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,UAAU;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAsCD,wBAAsB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D5E"}
|
package/dist/cli/init.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { chmodSync, existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
10
10
|
import { join } from "node:path";
|
|
11
|
+
import pc from "picocolors";
|
|
11
12
|
import { VAULT_DIR } from "../shared/constants.js";
|
|
12
13
|
const DEFAULT_CONFIG = {
|
|
13
14
|
budget: 50000,
|
|
@@ -41,11 +42,21 @@ const GITIGNORE = `tigerbeetle/
|
|
|
41
42
|
dlq/
|
|
42
43
|
`;
|
|
43
44
|
const SUBDIRS = ["audit", "policies", "patterns", "snapshots", "board", "dlq"];
|
|
44
|
-
export async function run(rootDir) {
|
|
45
|
+
export async function run(rootDir, opts) {
|
|
45
46
|
const root = rootDir ?? process.cwd();
|
|
46
47
|
const vaultPath = join(root, VAULT_DIR);
|
|
48
|
+
const json = opts?.json === true;
|
|
47
49
|
if (existsSync(vaultPath)) {
|
|
48
|
-
|
|
50
|
+
if (json) {
|
|
51
|
+
console.log(JSON.stringify({
|
|
52
|
+
command: "init",
|
|
53
|
+
success: false,
|
|
54
|
+
data: { message: "Vault already exists", path: vaultPath },
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
console.log(pc.yellow(`Vault already exists at ${vaultPath}`));
|
|
59
|
+
}
|
|
49
60
|
return;
|
|
50
61
|
}
|
|
51
62
|
// Create directory structure
|
|
@@ -61,9 +72,23 @@ export async function run(rootDir) {
|
|
|
61
72
|
writeFileSync(join(vaultPath, ".gitignore"), GITIGNORE, "utf-8");
|
|
62
73
|
// Set vault permissions to 700 (owner only)
|
|
63
74
|
chmodSync(vaultPath, 0o700);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
75
|
+
if (json) {
|
|
76
|
+
console.log(JSON.stringify({
|
|
77
|
+
command: "init",
|
|
78
|
+
success: true,
|
|
79
|
+
data: {
|
|
80
|
+
path: vaultPath,
|
|
81
|
+
directories: [...SUBDIRS],
|
|
82
|
+
config: "usertrust.config.json",
|
|
83
|
+
policy: "policies/default.yml",
|
|
84
|
+
},
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.log(pc.green(`Initialized trust vault at ${vaultPath}`));
|
|
89
|
+
console.log(pc.dim(" Created: audit/, policies/, patterns/, snapshots/, board/, dlq/"));
|
|
90
|
+
console.log(pc.dim(" Config: usertrust.config.json"));
|
|
91
|
+
console.log(pc.dim(" Policy: policies/default.yml"));
|
|
92
|
+
}
|
|
68
93
|
}
|
|
69
94
|
//# sourceMappingURL=init.js.map
|
package/dist/cli/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/inspect.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/cli/inspect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/cli/inspect.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AA8D5C,wBAAsB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA8G5E"}
|
package/dist/cli/inspect.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { existsSync, readFileSync } from "node:fs";
|
|
10
10
|
import { join } from "node:path";
|
|
11
|
+
import pc from "picocolors";
|
|
11
12
|
import { buildMerkleTree } from "../audit/merkle.js";
|
|
12
13
|
import { verifyChain } from "../audit/verify.js";
|
|
13
14
|
import { VAULT_DIR } from "../shared/constants.js";
|
|
@@ -69,11 +70,21 @@ function padRight(s, len) {
|
|
|
69
70
|
function padLeft(s, len) {
|
|
70
71
|
return s.length >= len ? s.slice(0, len) : " ".repeat(len - s.length) + s;
|
|
71
72
|
}
|
|
72
|
-
export async function run(rootDir) {
|
|
73
|
+
export async function run(rootDir, opts) {
|
|
73
74
|
const root = rootDir ?? process.cwd();
|
|
74
75
|
const vaultPath = join(root, VAULT_DIR);
|
|
76
|
+
const json = opts?.json === true;
|
|
75
77
|
if (!existsSync(vaultPath)) {
|
|
76
|
-
|
|
78
|
+
if (json) {
|
|
79
|
+
console.log(JSON.stringify({
|
|
80
|
+
command: "inspect",
|
|
81
|
+
success: false,
|
|
82
|
+
data: { message: "No trust vault found. Run `usertrust init` first." },
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.log(`${pc.red("No trust vault found.")} Run \`usertrust init\` first.`);
|
|
87
|
+
}
|
|
77
88
|
return;
|
|
78
89
|
}
|
|
79
90
|
const config = loadConfig(vaultPath);
|
|
@@ -87,12 +98,40 @@ export async function run(rootDir) {
|
|
|
87
98
|
// Build Merkle tree from event hashes
|
|
88
99
|
const eventHashes = events.map((e) => e.hash);
|
|
89
100
|
const { root: merkleRoot } = buildMerkleTree(eventHashes);
|
|
90
|
-
|
|
101
|
+
if (json) {
|
|
102
|
+
const transactions = events
|
|
103
|
+
.slice(-10)
|
|
104
|
+
.reverse()
|
|
105
|
+
.map((e) => ({
|
|
106
|
+
time: e.timestamp,
|
|
107
|
+
model: typeof e.data.model === "string" ? e.data.model : "unknown",
|
|
108
|
+
cost: typeof e.data.cost === "number" ? e.data.cost : null,
|
|
109
|
+
receipt: typeof e.data.transferId === "string" ? e.data.transferId : e.id,
|
|
110
|
+
}));
|
|
111
|
+
console.log(JSON.stringify({
|
|
112
|
+
command: "inspect",
|
|
113
|
+
success: true,
|
|
114
|
+
data: {
|
|
115
|
+
budget: config.budget,
|
|
116
|
+
spent,
|
|
117
|
+
remaining,
|
|
118
|
+
percentRemaining: Number.parseFloat(pct),
|
|
119
|
+
chain: {
|
|
120
|
+
events: verification.eventsVerified,
|
|
121
|
+
valid: verification.valid,
|
|
122
|
+
latestHash: verification.latestHash,
|
|
123
|
+
},
|
|
124
|
+
merkleRoot: merkleRoot ?? null,
|
|
125
|
+
transactions,
|
|
126
|
+
},
|
|
127
|
+
}));
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
91
130
|
// Header
|
|
92
131
|
console.log("+--------------------------------------------------------------+");
|
|
93
|
-
console.log(`| * usertrust vault${" ".repeat(43)}|`);
|
|
132
|
+
console.log(`| ${pc.bold("* usertrust vault")}${" ".repeat(43)}|`);
|
|
94
133
|
console.log(`${`| Budget: ${remaining.toLocaleString()} / ${config.budget.toLocaleString()} UT remaining (${pct}%)`.padEnd(63)}|`);
|
|
95
|
-
console.log(`${`| Chain: ${verification.eventsVerified} events | Integrity: ${
|
|
134
|
+
console.log(`${`| Chain: ${verification.eventsVerified} events | Integrity: ${verification.valid ? "SHA-256 verified" : "INTEGRITY FAILURE"}`.padEnd(63)}|`);
|
|
96
135
|
if (merkleRoot) {
|
|
97
136
|
console.log(`${`| Merkle root: ${merkleRoot.slice(0, 16)}...`.padEnd(63)}|`);
|
|
98
137
|
}
|
|
@@ -112,5 +151,9 @@ export async function run(rootDir) {
|
|
|
112
151
|
console.log(`| ${padRight("No transactions recorded", 58)} |`);
|
|
113
152
|
}
|
|
114
153
|
console.log("+----------+--------------+--------+---------------------------+");
|
|
154
|
+
// Show integrity status with color below the table
|
|
155
|
+
if (!verification.valid) {
|
|
156
|
+
console.log(pc.red("WARNING: Chain integrity check failed!"));
|
|
157
|
+
}
|
|
115
158
|
}
|
|
116
159
|
//# sourceMappingURL=inspect.js.map
|
package/dist/cli/inspect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/cli/inspect.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/cli/inspect.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/main.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
2
|
+
declare const COMMANDS: readonly ["init", "inspect", "health", "verify", "snapshot", "tb", "completions"];
|
|
3
|
+
/** Simple Levenshtein distance — two-row DP, no dependency needed. */
|
|
4
|
+
declare function levenshtein(a: string, b: string): number;
|
|
5
|
+
declare function suggestCommand(input: string): string | undefined;
|
|
6
|
+
export { levenshtein, suggestCommand, COMMANDS };
|
|
3
7
|
//# sourceMappingURL=main.d.ts.map
|
package/dist/cli/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAIA,QAAA,MAAM,QAAQ,mFAAoF,CAAC;AAOnG,sEAAsE;AACtE,iBAAS,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBjD;AAED,iBAAS,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAczD;AAED,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/cli/main.js
CHANGED
|
@@ -1,37 +1,89 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
// Copyright 2026 Usertools, Inc.
|
|
4
|
-
const
|
|
4
|
+
const COMMANDS = ["init", "inspect", "health", "verify", "snapshot", "tb", "completions"];
|
|
5
|
+
const argv = process.argv.slice(2);
|
|
6
|
+
const jsonFlag = argv.includes("--json");
|
|
7
|
+
const positional = argv.filter((a) => a !== "--json");
|
|
8
|
+
const command = positional[0];
|
|
9
|
+
/** Simple Levenshtein distance — two-row DP, no dependency needed. */
|
|
10
|
+
function levenshtein(a, b) {
|
|
11
|
+
const m = a.length;
|
|
12
|
+
const n = b.length;
|
|
13
|
+
// Two-row approach avoids indexed-access non-null assertions
|
|
14
|
+
let prev = new Uint32Array(n + 1);
|
|
15
|
+
let curr = new Uint32Array(n + 1);
|
|
16
|
+
for (let j = 0; j <= n; j++)
|
|
17
|
+
prev[j] = j;
|
|
18
|
+
for (let i = 1; i <= m; i++) {
|
|
19
|
+
curr[0] = i;
|
|
20
|
+
for (let j = 1; j <= n; j++) {
|
|
21
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
22
|
+
curr[j] = Math.min((prev[j] ?? 0) + 1, (curr[j - 1] ?? 0) + 1, (prev[j - 1] ?? 0) + cost);
|
|
23
|
+
}
|
|
24
|
+
[prev, curr] = [curr, prev];
|
|
25
|
+
}
|
|
26
|
+
return prev[n] ?? 0;
|
|
27
|
+
}
|
|
28
|
+
function suggestCommand(input) {
|
|
29
|
+
let best;
|
|
30
|
+
let bestDist = Number.POSITIVE_INFINITY;
|
|
31
|
+
for (const cmd of COMMANDS) {
|
|
32
|
+
const dist = levenshtein(input, cmd);
|
|
33
|
+
if (dist < bestDist) {
|
|
34
|
+
bestDist = dist;
|
|
35
|
+
best = cmd;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Only suggest if the distance is reasonable (max 3 edits)
|
|
39
|
+
return bestDist <= 3 ? best : undefined;
|
|
40
|
+
}
|
|
41
|
+
export { levenshtein, suggestCommand, COMMANDS };
|
|
5
42
|
switch (command) {
|
|
6
43
|
case "init":
|
|
7
|
-
await import("./init.js").then((m) => m.run());
|
|
44
|
+
await import("./init.js").then((m) => m.run(undefined, { json: jsonFlag }));
|
|
8
45
|
break;
|
|
9
46
|
case "inspect":
|
|
10
|
-
await import("./inspect.js").then((m) => m.run());
|
|
47
|
+
await import("./inspect.js").then((m) => m.run(undefined, { json: jsonFlag }));
|
|
11
48
|
break;
|
|
12
49
|
case "health":
|
|
13
|
-
await import("./health.js").then((m) => m.run());
|
|
50
|
+
await import("./health.js").then((m) => m.run(undefined, { json: jsonFlag }));
|
|
14
51
|
break;
|
|
15
52
|
case "verify":
|
|
16
|
-
await import("./verify.js").then((m) => m.run());
|
|
53
|
+
await import("./verify.js").then((m) => m.run(undefined, { json: jsonFlag }));
|
|
17
54
|
break;
|
|
18
55
|
case "snapshot":
|
|
19
|
-
await import("./snapshot.js").then((m) => m.run());
|
|
56
|
+
await import("./snapshot.js").then((m) => m.run(undefined, { json: jsonFlag }));
|
|
20
57
|
break;
|
|
21
58
|
case "tb":
|
|
22
|
-
await import("./tb.js").then((m) => m.run());
|
|
59
|
+
await import("./tb.js").then((m) => m.run({ json: jsonFlag }));
|
|
23
60
|
break;
|
|
24
|
-
|
|
61
|
+
case "completions":
|
|
62
|
+
await import("./completions.js").then((m) => m.run(positional[1], { json: jsonFlag }));
|
|
63
|
+
break;
|
|
64
|
+
default: {
|
|
65
|
+
if (command && !command.startsWith("-")) {
|
|
66
|
+
const suggestion = suggestCommand(command);
|
|
67
|
+
if (suggestion) {
|
|
68
|
+
console.log(`Unknown command: "${command}"`);
|
|
69
|
+
console.log(`Did you mean "${suggestion}"?`);
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
25
73
|
console.log(`Usage: usertrust <command>
|
|
26
74
|
|
|
27
75
|
Commands:
|
|
28
|
-
init
|
|
29
|
-
inspect
|
|
30
|
-
health
|
|
31
|
-
verify
|
|
32
|
-
snapshot
|
|
33
|
-
tb
|
|
76
|
+
init Initialize trust vault
|
|
77
|
+
inspect Show trust bank statement
|
|
78
|
+
health Show entropy diagnostics
|
|
79
|
+
verify Verify audit chain integrity
|
|
80
|
+
snapshot Create/restore vault snapshots
|
|
81
|
+
tb Manage TigerBeetle process
|
|
82
|
+
completions Output shell completion scripts
|
|
83
|
+
|
|
84
|
+
Options:
|
|
85
|
+
--json Output machine-readable JSON`);
|
|
34
86
|
break;
|
|
87
|
+
}
|
|
35
88
|
}
|
|
36
|
-
export {};
|
|
37
89
|
//# sourceMappingURL=main.js.map
|
package/dist/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AACA,sCAAsC;AACtC,iCAAiC;AAEjC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AACA,sCAAsC;AACtC,iCAAiC;AAEjC,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,CAAU,CAAC;AAEnG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;AACtD,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAE9B,sEAAsE;AACtE,SAAS,WAAW,CAAC,CAAS,EAAE,CAAS;IACxC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAEnB,6DAA6D;IAC7D,IAAI,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,IAAI,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3F,CAAC;QACD,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACpC,IAAI,IAAwB,CAAC;IAC7B,IAAI,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAExC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,GAAG,GAAG,CAAC;QACZ,CAAC;IACF,CAAC;IAED,2DAA2D;IAC3D,OAAO,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACzC,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;AAEjD,QAAQ,OAAO,EAAE,CAAC;IACjB,KAAK,MAAM;QACV,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5E,MAAM;IACP,KAAK,SAAS;QACb,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/E,MAAM;IACP,KAAK,QAAQ;QACZ,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9E,MAAM;IACP,KAAK,QAAQ;QACZ,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9E,MAAM;IACP,KAAK,UAAU;QACd,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAChF,MAAM;IACP,KAAK,IAAI;QACR,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM;IACP,KAAK,aAAa;QACjB,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvF,MAAM;IACP,OAAO,CAAC,CAAC,CAAC;QACT,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,GAAG,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,iBAAiB,UAAU,IAAI,CAAC,CAAC;gBAC7C,MAAM;YACP,CAAC;QACF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;0CAY4B,CAAC,CAAC;QAC1C,MAAM;IACP,CAAC;AACF,CAAC"}
|
package/dist/cli/snapshot.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/cli/snapshot.ts"],"names":[],"mappings":"AAiBA,wBAAsB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/cli/snapshot.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,wBAAsB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0I5E"}
|
package/dist/cli/snapshot.js
CHANGED
|
@@ -10,53 +10,131 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { existsSync } from "node:fs";
|
|
12
12
|
import { join } from "node:path";
|
|
13
|
+
import pc from "picocolors";
|
|
13
14
|
import { VAULT_DIR } from "../shared/constants.js";
|
|
14
15
|
import { createSnapshot, listSnapshots, restoreSnapshot } from "../snapshot/checkpoint.js";
|
|
15
|
-
export async function run(rootDir) {
|
|
16
|
+
export async function run(rootDir, opts) {
|
|
16
17
|
const root = rootDir ?? process.cwd();
|
|
17
18
|
const vaultPath = join(root, VAULT_DIR);
|
|
19
|
+
const json = opts?.json === true;
|
|
18
20
|
if (!existsSync(vaultPath)) {
|
|
19
|
-
|
|
21
|
+
if (json) {
|
|
22
|
+
console.log(JSON.stringify({
|
|
23
|
+
command: "snapshot",
|
|
24
|
+
success: false,
|
|
25
|
+
data: { message: "No trust vault found. Run `usertrust init` first." },
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
console.log(`${pc.red("No trust vault found.")} Run \`usertrust init\` first.`);
|
|
30
|
+
}
|
|
20
31
|
return;
|
|
21
32
|
}
|
|
22
|
-
const subcommand =
|
|
33
|
+
const subcommand = process.argv[3];
|
|
23
34
|
const name = process.argv[4];
|
|
24
35
|
switch (subcommand) {
|
|
25
36
|
case "create": {
|
|
26
37
|
if (!name) {
|
|
27
|
-
|
|
38
|
+
if (json) {
|
|
39
|
+
console.log(JSON.stringify({
|
|
40
|
+
command: "snapshot",
|
|
41
|
+
success: false,
|
|
42
|
+
data: { message: "Missing snapshot name" },
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.log("Usage: usertrust snapshot create <name>");
|
|
47
|
+
}
|
|
28
48
|
return;
|
|
29
49
|
}
|
|
30
50
|
const meta = await createSnapshot(vaultPath, name);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
51
|
+
if (json) {
|
|
52
|
+
console.log(JSON.stringify({
|
|
53
|
+
command: "snapshot",
|
|
54
|
+
success: true,
|
|
55
|
+
data: {
|
|
56
|
+
action: "create",
|
|
57
|
+
name: meta.name,
|
|
58
|
+
files: meta.files.length,
|
|
59
|
+
size: meta.size,
|
|
60
|
+
timestamp: meta.timestamp,
|
|
61
|
+
},
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
console.log(pc.green(`Snapshot created: ${meta.name}`));
|
|
66
|
+
console.log(pc.dim(` Files: ${meta.files.length}`));
|
|
67
|
+
console.log(pc.dim(` Size: ${meta.size} bytes`));
|
|
68
|
+
console.log(pc.dim(` Timestamp: ${meta.timestamp}`));
|
|
69
|
+
}
|
|
35
70
|
break;
|
|
36
71
|
}
|
|
37
72
|
case "restore": {
|
|
38
73
|
if (!name) {
|
|
39
|
-
|
|
74
|
+
if (json) {
|
|
75
|
+
console.log(JSON.stringify({
|
|
76
|
+
command: "snapshot",
|
|
77
|
+
success: false,
|
|
78
|
+
data: { message: "Missing snapshot name" },
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
console.log("Usage: usertrust snapshot restore <name>");
|
|
83
|
+
}
|
|
40
84
|
return;
|
|
41
85
|
}
|
|
42
86
|
await restoreSnapshot(vaultPath, name);
|
|
43
|
-
|
|
87
|
+
if (json) {
|
|
88
|
+
console.log(JSON.stringify({
|
|
89
|
+
command: "snapshot",
|
|
90
|
+
success: true,
|
|
91
|
+
data: { action: "restore", name },
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log(pc.green(`Snapshot restored: ${name}`));
|
|
96
|
+
}
|
|
44
97
|
break;
|
|
45
98
|
}
|
|
46
99
|
case "list": {
|
|
47
100
|
const snapshots = await listSnapshots(vaultPath);
|
|
48
|
-
if (
|
|
49
|
-
console.log(
|
|
50
|
-
|
|
101
|
+
if (json) {
|
|
102
|
+
console.log(JSON.stringify({
|
|
103
|
+
command: "snapshot",
|
|
104
|
+
success: true,
|
|
105
|
+
data: {
|
|
106
|
+
action: "list",
|
|
107
|
+
snapshots: snapshots.map((s) => ({
|
|
108
|
+
name: s.name,
|
|
109
|
+
files: s.files.length,
|
|
110
|
+
size: s.size,
|
|
111
|
+
timestamp: s.timestamp,
|
|
112
|
+
})),
|
|
113
|
+
},
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
else if (snapshots.length === 0) {
|
|
117
|
+
console.log(pc.dim("No snapshots found."));
|
|
51
118
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
119
|
+
else {
|
|
120
|
+
console.log("Snapshots:");
|
|
121
|
+
for (const s of snapshots) {
|
|
122
|
+
console.log(` ${pc.bold(s.name)} ${pc.dim(`(${s.files.length} files, ${s.size} bytes, ${s.timestamp})`)}`);
|
|
123
|
+
}
|
|
55
124
|
}
|
|
56
125
|
break;
|
|
57
126
|
}
|
|
58
127
|
default:
|
|
59
|
-
|
|
128
|
+
if (json) {
|
|
129
|
+
console.log(JSON.stringify({
|
|
130
|
+
command: "snapshot",
|
|
131
|
+
success: false,
|
|
132
|
+
data: { message: "Unknown subcommand. Use: create, restore, list" },
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
console.log("Usage: usertrust snapshot <create|restore|list> [name]");
|
|
137
|
+
}
|
|
60
138
|
break;
|
|
61
139
|
}
|
|
62
140
|
}
|
package/dist/cli/snapshot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/cli/snapshot.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/cli/snapshot.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/tb.d.ts
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* v1 stubs: prints helpful setup messages. Future versions will
|
|
5
|
-
* manage the embedded TigerBeetle process lifecycle.
|
|
6
|
-
*/
|
|
7
|
-
export declare function run(): Promise<void>;
|
|
1
|
+
import type { CliOptions } from "./init.js";
|
|
2
|
+
export declare function run(opts?: CliOptions): Promise<void>;
|
|
8
3
|
//# sourceMappingURL=tb.d.ts.map
|
package/dist/cli/tb.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tb.d.ts","sourceRoot":"","sources":["../../src/cli/tb.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tb.d.ts","sourceRoot":"","sources":["../../src/cli/tb.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,wBAAsB,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA+E1D"}
|
package/dist/cli/tb.js
CHANGED
|
@@ -6,18 +6,38 @@
|
|
|
6
6
|
* v1 stubs: prints helpful setup messages. Future versions will
|
|
7
7
|
* manage the embedded TigerBeetle process lifecycle.
|
|
8
8
|
*/
|
|
9
|
-
|
|
9
|
+
import pc from "picocolors";
|
|
10
|
+
export async function run(opts) {
|
|
10
11
|
const subcommand = process.argv[3];
|
|
12
|
+
const json = opts?.json === true;
|
|
11
13
|
switch (subcommand) {
|
|
12
14
|
case "start":
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
if (json) {
|
|
16
|
+
console.log(JSON.stringify({
|
|
17
|
+
command: "tb",
|
|
18
|
+
success: false,
|
|
19
|
+
data: { action: "start", message: "Not yet implemented" },
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
console.log(pc.yellow("TigerBeetle start — not yet implemented."));
|
|
24
|
+
console.log("To run TigerBeetle manually:");
|
|
25
|
+
console.log(pc.dim(" tigerbeetle start --addresses=3000 --cache-grid=256MiB ./data/0_0.tigerbeetle"));
|
|
26
|
+
}
|
|
16
27
|
break;
|
|
17
28
|
case "stop":
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
29
|
+
if (json) {
|
|
30
|
+
console.log(JSON.stringify({
|
|
31
|
+
command: "tb",
|
|
32
|
+
success: false,
|
|
33
|
+
data: { action: "stop", message: "Not yet implemented" },
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
console.log(pc.yellow("TigerBeetle stop — not yet implemented."));
|
|
38
|
+
console.log("To stop TigerBeetle manually:");
|
|
39
|
+
console.log(pc.dim(" kill $(pgrep tigerbeetle)"));
|
|
40
|
+
}
|
|
21
41
|
break;
|
|
22
42
|
case "status": {
|
|
23
43
|
let isRunning = false;
|
|
@@ -29,16 +49,32 @@ export async function run() {
|
|
|
29
49
|
catch {
|
|
30
50
|
isRunning = false;
|
|
31
51
|
}
|
|
32
|
-
if (
|
|
33
|
-
console.log(
|
|
52
|
+
if (json) {
|
|
53
|
+
console.log(JSON.stringify({
|
|
54
|
+
command: "tb",
|
|
55
|
+
success: true,
|
|
56
|
+
data: { action: "status", running: isRunning },
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
else if (isRunning) {
|
|
60
|
+
console.log(`TigerBeetle: ${pc.green("running")}`);
|
|
34
61
|
}
|
|
35
62
|
else {
|
|
36
|
-
console.log(
|
|
63
|
+
console.log(`TigerBeetle: ${pc.dim("not running")}`);
|
|
37
64
|
}
|
|
38
65
|
break;
|
|
39
66
|
}
|
|
40
67
|
default:
|
|
41
|
-
|
|
68
|
+
if (json) {
|
|
69
|
+
console.log(JSON.stringify({
|
|
70
|
+
command: "tb",
|
|
71
|
+
success: false,
|
|
72
|
+
data: { message: "Unknown subcommand. Use: start, stop, status" },
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log("Usage: usertrust tb <start|stop|status>");
|
|
77
|
+
}
|
|
42
78
|
break;
|
|
43
79
|
}
|
|
44
80
|
}
|
package/dist/cli/tb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tb.js","sourceRoot":"","sources":["../../src/cli/tb.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;;GAKG;AAEH,MAAM,CAAC,KAAK,UAAU,GAAG;
|
|
1
|
+
{"version":3,"file":"tb.js","sourceRoot":"","sources":["../../src/cli/tb.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/verify.d.ts
CHANGED
package/dist/cli/verify.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"AAcA,wBAAsB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,wBAAsB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAoD5E"}
|
package/dist/cli/verify.js
CHANGED
|
@@ -7,28 +7,53 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { existsSync } from "node:fs";
|
|
9
9
|
import { join } from "node:path";
|
|
10
|
+
import pc from "picocolors";
|
|
10
11
|
import { verifyChain } from "../audit/verify.js";
|
|
11
12
|
import { VAULT_DIR } from "../shared/constants.js";
|
|
12
|
-
export async function run(rootDir) {
|
|
13
|
+
export async function run(rootDir, opts) {
|
|
13
14
|
const root = rootDir ?? process.cwd();
|
|
14
15
|
const vaultPath = join(root, VAULT_DIR);
|
|
16
|
+
const json = opts?.json === true;
|
|
15
17
|
if (!existsSync(vaultPath)) {
|
|
16
|
-
|
|
18
|
+
if (json) {
|
|
19
|
+
console.log(JSON.stringify({
|
|
20
|
+
command: "verify",
|
|
21
|
+
success: false,
|
|
22
|
+
data: { message: "No trust vault found. Run `usertrust init` first." },
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
console.log(`${pc.red("No trust vault found.")} Run \`usertrust init\` first.`);
|
|
27
|
+
}
|
|
17
28
|
return;
|
|
18
29
|
}
|
|
19
30
|
const logPath = join(vaultPath, "audit", "events.jsonl");
|
|
20
31
|
const result = verifyChain(logPath);
|
|
32
|
+
if (json) {
|
|
33
|
+
console.log(JSON.stringify({
|
|
34
|
+
command: "verify",
|
|
35
|
+
success: result.valid,
|
|
36
|
+
data: {
|
|
37
|
+
valid: result.valid,
|
|
38
|
+
eventsVerified: result.eventsVerified,
|
|
39
|
+
errors: result.errors,
|
|
40
|
+
latestHash: result.latestHash,
|
|
41
|
+
verifiedAt: result.verifiedAt,
|
|
42
|
+
},
|
|
43
|
+
}));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
21
46
|
if (result.valid) {
|
|
22
|
-
console.log(`Chain verified: ${result.eventsVerified} events, all hashes valid.`);
|
|
23
|
-
console.log(`Latest hash: ${result.latestHash}`);
|
|
47
|
+
console.log(pc.green(`Chain verified: ${result.eventsVerified} events, all hashes valid.`));
|
|
48
|
+
console.log(`Latest hash: ${pc.dim(result.latestHash)}`);
|
|
24
49
|
}
|
|
25
50
|
else {
|
|
26
|
-
console.log(`Chain verification FAILED: ${result.errors.length} error(s) found.`);
|
|
51
|
+
console.log(pc.red(`Chain verification FAILED: ${result.errors.length} error(s) found.`));
|
|
27
52
|
console.log(`Events checked: ${result.eventsVerified}`);
|
|
28
53
|
for (const err of result.errors) {
|
|
29
|
-
console.log(` - ${err}`);
|
|
54
|
+
console.log(pc.red(` - ${err}`));
|
|
30
55
|
}
|
|
31
56
|
}
|
|
32
|
-
console.log(`Verified at: ${result.verifiedAt}`);
|
|
57
|
+
console.log(pc.dim(`Verified at: ${result.verifiedAt}`));
|
|
33
58
|
}
|
|
34
59
|
//# sourceMappingURL=verify.js.map
|
package/dist/cli/verify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAgB,EAAE,IAAiB;IAC5D,MAAM,IAAI,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAEjC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,IAAI,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CACV,IAAI,CAAC,SAAS,CAAC;gBACd,OAAO,EAAE,QAAQ;gBACjB,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,EAAE,OAAO,EAAE,mDAAmD,EAAE;aACtE,CAAC,CACF,CAAC;QACH,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,uBAAuB,CAAC,gCAAgC,CAAC,CAAC;QACjF,CAAC;QACD,OAAO;IACR,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEpC,IAAI,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CACV,IAAI,CAAC,SAAS,CAAC;YACd,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,MAAM,CAAC,KAAK;YACrB,IAAI,EAAE;gBACL,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;aAC7B;SACD,CAAC,CACF,CAAC;QACF,OAAO;IACR,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,MAAM,CAAC,cAAc,4BAA4B,CAAC,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,MAAM,CAAC,MAAM,kBAAkB,CAAC,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QACxD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC;IACF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "usertrust",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "Financial governance for AI agents. Every LLM call becomes an immutable, auditable transaction.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Usertools, Inc. <hello@usertools.ai> (https://usertrust.ai)",
|
|
@@ -38,18 +38,17 @@
|
|
|
38
38
|
}
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"tigerbeetle-node": "^0.16.0",
|
|
42
41
|
"minimatch": "^10.0.0",
|
|
43
|
-
"
|
|
44
|
-
"
|
|
42
|
+
"picocolors": "^1.1.1",
|
|
43
|
+
"tigerbeetle-node": "^0.16.0",
|
|
44
|
+
"yaml": "^2.7.0",
|
|
45
|
+
"zod": "^3.23.0"
|
|
45
46
|
},
|
|
46
47
|
"scripts": {
|
|
47
48
|
"build": "tsc",
|
|
48
49
|
"prepublishOnly": "tsc"
|
|
49
50
|
},
|
|
50
|
-
"files": [
|
|
51
|
-
"dist"
|
|
52
|
-
],
|
|
51
|
+
"files": ["dist"],
|
|
53
52
|
"peerDependencies": {
|
|
54
53
|
"@anthropic-ai/sdk": ">=0.30.0",
|
|
55
54
|
"openai": ">=4.70.0"
|