delimit-cli 3.14.44 → 3.14.45

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.
@@ -37,7 +37,7 @@ INBOX_ROUTING_FILE = Path.home() / ".delimit" / "inbox_routing.jsonl"
37
37
  IMAP_HOST = "mail.spacemail.com"
38
38
  IMAP_PORT = 993
39
39
  IMAP_USER = "pro@delimit.ai"
40
- FORWARD_TO = os.environ.get("DELIMIT_FORWARD_TO", "")
40
+ FORWARD_TO = "configured-email@example.com"
41
41
 
42
42
  # Domains/senders whose emails require owner action
43
43
  OWNER_ACTION_DOMAINS = {
@@ -61,7 +61,7 @@ OWNER_ACTION_DOMAINS = {
61
61
  }
62
62
 
63
63
  OWNER_ACTION_SENDERS = {
64
- os.environ.get("DELIMIT_FORWARD_TO", ""),
64
+ "configured-email@example.com",
65
65
  }
66
66
 
67
67
  # Subject patterns that indicate owner-action (compiled once)
@@ -222,7 +222,8 @@ def send_email(
222
222
  """Send an email notification via SMTP.
223
223
 
224
224
  Args:
225
- to: Recipient email address. Falls back to DELIMIT_SMTP_TO env var.
225
+ to: Recipient email address. Falls back to DELIMIT_SMTP_TO or
226
+ configured-email@example.com.
226
227
  subject: Email subject line.
227
228
  body: Email body text (preferred). Falls back to 'message' for
228
229
  backward compatibility.
@@ -257,7 +258,7 @@ def send_email(
257
258
  smtp_pass = os.environ.get("DELIMIT_SMTP_PASS", "")
258
259
  smtp_from = os.environ.get("DELIMIT_SMTP_FROM", "")
259
260
 
260
- smtp_to = to or os.environ.get("DELIMIT_SMTP_TO", "")
261
+ smtp_to = to or os.environ.get("DELIMIT_SMTP_TO", "configured-email@example.com")
261
262
 
262
263
  if not all([smtp_host, smtp_from, smtp_to]):
263
264
  record = {
@@ -5886,7 +5886,7 @@ def delimit_notify(channel: str = "webhook", message: str = "",
5886
5886
  subject: Subject line (email only). Use [ACTION], [INFO], [ALERT] prefix.
5887
5887
  event_type: Event category for filtering.
5888
5888
  to: Recipient email address (email only). Overrides default DELIMIT_SMTP_TO.
5889
- Send to any address — leave empty for default (uses DELIMIT_SMTP_TO env var).
5889
+ Send to any address — leave empty for default (configured-email@example.com).
5890
5890
  from_account: Sender account key from ~/.delimit/secrets/smtp-all.json
5891
5891
  (e.g. 'pro@delimit.ai', '<configured-email>'). Email only.
5892
5892
  """
@@ -5994,7 +5994,7 @@ def delimit_notify_inbox(action: str = "status", limit: int = 10,
5994
5994
  """Check inbound email inbox, classify, and route (Pro).
5995
5995
 
5996
5996
  Polls pro@delimit.ai via IMAP. Classifies emails as owner-action
5997
- (forwards to configured email) or non-owner (stays in inbox).
5997
+ (forwards to configured-email@example.com) or non-owner (stays in inbox).
5998
5998
 
5999
5999
  Args:
6000
6000
  action: 'status' (show inbox state), 'poll' (classify and optionally forward),
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "delimit-cli",
3
3
  "mcpName": "io.github.delimit-ai/delimit-mcp-server",
4
- "version": "3.14.44",
4
+ "version": "3.14.45",
5
5
  "description": "Unify Claude Code, Codex, Cursor, and Gemini CLI with persistent context, governance, and multi-model debate.",
6
6
  "main": "index.js",
7
7
  "files": [
@@ -25,6 +25,7 @@
25
25
  },
26
26
  "scripts": {
27
27
  "postinstall": "node scripts/postinstall.js",
28
+ "prepublishOnly": "bash scripts/security-check.sh",
28
29
  "test": "node --test tests/setup-onboarding.test.js tests/setup-matrix.test.js tests/config-export-import.test.js tests/cross-model-hooks.test.js tests/golden-path.test.js"
29
30
  },
30
31
  "keywords": [
@@ -0,0 +1,66 @@
1
+ #!/bin/bash
2
+ # Pre-publish security check — blocks npm publish if secrets are found
3
+ # Run: bash scripts/security-check.sh
4
+
5
+ set -euo pipefail
6
+
7
+ echo "🔍 Delimit pre-publish security scan..."
8
+
9
+ FAIL=0
10
+
11
+ # Pack to temp and scan the actual tarball contents
12
+ TMPDIR=$(mktemp -d)
13
+ npm pack --pack-destination "$TMPDIR" --quiet 2>/dev/null
14
+ TARBALL=$(ls "$TMPDIR"/*.tgz)
15
+ tar -xzf "$TARBALL" -C "$TMPDIR"
16
+
17
+ # 1. Credential patterns
18
+ echo -n " Credentials... "
19
+ if grep -rEi '(password|passwd|secret|api_key|apikey)\s*[:=]\s*["\x27][^"\x27]{4,}' "$TMPDIR/package/" --include="*.py" --include="*.js" --include="*.json" 2>/dev/null | grep -v 'environ\|getenv\|process\.env\|os\.environ\|<configured\|example\|placeholder\|REDACTED\|\${credentials\|credentials\.\|security-scan-ignore'; then
20
+ echo "❌ FOUND CREDENTIALS"
21
+ FAIL=1
22
+ else
23
+ echo "✅ clean"
24
+ fi
25
+
26
+ # 2. Blocklist terms
27
+ echo -n " Blocklist... "
28
+ BLOCKLIST="jamsonsholdings|Bladabah|Domainvested26|Delimit26|home/jamsons|infracore|crypttrx|\.wr_env"
29
+ if grep -rEi "$BLOCKLIST" "$TMPDIR/package/" --include="*.py" --include="*.js" --include="*.json" 2>/dev/null; then
30
+ echo "❌ BLOCKED TERMS FOUND"
31
+ FAIL=1
32
+ else
33
+ echo "✅ clean"
34
+ fi
35
+
36
+ # 3. PII (email addresses that aren't examples)
37
+ echo -n " PII... "
38
+ if grep -rEi '[a-z0-9._%+-]+@(gmail|yahoo|hotmail|outlook|proton|jamsons|wire\.report|domainvested)' "$TMPDIR/package/" --include="*.py" --include="*.js" --include="*.json" 2>/dev/null | grep -v "example\|placeholder\|<configured\|noreply"; then
39
+ echo "❌ PII FOUND"
40
+ FAIL=1
41
+ else
42
+ echo "✅ clean"
43
+ fi
44
+
45
+ # 4. Proprietary files that shouldn't ship
46
+ echo -n " Proprietary files... "
47
+ PROPRIETARY="social_target\.py|social\.py|founding_users\.py|inbox_daemon\.py"
48
+ if find "$TMPDIR/package/" -name "*.py" | grep -Ei "$PROPRIETARY" 2>/dev/null; then
49
+ echo "❌ PROPRIETARY FILES IN PACKAGE"
50
+ FAIL=1
51
+ else
52
+ echo "✅ clean"
53
+ fi
54
+
55
+ # Cleanup
56
+ rm -rf "$TMPDIR"
57
+
58
+ if [ $FAIL -ne 0 ]; then
59
+ echo ""
60
+ echo "❌ SECURITY CHECK FAILED — do not publish"
61
+ exit 1
62
+ fi
63
+
64
+ echo ""
65
+ echo "✅ All security checks passed"
66
+ exit 0