@m13v/s4l 1.7.4-rc.32 → 1.7.4-rc.33
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/mcp/dist/version.json +2 -2
- package/mcp/manifest.json +1 -1
- package/mcp/package.json +1 -1
- package/package.json +1 -1
- package/skill/lib/linkedin-backend.sh +31 -17
- package/skill/lib/twitter-backend.sh +39 -19
package/mcp/dist/version.json
CHANGED
package/mcp/manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"dxt_version": "0.1",
|
|
3
3
|
"name": "social-autoposter",
|
|
4
4
|
"display_name": "S4L",
|
|
5
|
-
"version": "1.7.4-rc.
|
|
5
|
+
"version": "1.7.4-rc.33",
|
|
6
6
|
"description": "Draft, review, approve, and autopilot X/Twitter posts.",
|
|
7
7
|
"long_description": "## **⚠️ The disclaimer above is generic Claude boilerplate.** Anthropic shows the same warning on every plugin regardless of what it does; any plugin has the same level of access as any app you download from the internet.\n\nS4L is an open source product developed by Mediar.ai Incorporated, a VC-backed San Francisco-based startup.\n\nTo get started:\n\n1\\. Copy this prompt: **Set me up on S4L plugin end to end**\n\n2\\. Quit with CMD+Q, reopen Claude, paste into a new chat.\n\nWhat happens next:\n\n* About every 5 minutes S4L scans X for posts that match your topics and drafts replies in your voice.\n* Drafts show up as review cards, usually the first within a few minutes. Nothing is posted automatically; you approve each one.\n* Posting autopilot stays off until you explicitly turn it on.",
|
|
8
8
|
"author": {
|
package/mcp/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@m13v/s4l-mcp",
|
|
3
|
-
"version": "1.7.4-rc.
|
|
3
|
+
"version": "1.7.4-rc.33",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Desktop MCP client for social-autoposter (X/Twitter rail): manual draft/review/approve loop, autopilot control, and stats. Thin wrapper over the existing pipeline scripts.",
|
|
6
6
|
"license": "MIT",
|
package/package.json
CHANGED
|
@@ -333,25 +333,39 @@ ensure_linkedin_browser_for_backend() {
|
|
|
333
333
|
# The occlusion/backgrounding flags matter: the window sits offscreen,
|
|
334
334
|
# and without them Chrome stops laying out SPA-rendered content, so
|
|
335
335
|
# every element measures 0x0 and clicks become impossible (2026-07-03).
|
|
336
|
-
#
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
336
|
+
# Launch flags shared by both spawn paths below.
|
|
337
|
+
local _li_launch_args=(
|
|
338
|
+
--remote-debugging-port=9556
|
|
339
|
+
--user-data-dir="$HOME/.claude/browser-profiles/browser-harness-linkedin"
|
|
340
|
+
--no-first-run --no-default-browser-check
|
|
341
|
+
--disable-features=ChromeWhatsNewUI
|
|
342
|
+
--disable-backgrounding-occluded-windows
|
|
343
|
+
--disable-renderer-backgrounding
|
|
344
|
+
--disable-background-timer-throttling
|
|
345
|
+
"${_extra[@]}"
|
|
346
|
+
about:blank
|
|
347
|
+
)
|
|
348
|
+
# macOS + .app-bundled Chrome: `open -n -g` launches a NEW instance
|
|
349
|
+
# WITHOUT stealing the user's focus (a directly-exec'd Chrome always
|
|
350
|
+
# activates itself), and LaunchServices parents it outside this launchd
|
|
351
|
+
# job's process group. Same fix + rationale as twitter-backend.sh
|
|
352
|
+
# (2026-07-13). Fallback: direct exec in a new session — os.setsid so
|
|
353
|
+
# Chrome escapes the job's process group; launchd SIGKILLs a transient
|
|
354
|
+
# job's whole pgroup when the shell exits, and `disown` does not change
|
|
355
|
+
# the pgid (2026-07-12).
|
|
356
|
+
local _li_app_bundle=""
|
|
357
|
+
case "$_chrome_bin" in
|
|
358
|
+
*.app/Contents/MacOS/*) _li_app_bundle="${_chrome_bin%%/Contents/MacOS/*}" ;;
|
|
359
|
+
esac
|
|
360
|
+
if [ "$(uname -s)" = "Darwin" ] && [ -n "$_li_app_bundle" ] && [ -d "$_li_app_bundle" ]; then
|
|
361
|
+
open -n -g -a "$_li_app_bundle" --args "${_li_launch_args[@]}" >/dev/null 2>&1 || true
|
|
362
|
+
else
|
|
363
|
+
"${S4L_PYTHON:-python3}" -c 'import os,sys
|
|
342
364
|
os.setsid()
|
|
343
365
|
os.execv(sys.argv[1], sys.argv[1:])' \
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
--no-first-run --no-default-browser-check \
|
|
348
|
-
--disable-features=ChromeWhatsNewUI \
|
|
349
|
-
--disable-backgrounding-occluded-windows \
|
|
350
|
-
--disable-renderer-backgrounding \
|
|
351
|
-
--disable-background-timer-throttling \
|
|
352
|
-
"${_extra[@]}" \
|
|
353
|
-
about:blank >/dev/null 2>&1 &
|
|
354
|
-
disown
|
|
366
|
+
"$_chrome_bin" "${_li_launch_args[@]}" >/dev/null 2>&1 &
|
|
367
|
+
disown
|
|
368
|
+
fi
|
|
355
369
|
for _i in 1 2 3 4 5 6 7 8 9 10 11 12; do
|
|
356
370
|
curl -sf --max-time 2 -o /dev/null http://127.0.0.1:9556/json/version 2>/dev/null && break
|
|
357
371
|
sleep 1
|
|
@@ -309,27 +309,47 @@ ensure_twitter_browser_for_backend() {
|
|
|
309
309
|
[ -n "$_stale_pids" ] && { kill -9 $_stale_pids 2>/dev/null || true; sleep 1; }
|
|
310
310
|
rm -f "$_prof_dir/SingletonLock" "$_prof_dir/SingletonSocket" "$_prof_dir/SingletonCookie" 2>/dev/null || true
|
|
311
311
|
fi
|
|
312
|
-
#
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
312
|
+
# Launch flags shared by both spawn paths below.
|
|
313
|
+
local _launch_args=(
|
|
314
|
+
--remote-debugging-port=9555
|
|
315
|
+
--user-data-dir="$HOME/.claude/browser-profiles/browser-harness"
|
|
316
|
+
--no-first-run --no-default-browser-check
|
|
317
|
+
--password-store=basic --use-mock-keychain
|
|
318
|
+
--disable-features=ChromeWhatsNewUI,CalculateNativeWinOcclusion
|
|
319
|
+
--disable-backgrounding-occluded-windows
|
|
320
|
+
"${_extra[@]}"
|
|
321
|
+
"${BH_LAUNCH_URL:-https://x.com}"
|
|
322
|
+
)
|
|
323
|
+
# macOS + .app-bundled Chrome: launch via `open -n -g` so the window
|
|
324
|
+
# NEVER steals the user's focus. A directly-exec'd Chrome always
|
|
325
|
+
# activates itself on launch — every legitimate relaunch (wedge heal,
|
|
326
|
+
# user quit, crash) popped a window over the user's work (the
|
|
327
|
+
# foreground-telemetry `cause:launched` events, 2026-07-13). -n forces
|
|
328
|
+
# a NEW instance (the user's personal Chrome may already be running;
|
|
329
|
+
# without -n LaunchServices would just poke it and drop our --args),
|
|
330
|
+
# -g launches WITHOUT activation. LaunchServices also parents the
|
|
331
|
+
# process outside this launchd job's process group, which independently
|
|
332
|
+
# covers the 2026-07-12 pgroup-reaping bug the setsid fallback fixes.
|
|
333
|
+
local _app_bundle=""
|
|
334
|
+
case "$_chrome_bin" in
|
|
335
|
+
*.app/Contents/MacOS/*) _app_bundle="${_chrome_bin%%/Contents/MacOS/*}" ;;
|
|
336
|
+
esac
|
|
337
|
+
if [ "$(uname -s)" = "Darwin" ] && [ -n "$_app_bundle" ] && [ -d "$_app_bundle" ]; then
|
|
338
|
+
open -n -g -a "$_app_bundle" --args "${_launch_args[@]}" >/dev/null 2>&1 || true
|
|
339
|
+
else
|
|
340
|
+
# Fallback (Linux, bare chromium binaries): direct exec in a NEW
|
|
341
|
+
# SESSION. os.setsid: Chrome must escape THIS job's process group —
|
|
342
|
+
# launchd SIGKILLs a transient job's whole process group the moment
|
|
343
|
+
# the shell exits (no AbandonProcessGroup), and `disown` does not
|
|
344
|
+
# change the pgid, so a plainly-backgrounded Chrome died on every
|
|
345
|
+
# cycle completion and the NEXT cycle's relaunch stole the user's
|
|
346
|
+
# focus (2026-07-12 root cause).
|
|
347
|
+
"${S4L_PYTHON:-python3}" -c 'import os,sys
|
|
321
348
|
os.setsid()
|
|
322
349
|
os.execv(sys.argv[1], sys.argv[1:])' \
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
--no-first-run --no-default-browser-check \
|
|
327
|
-
--password-store=basic --use-mock-keychain \
|
|
328
|
-
--disable-features=ChromeWhatsNewUI,CalculateNativeWinOcclusion \
|
|
329
|
-
--disable-backgrounding-occluded-windows \
|
|
330
|
-
"${_extra[@]}" \
|
|
331
|
-
"${BH_LAUNCH_URL:-https://x.com}" >/dev/null 2>&1 &
|
|
332
|
-
disown
|
|
350
|
+
"$_chrome_bin" "${_launch_args[@]}" >/dev/null 2>&1 &
|
|
351
|
+
disown
|
|
352
|
+
fi
|
|
333
353
|
for _i in 1 2 3 4 5 6 7 8 9 10 11 12; do
|
|
334
354
|
curl -sf --max-time 2 -o /dev/null http://127.0.0.1:9555/json/version 2>/dev/null && break
|
|
335
355
|
sleep 1
|