@m13v/s4l 1.7.1-rc.5 → 1.7.1-rc.7

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.
@@ -10,19 +10,11 @@ import { createRequire } from "node:module";
10
10
  import { repoDir, run } from "./repo.js";
11
11
  import { resolvePython } from "./runtime.js";
12
12
  const require = createRequire(import.meta.url);
13
- export const ONBOARDING_MILESTONES = [
14
- "environment_checked",
15
- "runtime_ready",
16
- "x_connected",
17
- "x_verified",
18
- "profile_scanned",
19
- "mode_chosen",
20
- "project_ready",
21
- "topics_seeded",
22
- "tasks_scheduled",
23
- ];
24
13
  const ledgerApi = require("../shared/onboarding-ledger.cjs");
25
14
  const doctorApi = require("../shared/doctor.cjs");
15
+ // Re-export of the ONE runtime array (see the comment above the imports): this
16
+ // is not a second list, just a typed alias for ledgerApi.MILESTONES.
17
+ export const ONBOARDING_MILESTONES = ledgerApi.MILESTONES;
26
18
  export function onboardingSnapshot() {
27
19
  return ledgerApi.publicSnapshot();
28
20
  }
@@ -1,4 +1,4 @@
1
1
  {
2
- "version": "1.7.1-rc.5",
3
- "installedAt": "2026-07-07T21:16:12.514Z"
2
+ "version": "1.7.1-rc.7",
3
+ "installedAt": "2026-07-07T23:08:38.967Z"
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.1-rc.5",
5
+ "version": "1.7.1-rc.7",
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.1-rc.5",
3
+ "version": "1.7.1-rc.7",
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",
@@ -10,6 +10,7 @@ const MILESTONES = [
10
10
  "environment_checked",
11
11
  "runtime_ready",
12
12
  "x_connected",
13
+ "x_verified",
13
14
  "profile_scanned",
14
15
  "mode_chosen",
15
16
  "project_ready",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m13v/s4l",
3
- "version": "1.7.1-rc.5",
3
+ "version": "1.7.1-rc.7",
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",
@@ -17,9 +17,12 @@
17
17
  # disturbing the rest of the environment.
18
18
  # --deep FULL NUKE — the plugin reset above PLUS the shared layer it touches:
19
19
  # per-agent Chrome profiles + cookies (reddit/linkedin/twitter), the
20
- # browser-harness backend, and the packaged toolchain (uv binary, uv
21
- # cache, Chromium ~1.7G). Other tools that rely on uv/Chromium
22
- # re-provision afterward. Use to reproduce a true bare-metal box.
20
+ # browser-harness backend, the packaged toolchain (uv binary + uv
21
+ # data/cache, Chromium ~1.7G), the uv PATH shim in your shell rc, the
22
+ # real Google Chrome.app the provisioner installs, and Google's
23
+ # Keystone updater. Reproduces a genuinely bare-metal box (as if S4L
24
+ # had never run). Other tools that rely on uv/Chrome/Chromium
25
+ # re-provision afterward — intended for DEDICATED test machines.
23
26
  #
24
27
  # Usage:
25
28
  # scripts/reset-test-machine.sh # dry run: print what the plugin reset WOULD remove
@@ -205,6 +208,27 @@ echo "[1] MCP state dir (uv-owned python, venv, materialized repo, runtime.json,
205
208
  rm_path "$HOME_DIR/.social-autoposter-mcp" "state"
206
209
  echo
207
210
 
211
+ # ---- 1a. compat symlink ~/social-autoposter -> materialized repo -----------
212
+ # The .mcpb provisioner plants ~/social-autoposter as a symlink INTO the state
213
+ # dir (so the pipeline's hardcoded $HOME/social-autoposter paths resolve). The
214
+ # state-dir wipe in [1] leaves it DANGLING. Remove it — but ONLY when it is a
215
+ # symlink resolving into .social-autoposter-mcp, so a developer's real clone (or
216
+ # their own ~/social-autoposter symlink to a working tree) is never touched.
217
+ echo "[1a] compat symlink ~/social-autoposter (plugin-planted)"
218
+ SA_LINK="$HOME_DIR/social-autoposter"
219
+ if [ -L "$SA_LINK" ]; then
220
+ SA_TARGET="$(readlink "$SA_LINK" 2>/dev/null || true)"
221
+ case "$SA_TARGET" in
222
+ *.social-autoposter-mcp/*|*.social-autoposter-mcp) rm_path "$SA_LINK" "compat-symlink" ;;
223
+ *) echo " (leaving $SA_LINK -> $SA_TARGET — not a plugin-planted symlink)" ;;
224
+ esac
225
+ elif [ -e "$SA_LINK" ]; then
226
+ echo " (leaving $SA_LINK — a real directory/clone, not a plugin-planted symlink)"
227
+ else
228
+ echo " (no ~/social-autoposter symlink)"
229
+ fi
230
+ echo
231
+
208
232
  # ---- 1b. Claude Desktop .mcpb extension -----------------------------------
209
233
  # A .mcpb (Desktop) install scatters THREE artifacts under ~/Library/Application
210
234
  # Support/Claude/, NONE of which live in the state dir removed in [1]: the
@@ -532,6 +556,23 @@ if [ "$DEEP" -eq 1 ]; then
532
556
  rm_path "$HOME_DIR/.local/bin/uv" "uv-bin"
533
557
  rm_path "$HOME_DIR/.local/bin/uvx" "uvx-bin"
534
558
  rm_path "$HOME_DIR/.cache/uv" "uv-cache"
559
+ # uv's DATA dir (installed standalone Pythons + tool venvs) and its PATH shim
560
+ # survive the bin removal — a bare box has neither. The uv installer also
561
+ # appends `. "$HOME/.local/bin/env"` to the shell rc files; strip that exact
562
+ # line so no uv PATH shim lingers.
563
+ rm_path "$HOME_DIR/.local/share/uv" "uv-data"
564
+ rm_path "$HOME_DIR/.local/bin/env" "uv-env-script"
565
+ for rc in "$HOME_DIR/.zshrc" "$HOME_DIR/.zprofile" "$HOME_DIR/.profile" \
566
+ "$HOME_DIR/.bash_profile" "$HOME_DIR/.bashrc"; do
567
+ [ -f "$rc" ] || continue
568
+ if grep -q '\.local/bin/env' "$rc" 2>/dev/null; then
569
+ echo " edit strip uv env-shim line from $rc"
570
+ if [ "$DRY" -eq 0 ]; then
571
+ cp "$rc" "$rc.bak" 2>/dev/null || true
572
+ grep -v '\.local/bin/env' "$rc" > "$rc.tmp" 2>/dev/null && mv "$rc.tmp" "$rc"
573
+ fi
574
+ fi
575
+ done
535
576
  echo " WARN --deep removed uv + ms-playwright; other tools on this machine that rely on them will re-provision."
536
577
  else
537
578
  echo " (left uv + ~/Library/Caches/ms-playwright + ~/.cache/uv in place)"
@@ -539,6 +580,47 @@ fi
539
580
  fi
540
581
  echo
541
582
 
583
+ # ---- 6b. DEEP: packaged Google Chrome + its Keystone updater ----------------
584
+ # The provisioner installs a REAL Google Chrome.app (runtime.ts Step 7) — the
585
+ # browser the scanner drives over CDP — that NO other reset step removes, plus
586
+ # installing it drops Google's Keystone auto-updater (LaunchAgents + support
587
+ # dirs). A bare box had none of this. --deep removes all of it so the Chrome
588
+ # install step is exercised fresh. NOTE: this touches the machine's Google Chrome
589
+ # globally, not just S4L — hence --deep / test-box only.
590
+ if [ "$PLUGIN_ONLY" -eq 1 ]; then
591
+ echo "[6b] packaged Google Chrome + Keystone updater — skipped (plugin reset; pass --deep to remove)"
592
+ else
593
+ echo "[6b] packaged Google Chrome + Keystone updater — $([ "$DEEP" -eq 1 ] && echo ENABLED || echo 'skipped (pass --deep)')"
594
+ if [ "$DEEP" -eq 1 ]; then
595
+ # Stop Chrome + unload the Keystone/updater agents before deleting their plists.
596
+ if [ "$DRY" -eq 0 ]; then
597
+ pkill -f 'Google Chrome' 2>/dev/null || true
598
+ for lbl in com.google.keystone.agent com.google.keystone.xpcservice com.google.GoogleUpdater.wake; do
599
+ launchctl bootout "gui/$(id -u)/$lbl" 2>/dev/null || true
600
+ done
601
+ fi
602
+ rm_path "/Applications/Google Chrome.app" "google-chrome"
603
+ rm_path "$HOME_DIR/Applications/Google Chrome.app" "google-chrome-user"
604
+ for p in \
605
+ "$HOME_DIR/Library/Application Support/Google" \
606
+ "$HOME_DIR/Library/Google" \
607
+ "$HOME_DIR/Library/Caches/Google" \
608
+ "$HOME_DIR/Library/Caches/com.google.Chrome" \
609
+ "$HOME_DIR/Library/Caches/com.google.Keystone" \
610
+ "$HOME_DIR/Library/LaunchAgents/com.google.keystone.agent.plist" \
611
+ "$HOME_DIR/Library/LaunchAgents/com.google.keystone.xpcservice.plist" \
612
+ "$HOME_DIR/Library/LaunchAgents/com.google.GoogleUpdater.wake.plist" \
613
+ "$HOME_DIR/Library/LaunchAgents/com.google.GoogleUpdater.plist"; do
614
+ rm_path "$p" "google"
615
+ done
616
+ for f in "$HOME_DIR"/Library/Preferences/com.google.Chrome*.plist; do
617
+ [ -e "$f" ] && rm_path "$f" "google-pref"
618
+ done
619
+ echo " WARN --deep removed Google Chrome + Keystone updater machine-wide."
620
+ fi
621
+ fi
622
+ echo
623
+
542
624
  # ---- 7. settle & verify (defeat Claude auto-relaunch resurrection) ---------
543
625
  # Claude Desktop can RELAUNCH after step [0] — on auto-update (ShipIt), a macOS
544
626
  # re-open, or a login item — and a relaunched host re-materializes a skeleton