@todoforai/edge 0.13.22 → 0.13.23
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/dist/index.js +91 -29
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -48267,6 +48267,12 @@ class ApiClient {
|
|
|
48267
48267
|
listEdges() {
|
|
48268
48268
|
return this.request("GET", "/api/v1/edges");
|
|
48269
48269
|
}
|
|
48270
|
+
setAgentDeviceConfig(agentId, agentSettingsId, deviceId, config) {
|
|
48271
|
+
return this.request("PUT", `/api/v1/agents/${agentId}/device-config`, { agentSettingsId, deviceId, config });
|
|
48272
|
+
}
|
|
48273
|
+
listDevices() {
|
|
48274
|
+
return this.request("GET", "/api/v1/devices");
|
|
48275
|
+
}
|
|
48270
48276
|
startFromTemplate(projectId, templateId, opts) {
|
|
48271
48277
|
return this.request("POST", `/api/v1/projects/${projectId}/todos/from-template`, {
|
|
48272
48278
|
templateId,
|
|
@@ -48789,12 +48795,13 @@ var tool_catalog_default = {
|
|
|
48789
48795
|
installer: "npm",
|
|
48790
48796
|
label: "Gmail",
|
|
48791
48797
|
statusCmd: "zele whoami",
|
|
48792
|
-
loginCmd: "zele login",
|
|
48798
|
+
loginCmd: "zele login --method google",
|
|
48793
48799
|
credentialPaths: [
|
|
48794
48800
|
"~/.zele/sqlite.db"
|
|
48795
48801
|
],
|
|
48796
48802
|
capabilities: "Read inbox, search/send/reply email, email addresses — multi-account Gmail, OAuth browser login for setup.",
|
|
48797
|
-
versionCmd: "zele --version 2>/dev/null | head -1"
|
|
48803
|
+
versionCmd: "zele --version 2>/dev/null | head -1",
|
|
48804
|
+
preinstallCloud: true
|
|
48798
48805
|
},
|
|
48799
48806
|
xurl: {
|
|
48800
48807
|
category: "social",
|
|
@@ -48824,6 +48831,20 @@ var tool_catalog_default = {
|
|
|
48824
48831
|
description: "Authenticated LinkedIn Voyager API CLI. Cookie auth: `linkedin-api auth <li_at> <jsessionid>` (from browser DevTools).",
|
|
48825
48832
|
versionCmd: "linkedin-api --version 2>/dev/null | head -1"
|
|
48826
48833
|
},
|
|
48834
|
+
"figma-api": {
|
|
48835
|
+
category: "development",
|
|
48836
|
+
pkg: "@todoforai/figma-api",
|
|
48837
|
+
installer: "npm",
|
|
48838
|
+
label: "Figma",
|
|
48839
|
+
statusCmd: `figma-api me 2>/dev/null | grep -oP '"email":\\s*"\\K[^"]+' | head -1`,
|
|
48840
|
+
loginCmd: "figma-api auth",
|
|
48841
|
+
credentialPaths: [
|
|
48842
|
+
"~/.config/figma-api/credentials.json"
|
|
48843
|
+
],
|
|
48844
|
+
capabilities: "Read+write Figma REST API: files/nodes JSON, render images (png/svg/pdf), comments & reactions, components/styles/variables, dev resources, webhooks, projects, library analytics — full subcommand-per-endpoint CLI.",
|
|
48845
|
+
description: "Authenticated Figma REST API CLI. Auth: `figma-api auth <token>` (PAT from figma.com/settings). File commands take a file key or Figma URL. Read files/nodes/images/comments/components/styles/variables; write comments/dev-resources/webhooks. Canvas writes (frames/text/shapes) use `figma-api run` via the plugin bridge. Run `figma-api <cmd> --help` for params/scopes.",
|
|
48846
|
+
versionCmd: "figma-api --version 2>/dev/null | head -1"
|
|
48847
|
+
},
|
|
48827
48848
|
"tiktok-uploader": {
|
|
48828
48849
|
category: "social",
|
|
48829
48850
|
pkg: "tiktok-uploader",
|
|
@@ -48834,7 +48855,8 @@ var tool_catalog_default = {
|
|
|
48834
48855
|
"~/.tiktok/cookies.txt"
|
|
48835
48856
|
],
|
|
48836
48857
|
capabilities: "Upload videos, batch uploads, schedule posts, custom covers, hashtags & mentions",
|
|
48837
|
-
versionCmd: "pip show tiktok-uploader 2>/dev/null | grep -oP 'Version: \\K.*'"
|
|
48858
|
+
versionCmd: "pip show tiktok-uploader 2>/dev/null | grep -oP 'Version: \\K.*'",
|
|
48859
|
+
statusCmd: "test -f ~/.tiktok/cookies.txt && echo authenticated"
|
|
48838
48860
|
},
|
|
48839
48861
|
instagrapi: {
|
|
48840
48862
|
category: "social",
|
|
@@ -48842,7 +48864,8 @@ var tool_catalog_default = {
|
|
|
48842
48864
|
installer: "pip",
|
|
48843
48865
|
label: "Instagram",
|
|
48844
48866
|
capabilities: "Upload photos & reels, post stories, send DMs, like & comment, manage followers",
|
|
48845
|
-
versionCmd: "pip show instagrapi 2>/dev/null | grep -oP 'Version: \\K.*'"
|
|
48867
|
+
versionCmd: "pip show instagrapi 2>/dev/null | grep -oP 'Version: \\K.*'",
|
|
48868
|
+
statusCmd: "python3 -c 'import instagrapi' 2>/dev/null && echo installed"
|
|
48846
48869
|
},
|
|
48847
48870
|
mudslide: {
|
|
48848
48871
|
category: "messaging",
|
|
@@ -48909,7 +48932,8 @@ var tool_catalog_default = {
|
|
|
48909
48932
|
"~/.config/telegram-send/telegram-send.conf"
|
|
48910
48933
|
],
|
|
48911
48934
|
capabilities: "Send messages, send files & images, send video & audio, Markdown/HTML formatting, channel & group support",
|
|
48912
|
-
versionCmd: "telegram-send --version 2>/dev/null | head -1"
|
|
48935
|
+
versionCmd: "telegram-send --version 2>/dev/null | head -1",
|
|
48936
|
+
statusCmd: "test -f ~/.config/telegram-send/telegram-send.conf && echo authenticated"
|
|
48913
48937
|
},
|
|
48914
48938
|
"meta-ads": {
|
|
48915
48939
|
category: "marketing",
|
|
@@ -48926,7 +48950,12 @@ var tool_catalog_default = {
|
|
|
48926
48950
|
installer: "npm",
|
|
48927
48951
|
label: "ElevenLabs",
|
|
48928
48952
|
capabilities: "Text-to-speech, voice cloning, multiple languages. Needs ELEVENLABS_API_KEY.",
|
|
48929
|
-
versionCmd: "elevenlabs-api --version 2>/dev/null | head -1"
|
|
48953
|
+
versionCmd: "elevenlabs-api --version 2>/dev/null | head -1",
|
|
48954
|
+
statusCmd: 'test -f ~/.config/todoforai/elevenlabs.json && echo authenticated || test -n "$ELEVENLABS_API_KEY" && echo authenticated',
|
|
48955
|
+
loginCmd: "elevenlabs-api auth <api_key>",
|
|
48956
|
+
credentialPaths: [
|
|
48957
|
+
"~/.config/todoforai/elevenlabs.json"
|
|
48958
|
+
]
|
|
48930
48959
|
},
|
|
48931
48960
|
"codex-imagegen-api": {
|
|
48932
48961
|
category: "media",
|
|
@@ -48934,7 +48963,11 @@ var tool_catalog_default = {
|
|
|
48934
48963
|
installer: "npm",
|
|
48935
48964
|
label: "Image Gen",
|
|
48936
48965
|
capabilities: "AI image generation & editing via TODOFORAI backend (gpt-image)",
|
|
48937
|
-
versionCmd: "codex-imagegen-api --version 2>/dev/null | head -1"
|
|
48966
|
+
versionCmd: "codex-imagegen-api --version 2>/dev/null | head -1",
|
|
48967
|
+
statusCmd: 'test -f ~/.config/todoforai/credentials.json && echo authenticated || test -n "$TODOFORAI_API_KEY" && echo authenticated',
|
|
48968
|
+
credentialPaths: [
|
|
48969
|
+
"~/.config/todoforai/credentials.json"
|
|
48970
|
+
]
|
|
48938
48971
|
},
|
|
48939
48972
|
"suno-api": {
|
|
48940
48973
|
category: "media",
|
|
@@ -48942,7 +48975,8 @@ var tool_catalog_default = {
|
|
|
48942
48975
|
installer: "npm",
|
|
48943
48976
|
label: "Suno",
|
|
48944
48977
|
capabilities: "AI music generation, custom lyrics, multiple genres. Needs SUNO_API_KEY.",
|
|
48945
|
-
versionCmd: "suno-api --version 2>/dev/null | head -1"
|
|
48978
|
+
versionCmd: "suno-api --version 2>/dev/null | head -1",
|
|
48979
|
+
statusCmd: 'test -n "$SUNO_API_KEY" && echo authenticated'
|
|
48946
48980
|
},
|
|
48947
48981
|
ntn: {
|
|
48948
48982
|
category: "utility",
|
|
@@ -48963,7 +48997,12 @@ var tool_catalog_default = {
|
|
|
48963
48997
|
installer: "npm",
|
|
48964
48998
|
label: "Perplexity",
|
|
48965
48999
|
capabilities: "AI-powered web search, chat completions, async chat, embeddings and agent runs",
|
|
48966
|
-
versionCmd: "perplexity-api --version 2>/dev/null | head -1"
|
|
49000
|
+
versionCmd: "perplexity-api --version 2>/dev/null | head -1",
|
|
49001
|
+
statusCmd: 'test -f ~/.config/todoforai/perplexity.json && echo authenticated || test -n "$PERPLEXITY_API_KEY" && echo authenticated',
|
|
49002
|
+
loginCmd: "perplexity-api auth <api_key>",
|
|
49003
|
+
credentialPaths: [
|
|
49004
|
+
"~/.config/todoforai/perplexity.json"
|
|
49005
|
+
]
|
|
48967
49006
|
},
|
|
48968
49007
|
gh: {
|
|
48969
49008
|
category: "development",
|
|
@@ -49116,7 +49155,8 @@ var tool_catalog_default = {
|
|
|
49116
49155
|
"~/.config/shopify/config.json"
|
|
49117
49156
|
],
|
|
49118
49157
|
capabilities: "Theme development, app scaffolding, store management",
|
|
49119
|
-
versionCmd: "shopify version 2>/dev/null | head -1"
|
|
49158
|
+
versionCmd: "shopify version 2>/dev/null | head -1",
|
|
49159
|
+
statusCmd: "test -f ~/.config/shopify/config.json && echo authenticated"
|
|
49120
49160
|
},
|
|
49121
49161
|
"shop-app": {
|
|
49122
49162
|
category: "ecommerce",
|
|
@@ -49133,7 +49173,8 @@ var tool_catalog_default = {
|
|
|
49133
49173
|
installer: "npm",
|
|
49134
49174
|
label: "Datadog",
|
|
49135
49175
|
capabilities: "CI test visibility, sourcemap uploads, deployment tracking. Needs DATADOG_API_KEY.",
|
|
49136
|
-
versionCmd: "datadog-ci version 2>/dev/null | head -1"
|
|
49176
|
+
versionCmd: "datadog-ci version 2>/dev/null | head -1",
|
|
49177
|
+
statusCmd: 'test -n "$DATADOG_API_KEY" && echo authenticated'
|
|
49137
49178
|
},
|
|
49138
49179
|
"sentry-cli": {
|
|
49139
49180
|
category: "monitoring",
|
|
@@ -49280,7 +49321,7 @@ var tool_catalog_default = {
|
|
|
49280
49321
|
},
|
|
49281
49322
|
"agent-browser": {
|
|
49282
49323
|
category: "development",
|
|
49283
|
-
pkg: "agent-browser",
|
|
49324
|
+
pkg: "agent-browser@0.30.1",
|
|
49284
49325
|
installer: "npm",
|
|
49285
49326
|
preinstallCloud: true,
|
|
49286
49327
|
label: "Browser",
|
|
@@ -49295,30 +49336,30 @@ var tool_catalog_default = {
|
|
|
49295
49336
|
binName: "browser-manager-cli",
|
|
49296
49337
|
preinstallCloud: true,
|
|
49297
49338
|
label: "Browser Manager",
|
|
49298
|
-
statusCmd: "browser-manager-cli
|
|
49339
|
+
statusCmd: "browser-manager-cli status",
|
|
49299
49340
|
loginCmd: "browser-manager-cli login",
|
|
49300
|
-
capabilities: "On-demand cloud Chromium sessions exposed as CDP endpoints for agent-browser; create/list/get/delete sessions, hibernate/restore, health",
|
|
49301
|
-
description: "Spawns on-demand cloud Chromium sessions and exposes each as a CDP WebSocket for agent-browser to drive. Reuses the bridge login (zero-config, same creds as the daemon).
|
|
49341
|
+
capabilities: "On-demand cloud Chromium sessions exposed as CDP endpoints for agent-browser; create/list/get/delete sessions, hibernate/restore, health, per-session residential/datacenter proxy (stealth Chromium via CloakBrowser)",
|
|
49342
|
+
description: "Spawns on-demand cloud Chromium sessions and exposes each as a CDP WebSocket for agent-browser to drive. Reuses the bridge login (zero-config, same creds as the daemon). `browser-manager-cli create` prints one line: status, cdpUrl, dimensions (e.g. `active\twss://...?token=...\t1280x720`) — copy the cdpUrl straight into `agent-browser connect '<cdp_url>'`. `list`/`get <id>` show the same concise line per session; `hibernated-list` shows paused ones. `delete <id>` / `delete-all` to clean up, `hibernate`/`restore` to pause/resume. Add `--json` to any command for raw machine-readable output. Sessions run a stealth-patched Chromium (CloakBrowser: navigator.webdriver/UA/plugins/canvas/WebGL spoofed at the binary level), so they read as a real desktop browser. For sites that block datacenter IPs (e.g. login flows), route a session through a residential/ISP proxy: `create --proxy socks5://host:port [--proxy-user U --proxy-pass P]` — the server geoip-matches timezone/locale to the proxy exit IP, and the identity is kept across hibernate/restore. Use this on the cloud VM instead of launching a local browser.",
|
|
49302
49343
|
versionCmd: "browser-manager-cli version 2>/dev/null | head -1",
|
|
49303
49344
|
binary: {
|
|
49304
49345
|
"linux-x86_64": {
|
|
49305
|
-
url: "https://github.com/todoforai/browser-manager/releases/download/cli-v0.1.
|
|
49346
|
+
url: "https://github.com/todoforai/browser-manager/releases/download/cli-v0.1.1/browser-manager-cli-linux-x86_64",
|
|
49306
49347
|
archive: "raw"
|
|
49307
49348
|
},
|
|
49308
49349
|
"linux-aarch64": {
|
|
49309
|
-
url: "https://github.com/todoforai/browser-manager/releases/download/cli-v0.1.
|
|
49350
|
+
url: "https://github.com/todoforai/browser-manager/releases/download/cli-v0.1.1/browser-manager-cli-linux-aarch64",
|
|
49310
49351
|
archive: "raw"
|
|
49311
49352
|
},
|
|
49312
49353
|
"darwin-x86_64": {
|
|
49313
|
-
url: "https://github.com/todoforai/browser-manager/releases/download/cli-v0.1.
|
|
49354
|
+
url: "https://github.com/todoforai/browser-manager/releases/download/cli-v0.1.1/browser-manager-cli-darwin-x86_64",
|
|
49314
49355
|
archive: "raw"
|
|
49315
49356
|
},
|
|
49316
49357
|
"darwin-aarch64": {
|
|
49317
|
-
url: "https://github.com/todoforai/browser-manager/releases/download/cli-v0.1.
|
|
49358
|
+
url: "https://github.com/todoforai/browser-manager/releases/download/cli-v0.1.1/browser-manager-cli-darwin-aarch64",
|
|
49318
49359
|
archive: "raw"
|
|
49319
49360
|
},
|
|
49320
49361
|
"windows-x86_64": {
|
|
49321
|
-
url: "https://github.com/todoforai/browser-manager/releases/download/cli-v0.1.
|
|
49362
|
+
url: "https://github.com/todoforai/browser-manager/releases/download/cli-v0.1.1/browser-manager-cli-windows-x86_64.exe",
|
|
49322
49363
|
archive: "raw"
|
|
49323
49364
|
}
|
|
49324
49365
|
}
|
|
@@ -49341,7 +49382,8 @@ var tool_catalog_default = {
|
|
|
49341
49382
|
capabilities: "Spawn a TODO for AI sub-agent (FluidAgent) from the CLI; pipe stdin in, get an answer out",
|
|
49342
49383
|
versionCmd: "todoforai-subagent --version 2>/dev/null | head -1",
|
|
49343
49384
|
installCmd: "bun add -g @todoforai/subagent",
|
|
49344
|
-
internal: true
|
|
49385
|
+
internal: true,
|
|
49386
|
+
statusCmd: "todoforai-subagent whoami 2>/dev/null | grep -v 'not logged'"
|
|
49345
49387
|
},
|
|
49346
49388
|
"tfa-handoff": {
|
|
49347
49389
|
category: "development",
|
|
@@ -49352,7 +49394,8 @@ var tool_catalog_default = {
|
|
|
49352
49394
|
description: "Compact a conversation into a handoff document for a fresh agent.",
|
|
49353
49395
|
versionCmd: "tfa-handoff --version 2>/dev/null | head -1",
|
|
49354
49396
|
installCmd: "bun add -g @todoforai/tfa-handoff",
|
|
49355
|
-
internal: true
|
|
49397
|
+
internal: true,
|
|
49398
|
+
statusCmd: "tfa-handoff whoami 2>/dev/null | grep -v 'not logged'"
|
|
49356
49399
|
},
|
|
49357
49400
|
"tfa-vault": {
|
|
49358
49401
|
category: "security",
|
|
@@ -51676,18 +51719,25 @@ function truncateLines(text, { maxLines = MAX_RESULT_LINES, maxLineLen = MAX_LIN
|
|
|
51676
51719
|
... (output truncated)`;
|
|
51677
51720
|
return output;
|
|
51678
51721
|
}
|
|
51679
|
-
function
|
|
51680
|
-
if (!
|
|
51722
|
+
function collapseCarriageReturns(text) {
|
|
51723
|
+
if (!text.includes("\r"))
|
|
51681
51724
|
return text;
|
|
51682
51725
|
return text.split(`
|
|
51683
|
-
`).map((line) =>
|
|
51726
|
+
`).map((line) => {
|
|
51727
|
+
if (!line.includes("\r"))
|
|
51728
|
+
return line;
|
|
51729
|
+
let out = "";
|
|
51730
|
+
for (const seg of line.split("\r"))
|
|
51731
|
+
out = seg + out.slice(seg.length);
|
|
51732
|
+
return out;
|
|
51733
|
+
}).join(`
|
|
51684
51734
|
`);
|
|
51685
51735
|
}
|
|
51686
|
-
function
|
|
51687
|
-
if (!
|
|
51736
|
+
function capLineWidth(text, lineLimit) {
|
|
51737
|
+
if (!isFinite(lineLimit))
|
|
51688
51738
|
return text;
|
|
51689
51739
|
return text.split(`
|
|
51690
|
-
`).map((line) => line.
|
|
51740
|
+
`).map((line) => line.length > lineLimit ? line.slice(0, lineLimit) + ` ...[+${line.length - lineLimit} chars]` : line).join(`
|
|
51691
51741
|
`);
|
|
51692
51742
|
}
|
|
51693
51743
|
function formatTruncationNotice(totalLen, firstLimit, lastPart) {
|
|
@@ -51698,6 +51748,15 @@ function formatTruncationNotice(totalLen, firstLimit, lastPart) {
|
|
|
51698
51748
|
|
|
51699
51749
|
${lastPart}`;
|
|
51700
51750
|
}
|
|
51751
|
+
function applyOutputPolicy(text, policy) {
|
|
51752
|
+
const headLimit = Math.min(policy.firstLimit, policy.hardCap);
|
|
51753
|
+
if (text.length <= headLimit)
|
|
51754
|
+
return capLineWidth(text, policy.lineLimit);
|
|
51755
|
+
const tailLimit = Math.min(policy.lastLimit, policy.hardCap - headLimit);
|
|
51756
|
+
const head = capLineWidth(text.slice(0, headLimit), policy.lineLimit);
|
|
51757
|
+
const tail = tailLimit > 0 ? capLineWidth(text.slice(-tailLimit), policy.lineLimit) : "";
|
|
51758
|
+
return head + formatTruncationNotice(text.length, headLimit, tail);
|
|
51759
|
+
}
|
|
51701
51760
|
|
|
51702
51761
|
// src/shell.ts
|
|
51703
51762
|
var IS_WIN = os6.platform() === "win32";
|
|
@@ -52582,7 +52641,10 @@ register("execute_shell_command", async (args, client) => {
|
|
|
52582
52641
|
resolve((stdout || "") + (stderr || ""));
|
|
52583
52642
|
});
|
|
52584
52643
|
});
|
|
52585
|
-
|
|
52644
|
+
const detected = detectContentType(result, cmd);
|
|
52645
|
+
if (detected.contentType)
|
|
52646
|
+
return { cmd, ...detected };
|
|
52647
|
+
return { cmd, result: applyOutputPolicy(detected.result, resolveOutputPolicy(outputMode)) };
|
|
52586
52648
|
}
|
|
52587
52649
|
const { execCmd, postFilter } = extractTrailingTail(cmd);
|
|
52588
52650
|
const send = (m) => client.sendResponse(m);
|