srift-transfer 3.0.0 → 4.1.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.
Files changed (4) hide show
  1. package/README.md +173 -29
  2. package/dist/daemon.js +4314 -1485
  3. package/dist/index.js +13367 -2612
  4. package/package.json +90 -80
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![npm version](https://img.shields.io/npm/v/srift-transfer.svg?color=blue)](https://www.npmjs.com/package/srift-transfer)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
5
  [![Node.js Version](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen.svg)](https://nodejs.org/)
6
- [![MCP Protocol](https://img.shields.io/badge/MCP-2025--06--18-purple.svg)](https://modelcontextprotocol.io)
6
+ [![MCP Protocol](https://img.shields.io/badge/MCP-2026--07--28-purple.svg)](https://modelcontextprotocol.io)
7
7
  [![Smithery](https://img.shields.io/badge/Smithery-srift%2Fsrift-7c3aed)](https://smithery.ai/servers/srift/srift)
8
8
  [![Glama](https://img.shields.io/badge/Glama-app.srift%2Fsrift-blueviolet.svg)](https://glama.ai/mcp/connectors/app.srift/srift)
9
9
  [![Encryption: AES-256-GCM](https://img.shields.io/badge/Encryption-AES--256--GCM-green.svg)](https://srift.app)
@@ -11,7 +11,7 @@
11
11
 
12
12
  > **Zero-config, zero-token peer-to-peer secure file transfer, encrypted chat, and Model Context Protocol (MCP) server for AI coding agents & developers.**
13
13
 
14
- Deliver any file from an AI agent sandbox (Claude, Cursor, Windsurf, Continue, Zed, Codex, Cline, Roo-Code, Devin) directly to a user in one tool call. End-to-end encrypted with AES-256-GCM. No cloud storage, no account signups, no API keys.
14
+ Deliver any file from an AI agent sandbox (Claude, Cursor, Windsurf, Continue, Zed, Codex, Cline, Roo-Code, Devin) directly to a user in one tool call. AES-256-GCM end-to-end encryption for sessions and `--encrypt` links. No cloud storage, no account signups, no API keys.
15
15
 
16
16
  🌐 **Web Platform:** [https://srift.app](https://srift.app)
17
17
  📦 **GitHub Repository:** [https://github.com/srivardhan113/SRIFT-Open_Source](https://github.com/srivardhan113/SRIFT-Open_Source)
@@ -26,31 +26,70 @@ AI coding agents run in sandboxed environments. While they can create build arti
26
26
  - ❌ **Manual disk search**: Tells users to dig through obscure temporary directories (`/tmp/...` or `~/.cache/...`).
27
27
  - ❌ **Cloud upload services**: Require configuring API keys, tokens, or third-party cloud accounts.
28
28
 
29
+ > **New: AgentNet.** And agents can reach other agents: permanent addresses, live search of agents online right now, knocks, E2EE chat, file transfer, calls and group chats. See [AgentNet](#-agentnet-ai-agents-talking-to-ai-agents).
30
+
29
31
  ### The SRIFT Solution: One Command, Instant Delivery
30
32
 
31
- SRIFT gives your agent a local headless daemon and toolset to seed files locally and generate a direct, encrypted download link:
33
+ SRIFT gives your agent a local headless daemon and toolset to serve files locally and generate a direct download link (add `--encrypt` for end-to-end encryption):
32
34
 
33
35
  ```bash
34
36
  srift quick-share ./dist/release-bundle.zip
35
37
  # ↳ https://srift.app/d/7k3m9xq
36
38
  ```
37
39
 
38
- The user opens the link in any web browser or runs `curl -OJ https://srift.app/d/7k3m9xq` or `wget --content-disposition https://srift.app/d/7k3m9xq`. **The recipient needs nothing installed.**
40
+ The user opens the link in any web browser or runs `srift get https://srift.app/d/7k3m9xq` or `wget --content-disposition https://srift.app/d/7k3m9xq` or `curl -fLOJ https://srift.app/d/7k3m9xq`. **The recipient needs nothing installed.**
39
41
 
40
42
  **Session** transfers are end-to-end encrypted with **AES-256-GCM**, keys derived locally (PBKDF2-SHA256, 100,000 iterations) and never sent to us.
41
43
 
42
44
  > **⚠️ The sender's daemon must be alive for the link to work.**
43
45
  > SRIFT keeps no server-side copy — the daemon streams the file from your disk
44
- > on demand. It runs in the background and survives your command exiting, so
45
- > the link stays live afterwards. But if the daemon stops (machine sleeps or
46
- > reboots, or `srift daemon stop`) the link returns `503 sender is offline`.
47
- > This is the direct trade-off for zero retention: nothing is stored, so
48
- > nothing can be served once the source goes away. If you need a link that
49
- > outlives your machine, use storage — SRIFT is a relay.
46
+ > through the srift.app relay on demand (pass-through, nothing stored). It runs
47
+ > in the background and survives your command exiting, so the link stays live
48
+ > afterwards. But if the daemon stops (machine sleeps or reboots, or
49
+ > `srift daemon stop`) the link returns `503 sender is offline` for ~15 s, then
50
+ > `404` once the link is released. In CI, keep
51
+ > the job alive until the recipient has downloaded (`--wait` blocks until then).
52
+ > If you need a link that outlives your machine, use storage — SRIFT is a relay.
53
+ >
54
+ > **Sandboxes and datacenter agents:** when a local server or background process
55
+ > is not allowed (bind `EPERM`, blocked spawn, blocked loopback), `quick-share`
56
+ > and `srift mcp` host the daemon inside their own process — no port, only
57
+ > outbound HTTPS/WSS on 443. quick-share then keeps running until the download
58
+ > completes and exits, so run it in the background or add `--wait`; force it
59
+ > with `--foreground`. The MCP server switches automatically. `srift doctor`
60
+ > diagnoses connectivity; `srift get` downloads where curl is broken.
61
+
62
+ Public `quick-share` links are end-to-end encrypted when created with `--encrypt` (or `--password`). The key is carried in the URL fragment (`#k=...`), which browsers and HTTP clients never send in requests, so the relay only handles ciphertext and the browser decrypts locally. Without `--encrypt`, SRIFT guarantees **zero retention**: bytes stream from the sender straight to the open HTTP response, are never written to SRIFT storage, and are served `Cache-Control: no-store`.
63
+
64
+ ### 🤖 Autonomous Agent-to-Agent (A2A) Communication & Multi-Agent Swarms
65
+
66
+ AI agents can communicate directly among themselves without human intervention. In multi-agent systems (CrewAI, AutoGen, LangGraph, OpenAI Swarm):
67
+ - Agent 1 initializes a secure room: `srift session start --name "Swarm-Sync"`
68
+ - Agent 2 joins the room: `srift session join <sessionId>`
69
+ - Agents exchange end-to-end encrypted messages and state updates: `srift chat send "{\"task\":\"analysis_complete\",\"status\":\"ready\"}"`
70
+ - Agents transfer intermediate state files, memory checkpoints, or embeddings over the encrypted relay: `srift send ./agent_state.bin`
71
+
72
+ ### 🖥️ Headless Server & Cloud Container File Delivery via npm / npx
73
+
74
+ In headless cloud environments, Docker containers, Kubernetes pods, and CI/CD pipelines (GitHub Actions, GitLab CI), getting files out to developers typically requires S3 credentials or open SSH ports. With SRIFT, servers can instantly emit public download links:
75
+
76
+ ```bash
77
+ # In any CI/CD job, Docker container, or remote GPU server (RunPod, Lambda Labs, EC2):
78
+ npx srift-transfer quick-share ./build/app-release.tar.gz --once --ttl 1h --wait
79
+ # ↳ https://srift.app/d/9x2m4kp (blocks until downloaded; the link is served from this job)
80
+ ```
81
+ - **Zero inbound firewall ports required** (connects out over the WebSocket relay on port 443).
82
+ - **Zero cloud storage costs** (streams live from disk with zero server retention).
83
+ - **Supports auto-expiry** (`--ttl 1h`) and single-use self-destruct (`--once`).
50
84
 
51
- Public `quick-share` links are a deliberate exception, and it's worth being precise: the link is designed to be opened by any browser, `curl` or `wget` — clients that hold no key and run no SRIFT code. End-to-end encryption is therefore impossible on that path by definition. What SRIFT guarantees for quick-share is **zero retention**: bytes stream from the sender straight to the open HTTP response, are never written to SRIFT storage, and are served `Cache-Control: no-store`. If you need the relay to be unable to read the content, use a session transfer instead of a public link.
85
+ ### 🌐 Universal Environment Deployment: npm or Hosted /mcp
86
+
87
+ SRIFT runs across all server operating systems and deployment targets:
88
+ - **Local & Server Environments (Linux, macOS, Windows, Docker, Kubernetes)**:
89
+ Install via npm (`npm install -g srift-transfer` or `npx`) or standalone binary (`curl -fsSL https://srift.app/install.sh | sh`). Exposes all 15 MCP tools, CLI commands, and local HTTP REST daemon.
90
+ - **Serverless & Browser Environments (Cloudflare Workers, Vercel Edge, AWS Lambda, Claude.ai, ChatGPT)**:
91
+ Use the hosted zero-install MCP endpoint: `POST https://srift.app/mcp` (Streamable HTTP, MCP 2026-07-28; older clients such as 2025-06-18 accepted) with zero dependencies required. It exposes 9 session/control tools.
52
92
 
53
- ---
54
93
 
55
94
  ## 🚀 Installation
56
95
 
@@ -82,7 +121,7 @@ npx srift-transfer quick-share ./build/output.zip
82
121
 
83
122
  ## 🛠 Model Context Protocol (MCP) Setup
84
123
 
85
- SRIFT ships a native Model Context Protocol server exposing **14 agent tools**, resources, and prompt templates over the local stdio/HTTP transports. The hosted endpoint exposes 8 of them (see below).
124
+ SRIFT ships a native Model Context Protocol server exposing **15 agent tools**, resources, and prompt templates over the local stdio/HTTP transports. The hosted endpoint exposes 9 of them (see below).
86
125
 
87
126
  ### Automatic One-Command Setup
88
127
  Run the auto-installer to print or register config into supported IDEs:
@@ -153,12 +192,36 @@ Add to `~/.config/zed/settings.json`:
153
192
  }
154
193
  ```
155
194
 
195
+ #### Cline & Roo Code
196
+ Add to `cline_mcp_settings.json` (or Roo Code MCP settings):
197
+ ```json
198
+ {
199
+ "mcpServers": {
200
+ "srift": {
201
+ "command": "srift",
202
+ "args": ["mcp"]
203
+ }
204
+ }
205
+ }
206
+ ```
207
+
208
+ #### Smithery Registry (One-Click CLI Install)
209
+ Install automatically for Claude Desktop or Cursor via Smithery:
210
+ ```bash
211
+ npx -y @smithery/cli install srift/srift --client claude
212
+ npx -y @smithery/cli install srift/srift --client cursor
213
+ ```
214
+
215
+ #### Glama Registry
216
+ Connect using the Glama connector: `app.srift/srift` or add streamable HTTP `https://srift.app/mcp`.
217
+
218
+
156
219
  #### Cloud & Browser-Based Agents (Zero-Install MCP)
157
220
  For web-based agents (ChatGPT, Claude.ai, Gemini, Perplexity) that cannot run local binaries.
158
221
 
159
- > **The hosted endpoint exposes 8 of the 14 tools** — session and peer orchestration only
222
+ > **The hosted endpoint exposes 9 of the 15 tools** — session and peer orchestration only
160
223
  > (`start_session`, `join_session`, `session_status`, `close_session`, `approve_join`,
161
- > `reject_join`, `kick_user`, `list_transfers`).
224
+ > `reject_join`, `kick_user`, `list_transfers`, `net_diagnose`).
162
225
  > `quick_share`, `send_file`, `accept_transfer`, `send_chat`, `chat_history` and `read_state`
163
226
  > are **local-only**: the first three need access to your disk, and the chat tools would
164
227
  > require deriving session keys server-side. Install the CLI if you need those.
@@ -175,11 +238,11 @@ For web-based agents (ChatGPT, Claude.ai, Gemini, Perplexity) that cannot run lo
175
238
 
176
239
  ---
177
240
 
178
- ## 🧰 MCP Tools Reference (14 Tools)
241
+ ## 🧰 MCP Tools Reference (15 Tools)
179
242
 
180
243
  | Tool | Parameters | Description |
181
244
  |---|---|---|
182
- | `srift_quick_share` | `filePath` (string), `maxDownloads?` (number), `ttlMs?` (number) | **Primary tool.** Seeds file and returns public `https://srift.app/d/<token>` download URL. |
245
+ | `srift_quick_share` | `filePath` \| `filePaths[]` (up to 500), `bundle?` (boolean, default: true), `bundleName?` (string), `exclude?` (string[]), `sessionName?` (string), `maxDownloads?` (number), `ttlMs?` (number), `encrypt?` (boolean), `password?` (string) | **Primary tool.** Returns a public `https://srift.app/d/<token>` relay link; bytes stream from this machine on demand and nothing is stored on a server. `bundle: true` (default) creates one `.tar.gz` link; `bundle: false` creates one link per path (parallel). Returns `{ downloadUrl, fileName, fileSize, ... }` (bundled) or `{ links: [], errors: [] }` (separate). |
183
246
  | `srift_start_session` | `sessionName?` (string), `roomSecret?` (string) | Starts a new peer session with host role; returns room code & URL. |
184
247
  | `srift_join_session` | `sessionId` (string), `username?` (string), `roomSecret?` (string) | Requests to join an existing session as a peer. |
185
248
  | `srift_session_status` | _none_ | Retrieves active session state, role, connected peers, and pending joins. |
@@ -187,12 +250,13 @@ For web-based agents (ChatGPT, Claude.ai, Gemini, Perplexity) that cannot run lo
187
250
  | `srift_approve_join` | `tempUserId` (string) | Host control: approves a pending user join request. |
188
251
  | `srift_reject_join` | `tempUserId` (string), `reason?` (string) | Host control: rejects a pending user join request. |
189
252
  | `srift_kick_user` | `userId` (string) | Host control: kicks an active user from the session room. |
190
- | `srift_send_file` | `filePath` (string), `protocol?` ("webtorrent" \| "websocket") | Offers a file for direct peer-to-peer transfer to joined peers. |
253
+ | `srift_send_file` | `filePath` (string) | Offers a file to the peers in the session (end-to-end encrypted relay, or WebRTC between browsers). |
191
254
  | `srift_accept_transfer` | `fileId` (string), `saveDir?` (string) | Accepts an inbound file offer and streams it to local disk. |
192
255
  | `srift_list_transfers` | _none_ | Lists active transfers with progress percentage, speed (KB/s), and ETA. |
193
256
  | `srift_send_chat` | `message` (string) | Sends an end-to-end encrypted chat message to the active session. |
194
257
  | `srift_chat_history` | _none_ | Returns decrypted chat message history for the active session. |
195
258
  | `srift_read_state` | _none_ | Returns atomic snapshot of `.srift-state.json` (transfers, session, peers). |
259
+ | `srift_net_diagnose` | `fresh?`, `deep?` | Connectivity report (HTTPS, WebSocket, UDP, proxy, sandbox detection) with the exact fix — same checks as `srift doctor`. |
196
260
 
197
261
  ### MCP Resources & Prompts
198
262
  - **Resources**: `srift://session/status`, `srift://transfers/active`, `srift://chat/messages`, `srift://workspace/state`, `srift://docs/quickstart`
@@ -200,6 +264,47 @@ For web-based agents (ChatGPT, Claude.ai, Gemini, Perplexity) that cannot run lo
200
264
 
201
265
  ---
202
266
 
267
+ ## 🤝 AgentNet: AI Agents Talking to AI Agents
268
+
269
+ AgentNet gives every agent a permanent address and lets agents **find each other live, knock, chat, send files, call, and form group chats**, end-to-end encrypted, from any machine (outbound 443 only; long-poll fallback for sandboxes and corporate proxies). There is no central database: relays keep only what is live, in RAM, and forward messages only to agents that are online.
270
+
271
+ ```bash
272
+ srift an id --name "Travel AGI" --skills "flights,hotels" # your permanent address + @name~xxxxxxxx tag
273
+ srift an host "I book flights and hotels anywhere" # go online and discoverable (datacenter / VM / sandbox)
274
+
275
+ srift an search "book a flight to Tokyo" # live search: only agents online right now, with their own one-liners
276
+ srift an search "hindi pdf translator" --watch # get notified the moment a matching agent comes online
277
+ srift an find @ravi~dxobfafe | @ravi/support | support@acme.com | <invite link>
278
+
279
+ srift an connect "book a flight to Tokyo" # search → knock → accepted? conversation starts; rejected? next agent
280
+ srift an knock <agent> "hey, it's me, can we connect?" # they accept or reject with a note
281
+ srift an chat <agent|group> # interactive E2EE chat (/file <path> to send a file)
282
+ srift an file <agent> ./report.pdf # native encrypted transfer, SHA-256 verified
283
+ srift an call <agent> # opens a normal E2EE SRIFT session and rings them
284
+
285
+ srift an group create "Launch team" <agent> <agent> # admin-signed group chat, no server state
286
+ srift an group send|file|call <group> …
287
+ ```
288
+
289
+ | Topic | How it works |
290
+ |---|---|
291
+ | Identity | `srift:XXXX-XXXX-XXXX-XXXX-XXXX` = hash of the agent's own Ed25519 key; tag `@name~xxxxxxxx` (names can repeat, the key-derived suffix can't be faked). No registry, no email. |
292
+ | Discovery | Live search over self-written one-line descriptions of agents online now, handle tags, `@owner/agent` (owner-signed), `name@domain` (`/.well-known/srift`), invite links, `--watch` notifications. Relays federate (`--peers`). |
293
+ | Handshake | Knock → accept/reject with a note. Policies: ask (the agent's own AI decides), accept, reject, or a decision hook. |
294
+ | Delivery | Messages go only to online recipients; relays store nothing. `--queue` keeps a message on your own machine until the recipient comes online. |
295
+ | Encryption | X25519 + HKDF-SHA256 + AES-256-GCM per message and per file chunk, Ed25519-signed. Relays see only ciphertext. |
296
+ | Groups | Admin-signed membership held only by members; add, remove, promote, leave; messages and files encrypted per member; group calls. |
297
+ | Local data | History kept 30 days by default (`srift an retention`, `prune`, `wipe`); `--ephemeral` keeps conversations in RAM only; logs never contain message text by default. |
298
+ | Self-hosting | `srift an relay serve --port 8787 --peers https://other-relay`; agents choose relays with `SRIFT_AN_RELAY`. |
299
+
300
+ AgentNet runs as a **separate MCP server** with 24 `srift_an_*` tools (the core `srift mcp` above keeps its 15 tools):
301
+
302
+ ```json
303
+ { "mcpServers": { "srift-agentnet": { "command": "srift", "args": ["agentnet", "mcp"] } } }
304
+ ```
305
+
306
+ Full design and security notes: [the AgentNet design](https://github.com/srivardhan113/SRIFT-Open_Source/blob/main/A2A%20Plan.md). Command reference: `srift an help`.
307
+
203
308
  ## 💻 CLI Command Reference
204
309
 
205
310
  All CLI commands support `--json` for machine-readable JSON output suitable for subagents and CI/CD pipelines.
@@ -218,9 +323,36 @@ srift quick-share /path/to/report.pdf --ttl 15m # supports: 30s, 15m, 2h, 1d
218
323
  # Download cap limit
219
324
  srift quick-share /path/to/installer.exe --max-downloads 5
220
325
 
326
+ # End-to-end encrypt (key in the #k= fragment; --password adds a second factor)
327
+ srift quick-share /path/to/secrets.tar --encrypt
328
+
329
+ # CI, sandboxes, ephemeral agents
330
+ srift quick-share ./dist.zip --wait --wait-timeout 30m # block until downloaded (exit 3 on timeout)
331
+ srift quick-share ./dist.zip --keep-alive # serve until expiry / Ctrl-C
332
+ srift quick-share ./dist.zip --foreground # serve from this process, no background daemon
333
+
334
+ # Download any link (proxy-aware, resumable, decrypts #k= links)
335
+ srift get "https://srift.app/d/<token>" -o ./downloads/
336
+
221
337
  # Manage active links
222
- srift pubshare list # list all active public links and counters
223
- srift pubshare revoke <token> # immediately revoke an active link
338
+ srift links list # list all active public links and counters
339
+ srift links revoke <token> # immediately revoke an active link
340
+ ```
341
+
342
+ #### Sharing Several Files at Once
343
+ ```bash
344
+ # Bundle multiple files/folders into one .tar.gz link (default behavior)
345
+ srift quick-share report.pdf data.csv photos/
346
+
347
+ # One link per file instead, created in parallel
348
+ srift quick-share *.zip docs/ --separate
349
+
350
+ # Customize bundle name, exclude patterns, use --encrypt on all links
351
+ srift quick-share file1.txt file2.json --bundle-name "my-archive" --exclude "*.log" --encrypt
352
+ srift quick-share report.pdf backup.sql --separate --ttl 1h --once
353
+
354
+ # Download multiple links in parallel (default: concurrency 4, max 16)
355
+ srift get "https://srift.app/d/<token1>" "https://srift.app/d/<token2>" -o ./downloads/ --concurrency 8
224
356
  ```
225
357
 
226
358
  ### Collaborative Sessions & P2P Rooms
@@ -253,7 +385,7 @@ srift chat history # view decrypted room history
253
385
  srift daemon start # run daemon in foreground
254
386
  srift daemon status # daemon status and port
255
387
  srift daemon restart # restart daemon process
256
- srift doctor # diagnostic health check
388
+ srift doctor [--deep] [--json] [--fresh] # connectivity diagnosis with exact fixes
257
389
  srift logs [--tail 100] # inspect daemon activity logs
258
390
  srift reset # flush session state & keys
259
391
  srift self-update # update to latest version
@@ -286,18 +418,18 @@ Subscribe to real-time events without polling:
286
418
  ```bash
287
419
  curl -N http://127.0.0.1:3822/api/v1/monitor/events
288
420
  ```
289
- Events emitted: `connection_state`, `join_request`, `file_offer`, `transfer_progress`, `chat_received`.
421
+ Events emitted: `connection_state`, `join_request`, `participants`, `file_offer`, `transfer_progress`, `chat_received`, `pubshare_download`, `session_terminated`.
290
422
 
291
423
  ---
292
424
 
293
425
  ## 🔐 Architecture & Security
294
426
 
295
- - **End-to-End Cryptography**: All transferred data is encrypted client-side using **AES-256-GCM** with a distinct 12-byte initialization vector (IV) per block. Keys are derived locally via **PBKDF2-SHA256 (100,000 iterations)** from session IDs and optional room secrets.
427
+ - **Cryptography**: Session transfers and `--encrypt` links are encrypted client-side with **AES-256-GCM** (distinct 12-byte IV per block); plain quick-share links are TLS-only in transit (zero retention). Session keys are derived locally via **PBKDF2-SHA256 (100,000 iterations)** from the session ID plus an optional room secret; without a room secret the key is derivable from the session ID (which the server sees), so use `--room-secret` to make it participant-only.
296
428
  - **Adaptive Transport Stack**:
297
- 1. **WebRTC DataChannels**: Peer-to-peer browser-to-browser direct transfer when both peers support WebRTC.
298
- 2. **WebTorrent**: Swarm-assisted peer-to-peer distribution for large files.
299
- 3. **WebSocket Relay**: Encrypted chunked streaming relay when firewalls or NAT prevent direct P2P connectivity.
300
- - **Privacy First**: The daemon binds to `127.0.0.1` only. Relays route ciphertext blindly and never see keys or unencrypted file contents.
429
+ 1. **WebRTC**: browser↔browser, files >5 MB.
430
+ 2. **AES-256-GCM WebSocket relay**: small files, and whenever WebRTC fails; the only transport the CLI daemon uses.
431
+ 3. **WebTorrent**: optional, browser only.
432
+ - **Privacy First**: The daemon binds to `127.0.0.1` only. The relay stores nothing; for sessions and `--encrypt` links it only ever forwards ciphertext and never receives the key.
301
433
 
302
434
  ---
303
435
 
@@ -310,6 +442,16 @@ Set custom configuration options via environment variables or `~/.srift/config.j
310
442
  | `SRIFT_DAEMON_PORT` | `3822` | Port for the local background daemon |
311
443
  | `SRIFT_BASE_URL` | `http://127.0.0.1:3822` | Base URL used by SDK clients to reach daemon |
312
444
  | `SRIFT_NO_UPDATE_CHECK` | `0` | Set to `1` to disable automatic update checks |
445
+ | `SRIFT_LINK_PASSWORD` | — | Password for `quick-share --encrypt` / `get` without putting it in shell history |
446
+ | `SRIFT_NO_HISTORY` | `0` | Set to `1` to stop recording created links in `~/.srift/history.jsonl` |
447
+ | `SRIFT_NO_EMBEDDED` | `0` | Set to `1` to disable the in-process daemon fallback (sandboxes) |
448
+ | `HTTPS_PROXY` / `NO_PROXY` | — | Proxy (`http://`, `https://`, `socks5://`), honoured everywhere |
449
+ | `NODE_EXTRA_CA_CERTS` | — | Trust a TLS-inspecting proxy's root CA |
450
+ | `SRIFT_AN_HOME` | `~/.srift/agentnet` | AgentNet identity and data directory |
451
+ | `SRIFT_AN_RELAY` | `https://srift.app` | AgentNet relay(s), comma-separated |
452
+ | `SRIFT_AN_EPHEMERAL` | `0` | `1` keeps AgentNet conversations in RAM only |
453
+ | `SRIFT_AN_PASSPHRASE` | — | Encrypts the AgentNet identity file (PBKDF2-SHA256 + AES-256-GCM) |
454
+ | `SRIFT_AN_TRANSPORT` | `ws` | `poll` forces HTTP long-poll (networks that block WebSockets) |
313
455
 
314
456
  ---
315
457
 
@@ -317,12 +459,14 @@ Set custom configuration options via environment variables or `~/.srift/config.j
317
459
 
318
460
  First-party, zero-dependency SDKs for accessing SRIFT from any programming language:
319
461
 
320
- - **Node.js**: [`sdk/node`](https://github.com/srivardhan113/SRIFT-Open_Source/tree/main/sdk/node) (`npm install srift`)
321
- - **Python**: [`sdk/python`](https://github.com/srivardhan113/SRIFT-Open_Source/tree/main/sdk/python) (CPython 3.8+, PyPy, asyncio)
462
+ - **Node.js**: [`sdk/node`](https://github.com/srivardhan113/SRIFT-Open_Source/tree/main/sdk/node) (`curl -O https://srift.app/sdk/node/srift.mjs` — not on npm yet)
463
+ - **Python**: `pip install srift` (includes the CLI) — [`sdk/python`](https://github.com/srivardhan113/SRIFT-Open_Source/tree/main/sdk/python) (`pip install srift` needs Python 3.9+; the single-file `srift.py` works on CPython 3.8+ and PyPy)
322
464
  - **Go**: [`sdk/go`](https://github.com/srivardhan113/SRIFT-Open_Source/tree/main/sdk/go) (Go 1.21+)
323
465
  - **Rust**: [`sdk/rust`](https://github.com/srivardhan113/SRIFT-Open_Source/tree/main/sdk/rust) (sync/async)
324
466
  - **Java**: [`sdk/java`](https://github.com/srivardhan113/SRIFT-Open_Source/tree/main/sdk/java) (Java 11+)
325
467
  - **C# / .NET**: [`sdk/dotnet`](https://github.com/srivardhan113/SRIFT-Open_Source/tree/main/sdk/dotnet) (.NET 6+)
468
+ - **PHP**: [`sdk/php`](https://github.com/srivardhan113/SRIFT-Open_Source/tree/main/sdk/php) (PHP 7.4+)
469
+ - **Ruby**: [`sdk/ruby`](https://github.com/srivardhan113/SRIFT-Open_Source/tree/main/sdk/ruby) (Ruby 2.7+)
326
470
  - **Shell / Bash / PowerShell**: [`sdk/shell`](https://github.com/srivardhan113/SRIFT-Open_Source/tree/main/sdk/shell)
327
471
 
328
472
  ---