@floomhq/signaldash 0.11.1 → 0.12.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/bin/sd.mjs +30 -3
- package/package.json +1 -1
- package/skills/signaldash/SKILL.md +4 -0
package/bin/sd.mjs
CHANGED
|
@@ -70,9 +70,20 @@ export async function cmdLogin(code, backend, dependencies = {}) {
|
|
|
70
70
|
cfg.backend = backend || cfg.backend || DEFAULT_BACKEND;
|
|
71
71
|
saveCfg(cfg);
|
|
72
72
|
const r = await request("/login", { code }, { auth: false });
|
|
73
|
-
if (r.status !== 200) {
|
|
73
|
+
if (r.status !== 200) {
|
|
74
|
+
const msg = String(r.json.error || r.status);
|
|
75
|
+
if (/used|invalid/i.test(msg) && loadCfg().token) {
|
|
76
|
+
log("You are already set up on this machine. Run `signaldash status` to see what is connected.");
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
error("login failed:", msg);
|
|
80
|
+
if (/used/i.test(msg)) error("Invite codes are single-use. If you already ran this, try: signaldash status");
|
|
81
|
+
process.exitCode = 1; return;
|
|
82
|
+
}
|
|
74
83
|
cfg.token = r.json.token; saveCfg(cfg);
|
|
75
|
-
log(
|
|
84
|
+
log(`Logged in to SignalDash (${cfg.backend}).`);
|
|
85
|
+
log("Your LinkedIn/WhatsApp/email credentials live on that server, not on this");
|
|
86
|
+
log("machine, and are never exposed to your agent. Only you can see your data.");
|
|
76
87
|
}
|
|
77
88
|
|
|
78
89
|
export async function cmdLogout(dependencies = {}) {
|
|
@@ -378,6 +389,22 @@ export async function cmdConnections(outPath, dependencies = {}) {
|
|
|
378
389
|
if (!done) log(" " + chalk.dim("sync still running; run this again later to get the rest"));
|
|
379
390
|
}
|
|
380
391
|
|
|
392
|
+
|
|
393
|
+
function printHelp(log = console.log) {
|
|
394
|
+
log(`SignalDash \u2014 secure LinkedIn, WhatsApp and email access for your AI agent.
|
|
395
|
+
|
|
396
|
+
signaldash <invite-code> set up everything in one go
|
|
397
|
+
signaldash status show what is connected
|
|
398
|
+
signaldash connect linkedin|whatsapp|email
|
|
399
|
+
signaldash connections [file.csv] export your LinkedIn connections
|
|
400
|
+
signaldash skill install the agent skill
|
|
401
|
+
signaldash mcp run the MCP server (used by your agent)
|
|
402
|
+
signaldash logout revoke this device
|
|
403
|
+
|
|
404
|
+
Your channel credentials stay on the SignalDash server. They are never stored on
|
|
405
|
+
this machine and never shown to your agent, which only holds a scoped token.`);
|
|
406
|
+
}
|
|
407
|
+
|
|
381
408
|
export async function main(argv = process.argv.slice(2), dependencies = {}) {
|
|
382
409
|
const [cmd, a, b, c] = argv;
|
|
383
410
|
const log = dependencies.log || console.log;
|
|
@@ -391,7 +418,7 @@ export async function main(argv = process.argv.slice(2), dependencies = {}) {
|
|
|
391
418
|
else if (cmd === "status") await cmdStatus(dependencies);
|
|
392
419
|
else if (cmd === "connections" || (cmd === "export" && a === "connections")) await cmdConnections(cmd === "export" ? b : a, dependencies);
|
|
393
420
|
else if (cmd === "--version" || cmd === "-v") log("0.7.0");
|
|
394
|
-
else if (cmd &&
|
|
421
|
+
else if (cmd && !["help","--help","-h"].includes(cmd) && !/^[0-9a-f]{8,}$/i.test(cmd)) { (dependencies.error || console.error)(`unknown command: ${cmd}`); printHelp(log); process.exitCode = 1; }
|
|
395
422
|
else if (cmd === "skill") await cmdSkill(dependencies);
|
|
396
423
|
else printHelp(log);
|
|
397
424
|
}
|
package/package.json
CHANGED
|
@@ -44,6 +44,10 @@ nothing else in this skill works.
|
|
|
44
44
|
| `email_list` | list the newest message from each recent email thread (`limit`) |
|
|
45
45
|
| `email_read` | read an email thread (`thread_id`, `limit`) |
|
|
46
46
|
| `email_send` | send one email (`to`, `subject`, `body`) |
|
|
47
|
+
| `li_my_posts` | the user's own LinkedIn posts with reaction/comment/impression counts |
|
|
48
|
+
| `li_post_reactions` | who reacted to a post (name + headline) — warm inbound signals |
|
|
49
|
+
| `li_post_comments` | comments on a post, with author |
|
|
50
|
+
| `li_draft_post` | draft a LinkedIn post; returns the draft WITHOUT publishing |
|
|
47
51
|
|
|
48
52
|
## Enforced by the server (you cannot bypass these)
|
|
49
53
|
|