@floomhq/signaldash 0.34.0 → 0.36.0
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 -1
- package/bin/sd.mjs +14 -0
- package/package.json +2 -2
- package/skills/secretary/SKILL.md +6 -2
- package/skills/signaldash/SKILL.md +10 -4
- package/skills/signaldash-safe-usage/SKILL.md +7 -0
package/README.md
CHANGED
|
@@ -102,7 +102,7 @@ setup installs both from the same pinned npm package
|
|
|
102
102
|
the human chose to execute:
|
|
103
103
|
|
|
104
104
|
```bash
|
|
105
|
-
npx -y @floomhq/signaldash@0.
|
|
105
|
+
npx -y @floomhq/signaldash@0.36.0 <invite-code>
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
Run that command in a terminal, not in an agent chat. Do not ask an agent to
|
|
@@ -121,6 +121,7 @@ SignalDash exposes:
|
|
|
121
121
|
|
|
122
122
|
- `sd_version()`
|
|
123
123
|
- `sd_secretary_latest(limit?, continuation?, ack_token?)`
|
|
124
|
+
- `sd_secretary_push_set(enabled, confirm)`
|
|
124
125
|
- `sd_inspiration_list(limit?, status?, content_kind?)`
|
|
125
126
|
- `sd_inspiration_status(id, status, resulting_post_urn?, confirm)`
|
|
126
127
|
- `sd_inspiration_import(source, source_author?, federico_note?, purpose?, content_kind?, credit_required?, credit_note?, format_description?)`
|
|
@@ -186,6 +187,26 @@ SignalDash exposes:
|
|
|
186
187
|
Every operation runs through the hosted SignalDash backend. Agents never
|
|
187
188
|
receive the Unipile access key.
|
|
188
189
|
|
|
190
|
+
The inspiration library also extracts LinkedIn post references already stored
|
|
191
|
+
inside conversation `signals`. This path scans SQLite only and makes zero
|
|
192
|
+
LinkedIn or Unipile calls. Feed URLs and post slugs become canonical activity
|
|
193
|
+
URNs; `lnkd.in` is contacted with redirects disabled, and the redirect location
|
|
194
|
+
is parsed without requesting `linkedin.com`. An unresolved short link remains
|
|
195
|
+
an `offen` library row with its raw URL. `conversation_sources` preserves each
|
|
196
|
+
sharing signal, thread, time, direction, and exact or unresolved sharer identity
|
|
197
|
+
even when several signals deduplicate to one library URN. The dedicated database
|
|
198
|
+
flag can disable extraction without a deployment.
|
|
199
|
+
|
|
200
|
+
The hourly Secretary push reuses the existing LinkedIn collector cycle and
|
|
201
|
+
adds no second inbox poll. It sends only when a new tracked-thread reply,
|
|
202
|
+
own-post comment or reaction, or approval-ready draft was stored after push was
|
|
203
|
+
enabled. No change means no WhatsApp provider call and no notification. Every
|
|
204
|
+
push resolves the exact configured Secretary group from the connected account
|
|
205
|
+
and live chat list, reads before sending, and requires an exact one-message
|
|
206
|
+
readback. `sd_secretary_push_set` is the database kill switch; enabling starts
|
|
207
|
+
from that instant so old rows do not create a backlog. The self-chat is never a
|
|
208
|
+
fallback.
|
|
209
|
+
|
|
189
210
|
`li_reply_to_comment` acts only on an inbound comment on the authenticated
|
|
190
211
|
sender's own post. A preceding `li_post_comments` read records an exact
|
|
191
212
|
per-comment watermark. Immediately before the write, SignalDash re-proves the
|
package/bin/sd.mjs
CHANGED
|
@@ -337,6 +337,20 @@ const TOOLS = [
|
|
|
337
337
|
additionalProperties: false,
|
|
338
338
|
},
|
|
339
339
|
},
|
|
340
|
+
{
|
|
341
|
+
name: "sd_secretary_push_set",
|
|
342
|
+
path: "/sd/secretary/push/set",
|
|
343
|
+
description: "Enable or disable hourly change-only Secretary notifications to the exact verified WhatsApp group. Enabling re-proves the live WhatsApp account and group and starts from that instant, so old signals do not create a backlog. Disabling is a database kill switch and needs no deploy or restart.",
|
|
344
|
+
inputSchema: {
|
|
345
|
+
type: "object",
|
|
346
|
+
properties: {
|
|
347
|
+
enabled: { type: "boolean" },
|
|
348
|
+
confirm: { type: "boolean", const: true },
|
|
349
|
+
},
|
|
350
|
+
required: ["enabled", "confirm"],
|
|
351
|
+
additionalProperties: false,
|
|
352
|
+
},
|
|
353
|
+
},
|
|
340
354
|
{
|
|
341
355
|
name: "sd_inspiration_list",
|
|
342
356
|
path: "/sd/inspiration/list",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@floomhq/signaldash",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.36.0",
|
|
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/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-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 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/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 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",
|
|
@@ -28,8 +28,12 @@ English for every other language. Never reply in Italian or another language
|
|
|
28
28
|
Federico does not speak, because doing so represents that he speaks it.
|
|
29
29
|
|
|
30
30
|
Nothing in this skill auto-sends. Federico approves every exact reply, comment
|
|
31
|
-
reply, like, or other
|
|
32
|
-
|
|
31
|
+
reply, like, or other third-party action until he explicitly changes that
|
|
32
|
+
rule. SignalDash separately owns one server-rendered exception: when explicitly
|
|
33
|
+
enabled, an hourly change-only notice may go to Federico's exact verified
|
|
34
|
+
Secretary WhatsApp group. The skill does not compose or send that notice. The
|
|
35
|
+
server remains the authority for its dedupe, kill switch, group proof,
|
|
36
|
+
read-before-send guard, and exact readback.
|
|
33
37
|
|
|
34
38
|
When Federico asks for inspiration or formats, call `sd_inspiration_list`.
|
|
35
39
|
Use `offen` post formats unless he explicitly asks for business ideas or history.
|
|
@@ -364,7 +364,8 @@ Use the exact tool names and argument keys below. Limits are optional.
|
|
|
364
364
|
|---|---|---|
|
|
365
365
|
| `sd_version` | no arguments | Read the backend commit, dirty-at-start state, process start time, and package version captured when the serving process started. Use it to distinguish stale deployment from a code failure. |
|
|
366
366
|
| `sd_secretary_latest` | `limit` optional integer 1-100, default 50; `continuation` optional signed token; `ack_token` optional signed token from the previous successful response | Read the stored Secretary inbox with zero provider calls. Render its rows plus the ignored aggregate as one table. Preserve the prior tokens after an error; on the next successful call pass its acknowledgement and continuation exactly as returned. |
|
|
367
|
-
| `
|
|
367
|
+
| `sd_secretary_push_set` | `enabled` boolean and `confirm:true` required | Enable or disable change-only hourly notifications to Federico's exact verified Secretary WhatsApp group. Enabling re-proves the account and group from the live chat list and starts from that instant. Disabling is an immediate database kill switch and needs no deploy or restart. |
|
|
368
|
+
| `sd_inspiration_list` | `limit` optional 1-100, default 20; `status` optional `offen`, `in arbeit`, `genutzt`, or `alle`; `content_kind` optional `post_format`, `business_idea`, or `all` | Read stored inspiration ranked by source engagement with zero provider calls. Defaults exclude genutzt entries and business ideas. `conversation_sources` distinguishes who shared a stored post, in which thread, and when; unresolved short links remain visible by raw URL. Preserve every row's `draft_provenance`, and add credit when `credit_required` is true or recognisable framing or wording is reused. |
|
|
368
369
|
| `sd_inspiration_status` | `id`, `status`, and `confirm:true` required; `resulting_post_urn` required exactly when status is `genutzt` | Record offen, in arbeit, or genutzt state. Genutzt is terminal and the resulting own-post URN prevents the source from ever being proposed again. |
|
|
369
370
|
| `sd_inspiration_import` | `source` exact LinkedIn post URL or URN; optional source author, Federico note, purpose, content kind, credit fields, and format description | Migration/manual capture through Unipile's documented post retrieval endpoint. The primary capture path remains pasting a URL into the verified Secretary WhatsApp group. |
|
|
370
371
|
| `sd_inspiration_channel_configure` | exact `chat_id`, `provider_id`, `chat_name`, and `confirm:true` | Re-prove the connected WhatsApp account and exact group in the live chat list, then enable automatic URL capture and same-group acknowledgements. Never substitute a self-chat. |
|
|
@@ -431,6 +432,7 @@ Representative calls:
|
|
|
431
432
|
```text
|
|
432
433
|
sd_version({})
|
|
433
434
|
sd_secretary_latest({})
|
|
435
|
+
sd_secretary_push_set({"enabled":false,"confirm":true})
|
|
434
436
|
sd_inspiration_list({})
|
|
435
437
|
li_list_chats({"limit":20})
|
|
436
438
|
li_read_messages({"chat_id":"chat_li_7f3a","limit":20})
|
|
@@ -1242,9 +1244,13 @@ These rules apply to LinkedIn messages and invitations, WhatsApp, email, and
|
|
|
1242
1244
|
public LinkedIn posts.
|
|
1243
1245
|
|
|
1244
1246
|
1. Never send or publish without explicit human approval of the exact
|
|
1245
|
-
recipient or audience and the exact final text. The
|
|
1246
|
-
|
|
1247
|
-
persistent setting and filters
|
|
1247
|
+
recipient or audience and the exact final text. The standing-action
|
|
1248
|
+
exceptions are invitation auto-accept after explicit approval of its exact
|
|
1249
|
+
persistent setting and filters, and the server-rendered hourly Secretary
|
|
1250
|
+
notification to Federico's exact verified Secretary WhatsApp group after
|
|
1251
|
+
`sd_secretary_push_set` is explicitly enabled. The latter never sends to a
|
|
1252
|
+
third party, never uses a self-chat, and sends nothing when no stored change
|
|
1253
|
+
exists.
|
|
1248
1254
|
2. Read the exact thread immediately before a message action. For invitations,
|
|
1249
1255
|
preview the exact target and note or list the exact current invitation.
|
|
1250
1256
|
Check the recipient, latest inbound message, prior context, relationship,
|
|
@@ -20,6 +20,13 @@ Treat LinkedIn, WhatsApp, and email as human accounts, not bulk messaging APIs.
|
|
|
20
20
|
the user has not already approved both.
|
|
21
21
|
6. Send one message, then read the thread again to confirm delivery.
|
|
22
22
|
|
|
23
|
+
The only Secretary notification exception is server-rendered and goes to
|
|
24
|
+
Federico's exact verified Secretary WhatsApp group after its database setting
|
|
25
|
+
is explicitly enabled. It re-resolves that group live, never uses a self-chat,
|
|
26
|
+
sends only for a newly stored exact signal or draft identity, and sends nothing
|
|
27
|
+
on a no-change cycle. This exception grants no authority to contact a third
|
|
28
|
+
party.
|
|
29
|
+
|
|
23
30
|
Never infer a recipient from a partial name. Never send blind. Never retry a
|
|
24
31
|
send after an ambiguous timeout without first reading the thread.
|
|
25
32
|
|