@floomhq/signaldash 0.39.18 → 0.39.19
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 +12 -1
- package/bin/sd.mjs +14 -0
- package/package.json +1 -1
- package/skills/signaldash/SKILL.md +2 -0
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.19 <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
|
|
@@ -205,6 +205,7 @@ SignalDash exposes:
|
|
|
205
205
|
- `li_post_draft_preview(id)`
|
|
206
206
|
- `li_scheduled_posts()`
|
|
207
207
|
- `li_scheduled_post_preview(id)`
|
|
208
|
+
- `li_scheduled_post_attachment(id, index)`
|
|
208
209
|
- `li_edit_scheduled_post(id, text, scheduled_at, mentions?, attachments?, first_comment?, confirm?, approval_hash?, expected_version?, expected_updated_at?)`
|
|
209
210
|
- `li_cancel_scheduled_post(id, confirm)`
|
|
210
211
|
- `sd_schedule_message(channel, chat_id, text, scheduled_at, confirm)`
|
|
@@ -491,6 +492,16 @@ per-client throttle. Already-issued 24-character compact tokens and 48-character
|
|
|
491
492
|
`/scheduled-post/h/<token>` or `/calendar/h/<token>` links remain valid until
|
|
492
493
|
their normal expiry.
|
|
493
494
|
|
|
495
|
+
`li_scheduled_post_attachment` is the agent-side path to the same stored bytes
|
|
496
|
+
the preview page renders, without a browser session: it returns one attachment
|
|
497
|
+
of one active post as `content_base64` with its `filename` and its stored
|
|
498
|
+
`content_type` verbatim. It is scoped by the same `data_ref` and the same
|
|
499
|
+
draft/scheduled/executing filter as `li_scheduled_post_preview`, so a cancelled
|
|
500
|
+
or published post, a foreign post, and a missing index are one indistinguishable
|
|
501
|
+
404. The bytes are deliberately not part of the preview response, which reports
|
|
502
|
+
only `attachment_count`, because one image is easily hundreds of kilobytes of
|
|
503
|
+
base64 and the preview is usually read for the text and the time.
|
|
504
|
+
|
|
494
505
|
The shared calendar preserves validated Buffer LinkedIn tag ranges and URLs in
|
|
495
506
|
the post body and also keeps the separate tag audit pills. Valid provider
|
|
496
507
|
annotations render as clickable LinkedIn links in both places. SignalDash
|
package/bin/sd.mjs
CHANGED
|
@@ -1957,6 +1957,20 @@ const TOOLS = [
|
|
|
1957
1957
|
additionalProperties: false,
|
|
1958
1958
|
},
|
|
1959
1959
|
},
|
|
1960
|
+
{
|
|
1961
|
+
name: "li_scheduled_post_attachment",
|
|
1962
|
+
path: "/li/scheduled_post_attachment",
|
|
1963
|
+
description: "Read the exact bytes of one stored attachment on one active SignalDash scheduled post, as base64. Requires the exact post UUID returned by li_draft_post or li_scheduled_posts and a zero-based index strictly below the attachment_count reported by li_scheduled_post_preview or li_scheduled_posts. Returns filename, the stored content_type verbatim, and content_base64. A cancelled or published post, a post belonging to someone else, or an index that does not exist is scheduled_post_attachment_not_found. One image can be hundreds of kilobytes of base64, so fetch it only when the bytes themselves are needed rather than the post text and time.",
|
|
1964
|
+
inputSchema: {
|
|
1965
|
+
type: "object",
|
|
1966
|
+
properties: {
|
|
1967
|
+
id: { type: "string", format: "uuid" },
|
|
1968
|
+
index: { type: "integer", minimum: 0 },
|
|
1969
|
+
},
|
|
1970
|
+
required: ["id", "index"],
|
|
1971
|
+
additionalProperties: false,
|
|
1972
|
+
},
|
|
1973
|
+
},
|
|
1960
1974
|
{
|
|
1961
1975
|
name: "li_edit_scheduled_post",
|
|
1962
1976
|
path: "/li/edit_scheduled_post",
|
package/package.json
CHANGED
|
@@ -459,6 +459,7 @@ Use the exact tool names and argument keys below. Limits are optional.
|
|
|
459
459
|
| `li_profile` | `identifier` required, a public id or member id | Read one LinkedIn profile: name, headline, public identifier, provider id, network distance and the profile picture url. Read-only, one provider call, and it returns those six fields rather than the provider's whole record about a person. It exists because pictures were otherwise a by-product of engagement only: reactions and comments carry one, the stored connections carry no picture field, chats carry none, and the invitation preview refuses anyone already connected, so every new name in a shortlist stayed faceless. |
|
|
460
460
|
| `sd_share_list` | `action` create/list/revoke, plus `title`, `columns`, `rows`, optional `note`, or `token` to revoke | Share one selection as a standalone `https://signaldash.dev/l/<token>` page that anyone with the link can open. `create` returns the url ONCE and stores only its SHA-256 hash, so a lost link can be revoked but never recovered. The page is a fixed snapshot and never re-reads the source, so a list shared today does not keep disclosing tomorrow's data. Pass `people` instead of `rows` for a shortlist of humans: each renders as a card with a photo where the provider supplies one and initials where it does not, an optional `score` out of 100, and the `reason` that earned it, with the scoring rule in `rubric` so the reader can check it. For a plain table, every row must have exactly as many cells as there are columns, because a crooked table reads as a claim about the wrong person. `list` shows every live link with its non-secret `list_id` and open count, so a link whose url is lost can still be switched off and a forgotten one stays visible; `revoke` takes either the `token` or that `list_id` and kills it immediately, and a revoked token is indistinguishable from one that never existed. |
|
|
461
461
|
| `li_scheduled_post_preview` | `id` required UUID; optional `review_ttl_hours` (`1` or `24`) | Create a single-use `https://signaldash.dev/p/<token>` browser handoff for one exact active SignalDash post. The default is 1 hour; pass `24` for a full day. The isolated page includes its stored image attachments through account- and post-scoped protected media routes. |
|
|
462
|
+
| `li_scheduled_post_attachment` | `id` required UUID; `index` required, a zero-based position strictly below the post's `attachment_count` | Read the exact stored bytes of one attachment on one active SignalDash post, as `content_base64`, alongside its `filename` and its stored `content_type` verbatim. The same `data_ref` scoping and the same draft/scheduled/executing filter as `li_scheduled_post_preview`; a cancelled or published post, a foreign post, and an index that does not exist are all indistinguishable 404 `scheduled_post_attachment_not_found`. Fetch it only when the bytes themselves are needed: one image is easily hundreds of kilobytes of base64, which is why `li_scheduled_post_preview` reports `attachment_count` and never the bytes. |
|
|
462
463
|
| `li_edit_scheduled_post` | `id`, `text`, and offset-qualified `scheduled_at` required; full replacement `mentions` (up to 25), image `attachments` (up to 20, max 5 MiB each and 12 MiB total), 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. |
|
|
463
464
|
| `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. |
|
|
464
465
|
| `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. |
|
|
@@ -530,6 +531,7 @@ li_post_draft_preview({"id":"00000000-0000-4000-8000-000000000000"})
|
|
|
530
531
|
li_delete_post_draft({"id":"00000000-0000-4000-8000-000000000000","expected_version":1,"confirm":true})
|
|
531
532
|
li_scheduled_posts({})
|
|
532
533
|
li_scheduled_post_preview({"id":"00000000-0000-4000-8000-000000000000"})
|
|
534
|
+
li_scheduled_post_attachment({"id":"00000000-0000-4000-8000-000000000000","index":0})
|
|
533
535
|
li_edit_scheduled_post({"id":"00000000-0000-4000-8000-000000000000","text":"Exact replacement","scheduled_at":"2026-09-07T08:00:00Z"})
|
|
534
536
|
li_cancel_scheduled_post({"id":"00000000-0000-4000-8000-000000000000","confirm":true})
|
|
535
537
|
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})
|