@floomhq/signaldash 0.39.13 → 0.39.17
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 +42 -4
- package/package.json +2 -2
- 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.17 <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
|
|
@@ -412,12 +412,50 @@ 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
413
|
`/calendar/drafts/...` URLs. Each saved SignalDash draft also exposes an
|
|
414
414
|
authenticated edit-and-feedback form. Its CSRF token is bound to the live
|
|
415
|
-
calendar session, draft UUID, and current version. Copy edits
|
|
416
|
-
|
|
417
|
-
|
|
415
|
+
60-minute calendar session, draft UUID, and current version. Copy edits,
|
|
416
|
+
feedback, and up to four private feedback images use one atomic
|
|
417
|
+
compare-and-swap. Inline saves keep the active filter and scroll position;
|
|
418
|
+
the server-rendered fallback returns to the same card. Uploaded images are
|
|
419
|
+
stored as private review evidence and served only through the tenant-scoped
|
|
420
|
+
calendar session. A reviewer can explicitly replace the current post images
|
|
421
|
+
with the same uploads; without that choice, the post media remains unchanged.
|
|
422
|
+
Reviews preserve the first comment and append bounded editorial metadata.
|
|
423
|
+
Saving non-empty feedback or reference-only feedback images also creates one durable,
|
|
424
|
+
tenant- and draft-version-bound
|
|
425
|
+
Codex rewrite job in the same SQLite transaction. A separate
|
|
426
|
+
`signaldash-draft-rewrite.service` worker leases those jobs with bounded retries
|
|
427
|
+
and timeouts. It runs Codex ephemerally with user configuration, repository
|
|
428
|
+
rules, shell, apps, browser, and web search disabled; the child receives only a
|
|
429
|
+
sanitized environment and a private temporary directory containing the output
|
|
430
|
+
schema and that review's images. Structured output can update only the draft
|
|
431
|
+
text and editorial revision state. A newer human edit supersedes stale model
|
|
432
|
+
output. An explicit image replacement without feedback keeps the copy unchanged,
|
|
433
|
+
while notes, feedback images, mentions, post attachments, first comment,
|
|
434
|
+
hold gates, and source metadata remain unchanged after the review transaction.
|
|
435
|
+
Cards show `queued`,
|
|
436
|
+
`rewriting`, `ready`, `failed`, or `superseded`; no rewrite approves, schedules,
|
|
437
|
+
publishes, or calls a social provider. Each SignalDash draft card
|
|
438
|
+
also names its exact version and the next verified free 08:00 UTC publishing
|
|
439
|
+
slot. `Approve & schedule` re-reads the complete SignalDash and Buffer calendar,
|
|
440
|
+
then atomically creates the scheduled post, preserves its copy, mentions,
|
|
441
|
+
ordered images, and first comment, records the approval, and removes the source
|
|
442
|
+
draft. Stale versions, reused approvals, foreign sessions, incomplete Buffer
|
|
443
|
+
reads, and newly occupied days fail closed without calling a provider.
|
|
418
444
|
Drafts never enter the `items` returned by
|
|
419
445
|
`li_scheduled_posts`, preserving its existing calendar contract.
|
|
420
446
|
|
|
447
|
+
On AX41, install the tracked worker unit without loading `sd.env`. The worker
|
|
448
|
+
runs as `federicodeponte`. Its privileged `ExecStartPre` grants that account
|
|
449
|
+
write access only to the SQLite database and current WAL/SHM, adds write/search
|
|
450
|
+
without directory listing, and retains the sticky bit so it cannot replace
|
|
451
|
+
root-owned files. No default ACL is used; the API environment/state files stay
|
|
452
|
+
inaccessible via the unit's `InaccessiblePaths` even if a legacy deployment
|
|
453
|
+
has broader mode bits.
|
|
454
|
+
The exact-release deployment overrides `ExecStart` to the merged release path,
|
|
455
|
+
then verifies `systemd-analyze security`, the service log, and `/sd_version`.
|
|
456
|
+
Codex login is maintained in `/home/federicodeponte/.codex`; deployment enables
|
|
457
|
+
the worker only after a real ephemeral read-only Codex sentinel succeeds.
|
|
458
|
+
|
|
421
459
|
`li_scheduled_posts` is the shared planning read across posts stored by
|
|
422
460
|
SignalDash and the configured Buffer LinkedIn channel. Every item names its
|
|
423
461
|
source, and the response reports independent completeness for SignalDash,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@floomhq/signaldash",
|
|
3
|
-
"version": "0.39.
|
|
3
|
+
"version": "0.39.17",
|
|
4
4
|
"description": "Secure LinkedIn, WhatsApp, and email access for AI agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
},
|
|
19
19
|
"scripts": {
|
|
20
20
|
"test": "node --test",
|
|
21
|
-
"check": "node --check bin/sd.mjs && node --check server/server.cjs && node --check server/content-pipeline.cjs && node --check server/buffer-calendar.cjs && node --check server/composio-email.cjs && node --check server/attachments.cjs && node --check server/write-control.cjs && node --check server/secretary-store.cjs && node --check server/secretary-collector.cjs && node --check server/secretary-latest.cjs && node --check server/secretary-approvals.cjs && node --check server/secretary-push.cjs && node --check server/secretary-rules.cjs && node --check server/secretary-shadow-gate.cjs && node --check server/secretary-vault-importer.cjs && node --check server/secretary-inspiration.cjs && node --check server/linkedin-archive-importer.cjs && node --check server/voice-profile.cjs && node --check server/campaign-store.cjs && node --check server/campaign-runner.cjs && node --check server/withdrawal-store.cjs && node --check server/post-scheduler.cjs && node --check server/message-scheduler.cjs && node --check scripts/import-linkedin-archive.mjs && node --check scripts/import-secretary-vault-snapshot.mjs && node --check scripts/rebuild-secretary-actors.mjs && node --check scripts/extract-conversation-inspiration.mjs && node --check scripts/render-content-board.mjs && node --check bin/signaldash.js && node --check lib/cli.js && node --check lib/config-file.js && node --check lib/mcp.js && node --check lib/rate-guard.js && node --check lib/secrets.js && node --check lib/unipile.js"
|
|
21
|
+
"check": "node --check bin/sd.mjs && node --check server/server.cjs && node --check server/content-pipeline.cjs && node --check server/buffer-calendar.cjs && node --check server/composio-email.cjs && node --check server/attachments.cjs && node --check server/write-control.cjs && node --check server/secretary-store.cjs && node --check server/secretary-collector.cjs && node --check server/secretary-latest.cjs && node --check server/secretary-approvals.cjs && node --check server/secretary-push.cjs && node --check server/secretary-rules.cjs && node --check server/secretary-shadow-gate.cjs && node --check server/secretary-vault-importer.cjs && node --check server/secretary-inspiration.cjs && node --check server/linkedin-archive-importer.cjs && node --check server/voice-profile.cjs && node --check server/campaign-store.cjs && node --check server/campaign-runner.cjs && node --check server/withdrawal-store.cjs && node --check server/post-scheduler.cjs && node --check server/draft-rewrite-worker.cjs && node --check server/message-scheduler.cjs && node --check scripts/import-linkedin-archive.mjs && node --check scripts/import-secretary-vault-snapshot.mjs && node --check scripts/rebuild-secretary-actors.mjs && node --check scripts/extract-conversation-inspiration.mjs && node --check scripts/render-content-board.mjs && node --check bin/signaldash.js && node --check lib/cli.js && node --check lib/config-file.js && node --check lib/mcp.js && node --check lib/rate-guard.js && node --check lib/secrets.js && node --check lib/unipile.js"
|
|
22
22
|
},
|
|
23
23
|
"keywords": [
|
|
24
24
|
"mcp",
|
|
@@ -451,7 +451,7 @@ Use the exact tool names and argument keys below. Limits are optional.
|
|
|
451
451
|
| `li_draft_post` | `text` required, max 3000; `publish` optional; `scheduled_at` optional offset-qualified ISO date-time; `content_pipeline_id` normally required for scheduling while that user's pipeline is enabled; `content_pipeline_override` optional exact `{reason,confirm?,approval_hash?}`; `mentions` optional array of up to 25 exact `{name,profile_id}` objects; `attachments` optional array of up to 20 exact `{filename,content_type,content_base64}` images, max 5 MiB each and 12 MiB total; `first_comment` optional, max 1250 | Create a server-confirmed draft, publish now, or persist an exact future LinkedIn post and its approved first comment. An enabled pipeline normally runs its fact, exact-text, shared-calendar, frequency, and breathing preflight. For one deliberate exception, preview the exact payload with `{reason}`, show it to the human, then repeat it with `confirm:true` and the returned single-use payload-bound `approval_hash`. The audit record preserves the reason, preview ID, and approval time; every non-pipeline provider safety guard remains active. |
|
|
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_save_post_draft` | `text` required, max 3000; `mentions` optional up to 25; `attachments` optional up to 20 exact images, max 5 MiB each and 12 MiB total; `first_comment` optional, max 1250; `source_key` optional tenant-scoped idempotency key, max 256; `metadata` optional bounded structured source/editorial context | Persist one arbitrary LinkedIn draft without scheduling or publishing. Exact ordered image bytes and ordinary duplicate drafts are retained. An identical `source_key` replay returns the existing draft; changed content under that key is refused. Tenant limits are 1,000 drafts and 100 MiB decoded attachment bytes. No provider call or action budget is used. |
|
|
454
|
-
| `li_post_drafts` | no arguments | List durable SignalDash drafts with attachment metadata, never base64, and return a fresh one-use calendar link. The calendar uses the scheduled-post card design for unscheduled SignalDash and Buffer drafts, with a visible `DRAFT` tag. Stored drafts remain separate from scheduled posts
|
|
454
|
+
| `li_post_drafts` | no arguments | List durable SignalDash drafts with attachment metadata, never base64, and return a fresh one-use calendar link. The calendar uses the scheduled-post card design for unscheduled SignalDash and Buffer drafts, with a visible `DRAFT` tag. Its 60-minute review session saves copy, notes, and up to four private feedback images inline without reloading the calendar. Reviewers can explicitly replace the post's current images with those uploads; unchecked uploads remain private references. Each SignalDash draft card also displays its exact version and next verified free 08:00 UTC slot. `Approve & schedule` rechecks the complete SignalDash and Buffer calendar, then atomically moves the exact draft into that slot without a provider call. Stored drafts remain separate from scheduled posts until this explicit approval succeeds. |
|
|
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`. |
|