@floomhq/signaldash 0.39.2 → 0.39.3
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/README.md +16 -1
- package/bin/sd.mjs +45 -0
- package/package.json +1 -1
- package/skills/signaldash/SKILL.md +6 -1
package/README.md
CHANGED
|
@@ -120,7 +120,7 @@ setup installs both from the same pinned npm package
|
|
|
120
120
|
the human chose to execute:
|
|
121
121
|
|
|
122
122
|
```bash
|
|
123
|
-
npx -y @floomhq/signaldash@0.39.
|
|
123
|
+
npx -y @floomhq/signaldash@0.39.3 <invite-code>
|
|
124
124
|
```
|
|
125
125
|
|
|
126
126
|
Run that command in a terminal, not in an agent chat. Do not ask an agent to
|
|
@@ -200,6 +200,7 @@ SignalDash exposes:
|
|
|
200
200
|
- `li_set_scheduled_post_first_comment(id, first_comment, confirm)`
|
|
201
201
|
- `li_scheduled_posts()`
|
|
202
202
|
- `li_scheduled_post_preview(id)`
|
|
203
|
+
- `li_edit_scheduled_post(id, text, scheduled_at, mentions?, attachments?, first_comment?, confirm?, approval_hash?, expected_version?, expected_updated_at?)`
|
|
203
204
|
- `li_cancel_scheduled_post(id, confirm)`
|
|
204
205
|
- `sd_schedule_message(channel, chat_id, text, scheduled_at, confirm)`
|
|
205
206
|
- `sd_scheduled_messages(state?, channel?)`
|
|
@@ -394,6 +395,20 @@ shows only that post, including its stored image attachments. Preview sessions
|
|
|
394
395
|
and media routes remain account- and post-scoped, expire independently, and
|
|
395
396
|
are revoked on logout.
|
|
396
397
|
|
|
398
|
+
`li_edit_scheduled_post` replaces one complete scheduled-post payload in place.
|
|
399
|
+
The preview call takes the exact UUID, text, offset-qualified time, mentions,
|
|
400
|
+
image bytes, and optional first comment. Confirmation repeats that identical
|
|
401
|
+
payload with the single-use approval hash and exact source version and
|
|
402
|
+
`updated_at`. One atomic compare-and-swap preserves the UUID, `created_at`,
|
|
403
|
+
provider account, and content-pipeline audit fields. A changed, executing,
|
|
404
|
+
published, cancelled, failed, foreign, expired, or replayed target is refused,
|
|
405
|
+
and the edit path never contacts LinkedIn or Unipile. Omitting `mentions`,
|
|
406
|
+
`attachments`, or `first_comment` in the replacement clears that field.
|
|
407
|
+
Scheduled-post duplicate identity covers the complete normalized payload:
|
|
408
|
+
text, time, mentions, exact attachment bytes, and first comment. Only active
|
|
409
|
+
`scheduled` or `executing` rows participate, so a cancelled, published, or
|
|
410
|
+
failed historical row never blocks a legitimate new schedule.
|
|
411
|
+
|
|
397
412
|
`sd_schedule_message` puts one exact message into one exact chat at one exact
|
|
398
413
|
time, on WhatsApp or LinkedIn, text only. It enqueues; it never sends. The
|
|
399
414
|
attachment bytes a WhatsApp send accepts are refused here rather than held on
|
package/bin/sd.mjs
CHANGED
|
@@ -1690,6 +1690,51 @@ const TOOLS = [
|
|
|
1690
1690
|
additionalProperties: false,
|
|
1691
1691
|
},
|
|
1692
1692
|
},
|
|
1693
|
+
{
|
|
1694
|
+
name: "li_edit_scheduled_post",
|
|
1695
|
+
path: "/li/edit_scheduled_post",
|
|
1696
|
+
description: "Atomically replace the text, time, mentions, image attachments, and optional first comment of one exact SignalDash post while it is still scheduled. The first call previews the complete replacement. Repeat the identical full payload with confirm:true, the single-use approval_hash, expected_version, and expected_updated_at returned by the preview. The post UUID, created_at, provider account, and content-pipeline audit binding are preserved; no provider call occurs.",
|
|
1697
|
+
inputSchema: {
|
|
1698
|
+
type: "object",
|
|
1699
|
+
properties: {
|
|
1700
|
+
id: { type: "string", format: "uuid" },
|
|
1701
|
+
text: { type: "string", minLength: 1, maxLength: 3000 },
|
|
1702
|
+
scheduled_at: { type: "string", format: "date-time" },
|
|
1703
|
+
mentions: {
|
|
1704
|
+
type: "array", maxItems: 20,
|
|
1705
|
+
items: {
|
|
1706
|
+
type: "object",
|
|
1707
|
+
properties: {
|
|
1708
|
+
name: { type: "string", minLength: 1, maxLength: 120 },
|
|
1709
|
+
profile_id: { type: "string", minLength: 1, maxLength: 250 },
|
|
1710
|
+
},
|
|
1711
|
+
required: ["name", "profile_id"],
|
|
1712
|
+
additionalProperties: false,
|
|
1713
|
+
},
|
|
1714
|
+
},
|
|
1715
|
+
attachments: {
|
|
1716
|
+
type: "array", maxItems: 4,
|
|
1717
|
+
items: {
|
|
1718
|
+
type: "object",
|
|
1719
|
+
properties: {
|
|
1720
|
+
filename: { type: "string", minLength: 1, maxLength: 180 },
|
|
1721
|
+
content_type: { type: "string", enum: ["image/png", "image/jpeg", "image/webp", "image/gif"] },
|
|
1722
|
+
content_base64: { type: "string", minLength: 1 },
|
|
1723
|
+
},
|
|
1724
|
+
required: ["filename", "content_type", "content_base64"],
|
|
1725
|
+
additionalProperties: false,
|
|
1726
|
+
},
|
|
1727
|
+
},
|
|
1728
|
+
first_comment: { type: "string", minLength: 1, maxLength: 1250 },
|
|
1729
|
+
confirm: { type: "boolean", const: true },
|
|
1730
|
+
approval_hash: { type: "string", minLength: 64, maxLength: 64, pattern: "^[0-9a-f]{64}$" },
|
|
1731
|
+
expected_version: { type: "integer", minimum: 0 },
|
|
1732
|
+
expected_updated_at: { type: "string", format: "date-time" },
|
|
1733
|
+
},
|
|
1734
|
+
required: ["id", "text", "scheduled_at"],
|
|
1735
|
+
additionalProperties: false,
|
|
1736
|
+
},
|
|
1737
|
+
},
|
|
1693
1738
|
{
|
|
1694
1739
|
name: "li_cancel_scheduled_post",
|
|
1695
1740
|
path: "/li/cancel_scheduled_post",
|
package/package.json
CHANGED
|
@@ -452,6 +452,7 @@ Use the exact tool names and argument keys below. Limits are optional.
|
|
|
452
452
|
| `li_set_scheduled_post_first_comment` | `id` required UUID; `first_comment` required, max 1250; `confirm:true` required | Attach one exact approved first comment to a scheduled post. SignalDash publishes it through the same connected account after the post and never republishes the post if the comment fails. |
|
|
453
453
|
| `li_scheduled_posts` | no arguments | Read one shared content-calendar view across SignalDash and the configured Buffer LinkedIn channel. Inspect `completeness` and every `sources.*.state` before treating absence as an empty calendar. Native LinkedIn scheduled posts and drafts are invisible because Unipile has no documented read route for them; SignalDash does not use raw Voyager routes or linkedin.com browser access. An empty `items` array proves only that the visible sources returned no entries. |
|
|
454
454
|
| `li_scheduled_post_preview` | `id` required UUID | Create a short-lived, single-use browser handoff for one exact active SignalDash post. The isolated page includes its stored image attachments through account- and post-scoped protected media routes. |
|
|
455
|
+
| `li_edit_scheduled_post` | `id`, `text`, and offset-qualified `scheduled_at` required; full replacement `mentions`, `attachments`, and `first_comment` optional; confirmation repeats the identical payload with `confirm:true`, `approval_hash`, `expected_version`, and `expected_updated_at` from preview | Atomically replace one scheduled post in place. The UUID, creation time, provider account, and content-pipeline audit fields remain unchanged. A changed or non-scheduled row is refused, approval is single-use and expires, and no provider call occurs. Omitting an optional replacement field clears it. Duplicate identity covers the complete normalized payload, including exact attachment bytes, and only active scheduled or executing rows participate; cancelled history never blocks a replacement. |
|
|
455
456
|
| `li_cancel_scheduled_post` | `id` required UUID; `confirm:true` required | Cancel one exact post while it is still scheduled. It cannot recall an executing or published post. |
|
|
456
457
|
| `sd_schedule_message` | `channel` required, `whatsapp` or `linkedin`; `chat_id` required, max 500; `text` required, max 5000; `scheduled_at` required offset-qualified ISO date-time from 60 seconds to 365 days ahead; `confirm:true` required | Schedule one exact message into one chat you have already read. Read that exact chat first, at `limit` 10 or more on LinkedIn: SignalDash records what the thread looked like and refuses at send time if the conversation moved. Text only; attachments are refused rather than dropped. One message at one time, never a sequence. |
|
|
457
458
|
| `sd_scheduled_messages` | `state` optional, one of `scheduled`, `executing`, `sent`, `cancelled`, `failed`, `needs_review`; `channel` optional | List only this authenticated user's scheduled messages and their durable states. Returns every matching row, unpaginated, and always reports `needs_review_count` outside your filter. |
|
|
@@ -517,6 +518,7 @@ li_draft_post({"text":"Most agents need better context, not more autonomy."})
|
|
|
517
518
|
li_set_scheduled_post_first_comment({"id":"00000000-0000-4000-8000-000000000000","first_comment":"https://github.com/xai-org/x-algorithm","confirm":true})
|
|
518
519
|
li_scheduled_posts({})
|
|
519
520
|
li_scheduled_post_preview({"id":"00000000-0000-4000-8000-000000000000"})
|
|
521
|
+
li_edit_scheduled_post({"id":"00000000-0000-4000-8000-000000000000","text":"Exact replacement","scheduled_at":"2026-09-07T08:00:00Z"})
|
|
520
522
|
li_cancel_scheduled_post({"id":"00000000-0000-4000-8000-000000000000","confirm":true})
|
|
521
523
|
sd_schedule_message({"channel":"whatsapp","chat_id":"chat_wa_91b2","text":"Following up on the Q3 numbers, as promised.","scheduled_at":"2026-08-19T09:00:00Z","confirm":true})
|
|
522
524
|
sd_scheduled_messages({})
|
|
@@ -556,7 +558,10 @@ commit atomically. Once scheduled, its override-bound first comment is
|
|
|
556
558
|
immutable. Native LinkedIn remains explicitly blind, so never call
|
|
557
559
|
an empty result an empty calendar. For an existing scheduled post, use
|
|
558
560
|
`li_scheduled_post_preview` when the human wants to review the exact stored
|
|
559
|
-
copy and images in isolation. Use
|
|
561
|
+
copy and images in isolation. Use `li_edit_scheduled_post` for an in-place
|
|
562
|
+
replacement: preview the complete payload, show the exact result, then repeat
|
|
563
|
+
it with the returned approval, source version, and source timestamp. Never
|
|
564
|
+
reuse an approval after any row change. Use
|
|
560
565
|
`li_set_scheduled_post_first_comment` only after approval of the exact comment.
|
|
561
566
|
SignalDash persists the published post ID before sending the comment, so a
|
|
562
567
|
comment failure never republishes the post. It fails interrupted or ambiguous
|