ff1-cli 1.0.1 → 1.0.3

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/docs/README.md CHANGED
@@ -49,7 +49,7 @@ See the full configuration reference here: `./CONFIGURATION.md`.
49
49
  "gemini": {
50
50
  "apiKey": "your-gemini-key-here",
51
51
  "baseURL": "https://generativelanguage.googleapis.com/v1beta/openai/",
52
- "model": "gemini-2.0-flash-exp",
52
+ "model": "gemini-2.5-flash",
53
53
  "supportsFunctionCalling": true
54
54
  }
55
55
  },
@@ -57,7 +57,7 @@ See the full configuration reference here: `./CONFIGURATION.md`.
57
57
  "playlist": {
58
58
  "privateKey": "your_ed25519_private_key_base64_here"
59
59
  },
60
- "feed": { "baseURLs": ["https://feed.feralfile.com/api/v1"] },
60
+ "feed": { "baseURLs": ["https://dp1-feed-operator-api-prod.autonomy-system.workers.dev/api/v1"] },
61
61
  "ff1Devices": {
62
62
  "devices": [
63
63
  {
@@ -128,13 +128,15 @@ Notes:
128
128
  - Options: `-o, --output <file>`, `-v, --verbose`
129
129
  - `play <url>` – Send a media URL directly to an FF1 device
130
130
  - Options: `-d, --device <name>`, `--skip-verify`
131
- - `validate <file>` / `verify <file>` – Validate a DP1 playlist file
131
+ - `validate <file-or-url>` / `verify <file-or-url>` – Validate a DP1 playlist file
132
132
  - `sign <file>` – Sign playlist with Ed25519
133
133
  - Options: `-k, --key <base64>`, `-o, --output <file>`
134
- - `send <file>` – Send playlist to an FF1 device
134
+ - `send <file>` – Send a local or hosted DP-1 playlist to an FF1 device
135
135
  - Options: `-d, --device <name>`, `--skip-verify`
136
136
  - `publish <file>` – Publish a playlist to a feed server
137
137
  - Options: `-s, --server <index>` (server index if multiple configured)
138
+ - `ssh <enable|disable>` – Manage SSH access on an FF1 device
139
+ - Options: `-d, --device <name>`, `--pubkey <path>`, `--ttl <duration>`
138
140
  - `config <init|show|validate>` – Manage configuration
139
141
 
140
142
  ## Usage Highlights
@@ -205,10 +207,28 @@ npm run dev -- sign playlist.json -o signed.json
205
207
  # Send to device (verifies by default)
206
208
  npm run dev -- send playlist.json -d "Living Room Display"
207
209
 
210
+ # The send path now performs a compatibility preflight check against the target FF1.
211
+ # If the device reports an unsupported FF1 OS version, the command fails with
212
+ # a clear version message before any cast request is sent.
213
+ # Send a hosted DP-1 playlist
214
+ npm run dev -- send "https://cdn.example.com/playlist.json" -d "Living Room Display"
215
+
208
216
  # Play a direct URL
209
217
  npm run dev -- play "https://example.com/video.mp4" -d "Living Room Display" --skip-verify
210
218
  ```
211
219
 
220
+ ### SSH access
221
+
222
+ ```bash
223
+ # Enable SSH access for 30 minutes
224
+ ff1 ssh enable --pubkey ~/.ssh/id_ed25519.pub --ttl 30m -d "Living Room Display"
225
+
226
+ # Disable SSH access
227
+ ff1 ssh disable -d "Living Room Display"
228
+
229
+ # `ff1 ssh` also performs the same FF1 OS compatibility preflight used by `send`.
230
+ ```
231
+
212
232
  ### Publish to feed server
213
233
 
214
234
  ```bash
package/docs/RELEASING.md CHANGED
@@ -4,16 +4,45 @@ The curl installer downloads prebuilt binaries from GitHub Releases. Build one a
4
4
 
5
5
  ## Build a Release Asset (local)
6
6
 
7
+ **macOS / Linux:**
8
+
7
9
  ```bash
8
10
  ./scripts/release/build-asset.sh
9
11
  ```
10
12
 
11
- This produces:
13
+ **Windows (PowerShell):**
14
+
15
+ ```powershell
16
+ .\scripts\release\build-asset-windows.ps1
17
+ ```
18
+
19
+ This produces (names vary by OS/arch):
20
+
21
+ - `release/ff1-cli-darwin-arm64.tar.gz` (and `.sha256`) on macOS
22
+ - `release/ff1-cli-linux-x64.tar.gz` (and `.sha256`) on Linux
23
+ - `release/ff1-cli-windows-x64.zip` (and `.sha256`) on Windows
24
+
25
+ Run the appropriate script on each target platform and upload each pair to the GitHub release.
26
+
27
+ ## GitHub Actions
12
28
 
13
- - `release/ff1-cli-darwin-x64.tar.gz`
14
- - `release/ff1-cli-darwin-x64.tar.gz.sha256`
29
+ - **Build** (`build.yml`): Trigger manually (Actions → Build → Run workflow) or on pull requests. Builds binaries on macOS, Linux, and Windows and uploads them as workflow artifacts for download.
30
+ - **Release** (`release.yml`): Triggered when you **publish a release** (create a release from the repo Releases page, or publish an existing draft). Validates that `package.json` matches the tag, publishes to npm, builds binaries, then uploads them to that release. Pushing a tag alone does not run this; only creating/publishing a release does.
31
+
32
+ ## npm Publish Requirements
33
+
34
+ - Set `NPM_TOKEN` in GitHub Actions secrets with an npm automation token.
35
+ - Ensure `package.json` version matches the release tag (e.g. tag `1.0.2` → `"version": "1.0.2"`). The release job fails fast when they differ.
36
+
37
+ ## Installer Redirect
38
+
39
+ `https://feralfile.com/ff1-cli-install` should redirect to:
40
+
41
+ ```
42
+ https://raw.githubusercontent.com/feral-file/ff1-cli/main/scripts/install.sh
43
+ ```
15
44
 
16
- The exact filename depends on the OS/arch you build on. Run the script on each target platform (macOS + Linux, x64/arm64) and upload each pair to the GitHub release.
45
+ The installer script then fetches the release assets from GitHub Releases.
17
46
 
18
47
  ## Environment Overrides
19
48
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ff1-cli",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "CLI to fetch NFT information and build DP1 playlists using Grok API",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -21,7 +21,7 @@
21
21
  "start": "node dist/index.js",
22
22
  "dev": "tsx index.ts",
23
23
  "prepublishOnly": "npm run build",
24
- "test": "echo \"Error: no test specified\" && exit 1",
24
+ "test": "tsx tests/ff1-compatibility.test.ts",
25
25
  "lint": "eslint .",
26
26
  "lint:fix": "eslint . --fix",
27
27
  "format": "prettier --write \"**/*.{js,ts}\"",
@@ -43,24 +43,17 @@
43
43
  "author": "",
44
44
  "license": "MIT",
45
45
  "dependencies": {
46
- "@lancedb/lancedb": "^0.22.1",
47
- "@mozilla/readability": "^0.6.0",
48
- "@xenova/transformers": "^2.17.2",
49
46
  "axios": "^1.6.2",
47
+ "bonjour-service": "^1.3.0",
50
48
  "chalk": "^4.1.2",
51
- "cheerio": "^1.0.0-rc.12",
52
49
  "commander": "^11.1.0",
53
50
  "dotenv": "^16.3.1",
54
51
  "dp1-js": "^1.1.0",
55
52
  "fuzzysort": "^3.1.0",
56
- "jsdom": "^27.0.0",
57
53
  "openai": "^4.58.1",
58
- "ora": "^5.4.1",
59
- "puppeteer": "^24.22.3",
60
54
  "viem": "^2.38.2"
61
55
  },
62
56
  "devDependencies": {
63
- "@types/jsdom": "^27.0.0",
64
57
  "@types/node": "^24.7.1",
65
58
  "@typescript-eslint/eslint-plugin": "^8.46.0",
66
59
  "@typescript-eslint/parser": "^8.46.0",