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.
- package/gateway/ai/notify.py +5 -4
- package/gateway/ai/server.py +2 -2
- package/package.json +2 -1
- package/scripts/security-check.sh +66 -0
package/gateway/ai/notify.py
CHANGED
|
@@ -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 =
|
|
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
|
-
|
|
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
|
|
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 = {
|
package/gateway/ai/server.py
CHANGED
|
@@ -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 (
|
|
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
|
|
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.
|
|
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
|