@m13v/s4l 1.7.1-rc.3 → 1.7.1-rc.4
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/index.js +24 -0
- package/mcp/dist/onboarding.js +1 -0
- package/mcp/dist/version.json +2 -2
- package/mcp/manifest.json +1 -1
- package/mcp/menubar/s4l_menubar.py +5 -1
- package/mcp/package.json +1 -1
- package/package.json +1 -1
package/mcp/dist/index.js
CHANGED
|
@@ -1835,6 +1835,18 @@ tool("project_config", {
|
|
|
1835
1835
|
// as expected. Once connect_x succeeds, run the full phase immediately
|
|
1836
1836
|
// to verify persistence, CDP, and the durable cookie mirror.
|
|
1837
1837
|
doctorReport = await runDoctorPhase("full");
|
|
1838
|
+
// Only mark x_verified once doctor confirms all X checks pass (session valid,
|
|
1839
|
+
// cookies persisted, CDP responding, keychain accessible). This prevents the
|
|
1840
|
+
// autopilot from starting if X connection didn't actually persist.
|
|
1841
|
+
if (doctorReport?.ok) {
|
|
1842
|
+
completeOnboardingMilestone("x_verified", {
|
|
1843
|
+
x_session: doctorReport.checks?.find(c => c.id === "x_session")?.status,
|
|
1844
|
+
x_cookies: doctorReport.checks?.find(c => c.id === "x_cookie_sqlite")?.status,
|
|
1845
|
+
});
|
|
1846
|
+
}
|
|
1847
|
+
else {
|
|
1848
|
+
recordOnboardingAttempt("x_verified", { doctor_ok: false });
|
|
1849
|
+
}
|
|
1838
1850
|
}
|
|
1839
1851
|
else {
|
|
1840
1852
|
blockOnboardingMilestone("x_connected", `x_${r.state || "not_connected"}`, r.error || r.note || summarizeXAuth(r), { state: r.state || "not_connected" });
|
|
@@ -3225,6 +3237,18 @@ async function ensureQueueKickerInstalled() {
|
|
|
3225
3237
|
detail: "no ready project or active persona yet",
|
|
3226
3238
|
};
|
|
3227
3239
|
}
|
|
3240
|
+
// Additional gate: X must be connected and verified before autopilot starts.
|
|
3241
|
+
// This prevents wasted cycles against a logged-out x.com if X connection didn't
|
|
3242
|
+
// persist after import/login. x_verified milestone only completes after doctor
|
|
3243
|
+
// confirms X session and cookies are valid.
|
|
3244
|
+
const onboardingState = onboardingSnapshot();
|
|
3245
|
+
const xVerified = onboardingState?.milestones?.some((m) => m.id === "x_verified" && m.status === "complete");
|
|
3246
|
+
if (!xVerified) {
|
|
3247
|
+
return {
|
|
3248
|
+
ok: false,
|
|
3249
|
+
detail: "X not yet verified (awaiting explicit pre-flight confirmation)",
|
|
3250
|
+
};
|
|
3251
|
+
}
|
|
3228
3252
|
const logDir = path.join(repoDir(), "skill", "logs");
|
|
3229
3253
|
try {
|
|
3230
3254
|
fs.mkdirSync(logDir, { recursive: true });
|
package/mcp/dist/onboarding.js
CHANGED
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.1-rc.
|
|
5
|
+
"version": "1.7.1-rc.4",
|
|
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": {
|
|
@@ -479,7 +479,11 @@ class S4LMenuBar(rumps.App):
|
|
|
479
479
|
# occlusion probe also reads not-visible during fullscreen apps and the
|
|
480
480
|
# locked screen, so acting on it would false-fire; the remote fix is the
|
|
481
481
|
# restart_menubar MCP tool.
|
|
482
|
-
|
|
482
|
+
# First probe at +60s, not immediately: the window server takes a few
|
|
483
|
+
# seconds to place a fresh status item (occlusion reads not-visible and
|
|
484
|
+
# the frame sits at x=0 until then — measured 2026-07-07), so an eager
|
|
485
|
+
# probe would log a false "hidden" on every single process start.
|
|
486
|
+
self._icon_check_due_at = time.monotonic() + 60.0
|
|
483
487
|
self._icon_hidden_since = None
|
|
484
488
|
self._icon_last_on_screen = "unprobed"
|
|
485
489
|
self._icon_watch_started = time.monotonic()
|
package/mcp/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@m13v/s4l-mcp",
|
|
3
|
-
"version": "1.7.1-rc.
|
|
3
|
+
"version": "1.7.1-rc.4",
|
|
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