@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.
@@ -1,4 +1,4 @@
1
1
  {
2
- "version": "1.7.4-rc.32",
3
- "installedAt": "2026-07-13T22:36:08.709Z"
2
+ "version": "1.7.4-rc.33",
3
+ "installedAt": "2026-07-13T22:44:32.415Z"
4
4
  }
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.32",
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.32",
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m13v/s4l",
3
- "version": "1.7.4-rc.32",
3
+ "version": "1.7.4-rc.33",
4
4
  "description": "Automated social posting pipeline for Reddit, X/Twitter, LinkedIn, and Moltbook. Install as a Claude Code agent skill.",
5
5
  "bin": {
6
6
  "social-autoposter": "bin/cli.js",
@@ -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
- # os.setsid: Chrome must escape THIS job's process group — launchd
337
- # SIGKILLs a transient job's whole process group when the shell exits,
338
- # and `disown` does not change the pgid, so Chrome died with every
339
- # completed run and the next lane's relaunch stole the user's focus
340
- # (2026-07-12; same fix as twitter-backend.sh).
341
- "${S4L_PYTHON:-python3}" -c 'import os,sys
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
- "$_chrome_bin" \
345
- --remote-debugging-port=9556 \
346
- --user-data-dir="$HOME/.claude/browser-profiles/browser-harness-linkedin" \
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
- # os.setsid: Chrome must escape THIS job's process group. The kicker is a
313
- # transient launchd job, and launchd SIGKILLs the job's whole process
314
- # group the moment the shell exits (no AbandonProcessGroup) — `disown`
315
- # does not change the pgid, so a plainly-backgrounded Chrome died on
316
- # every cycle completion and the NEXT cycle's relaunch stole the user's
317
- # focus (2026-07-12 root cause; the foreground-telemetry `cause:launched`
318
- # loop). A new session makes Chrome survive its launcher regardless of
319
- # which lane spawned it.
320
- "${S4L_PYTHON:-python3}" -c 'import os,sys
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
- "$_chrome_bin" \
324
- --remote-debugging-port=9555 \
325
- --user-data-dir="$HOME/.claude/browser-profiles/browser-harness" \
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