@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 +20 -12
- package/bin/{video-reader-mcp → cue} +11 -11
- package/package.json +15 -15
- package/src/types/composeIris.ts +29 -0
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** (
|
|
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
|
-
[](https://www.npmjs.com/package/@sylphx/cue)
|
|
20
28
|
[](https://opensource.org/licenses/MIT)
|
|
21
29
|
[](https://github.com/SylphxAI/video-reader-mcp/actions/workflows/ci.yml)
|
|
22
30
|
[](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/
|
|
99
|
+
npm install -g @sylphx/cue
|
|
90
100
|
cue doctor
|
|
91
|
-
claude mcp add cue -- npx @sylphx/
|
|
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
|
-
"
|
|
193
|
+
"cue": {
|
|
186
194
|
"command": "npx",
|
|
187
|
-
"args": ["@sylphx/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
27
|
-
darwin-x64) printf '%s\n' '@sylphx/
|
|
28
|
-
linux-x64) printf '%s\n' '@sylphx/
|
|
29
|
-
linux-arm64) printf '%s\n' '@sylphx/
|
|
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/
|
|
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), '
|
|
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 "${
|
|
78
|
-
printf '%s\n' "${
|
|
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/
|
|
87
|
-
"$PACKAGE_ROOT/target/release/
|
|
88
|
-
"$PACKAGE_ROOT/target/debug/
|
|
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
|
|
4
|
-
"mcpName": "io.github.SylphxAI/
|
|
5
|
-
"description": "Cue
|
|
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
|
-
"
|
|
13
|
-
"cue": "./bin/video-reader-mcp"
|
|
12
|
+
"cue": "./bin/cue"
|
|
14
13
|
},
|
|
15
14
|
"files": [
|
|
16
|
-
"bin/
|
|
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/
|
|
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/
|
|
81
|
-
"@sylphx/
|
|
82
|
-
"@sylphx/
|
|
83
|
-
"@sylphx/
|
|
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
|
+
}
|