clawsouls 0.4.0 → 0.4.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/README.md CHANGED
@@ -170,7 +170,7 @@ my-soul/
170
170
  └── README.md # Documentation
171
171
  ```
172
172
 
173
- The spec is open — see [Soul Spec](https://github.com/clawsouls/clawsouls/blob/main/docs/soul-spec.md).
173
+ The spec is open — see [Soul Spec](https://github.com/clawsouls/clawsouls/blob/main/docs/soul-spec.md).
174
174
 
175
175
  ## How It Works
176
176
 
@@ -200,7 +200,7 @@ The spec is open — see [Soul Spec](https://github.com/clawsouls/clawsouls/blob
200
200
 
201
201
  - 🌐 [clawsouls.ai](https://clawsouls.ai) — Browse souls
202
202
  - 📦 [npm](https://www.npmjs.com/package/clawsouls) — Package
203
- - 📋 [Soul Spec](https://github.com/clawsouls/clawsouls/blob/main/docs/soul-spec.md) — Create your own
203
+ - 📋 [Soul Spec](https://github.com/clawsouls/clawsouls/blob/main/docs/soul-spec.md) — Create your own
204
204
  - 🐙 [GitHub Org](https://github.com/clawsouls) — Source code
205
205
 
206
206
  ## License
@@ -68,6 +68,11 @@ program
68
68
  .description('Run SoulScan on active workspace or a soul directory')
69
69
  .option('-q, --quiet', 'Quiet mode for cron (outputs SOULSCAN_OK or SOULSCAN_ALERT)')
70
70
  .option('--init', 'Initialize baseline checksums without alerting on changes')
71
+ .option('--restore', 'Auto-restore protected files when drift is detected')
72
+ .option('--approve', 'Update baselines after intentional changes')
73
+ .option('--report', 'Output a formatted audit report (for DM/cron)')
74
+ .option('--verify-audit', 'Verify the audit log hash chain integrity')
75
+ .option('--audit-log', 'Display recent audit log entries')
71
76
  .action((dir, opts) => soulscanCommand(dir, opts));
72
77
  program.parse();
73
78
  //# sourceMappingURL=clawsouls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clawsouls.js","sourceRoot":"","sources":["../../src/bin/clawsouls.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAElD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,aAAa,EAAE,gCAAgC,CAAC;KACvD,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC;KAC3D,MAAM,CAAC,CAAC,GAAW,EAAE,IAA2B,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAEnF,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAEhD,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,KAAK,CAAC,OAAO,CAAC;KACd,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,YAAY,EAAE,8CAA8C,CAAC;KACpE,MAAM,CAAC,CAAC,GAAY,EAAE,IAA6B,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAEvF,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,KAAK,CAAC,MAAM,CAAC;KACb,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,aAAa,EAAE,6DAA6D,CAAC;KACpF,MAAM,CAAC,QAAQ,EAAE,2DAA2D,CAAC;KAC7E,MAAM,CAAC,CAAC,GAAY,EAAE,IAA0C,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAEpG,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"clawsouls.js","sourceRoot":"","sources":["../../src/bin/clawsouls.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ const API_BASE = 'https://clawsouls.ai/api/v1';
5
5
  // Minimal fallback template if server is unreachable
6
6
  const FALLBACK_FILES = {
7
7
  'soul.json': JSON.stringify({
8
- specVersion: '0.3',
8
+ specVersion: '0.4',
9
9
  name: 'my-soul',
10
10
  displayName: 'My Soul',
11
11
  version: '1.0.0',
@@ -14,7 +14,10 @@ const FALLBACK_FILES = {
14
14
  license: 'Apache-2.0',
15
15
  tags: ['custom'],
16
16
  category: 'general',
17
+ compatibility: { frameworks: ['openclaw'] },
18
+ allowedTools: [],
17
19
  files: { soul: 'SOUL.md', identity: 'IDENTITY.md', agents: 'AGENTS.md', heartbeat: 'HEARTBEAT.md' },
20
+ disclosure: { summary: 'A custom AI persona.' },
18
21
  }, null, 2),
19
22
  'SOUL.md': '# My Soul\n\nDescribe your AI persona here.\n',
20
23
  'IDENTITY.md': '# My Soul\n\n- **Name:** My Soul\n- **Emoji:** 🤖\n',
@@ -32,7 +35,7 @@ export async function initCommand(name) {
32
35
  // Fetch template from server
33
36
  let files;
34
37
  try {
35
- const res = await fetch(`${API_BASE}/template?spec=0.3`);
38
+ const res = await fetch(`${API_BASE}/template?spec=0.4`);
36
39
  if (res.ok) {
37
40
  const data = await res.json();
38
41
  files = data.files;
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,11 @@
1
- export declare function soulscanCommand(dir?: string, opts?: {
1
+ interface SoulscanOpts {
2
2
  quiet?: boolean;
3
3
  init?: boolean;
4
- }): Promise<void>;
4
+ restore?: boolean;
5
+ approve?: boolean;
6
+ report?: boolean;
7
+ verifyAudit?: boolean;
8
+ auditLog?: boolean;
9
+ }
10
+ export declare function soulscanCommand(dir?: string, opts?: SoulscanOpts): Promise<void>;
11
+ export {};
@@ -1,13 +1,25 @@
1
1
  import chalk from 'chalk';
2
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
2
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, appendFileSync } from 'fs';
3
3
  import { join, resolve } from 'path';
4
4
  import { createHash } from 'crypto';
5
5
  import { homedir } from 'os';
6
6
  const API_BASE = 'https://clawsouls.ai/api/v1';
7
7
  const SOULSCAN_DIR = join(homedir(), '.clawsouls', 'soulscan');
8
8
  const CHECKSUMS_FILE = join(SOULSCAN_DIR, 'checksums.json');
9
+ const BASELINES_DIR = join(SOULSCAN_DIR, 'baselines');
10
+ const AUDIT_LOG_FILE = join(SOULSCAN_DIR, 'audit.jsonl');
11
+ // Protection policies
12
+ const PROTECTION_POLICY = {
13
+ 'SOUL.md': 'restore',
14
+ 'IDENTITY.md': 'restore',
15
+ 'AGENTS.md': 'restore',
16
+ 'USER.md': 'alert',
17
+ 'TOOLS.md': 'alert',
18
+ 'HEARTBEAT.md': 'alert',
19
+ 'STYLE.md': 'alert',
20
+ 'soul.json': 'ignore',
21
+ };
9
22
  function findWorkspaceDir() {
10
- // OpenClaw workspace locations
11
23
  const candidates = [
12
24
  join(homedir(), '.openclaw', 'workspace'),
13
25
  join(homedir(), '.zeroclaw', 'workspace'),
@@ -53,16 +65,140 @@ function saveChecksums(checksums) {
53
65
  mkdirSync(SOULSCAN_DIR, { recursive: true });
54
66
  writeFileSync(CHECKSUMS_FILE, JSON.stringify(checksums, null, 2));
55
67
  }
68
+ // --- Feature A: Baselines ---
69
+ function saveBaselines(files) {
70
+ mkdirSync(BASELINES_DIR, { recursive: true });
71
+ for (const [name, content] of Object.entries(files)) {
72
+ writeFileSync(join(BASELINES_DIR, name), content);
73
+ }
74
+ }
75
+ function loadBaseline(filename) {
76
+ const path = join(BASELINES_DIR, filename);
77
+ if (!existsSync(path))
78
+ return null;
79
+ try {
80
+ return readFileSync(path, 'utf-8');
81
+ }
82
+ catch {
83
+ return null;
84
+ }
85
+ }
86
+ function restoreFile(scanDir, filename) {
87
+ const baseline = loadBaseline(filename);
88
+ if (baseline === null)
89
+ return false;
90
+ writeFileSync(join(scanDir, filename), baseline);
91
+ return true;
92
+ }
93
+ // --- Feature C: Audit Log ---
94
+ function getLastAuditHash() {
95
+ if (!existsSync(AUDIT_LOG_FILE))
96
+ return 'genesis';
97
+ try {
98
+ const lines = readFileSync(AUDIT_LOG_FILE, 'utf-8').trim().split('\n').filter(Boolean);
99
+ if (lines.length === 0)
100
+ return 'genesis';
101
+ const last = JSON.parse(lines[lines.length - 1]);
102
+ return last.entry_hash || 'genesis';
103
+ }
104
+ catch {
105
+ return 'genesis';
106
+ }
107
+ }
108
+ function computeEntryHash(entry, prevHash) {
109
+ const data = JSON.stringify(entry) + prevHash;
110
+ return createHash('sha256').update(data).digest('hex');
111
+ }
112
+ function appendAuditEntry(entry) {
113
+ mkdirSync(SOULSCAN_DIR, { recursive: true });
114
+ const prevHash = getLastAuditHash();
115
+ entry.prev_hash = prevHash;
116
+ // Compute hash without entry_hash field
117
+ const { entry_hash, ...rest } = entry;
118
+ entry.entry_hash = computeEntryHash(rest, prevHash);
119
+ appendFileSync(AUDIT_LOG_FILE, JSON.stringify(entry) + '\n');
120
+ }
121
+ function verifyAuditChain() {
122
+ if (!existsSync(AUDIT_LOG_FILE)) {
123
+ return { valid: true, entries: 0 };
124
+ }
125
+ const lines = readFileSync(AUDIT_LOG_FILE, 'utf-8').trim().split('\n').filter(Boolean);
126
+ let expectedPrev = 'genesis';
127
+ for (let i = 0; i < lines.length; i++) {
128
+ const entry = JSON.parse(lines[i]);
129
+ if (entry.prev_hash !== expectedPrev) {
130
+ return { valid: false, entries: lines.length, error: `Entry ${i + 1}: prev_hash mismatch (expected ${expectedPrev.slice(0, 8)}..., got ${entry.prev_hash.slice(0, 8)}...)` };
131
+ }
132
+ const { entry_hash, ...rest } = entry;
133
+ const computed = computeEntryHash(rest, expectedPrev);
134
+ if (computed !== entry_hash) {
135
+ return { valid: false, entries: lines.length, error: `Entry ${i + 1}: entry_hash mismatch (computed ${computed.slice(0, 8)}..., stored ${entry_hash.slice(0, 8)}...)` };
136
+ }
137
+ expectedPrev = entry_hash;
138
+ }
139
+ return { valid: true, entries: lines.length };
140
+ }
141
+ function getRecentAuditEntries(count = 10) {
142
+ if (!existsSync(AUDIT_LOG_FILE))
143
+ return [];
144
+ const lines = readFileSync(AUDIT_LOG_FILE, 'utf-8').trim().split('\n').filter(Boolean);
145
+ return lines.slice(-count).map(l => JSON.parse(l));
146
+ }
147
+ // --- Main Command ---
56
148
  export async function soulscanCommand(dir, opts) {
57
149
  const quiet = opts?.quiet ?? false;
58
150
  const initMode = opts?.init ?? false;
59
- // Resolve scan directory
151
+ const restoreMode = opts?.restore ?? false;
152
+ const approveMode = opts?.approve ?? false;
153
+ const reportMode = opts?.report ?? false;
154
+ const verifyAuditMode = opts?.verifyAudit ?? false;
155
+ const auditLogMode = opts?.auditLog ?? false;
156
+ // --- Standalone audit commands ---
157
+ if (verifyAuditMode) {
158
+ const result = verifyAuditChain();
159
+ if (result.entries === 0) {
160
+ console.log(chalk.yellow('ℹ No audit log entries found.'));
161
+ return;
162
+ }
163
+ if (result.valid) {
164
+ console.log(chalk.green(`✅ Audit chain verified — ${result.entries} entries, all hashes valid`));
165
+ }
166
+ else {
167
+ console.log(chalk.red(`❌ Audit chain BROKEN — ${result.error}`));
168
+ process.exit(1);
169
+ }
170
+ return;
171
+ }
172
+ if (auditLogMode) {
173
+ const entries = getRecentAuditEntries(10);
174
+ if (entries.length === 0) {
175
+ console.log(chalk.yellow('ℹ No audit log entries found.'));
176
+ return;
177
+ }
178
+ console.log(chalk.bold(`\n📋 Recent Audit Log (${entries.length} entries)\n`));
179
+ for (const e of entries) {
180
+ const time = new Date(e.timestamp).toLocaleString('ko-KR', { timeZone: 'Asia/Seoul' });
181
+ const drift = e.drift_detected.length > 0 ? chalk.yellow(e.drift_detected.join(', ')) : chalk.green('none');
182
+ const restored = e.restored.length > 0 ? chalk.cyan(e.restored.join(', ')) : 'none';
183
+ console.log(chalk.gray('─'.repeat(50)));
184
+ console.log(` ${chalk.bold(e.action.toUpperCase())} ${chalk.dim(time)}`);
185
+ console.log(` Files: ${e.files_scanned} | Drift: ${drift} | Restored: ${restored}`);
186
+ if (e.scan_score !== null) {
187
+ console.log(` Score: ${e.scan_score} | Errors: ${e.scan_errors} | Warnings: ${e.scan_warnings}`);
188
+ }
189
+ console.log(` Hash: ${chalk.dim(e.entry_hash?.slice(0, 16) + '...')}`);
190
+ }
191
+ console.log(chalk.gray('─'.repeat(50)));
192
+ console.log('');
193
+ return;
194
+ }
195
+ // --- Resolve scan directory ---
60
196
  const scanDir = dir ? resolve(dir) : findWorkspaceDir();
61
197
  if (!scanDir || !existsSync(scanDir)) {
62
198
  console.log(chalk.red('❌ No workspace found. Specify a directory or ensure OpenClaw is installed.'));
63
199
  process.exit(1);
64
200
  }
65
- if (!quiet) {
201
+ if (!quiet && !reportMode) {
66
202
  console.log(chalk.bold(`\n🔍 SoulScan — Scanning ${scanDir}\n`));
67
203
  }
68
204
  // Collect soul files
@@ -72,25 +208,74 @@ export async function soulscanCommand(dir, opts) {
72
208
  console.log(chalk.yellow('⚠️ No soul files found in workspace.'));
73
209
  process.exit(0);
74
210
  }
75
- if (!quiet) {
211
+ if (!quiet && !reportMode) {
76
212
  console.log(chalk.gray(` Found ${fileCount} soul files\n`));
77
213
  }
78
- // Phase 1: Integrity check (checksum comparison)
214
+ // --- Approve mode ---
215
+ if (approveMode) {
216
+ const currentChecksums = computeChecksums(files);
217
+ saveChecksums(currentChecksums);
218
+ saveBaselines(files);
219
+ appendAuditEntry({
220
+ timestamp: new Date().toISOString(),
221
+ action: 'approve',
222
+ files_scanned: fileCount,
223
+ drift_detected: [],
224
+ restored: [],
225
+ scan_score: null,
226
+ scan_errors: 0,
227
+ scan_warnings: 0,
228
+ prev_hash: '',
229
+ });
230
+ console.log(chalk.green(`✅ Baselines and checksums updated for ${fileCount} files`));
231
+ for (const name of Object.keys(files)) {
232
+ console.log(chalk.gray(` ✓ ${name}`));
233
+ }
234
+ return;
235
+ }
236
+ // Phase 1: Integrity check
79
237
  const currentChecksums = computeChecksums(files);
80
238
  const savedChecksums = loadSavedChecksums();
81
239
  let tampered = false;
82
240
  const tamperDetails = [];
241
+ const driftFiles = [];
242
+ const restoredFiles = [];
243
+ const alertFiles = [];
83
244
  if (savedChecksums && !initMode) {
84
245
  for (const [name, hash] of Object.entries(currentChecksums)) {
85
246
  if (savedChecksums[name] && savedChecksums[name] !== hash) {
86
247
  tampered = true;
87
- tamperDetails.push(`${name}: content changed since last scan`);
248
+ driftFiles.push(name);
249
+ const policy = PROTECTION_POLICY[name] || 'alert';
250
+ if (restoreMode && policy === 'restore') {
251
+ if (restoreFile(scanDir, name)) {
252
+ restoredFiles.push(name);
253
+ tamperDetails.push(`${name}: changed → RESTORED from baseline`);
254
+ }
255
+ else {
256
+ tamperDetails.push(`${name}: changed (no baseline available to restore)`);
257
+ alertFiles.push(name);
258
+ }
259
+ }
260
+ else if (policy === 'restore' && !restoreMode) {
261
+ tamperDetails.push(`${name}: changed (use --restore to auto-restore)`);
262
+ alertFiles.push(name);
263
+ }
264
+ else if (policy === 'alert') {
265
+ tamperDetails.push(`${name}: changed (alert-only, not restoring)`);
266
+ alertFiles.push(name);
267
+ }
268
+ else if (policy === 'ignore') {
269
+ tamperDetails.push(`${name}: changed (ignored per policy)`);
270
+ }
88
271
  }
89
272
  }
90
273
  for (const name of Object.keys(savedChecksums)) {
91
274
  if (!currentChecksums[name]) {
92
275
  tampered = true;
276
+ driftFiles.push(name);
93
277
  tamperDetails.push(`${name}: file removed since last scan`);
278
+ alertFiles.push(name);
94
279
  }
95
280
  }
96
281
  for (const name of Object.keys(currentChecksums)) {
@@ -98,44 +283,72 @@ export async function soulscanCommand(dir, opts) {
98
283
  tamperDetails.push(`${name}: new file added since last scan`);
99
284
  }
100
285
  }
101
- if (tampered) {
102
- console.log(chalk.red.bold('⚠️ INTEGRITY ALERT — Files changed since last scan:'));
103
- for (const detail of tamperDetails) {
104
- console.log(chalk.red(` - ${detail}`));
286
+ if (!quiet && !reportMode) {
287
+ if (tampered) {
288
+ console.log(chalk.red.bold('⚠️ INTEGRITY ALERT Files changed since last scan:'));
289
+ for (const detail of tamperDetails) {
290
+ if (detail.includes('RESTORED')) {
291
+ console.log(chalk.cyan(` ⚠️ ${detail}`));
292
+ }
293
+ else if (detail.includes('alert-only')) {
294
+ console.log(chalk.yellow(` ℹ ${detail}`));
295
+ }
296
+ else if (detail.includes('ignored')) {
297
+ console.log(chalk.gray(` · ${detail}`));
298
+ }
299
+ else {
300
+ console.log(chalk.red(` - ${detail}`));
301
+ }
302
+ }
303
+ console.log('');
105
304
  }
106
- console.log('');
107
- }
108
- else if (tamperDetails.length > 0) {
109
- // New files added (not tampered)
110
- for (const detail of tamperDetails) {
111
- console.log(chalk.yellow(` ℹ ${detail}`));
305
+ else if (tamperDetails.length > 0) {
306
+ for (const detail of tamperDetails) {
307
+ console.log(chalk.yellow(` ℹ ${detail}`));
308
+ }
309
+ console.log('');
310
+ }
311
+ else {
312
+ console.log(chalk.green('✅ Integrity check passed — no changes detected\n'));
112
313
  }
113
- console.log('');
114
- }
115
- else if (!quiet) {
116
- console.log(chalk.green('✅ Integrity check passed — no changes detected\n'));
117
314
  }
118
315
  }
119
316
  else if (initMode || !savedChecksums) {
120
- if (!quiet) {
317
+ if (!quiet && !reportMode) {
121
318
  console.log(chalk.gray(' Initializing baseline checksums...\n'));
122
319
  }
123
320
  }
124
- // Always update checksums
125
- saveChecksums(currentChecksums);
321
+ // Update checksums (re-read files if restored)
322
+ if (restoredFiles.length > 0) {
323
+ const updatedFiles = collectSoulFiles(scanDir);
324
+ const updatedChecksums = computeChecksums(updatedFiles);
325
+ saveChecksums(updatedChecksums);
326
+ }
327
+ else {
328
+ saveChecksums(currentChecksums);
329
+ }
330
+ // Save baselines on init
331
+ if (initMode || !savedChecksums) {
332
+ saveBaselines(files);
333
+ }
126
334
  // Phase 2: Security scan via server API
127
335
  const fileMap = {};
128
- for (const [name, content] of Object.entries(files)) {
336
+ const currentFiles = restoredFiles.length > 0 ? collectSoulFiles(scanDir) : files;
337
+ for (const [name, content] of Object.entries(currentFiles)) {
129
338
  fileMap[name] = content;
130
339
  }
131
- // Build a minimal manifest from soul.json if available
132
340
  let manifest = { name: 'workspace-scan', version: '0.0.0', specVersion: '0.3' };
133
- if (files['soul.json']) {
341
+ if (currentFiles['soul.json']) {
134
342
  try {
135
- manifest = JSON.parse(files['soul.json']);
343
+ manifest = JSON.parse(currentFiles['soul.json']);
136
344
  }
137
345
  catch { }
138
346
  }
347
+ let scanScore = null;
348
+ let scanErrors = 0;
349
+ let scanWarnings = 0;
350
+ let scanInfoCount = 0;
351
+ let checks = [];
139
352
  try {
140
353
  const res = await fetch(`${API_BASE}/validate`, {
141
354
  method: 'POST',
@@ -143,16 +356,23 @@ export async function soulscanCommand(dir, opts) {
143
356
  body: JSON.stringify({ manifest, files: fileMap, soulscan: true }),
144
357
  });
145
358
  const data = await res.json();
146
- const checks = data.checks || [];
147
- if (!quiet) {
359
+ checks = data.checks || [];
360
+ scanErrors = checks.filter((c) => c.type === 'fail').length;
361
+ scanWarnings = checks.filter((c) => c.type === 'warn').length;
362
+ scanInfoCount = checks.filter((c) => c.type === 'pass').length;
363
+ // Derive score: 100 - (errors * 15) - (warnings * 5)
364
+ scanScore = Math.max(0, 100 - (scanErrors * 15) - (scanWarnings * 5));
365
+ if (!quiet && !reportMode) {
148
366
  printScanResults(checks);
149
367
  }
150
- // Summary for cron/quiet mode
151
- const errors = checks.filter((c) => c.type === 'fail').length;
152
- const warnings = checks.filter((c) => c.type === 'warn').length;
153
- if (quiet) {
154
- if (tampered || errors > 0) {
155
- console.log(`SOULSCAN_ALERT: ${tampered ? 'TAMPERED' : ''} ${errors} errors, ${warnings} warnings`);
368
+ // Report mode output
369
+ if (reportMode) {
370
+ printReport(scanDir, driftFiles, restoredFiles, alertFiles, scanScore, scanErrors, scanWarnings, scanInfoCount, checks, tampered);
371
+ }
372
+ // Quiet mode
373
+ if (quiet && !reportMode) {
374
+ if (tampered || scanErrors > 0) {
375
+ console.log(`SOULSCAN_ALERT: ${tampered ? 'TAMPERED' : ''} ${scanErrors} errors, ${scanWarnings} warnings`);
156
376
  process.exit(1);
157
377
  }
158
378
  else {
@@ -160,26 +380,92 @@ export async function soulscanCommand(dir, opts) {
160
380
  process.exit(0);
161
381
  }
162
382
  }
163
- if (tampered || errors > 0) {
164
- process.exit(1);
165
- }
166
383
  }
167
384
  catch (err) {
168
- // Offline fallback: basic local checks
169
- if (!quiet) {
385
+ if (!quiet && !reportMode) {
170
386
  console.log(chalk.yellow('⚠️ Server unreachable, running local integrity check only'));
171
387
  if (!tampered) {
172
388
  console.log(chalk.green('\n✅ Local integrity check passed'));
173
389
  }
174
390
  }
175
- else if (tampered) {
176
- console.log('SOULSCAN_ALERT: TAMPERED (offline mode)');
177
- process.exit(1);
391
+ else if (reportMode) {
392
+ printReport(scanDir, driftFiles, restoredFiles, alertFiles, null, 0, 0, 0, [], tampered);
178
393
  }
179
- else {
180
- console.log('SOULSCAN_OK (offline)');
394
+ else if (quiet) {
395
+ if (tampered) {
396
+ console.log('SOULSCAN_ALERT: TAMPERED (offline mode)');
397
+ process.exit(1);
398
+ }
399
+ else {
400
+ console.log('SOULSCAN_OK (offline)');
401
+ }
402
+ }
403
+ }
404
+ // Append audit log
405
+ appendAuditEntry({
406
+ timestamp: new Date().toISOString(),
407
+ action: initMode ? 'init' : restoreMode ? 'restore' : 'scan',
408
+ files_scanned: fileCount,
409
+ drift_detected: driftFiles,
410
+ restored: restoredFiles,
411
+ scan_score: scanScore,
412
+ scan_errors: scanErrors,
413
+ scan_warnings: scanWarnings,
414
+ prev_hash: '',
415
+ });
416
+ if ((tampered && alertFiles.length > 0) || scanErrors > 0) {
417
+ process.exit(1);
418
+ }
419
+ }
420
+ // --- Feature B: Report ---
421
+ function printReport(scanDir, driftFiles, restoredFiles, alertFiles, score, errors, warnings, infoCount, checks, tampered) {
422
+ const now = new Date().toLocaleString('ko-KR', { timeZone: 'Asia/Seoul', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' });
423
+ const lines = [];
424
+ lines.push('🔍 SoulScan Audit Report');
425
+ lines.push(`Time: ${now} KST`);
426
+ lines.push(`Workspace: ${scanDir}`);
427
+ lines.push('');
428
+ lines.push('━━━ INTEGRITY ━━━');
429
+ if (!tampered) {
430
+ lines.push('✅ No drift detected');
431
+ }
432
+ else {
433
+ lines.push(`⚠️ ${driftFiles.length} file${driftFiles.length !== 1 ? 's' : ''} changed, ${restoredFiles.length} restored`);
434
+ }
435
+ lines.push('');
436
+ lines.push('━━━ SECURITY SCAN ━━━');
437
+ if (score !== null) {
438
+ const grade = score >= 90 ? 'Verified' : score >= 70 ? 'Acceptable' : 'At Risk';
439
+ lines.push(`Score: ${score}/100 (${grade})`);
440
+ lines.push(`Errors: ${errors} | Warnings: ${warnings} | Info: ${infoCount}`);
441
+ }
442
+ else {
443
+ lines.push('⚠️ Server unreachable — scan skipped');
444
+ }
445
+ const details = checks.filter((c) => c.type === 'fail' || c.type === 'warn');
446
+ if (details.length > 0) {
447
+ lines.push('');
448
+ lines.push('━━━ DETAILS ━━━');
449
+ for (const c of details) {
450
+ const icon = c.type === 'fail' ? '❌' : '⚠️';
451
+ const code = c.code ? `[${c.code}] ` : '';
452
+ lines.push(`${icon} ${code}${c.message}`);
181
453
  }
182
454
  }
455
+ lines.push('');
456
+ lines.push('━━━ ACTION REQUIRED ━━━');
457
+ if (alertFiles.length > 0) {
458
+ for (const f of alertFiles) {
459
+ lines.push(`• ${f} — needs review`);
460
+ }
461
+ }
462
+ else if (errors > 0) {
463
+ lines.push('Review security scan errors above');
464
+ }
465
+ else {
466
+ lines.push('None');
467
+ }
468
+ console.log(lines.join('\n'));
183
469
  }
184
470
  function printScanResults(checks) {
185
471
  const icons = {
@@ -1 +1 @@
1
- {"version":3,"file":"soulscan.js","sourceRoot":"","sources":["../../src/commands/soulscan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"soulscan.js","sourceRoot":"","sources":["../../src/commands/soulscan.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawsouls",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "CLI for ClawSouls — AI agent persona sharing platform",
5
5
  "main": "dist/index.js",
6
6
  "bin": {