@floomhq/signaldash 0.32.2 → 0.33.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 +2 -1
- package/bin/sd.mjs +17 -1
- package/package.json +1 -1
- package/skills/secretary/SKILL.md +3 -1
- package/skills/signaldash/SKILL.md +3 -1
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.33.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
|
|
@@ -167,6 +167,7 @@ SignalDash exposes:
|
|
|
167
167
|
- `li_post_reactions(post_id, limit, cursor?)`
|
|
168
168
|
- `li_post_comments(post_id, comment_id?, limit, cursor?)`
|
|
169
169
|
- `li_reply_to_comment(post_id?, parent_comment_id?, trigger_comment_id?, text?, expected_watermark?, secretary_receipt_id?)`
|
|
170
|
+
- `li_like_comment(post_id, parent_comment_id, comment_id, expected_watermark?)`
|
|
170
171
|
- `li_delete_message(chat_id, message_id, confirm)`
|
|
171
172
|
- `li_delete_comment(post_id, comment_id, confirm)`
|
|
172
173
|
- `li_draft_post(text, publish, scheduled_at?, mentions?, attachments?, first_comment?)`
|
package/bin/sd.mjs
CHANGED
|
@@ -1045,7 +1045,7 @@ const TOOLS = [
|
|
|
1045
1045
|
properties: {
|
|
1046
1046
|
limit: { type: "integer", minimum: 1, maximum: 100, description: "How many chats to return. With `search`, how many MATCHES to return." },
|
|
1047
1047
|
cursor: { type: "string", maxLength: 4000, description: "Continue from a previous page or a previous search." },
|
|
1048
|
-
search: { type: "string", minLength: 1, maxLength: 200, description: "Filter chats on
|
|
1048
|
+
search: { type: "string", minLength: 1, maxLength: 200, description: "Filter chats case-insensitively on names and counterpart identifiers, including phone JIDs and @lids. The provider cannot filter a chat list, so SignalDash filters over a bounded scan and the response reports `scanned_chats` and `exhaustive` so a miss is never mistaken for a proven absence. Search by the exact phone number, lid, or attendee name." },
|
|
1049
1049
|
max_scan: { type: "integer", minimum: 1, maximum: 500, description: "How many chats the search may scan before it stops and reports exhaustive:false. Default 200, and never more than five provider pages: bulk reading is the top account-restriction trigger, so go deeper with the returned cursor rather than with a bigger scan." },
|
|
1050
1050
|
},
|
|
1051
1051
|
additionalProperties: false,
|
|
@@ -1332,6 +1332,22 @@ const TOOLS = [
|
|
|
1332
1332
|
additionalProperties: false,
|
|
1333
1333
|
},
|
|
1334
1334
|
},
|
|
1335
|
+
{
|
|
1336
|
+
name: "li_like_comment",
|
|
1337
|
+
path: "/li/like_comment",
|
|
1338
|
+
description: "Like one exact inbound comment on the authenticated sender's own LinkedIn post. First read li_post_comments and preserve the resolved post, parent comment, exact comment, and returned signaldash_watermark. SignalDash re-proves post ownership, comment identity and content, absence of an own like, sender generation, budget, and provider safety immediately before writing. A provider 2xx is not success until bounded readback finds exactly one own like.",
|
|
1339
|
+
inputSchema: {
|
|
1340
|
+
type: "object",
|
|
1341
|
+
properties: {
|
|
1342
|
+
post_id: { type: "string", minLength: 1, maxLength: 500 },
|
|
1343
|
+
parent_comment_id: { type: "string", minLength: 1, maxLength: 500 },
|
|
1344
|
+
comment_id: { type: "string", minLength: 1, maxLength: 500 },
|
|
1345
|
+
expected_watermark: { type: "string", pattern: "^[0-9a-f]{64}$" },
|
|
1346
|
+
},
|
|
1347
|
+
required: ["post_id", "parent_comment_id", "comment_id"],
|
|
1348
|
+
additionalProperties: false,
|
|
1349
|
+
},
|
|
1350
|
+
},
|
|
1335
1351
|
{
|
|
1336
1352
|
name: "li_delete_message",
|
|
1337
1353
|
path: "/li/delete_message",
|
package/package.json
CHANGED
|
@@ -19,7 +19,9 @@ inside the current Claude session. On the next `latest` call:
|
|
|
19
19
|
|
|
20
20
|
Render exactly one Markdown table. Before it, state collection warnings from
|
|
21
21
|
`completeness` in one short sentence, or state `Collection complete` when the
|
|
22
|
-
array is empty.
|
|
22
|
+
array is empty. In the same sentence, report the newest `shadow` counts and
|
|
23
|
+
its exact `stop_reason`; when `eligible_count` is zero, include the returned
|
|
24
|
+
`refusal_breakdown` counts so a zero is explained. Use these columns:
|
|
23
25
|
|
|
24
26
|
| Priority | When | Who | Channel | Exact inbound | Disposition | Action | Draft |
|
|
25
27
|
|---|---|---|---|---|---|---|---|
|
|
@@ -395,7 +395,7 @@ Use the exact tool names and argument keys below. Limits are optional.
|
|
|
395
395
|
| `sd_withdrawal_batch_status` | `withdrawal_batch_id` required | Inspect or monitor one sweep: done and remaining, the per-day pace and this sweep's own daily allowance, the stop reason, parse failures, the exact people the exclusions protected, and the `approval_url` to hand the human. This read also authorizes a later exact cancel. |
|
|
396
396
|
| `sd_withdrawal_batch_approve` | `withdrawal_batch_id` required; `confirm_token` required in the exact `sd-xxxx-xxxx-xxxx` form the human read off the approval page | Record the human's approval using the single-use code that authenticated page minted for them. An agent cannot mint, guess, or bypass that code. |
|
|
397
397
|
| `sd_withdrawal_batch_cancel` | `withdrawal_batch_id` required; `approval_view_hash` required string or null exactly as inspected; `confirm:true` required | Revoke the approval and stop every withdrawal that has not started. It cannot recall one already submitted, and it cannot restore the three-week re-invite block for people already withdrawn. |
|
|
398
|
-
| `wa_list_chats` | `limit` integer 1-100, default 20; `cursor` optional; `search` optional string, max 200 characters; `max_scan` optional integer 1-500, default 200, and never more than five provider pages | Find an existing WhatsApp conversation and exact `chat_id`. Direct chats expose a resolved contact in both `name` and `attendee_name` when available; groups retain their provider group `name` and return `attendee_name:null`. With `search` it filters on `name`, `subject`, `id`, `provider_id`
|
|
398
|
+
| `wa_list_chats` | `limit` integer 1-100, default 20; `cursor` optional; `search` optional string, max 200 characters; `max_scan` optional integer 1-500, default 200, and never more than five provider pages | Find an existing WhatsApp conversation and exact `chat_id`. Direct chats expose a resolved contact in both `name` and `attendee_name` when available; groups retain their provider group `name` and return `attendee_name:null`. With `search` it filters case-insensitively on `name`, `subject`, `id`, `provider_id`, `attendee_provider_id`, `attendee_public_identifier`, and `attendee_name`. The attendee identifiers can carry a phone JID or `@lid`, and digit normalization makes bare or formatted identifiers match their stored form, such as `+49 151 67609512`, `004915167609512`, `4915167609512@s.whatsapp.net`, or the bare digits from `202726935924973@lid`. The provider CANNOT filter a chat list, so SignalDash scans and filters: read `search.exhaustive` before you conclude anything, `search.limit_reached` to know whether the matches were truncated by `limit`, and `search.searched_fields` for what was actually compared. `false` means "not among the `scanned_chats` scanned", never "does not exist" -- continue from the returned `cursor`. When `started_from_cursor` is true the scan began mid-list, so even `exhaustive` says nothing about the chats before that cursor. Search an exact phone number, lid, or known attendee name rather than guessing. Any other key, including `text` and `member_id`, is refused with `unsupported_parameter`. |
|
|
399
399
|
| `wa_read_messages` | `chat_id` required; `limit` 1-100, default 30 | Verify a WhatsApp contact and recent history before summarizing, drafting, or sending. The response includes `current_watermark` for an exact compare-and-swap send. |
|
|
400
400
|
| `wa_mark_read` | `chat_id` required | Explicitly clear one WhatsApp chat's unread state. Reading never clears unread automatically. |
|
|
401
401
|
| `wa_get_attachment` | `chat_id`, `message_id`, `attachment_id` all required, max 500 characters each | Download one attachment of one message in a chat this account owns. Read the chat first: the exact `message_id` and `attachment_id` come from `wa_read_messages`. Returns the stored path on the SignalDash host, mimetype, byte size and sha256. |
|
|
@@ -410,6 +410,7 @@ Use the exact tool names and argument keys below. Limits are optional.
|
|
|
410
410
|
| `li_post_reactions` | `post_id` required; use the exact `social_id` from `li_my_posts`; `limit` default 50, max 100; `cursor` optional | Read one bounded page of reactors. Always inspect `completeness.state`, `total`, and `next_cursor`; continue with the cursor while state is `incomplete`. Numeric ids are resolved against the user's own recent posts when possible, including ugcPost-backed multi-image posts. The provider total is reported when available and is never guessed from `li_my_posts`. A reaction does not authorize outreach. |
|
|
411
411
|
| `li_post_comments` | `post_id` required; `comment_id` optional exact parent id; use the exact `social_id` from `li_my_posts`; `limit` default 50, max 100; `cursor` optional | Read one bounded page of comments, or pass `comment_id` to read replies to that exact parent. Always inspect `completeness.state`, `total`, and `next_cursor`; continue with the cursor while state is `incomplete`. Numeric ids are resolved against the user's own recent posts when possible. The provider total is reported when available and is never guessed from `li_my_posts`. |
|
|
412
412
|
| `li_reply_to_comment` | Manual path: `post_id`, `parent_comment_id`, `trigger_comment_id`, and `text` required; `expected_watermark` optional exact 64-character watermark. Secretary path: `secretary_receipt_id` alone. | Reply once to one exact inbound comment on this sender's own post after `li_post_comments`. SignalDash re-proves post ownership, the unchanged trigger, its author and parent, no own duplicate, sender generation, budget, and provider health immediately before writing. A 2xx is not success until readback finds exactly one matching own reply. |
|
|
413
|
+
| `li_like_comment` | `post_id`, `parent_comment_id`, and `comment_id` required; `expected_watermark` optional exact 64-character watermark | Like once one exact inbound comment on this sender's own post after `li_post_comments`. SignalDash re-proves post ownership, the unchanged comment, its author and parent, no own like, sender generation, budget, and provider health immediately before writing. A 2xx is not success until bounded readback finds exactly one own like. |
|
|
413
414
|
| `li_delete_message` | `chat_id`, `message_id`, and `confirm:true` required | Remediate one exact own LinkedIn message within 60 minutes of sending. SignalDash proves account, exact chat, own authorship, timestamp eligibility, a separate remediation budget, and post-delete absence. This cannot undo delivery, reading, or notifications and never relaxes a send gate. |
|
|
414
415
|
| `li_delete_comment` | `post_id`, `comment_id`, and `confirm:true` required | Currently unavailable: the fixture-tested Unipile v2 wrapper is held at database capability state `untested` until live compatibility is proved against Federico's own removable comment. When enabled it proves own comment identity and readback. Deletion is remediation, not rollback. |
|
|
415
416
|
| `li_draft_post` | `text` required, max 3000; `publish` optional; `scheduled_at` optional offset-qualified ISO date-time; `mentions` optional array of up to 20 exact `{name,profile_id}` objects; `attachments` optional array of up to 4 exact `{filename,content_type,content_base64}` images; `first_comment` optional, max 1250 | Create a server-confirmed draft, publish now, or persist an exact future LinkedIn post and its approved first comment. A schedule is stored only with `publish:true` after approval of the exact text, time, mentions, images, and comment. |
|
|
@@ -469,6 +470,7 @@ li_my_posts({"limit":5})
|
|
|
469
470
|
li_post_reactions({"post_id":"urn:li:activity:8821","limit":50})
|
|
470
471
|
li_post_comments({"post_id":"urn:li:activity:8821","limit":50})
|
|
471
472
|
li_reply_to_comment({"post_id":"urn:li:activity:8821","parent_comment_id":"comment-root","trigger_comment_id":"comment-root","text":"Thanks!","expected_watermark":"exact-64-character-watermark-from-the-read"})
|
|
473
|
+
li_like_comment({"post_id":"urn:li:activity:8821","parent_comment_id":"comment-root","comment_id":"comment-root","expected_watermark":"exact-64-character-watermark-from-the-read"})
|
|
472
474
|
li_delete_message({"chat_id":"chat_li_7f3a","message_id":"msg_li_5c71","confirm":true})
|
|
473
475
|
li_delete_comment({"post_id":"exact-v2-post-id","comment_id":"exact-own-comment-id","confirm":true})
|
|
474
476
|
li_draft_post({"text":"Most agents need better context, not more autonomy."})
|