@sylphx/cue 0.1.7 → 0.2.1

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 CHANGED
@@ -1,10 +1,18 @@
1
+ ## Zero-config
2
+
3
+ ```bash
4
+ npx -y @sylphx/cue
5
+ ```
6
+
1
7
  <div align="center">
2
8
 
3
9
  # Cue
4
10
 
5
- ### Timeline proof for agents
11
+ ### Timeline proof for agents
12
+
13
+ Canonical package: **`@sylphx/cue`** · bin **`cue`** · public tools: `read_video`, `video_evidence` only.
6
14
 
7
- **Cue** (transitional package `@sylphx/video-reader-mcp`) — local video timeline evidence, not frame-by-frame VLM.
15
+ **Cue** (canonical package `@sylphx/cue`) — local video timeline evidence, not frame-by-frame VLM.
8
16
 
9
17
  <p align="center">
10
18
  <img src="https://mark.sylphx.com/api/v1/banner?type=mesh&theme=tokyonight&text=video+reader+mcp&desc=Evidence-first+video+reading+for+AI+agents+%E2%80%94+ffprobe%2C+subtitles%2C+scenes%2C+transcr&height=200&animation=rise&credit=0" alt="video-reader-mcp — Sylphx Mark banner" width="100%" />
@@ -16,7 +24,7 @@ Evidence-first video reading for AI agents. One call turns any local video into
16
24
  **timeline document** — ffprobe streams, chapters, embedded subtitles, scene
17
25
  boundaries, and warnings you can cite without frame-by-frame vision LLM calls.
18
26
 
19
- [![npm version](https://img.shields.io/npm/v/@sylphx/video-reader-mcp?style=flat-square)](https://www.npmjs.com/package/@sylphx/video-reader-mcp)
27
+ [![npm version](https://img.shields.io/npm/v/@sylphx/cue?style=flat-square)](https://www.npmjs.com/package/@sylphx/cue)
20
28
  [![License](https://img.shields.io/badge/License-MIT-blue?style=flat-square)](https://opensource.org/licenses/MIT)
21
29
  [![CI/CD](https://img.shields.io/github/actions/workflow/status/SylphxAI/video-reader-mcp/ci.yml?style=flat-square&label=CI/CD)](https://github.com/SylphxAI/video-reader-mcp/actions/workflows/ci.yml)
22
30
  [![TypeScript](https://img.shields.io/badge/TypeScript-7.0-blue.svg?style=flat-square)](https://www.typescriptlang.org/)
@@ -45,6 +53,8 @@ Spec: [docs/specs/agent-video-read-contract.md](docs/specs/agent-video-read-cont
45
53
 
46
54
  **Local-first frontier:** ffmpeg/ffprobe + structural keyframes, optional local whisper ASR. No cloud required.
47
55
 
56
+ Docs: [Cue→Iris semantic timeline](docs/compose-iris.md) — structural keyframes become timestamped objects via Iris L2.
57
+
48
58
  ## Product docs
49
59
 
50
60
  | Doc | Purpose |
@@ -86,15 +96,14 @@ not a slideshow summary.**
86
96
  ### Install (30 seconds)
87
97
 
88
98
  ```bash
89
- npm install -g @sylphx/video-reader-mcp
99
+ npm install -g @sylphx/cue
90
100
  cue doctor
91
- claude mcp add cue -- npx @sylphx/video-reader-mcp
101
+ claude mcp add cue -- npx @sylphx/cue
92
102
  ```
93
103
 
94
104
  **Install once. Call once.**
95
105
 
96
106
  ```bash
97
- claude mcp add video-reader -- npx @sylphx/video-reader-mcp
98
107
  ```
99
108
 
100
109
  ```json
@@ -172,7 +181,6 @@ Supported formats: MP4, M4V, MKV, MOV, WebM, and other formats ffprobe can inspe
172
181
  ### Claude Code
173
182
 
174
183
  ```bash
175
- claude mcp add video-reader -- npx @sylphx/video-reader-mcp
176
184
  ```
177
185
 
178
186
  ### Claude Desktop
@@ -182,9 +190,9 @@ Add this to `claude_desktop_config.json`:
182
190
  ```json
183
191
  {
184
192
  "mcpServers": {
185
- "video-reader": {
193
+ "cue": {
186
194
  "command": "npx",
187
- "args": ["@sylphx/video-reader-mcp"]
195
+ "args": ["@sylphx/cue"]
188
196
  }
189
197
  }
190
198
  }
@@ -193,13 +201,13 @@ Add this to `claude_desktop_config.json`:
193
201
  ### Any MCP Client
194
202
 
195
203
  ```bash
196
- npx @sylphx/video-reader-mcp
204
+ npx @sylphx/cue
197
205
  ```
198
206
 
199
207
  ### HTTP transport (optional)
200
208
 
201
209
  ```bash
202
- MCP_TRANSPORT=http MCP_HTTP_PORT=8080 npx @sylphx/video-reader-mcp
210
+ MCP_TRANSPORT=http MCP_HTTP_PORT=8080 npx @sylphx/cue
203
211
  ```
204
212
 
205
213
  ## Security model
@@ -246,7 +254,7 @@ when available on the runner.
246
254
  ## Support
247
255
 
248
256
  - [Issues](https://github.com/SylphxAI/video-reader-mcp/issues)
249
- - [npm package](https://www.npmjs.com/package/@sylphx/video-reader-mcp)
257
+ - [npm package](https://www.npmjs.com/package/@sylphx/cue)
250
258
  - Portfolio orchestration: [smart-reader-mcp](https://github.com/SylphxAI/smart-reader-mcp)
251
259
 
252
260
  ## Help this reach more builders
@@ -23,10 +23,10 @@ host_platform_key() {
23
23
 
24
24
  platform_package_name() {
25
25
  case "$(host_platform_key)" in
26
- darwin-arm64) printf '%s\n' '@sylphx/video-reader-mcp-darwin-arm64' ;;
27
- darwin-x64) printf '%s\n' '@sylphx/video-reader-mcp-darwin-x64' ;;
28
- linux-x64) printf '%s\n' '@sylphx/video-reader-mcp-linux-x64-gnu' ;;
29
- linux-arm64) printf '%s\n' '@sylphx/video-reader-mcp-linux-arm64-gnu' ;;
26
+ darwin-arm64) printf '%s\n' '@sylphx/cue-darwin-arm64' ;;
27
+ darwin-x64) printf '%s\n' '@sylphx/cue-darwin-x64' ;;
28
+ linux-x64) printf '%s\n' '@sylphx/cue-linux-x64-gnu' ;;
29
+ linux-arm64) printf '%s\n' '@sylphx/cue-linux-arm64-gnu' ;;
30
30
  *) return 1 ;;
31
31
  esac
32
32
  }
@@ -47,7 +47,7 @@ resolve_from_optional_dep() {
47
47
  "$PACKAGE_ROOT/../../node_modules"
48
48
  )
49
49
  for root in "${search_roots[@]}"; do
50
- candidate="$root/$pkg_name/video-reader-mcp-server"
50
+ candidate="$root/$pkg_name/cue-mcp-server"
51
51
  if is_runnable_native "$candidate"; then
52
52
  printf '%s\n' "$candidate"
53
53
  return 0
@@ -61,7 +61,7 @@ resolve_from_optional_dep() {
61
61
  const { createRequire } = require('node:module');
62
62
  const r = createRequire(p.join(process.argv[1], 'package.json'));
63
63
  const pkg = r.resolve(process.argv[2] + '/package.json');
64
- process.stdout.write(p.join(p.dirname(pkg), 'video-reader-mcp-server'));
64
+ process.stdout.write(p.join(p.dirname(pkg), 'cue-mcp-server'));
65
65
  } catch { process.exit(1); }
66
66
  " "$PACKAGE_ROOT" "$pkg_name" 2>/dev/null || true
67
67
  )"
@@ -74,8 +74,8 @@ resolve_from_optional_dep() {
74
74
  }
75
75
 
76
76
  resolve_rust_bin() {
77
- if [[ -n "${VIDEO_READER_MCP_RUST_BIN:-}" && -x "${VIDEO_READER_MCP_RUST_BIN}" ]]; then
78
- printf '%s\n' "${VIDEO_READER_MCP_RUST_BIN}"
77
+ if [[ -n "${CUE_RUST_BIN:-}" && -x "${CUE_RUST_BIN}" ]]; then
78
+ printf '%s\n' "${CUE_RUST_BIN}"
79
79
  return 0
80
80
  fi
81
81
  if bin="$(resolve_from_optional_dep)"; then
@@ -83,9 +83,9 @@ resolve_rust_bin() {
83
83
  return 0
84
84
  fi
85
85
  for candidate in \
86
- "$PACKAGE_ROOT/bin/native/video-reader-mcp-server" \
87
- "$PACKAGE_ROOT/target/release/video-reader-mcp-server" \
88
- "$PACKAGE_ROOT/target/debug/video-reader-mcp-server"; do
86
+ "$PACKAGE_ROOT/bin/native/cue-mcp-server" \
87
+ "$PACKAGE_ROOT/target/release/cue-mcp-server" \
88
+ "$PACKAGE_ROOT/target/debug/cue-mcp-server"; do
89
89
  if is_runnable_native "$candidate"; then
90
90
  printf '%s\n' "$candidate"
91
91
  return 0
package/package.json CHANGED
@@ -1,19 +1,18 @@
1
1
  {
2
2
  "name": "@sylphx/cue",
3
- "version": "0.1.7",
4
- "mcpName": "io.github.SylphxAI/video-reader-mcp",
5
- "description": "Cue Evidence-first video reading for AI agents ffprobe, subtitles, scenes, transcripts, and timelines without frame-by-frame LLM vision. (brand alias of @sylphx/video-reader-mcp)",
3
+ "version": "0.2.1",
4
+ "mcpName": "io.github.SylphxAI/cue",
5
+ "description": "Cue \u2014 timeline proof for agents. Local video evidence (ffprobe, subtitles, scenes) via MCP/CLI/SDK. Not frame-by-frame VLM.",
6
6
  "type": "module",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
10
10
  "license": "MIT",
11
11
  "bin": {
12
- "video-reader-mcp": "./bin/video-reader-mcp",
13
- "cue": "./bin/video-reader-mcp"
12
+ "cue": "./bin/cue"
14
13
  },
15
14
  "files": [
16
- "bin/video-reader-mcp",
15
+ "bin/cue",
17
16
  "dist/",
18
17
  "README.md",
19
18
  "LICENSE",
@@ -21,8 +20,7 @@
21
20
  ],
22
21
  "exports": {
23
22
  ".": "./dist/doctor-cli.js",
24
- "./sdk": "./src/sdk.ts",
25
- "./cue": "./src/sdk.ts"
23
+ "./sdk": "./src/sdk.ts"
26
24
  },
27
25
  "repository": {
28
26
  "type": "git",
@@ -54,13 +52,15 @@
54
52
  "check:fix": "biome check --write .",
55
53
  "sync:server-json": "bun scripts/sync-server-json.ts",
56
54
  "version-packages": "changeset version && bun run sync:server-json",
57
- "start": "./bin/video-reader-mcp",
55
+ "start": "./bin/cue",
58
56
  "clean": "rm -rf dist coverage",
57
+ "prepublishOnly": "bun run clean && bun run build && bun run build:rust",
59
58
  "release": "bun run typecheck && bun run check && bun run build && bun test && changeset publish",
60
59
  "doctor": "bun run src/doctor-cli.ts",
61
60
  "benchmark:release-gate": "bun scripts/release-gate.ts",
62
61
  "benchmark:public-proof": "bun scripts/public-proof.ts",
63
- "brand:pack-plan": "bun scripts/brand-pack-plan.ts"
62
+ "brand:pack-plan": "bun scripts/brand-pack-plan.ts",
63
+ "compose:iris": "bun scripts/compose-iris.ts"
64
64
  },
65
65
  "dependencies": {
66
66
  "@modelcontextprotocol/sdk": "^1.29.0",
@@ -77,9 +77,9 @@
77
77
  "packageManager": "bun@1.3.12",
78
78
  "private": false,
79
79
  "optionalDependencies": {
80
- "@sylphx/video-reader-mcp-darwin-arm64": "0.1.7",
81
- "@sylphx/video-reader-mcp-darwin-x64": "0.1.7",
82
- "@sylphx/video-reader-mcp-linux-x64-gnu": "0.1.7",
83
- "@sylphx/video-reader-mcp-linux-arm64-gnu": "0.1.7"
80
+ "@sylphx/cue-darwin-arm64": "0.2.1",
81
+ "@sylphx/cue-darwin-x64": "0.2.1",
82
+ "@sylphx/cue-linux-x64-gnu": "0.2.1",
83
+ "@sylphx/cue-linux-arm64-gnu": "0.2.1"
84
84
  }
85
- }
85
+ }
@@ -0,0 +1,29 @@
1
+ export interface ComposedKeyframeObject {
2
+ id: string;
3
+ label: string;
4
+ category?: string | undefined;
5
+ bbox?: { x: number; y: number; width: number; height: number } | undefined;
6
+ score?: number | undefined;
7
+ mask_ref?: string | null | undefined;
8
+ }
9
+
10
+ export interface ComposedKeyframe {
11
+ time_ms: number;
12
+ frame: string;
13
+ semantics_available: boolean;
14
+ skipped_reason?: string | undefined;
15
+ objects: ComposedKeyframeObject[];
16
+ caption?: string | undefined;
17
+ model?: string | undefined;
18
+ }
19
+
20
+ export interface ComposedIrisResult {
21
+ policy: 'cue_compose_iris_v1';
22
+ video: string;
23
+ keyframe_policy: string;
24
+ generated_at: string;
25
+ keyframe_count: number;
26
+ total_objects: number;
27
+ keyframes: ComposedKeyframe[];
28
+ warnings: string[];
29
+ }