@floomhq/signaldash 0.39.9 → 0.39.11
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 +22 -6
- package/bin/sd.mjs +1 -0
- package/package.json +1 -1
- package/skills/signaldash/SKILL.md +1 -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.11 <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
|
|
@@ -410,7 +410,12 @@ with `private, no-store`, MIME allowlisting, `nosniff`, and a restrictive CSP.
|
|
|
410
410
|
The shared calendar displays unscheduled SignalDash and Buffer drafts with the
|
|
411
411
|
same cards as scheduled posts, marked by a visible `DRAFT` tag and an
|
|
412
412
|
`Unscheduled` time label. Saved SignalDash media uses separate protected
|
|
413
|
-
`/calendar/drafts/...` URLs.
|
|
413
|
+
`/calendar/drafts/...` URLs. Each saved SignalDash draft also exposes an
|
|
414
|
+
authenticated edit-and-feedback form. Its CSRF token is bound to the live
|
|
415
|
+
calendar session, draft UUID, and current version. Copy edits and feedback use
|
|
416
|
+
one atomic compare-and-swap, preserve existing media and the first comment,
|
|
417
|
+
append bounded editorial metadata, and never schedule or publish the draft.
|
|
418
|
+
Drafts never enter the `items` returned by
|
|
414
419
|
`li_scheduled_posts`, preserving its existing calendar contract.
|
|
415
420
|
|
|
416
421
|
`li_scheduled_posts` is the shared planning read across posts stored by
|
|
@@ -424,10 +429,11 @@ visible SignalDash and Buffer sources are empty, never that the native LinkedIn
|
|
|
424
429
|
calendar is empty.
|
|
425
430
|
|
|
426
431
|
The read-only calendar page renders each stored SignalDash image through a
|
|
427
|
-
calendar-session-protected, tenant-scoped media route.
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
432
|
+
calendar-session-protected, tenant-scoped media route. Buffer image assets and
|
|
433
|
+
video or document thumbnails use a separate authenticated proxy that accepts
|
|
434
|
+
only the provider's validated HTTPS media hosts and never exposes a provider
|
|
435
|
+
URL in browser HTML. Calendar media is no-store and becomes unavailable when
|
|
436
|
+
the session expires or the originating user is revoked.
|
|
431
437
|
|
|
432
438
|
`li_scheduled_post_preview` returns a short-lived, single-use browser handoff
|
|
433
439
|
for one exact active SignalDash post owned by the authenticated user. The page
|
|
@@ -442,6 +448,16 @@ per-client throttle. Already-issued 24-character compact tokens and 48-character
|
|
|
442
448
|
`/scheduled-post/h/<token>` or `/calendar/h/<token>` links remain valid until
|
|
443
449
|
their normal expiry.
|
|
444
450
|
|
|
451
|
+
The shared calendar preserves validated Buffer LinkedIn tag ranges and URLs in
|
|
452
|
+
the post body and also keeps the separate tag audit pills. Valid provider
|
|
453
|
+
annotations render as clickable LinkedIn links in both places. SignalDash
|
|
454
|
+
mentions derive inline ranges only when the named occurrence is unique, and
|
|
455
|
+
derive a LinkedIn company link only from a validated numeric provider ID.
|
|
456
|
+
Ambiguous names or unsafe URLs remain plain text. Buffer image assets and
|
|
457
|
+
video/document thumbnails render through the same authenticated, no-store
|
|
458
|
+
media surface as SignalDash attachments; provider asset URLs are never placed
|
|
459
|
+
in the browser HTML.
|
|
460
|
+
|
|
445
461
|
`li_edit_scheduled_post` replaces one complete scheduled-post payload in place.
|
|
446
462
|
The preview call takes the exact UUID, text, offset-qualified time, mentions,
|
|
447
463
|
image bytes, and optional first comment. Confirmation repeats that identical
|
package/bin/sd.mjs
CHANGED
|
@@ -1909,6 +1909,7 @@ const TOOLS = [
|
|
|
1909
1909
|
meta: { type: "array", maxItems: 4, items: { type: "string", maxLength: 80 } },
|
|
1910
1910
|
org: { type: "string", maxLength: 120 },
|
|
1911
1911
|
tags: { type: "array", maxItems: 5, items: { type: "string", maxLength: 28 } },
|
|
1912
|
+
facts: { type: "array", maxItems: 4, items: { type: "object", properties: { label: { type: "string", maxLength: 24 }, value: { type: "string", maxLength: 120 } }, required: ["label","value"], additionalProperties: false } },
|
|
1912
1913
|
factors: {
|
|
1913
1914
|
type: "array", maxItems: 6,
|
|
1914
1915
|
items: {
|
package/package.json
CHANGED
|
@@ -455,7 +455,7 @@ Use the exact tool names and argument keys below. Limits are optional.
|
|
|
455
455
|
| `li_update_post_draft` | `id`, complete replacement `text`, and current `expected_version` required; `mentions`, `attachments`, and `first_comment` optional | Atomically replace the complete saved draft. A stale version is refused with the current version and timestamp. Omitting an optional field clears it. No provider call occurs. |
|
|
456
456
|
| `li_delete_post_draft` | `id`, current `expected_version`, and `confirm:true` required | Permanently delete one exact saved SignalDash draft. Unknown, foreign, deleted, and replayed identifiers are indistinguishable. This cannot delete LinkedIn-native or scheduled content. |
|
|
457
457
|
| `li_post_draft_preview` | `id` required UUID | Create a short-lived, single-use `https://signaldash.dev/d/<token>` browser handoff for one exact saved draft. Its page and exact image bytes are protected by a tenant-, draft-, and originating-session-scoped cookie under `/drafts`. |
|
|
458
|
-
| `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. |
|
|
458
|
+
| `li_scheduled_posts` | no arguments | Read one shared content-calendar view across SignalDash and the configured Buffer LinkedIn channel. The browser calendar renders validated Buffer company tags both inline and as audit pills, and proxies supported Buffer image previews through its authenticated no-store media route without exposing provider URLs. 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. |
|
|
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 | Create a short-lived, single-use `https://signaldash.dev/p/<token>` browser handoff for one exact active SignalDash post. The isolated page includes its stored image attachments through account- and post-scoped protected media routes. |
|