delimit-cli 3.9.4 → 3.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,10 @@
1
- # Delimit
1
+ ```
2
+ ____ ________ ______ _____________
3
+ / __ \/ ____/ / / _/ |/ / _/_ __/
4
+ / / / / __/ / / / // /|_/ // / / /
5
+ / /_/ / /___/ /____/ // / / // / / /
6
+ /_____/_____/_____/___/_/ /_/___/ /_/
7
+ ```
2
8
 
3
9
  One workspace for every AI coding assistant. Switch models, not context.
4
10
 
@@ -31,8 +31,12 @@ function step(n, msg) { log(`\n${blue(`[${n}]`)} ${msg}`); }
31
31
 
32
32
  async function main() {
33
33
  log('');
34
- log(bold(' Delimit Setup'));
35
- log(dim(' AI agent guardrails for developers'));
34
+ log(blue(' ____ ________ ______ _____________'));
35
+ log(blue(' / __ \\/ ____/ / / _/ |/ / _/_ __/'));
36
+ log(blue(' / / / / __/ / / / // /|_/ // / / / '));
37
+ log(blue(' / /_/ / /___/ /____/ // / / // / / / '));
38
+ log(blue('/_____/_____/_____/___/_/ /_/___/ /_/ '));
39
+ log(dim(' One workspace for every AI coding assistant'));
36
40
  log('');
37
41
 
38
42
  // Step 1: Check prerequisites
@@ -393,8 +397,119 @@ Run full governance compliance checks. Verify security, policy compliance, evide
393
397
  }
394
398
  }
395
399
 
396
- // Step 6: Done
397
- step(6, 'Done!');
400
+ // Step 6: Governance wrapping (shims)
401
+ step(6, 'Governance wrapping...');
402
+ log('');
403
+ log(` Delimit can wrap your AI assistants with a governance layer:`);
404
+ log('');
405
+ log(` ${blue(' ____ ________ ______ _____________')}`);
406
+ log(` ${blue(' / __ \\\\/ ____/ / / _/ |/ / _/_ __/')}`);
407
+ log(` ${blue(' / / / / __/ / / / // /|_/ // / / / ')}`);
408
+ log(` ${blue(' / /_/ / /___/ /____/ // / / // / / / ')}`);
409
+ log(` ${blue('/_____/_____/_____/___/_/ /_/___/ /_/ ')}`);
410
+ log('');
411
+ log(` ${dim('[Delimit]')} Executing governance check...`);
412
+ log(` ${dim('[Delimit]')} Mode: advisory`);
413
+ log(` ${dim('[Delimit]')} ${green('✓ GOVERNANCE ACTIVE')}`);
414
+ log('');
415
+ log(` ${dim('This shows before each AI session (<1 second).')}`);
416
+ log(` ${dim('Adds ~/.delimit/shims to your shell PATH.')}`);
417
+ log(` ${dim('Disable anytime: delimit shims disable')}`);
418
+ log('');
419
+
420
+ // Check if shims already installed
421
+ const shimsDir = path.join(DELIMIT_HOME, 'shims');
422
+ const shimsInstalled = fs.existsSync(shimsDir) && fs.readdirSync(shimsDir).length > 0;
423
+
424
+ if (shimsInstalled) {
425
+ log(` ${green('✓')} Governance wrapping already enabled`);
426
+ } else {
427
+ // Default YES prompt — non-interactive mode auto-accepts
428
+ const inquirer = (() => { try { return require('inquirer'); } catch { return null; } })();
429
+ let enableShims = true;
430
+
431
+ if (inquirer && process.stdin.isTTY) {
432
+ try {
433
+ const answer = await inquirer.prompt([{
434
+ type: 'confirm',
435
+ name: 'enable',
436
+ message: 'Enable governance wrapping?',
437
+ default: true,
438
+ }]);
439
+ enableShims = answer.enable;
440
+ } catch {
441
+ enableShims = true; // Default yes if prompt fails
442
+ }
443
+ }
444
+
445
+ if (enableShims) {
446
+ // Create shims
447
+ fs.mkdirSync(shimsDir, { recursive: true });
448
+
449
+ const shimTemplate = (toolName, displayName) => `#!/bin/sh
450
+ # Delimit Governance Shim for ${displayName}
451
+ PURPLE='\\033[35m'; MAGENTA='\\033[91m'; ORANGE='\\033[33m'; GREEN='\\033[32m'
452
+ WHITE='\\033[97m'; BOLD='\\033[1m'; DIM='\\033[2m'; RESET='\\033[0m'
453
+ if [ "$DELIMIT_WRAPPED" = "true" ] || [ ! -t 1 ]; then
454
+ for c in /usr/bin/${toolName} /usr/local/bin/${toolName} $HOME/.local/bin/${toolName}; do
455
+ [ -x "$c" ] && exec "$c" "$@"
456
+ done
457
+ fi
458
+ DELIMIT_HOME="\${DELIMIT_HOME:-$HOME/.delimit}"
459
+ TOOL_COUNT="0"
460
+ [ -f "$DELIMIT_HOME/server/ai/server.py" ] && TOOL_COUNT=$(grep -c '@mcp.tool' "$DELIMIT_HOME/server/ai/server.py" 2>/dev/null || echo "0")
461
+ echo ""
462
+ printf " \${PURPLE}\${BOLD} ____ ________ ______ _____________\${RESET}\\n"
463
+ printf " \${PURPLE}\${BOLD} / __ \\\\/ ____/ / / _/ |/ / _/_ __/\${RESET}\\n"
464
+ printf " \${MAGENTA}\${BOLD} / / / / __/ / / / // /|_/ // / / / \${RESET}\\n"
465
+ printf " \${MAGENTA}\${BOLD} / /_/ / /___/ /____/ // / / // / / / \${RESET}\\n"
466
+ printf " \${ORANGE}\${BOLD}/_____/_____/_____/___/_/ /_/___/ /_/ \${RESET}\\n"
467
+ printf " \${DIM}delimit.ai\${RESET}\\n"
468
+ echo ""
469
+ printf " \${PURPLE}\${BOLD}[Delimit]\${RESET} \${DIM}Executing governance check...\${RESET}\\n"
470
+ sleep 0.1
471
+ printf " \${PURPLE}\${BOLD}[Delimit]\${RESET} \${ORANGE}Mode: advisory\${RESET}\\n"
472
+ printf " \${PURPLE}\${BOLD}[Delimit]\${RESET} \${DIM}MCP server: \${WHITE}\${TOOL_COUNT} tools\${RESET}\\n"
473
+ printf " \${MAGENTA}\${BOLD}[Delimit]\${RESET} \${MAGENTA}═══════════════════════════════════════════\${RESET}\\n"
474
+ printf " \${MAGENTA}\${BOLD}[Delimit]\${RESET} \${PURPLE}<\${MAGENTA}/\${ORANGE}>\${RESET} \${BOLD}GOVERNANCE ACTIVE: ${displayName.toUpperCase()}\${RESET}\\n"
475
+ printf " \${MAGENTA}\${BOLD}[Delimit]\${RESET} \${MAGENTA}═══════════════════════════════════════════\${RESET}\\n"
476
+ sleep 0.08
477
+ printf " \${GREEN}\${BOLD}[Delimit]\${RESET} \${GREEN}✓ Allowed\${RESET}\\n"
478
+ echo ""
479
+ for c in /usr/bin/${toolName} /usr/local/bin/${toolName} $HOME/.local/bin/${toolName}; do
480
+ [ -x "$c" ] && exec "$c" "$@"
481
+ done
482
+ echo "[Delimit] ${toolName} not found" >&2; exit 127
483
+ `;
484
+
485
+ for (const [tool, display] of [['claude', 'Claude'], ['codex', 'Codex'], ['gemini', 'Gemini CLI']]) {
486
+ const shimPath = path.join(shimsDir, tool);
487
+ fs.writeFileSync(shimPath, shimTemplate(tool, display));
488
+ fs.chmodSync(shimPath, '755');
489
+ }
490
+
491
+ // Add to PATH in shell rc files
492
+ const pathLine = `export PATH="${shimsDir}:$PATH" # Delimit governance wrapping`;
493
+ for (const rc of ['.bashrc', '.zshrc']) {
494
+ const rcPath = path.join(os.homedir(), rc);
495
+ if (fs.existsSync(rcPath)) {
496
+ const content = fs.readFileSync(rcPath, 'utf-8');
497
+ if (!content.includes('.delimit/shims')) {
498
+ fs.appendFileSync(rcPath, `\n# Delimit governance wrapping\n${pathLine}\n`);
499
+ }
500
+ }
501
+ }
502
+
503
+ log(` ${green('✓')} Governance wrapping enabled`);
504
+ log(` ${dim(' Restart your terminal or run: source ~/.bashrc')}`);
505
+ } else {
506
+ log(` ${dim(' Skipped. Enable later: delimit shims enable')}`);
507
+ }
508
+ }
509
+ log('');
510
+
511
+ // Step 7: Done
512
+ step(7, 'Done!');
398
513
  log('');
399
514
  log(` ${green('Delimit is installed.')} Your AI now has persistent memory and governance.`);
400
515
  log('');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "delimit-cli",
3
- "version": "3.9.4",
3
+ "version": "3.10.0",
4
4
  "description": "One workspace for every AI coding assistant. Tasks, memory, and governance carry between Claude Code, Codex, and Gemini CLI.",
5
5
  "main": "index.js",
6
6
  "files": [