social-autoposter 1.6.111 → 1.6.112
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/menubar/s4l_menubar.py +33 -6
- package/mcp/package.json +1 -1
- package/package.json +1 -1
- package/scripts/s4l_box_update.sh +17 -1
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.6.
|
|
5
|
+
"version": "1.6.112",
|
|
6
6
|
"description": "Draft, review, approve, and autopilot X/Twitter posts.",
|
|
7
7
|
"long_description": "The disclaimer above is generic Claude boilerplate. S4L 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 end to end**\n\n2\\. Quit fully with CMD+Q, restart Claude, and paste the prompt into a new chat.",
|
|
8
8
|
"author": {
|
|
@@ -249,10 +249,37 @@ class S4LMenuBar(rumps.App):
|
|
|
249
249
|
self._send_to_claude(UPDATE_PROMPT)
|
|
250
250
|
|
|
251
251
|
# ---- .mcpb self-update (menu-bar driven) ------------------------------
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
"
|
|
255
|
-
|
|
252
|
+
@staticmethod
|
|
253
|
+
def _ext_dir():
|
|
254
|
+
"""Resolve this plugin's Claude Desktop extension dir.
|
|
255
|
+
|
|
256
|
+
Claude derives the extension id from the manifest author, so it changed
|
|
257
|
+
`local.mcpb.m13v.social-autoposter` ->
|
|
258
|
+
`local.mcpb.s4l.ai.social-autoposter` when the author became "S4L.ai". A
|
|
259
|
+
hardcoded id silently breaks the self-update button on every fresh
|
|
260
|
+
install (the update unzips into a dir that doesn't exist, so the version
|
|
261
|
+
never advances and fixes never land). Pick the newest `*social-autoposter`
|
|
262
|
+
extension dir that actually has a manifest.json; fall back to the
|
|
263
|
+
historical id so old boxes are unaffected.
|
|
264
|
+
"""
|
|
265
|
+
root = os.path.expanduser(
|
|
266
|
+
"~/Library/Application Support/Claude/Claude Extensions"
|
|
267
|
+
)
|
|
268
|
+
best, best_mtime = None, -1.0
|
|
269
|
+
try:
|
|
270
|
+
for name in os.listdir(root):
|
|
271
|
+
if not name.endswith("social-autoposter"):
|
|
272
|
+
continue
|
|
273
|
+
d = os.path.join(root, name)
|
|
274
|
+
if not os.path.exists(os.path.join(d, "manifest.json")):
|
|
275
|
+
continue
|
|
276
|
+
m = os.path.getmtime(d)
|
|
277
|
+
if m > best_mtime:
|
|
278
|
+
best, best_mtime = d, m
|
|
279
|
+
except OSError:
|
|
280
|
+
pass
|
|
281
|
+
return best or os.path.join(root, "local.mcpb.m13v.social-autoposter")
|
|
282
|
+
|
|
256
283
|
MCPB_URL = (
|
|
257
284
|
"https://github.com/m13v/social-autoposter/releases/latest/download/"
|
|
258
285
|
"social-autoposter.mcpb"
|
|
@@ -275,7 +302,7 @@ class S4LMenuBar(rumps.App):
|
|
|
275
302
|
transient failure). A change forces a title + menu repaint."""
|
|
276
303
|
installed = None
|
|
277
304
|
try:
|
|
278
|
-
with open(os.path.join(self.
|
|
305
|
+
with open(os.path.join(self._ext_dir(), "manifest.json")) as f:
|
|
279
306
|
installed = (json.load(f) or {}).get("version")
|
|
280
307
|
except Exception:
|
|
281
308
|
return # not a .mcpb install (or no manifest) -> nothing to offer
|
|
@@ -314,7 +341,7 @@ class S4LMenuBar(rumps.App):
|
|
|
314
341
|
if r.returncode != 0 or not os.path.exists(mcpb) or os.path.getsize(mcpb) < 100000:
|
|
315
342
|
self._notify("S4L update failed", "Couldn't download the update — check your connection.")
|
|
316
343
|
return
|
|
317
|
-
r = subprocess.run(["unzip", "-oq", mcpb, "-d", self.
|
|
344
|
+
r = subprocess.run(["unzip", "-oq", mcpb, "-d", self._ext_dir()],
|
|
318
345
|
capture_output=True, timeout=180)
|
|
319
346
|
if r.returncode != 0:
|
|
320
347
|
self._notify("S4L update failed", "Couldn't unpack the update.")
|
package/mcp/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@m13v/social-autoposter-mcp",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.112",
|
|
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
|
@@ -14,7 +14,23 @@
|
|
|
14
14
|
# Exits: 0 ok / already current, 2 download failed, 3 unpack failed, 4 no install.
|
|
15
15
|
set -euo pipefail
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
# Resolve the Claude Desktop extension dir. Claude derives its name from the
|
|
18
|
+
# manifest author, so the id changed `local.mcpb.m13v.social-autoposter` ->
|
|
19
|
+
# `local.mcpb.s4l.ai.social-autoposter` when the author became "S4L.ai". A
|
|
20
|
+
# hardcoded id silently breaks the updater on every fresh install (the box
|
|
21
|
+
# reported "no .mcpb install" for exactly this reason). Glob for any
|
|
22
|
+
# `*social-autoposter` extension dir that actually has a manifest.json, newest
|
|
23
|
+
# first, so this keeps working across future renames.
|
|
24
|
+
EXT_ROOT="$HOME/Library/Application Support/Claude/Claude Extensions"
|
|
25
|
+
EXT_DIR=""
|
|
26
|
+
if [ -d "$EXT_ROOT" ]; then
|
|
27
|
+
for d in "$EXT_ROOT"/*social-autoposter; do
|
|
28
|
+
[ -f "$d/manifest.json" ] || continue
|
|
29
|
+
if [ -z "$EXT_DIR" ] || [ "$d" -nt "$EXT_DIR" ]; then EXT_DIR="$d"; fi
|
|
30
|
+
done
|
|
31
|
+
fi
|
|
32
|
+
# Last-resort fallback to the historical id so behavior is unchanged on old boxes.
|
|
33
|
+
[ -n "$EXT_DIR" ] || EXT_DIR="$EXT_ROOT/local.mcpb.m13v.social-autoposter"
|
|
18
34
|
MCPB_URL="https://github.com/m13v/social-autoposter/releases/latest/download/social-autoposter.mcpb"
|
|
19
35
|
RELEASE_API="https://api.github.com/repos/m13v/social-autoposter/releases/latest"
|
|
20
36
|
PY="/usr/bin/python3"
|