social-autoposter 1.6.80 → 1.6.81

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.6.80",
3
- "installedAt": "2026-06-22T19:14:04.032Z"
2
+ "version": "1.6.81",
3
+ "installedAt": "2026-06-22T19:29:05.014Z"
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.6.80",
5
+ "version": "1.6.81",
6
6
  "description": "Draft, review, approve, and autopilot X/Twitter posts. Thin desktop client over the S4L pipeline.",
7
7
  "long_description": "A guided assistant that drafts, reviews, and autopilots X/Twitter posts.\nTo get started:\n1. Click **Configure** and set every tool permission to **Always Allow**.\n2. Copy this prompt: **Set me up on S4L end to end**.\n3. Quit fully with CMD+Q, restart Claude, and paste the prompt into a new chat.",
8
8
  "author": {
@@ -97,7 +97,13 @@ class S4LMenuBar(rumps.App):
97
97
  self._last_blocker_code = None
98
98
  self._sig = None # last rendered state signature; skip rebuild if unchanged
99
99
  self._review_active = False # a review-card sequence is on screen
100
- self._reviewed_batches = set() # batch_ids already handled this run
100
+ # Signature of the pending drafts last presented. We de-dup on the CONTENT
101
+ # of the pending set, NOT on the batch_id: the server intentionally reuses
102
+ # a constant batch_id ("review-queue") so a continuous autopilot's drafts
103
+ # accumulate into one queue. Keying de-dup on that constant suppressed every
104
+ # later batch for the life of this process (only a restart cleared it),
105
+ # which is exactly the "drafts queued but no cards" bug.
106
+ self._last_review_sig = None
101
107
  self._spin_i = 0
102
108
  self._spinner = None # fast rumps.Timer animating the title while busy
103
109
  # Reliable self-check of our own Accessibility (TCC) grant — this is the
@@ -391,24 +397,35 @@ class S4LMenuBar(rumps.App):
391
397
  if not req:
392
398
  return
393
399
  batch = req.get("batch_id")
394
- if not batch or batch in self._reviewed_batches:
400
+ if not batch:
395
401
  return
396
402
  plan = st.read_plan(req.get("plan_path") or "")
397
403
  drafts = st.review_drafts(plan)
398
404
  # Nothing left to review (empty, missing plan, or all already posted via
399
- # the chat surface) — mark handled and clear the signal.
405
+ # the chat surface) — clear the signal and reset the signature so a future
406
+ # batch is presented fresh.
400
407
  if not drafts:
401
- self._reviewed_batches.add(batch)
408
+ self._last_review_sig = None
402
409
  st.clear_review_request()
403
410
  return
411
+ # De-dup on the CONTENT of the pending set (each draft's plan index + reply
412
+ # text), not the constant batch_id. This means: re-present whenever NEW
413
+ # drafts arrive (the signature changes), but don't re-pop the identical
414
+ # cards we already showed for this same pending set. No restart is ever
415
+ # needed for new pending drafts to surface.
416
+ sig = tuple((d.get("n"), d.get("reply_text") or "") for d in drafts)
417
+ if sig == self._last_review_sig:
418
+ return
404
419
  self._review_active = True
405
- self._reviewed_batches.add(batch)
406
420
  try:
407
421
  import s4l_card
408
422
 
409
423
  s4l_card.present_review(
410
424
  drafts, lambda decisions: self._on_review_done(batch, decisions)
411
425
  )
426
+ # Record as shown only AFTER the cards are actually up, so a transient
427
+ # card-UI failure never permanently suppresses this pending set.
428
+ self._last_review_sig = sig
412
429
  except Exception as e:
413
430
  # Card UI unavailable — don't strand the batch; chat review still works.
414
431
  self._review_active = False
package/mcp/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m13v/social-autoposter-mcp",
3
- "version": "1.6.80",
3
+ "version": "1.6.81",
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": "social-autoposter",
3
- "version": "1.6.80",
3
+ "version": "1.6.81",
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"