dsh-pf-stream 0.2.0 → 0.2.2
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.en.md +15 -0
- package/README.md +15 -0
- package/lib/entry/adapter.d.ts +4 -0
- package/lib/entry/adapter.js +11 -6
- package/lib/entry/adapter.js.map +1 -1
- package/lib/entry/legacyNormalizer.d.ts +6 -2
- package/lib/entry/legacyNormalizer.js +20 -10
- package/lib/entry/legacyNormalizer.js.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.js +15 -1
- package/lib/index.js.map +1 -1
- package/lib/session/state.js +5 -23
- package/lib/session/state.js.map +1 -1
- package/lib/stage0/decoder.d.ts +2 -0
- package/lib/stage0/decoder.js +23 -3
- package/lib/stage0/decoder.js.map +1 -1
- package/lib/stage2/stateMachine.js +0 -3
- package/lib/stage2/stateMachine.js.map +1 -1
- package/lib/stage3/deterministicRouter.d.ts +6 -2
- package/lib/stage3/deterministicRouter.js +143 -81
- package/lib/stage3/deterministicRouter.js.map +1 -1
- package/lib/stage3/streamSampler.d.ts +2 -0
- package/lib/stage3/streamSampler.js +5 -7
- package/lib/stage3/streamSampler.js.map +1 -1
- package/lib/stage4/viewport.d.ts +2 -1
- package/lib/stage4/viewport.js +7 -3
- package/lib/stage4/viewport.js.map +1 -1
- package/lib/stage5/controller.js +1 -1
- package/lib/stage5/intent.d.ts +2 -0
- package/lib/stage5/intent.js +23 -10
- package/lib/stage5/intent.js.map +1 -1
- package/lib/stage6/precheck.d.ts +4 -2
- package/lib/stage6/precheck.js +5 -5
- package/lib/stage6/precheck.js.map +1 -1
- package/lib/tool/handler.d.ts +17 -0
- package/lib/tool/handler.js +18 -7
- package/lib/tool/handler.js.map +1 -1
- package/lib/tool/schema.d.ts +4 -1
- package/lib/tool/schema.js +15 -1
- package/lib/tool/schema.js.map +1 -1
- package/lib/tool/streamCall.d.ts +2 -0
- package/lib/tool/streamCall.js +39 -6
- package/lib/tool/streamCall.js.map +1 -1
- package/lib/types.d.ts +2 -4
- package/package.json +1 -1
package/lib/stage5/intent.js
CHANGED
|
@@ -68,20 +68,33 @@ export function baselinesFromIntent(mode, focus) {
|
|
|
68
68
|
export function mergeSessionIntent(current, intent, defaults) {
|
|
69
69
|
if (!intent)
|
|
70
70
|
return current;
|
|
71
|
+
// reset 先行(规格《五》§1.3:重置后合并本次新字段),
|
|
72
|
+
// 再按字段级合并覆盖,保证 {reset:true, mode:'dense'} 不丢 dense。
|
|
73
|
+
const base = intent.reset
|
|
74
|
+
? {
|
|
75
|
+
intentId: current.intentId,
|
|
76
|
+
mode: defaults.mode,
|
|
77
|
+
focus: defaults.focus,
|
|
78
|
+
fullFrame: false,
|
|
79
|
+
}
|
|
80
|
+
: current;
|
|
71
81
|
const next = {
|
|
72
|
-
...
|
|
73
|
-
mode: intent.mode ??
|
|
74
|
-
focus: intent.focus ??
|
|
75
|
-
fullFrame: intent.full_frame ??
|
|
82
|
+
...base,
|
|
83
|
+
mode: intent.mode ?? base.mode,
|
|
84
|
+
focus: intent.focus ?? base.focus,
|
|
85
|
+
fullFrame: intent.full_frame ?? base.fullFrame,
|
|
76
86
|
};
|
|
77
|
-
if (intent.reset) {
|
|
78
|
-
next.mode = defaults.mode;
|
|
79
|
-
next.focus = defaults.focus;
|
|
80
|
-
next.roiHint = undefined;
|
|
81
|
-
next.fullFrame = false;
|
|
82
|
-
}
|
|
83
87
|
if (intent.roi_hint)
|
|
84
88
|
next.roiHint = intent.roi_hint;
|
|
89
|
+
else if (intent.reset)
|
|
90
|
+
next.roiHint = undefined;
|
|
85
91
|
return next;
|
|
86
92
|
}
|
|
93
|
+
/** 会话意图是否发生变化(用于 intentId 递增判定)。 */
|
|
94
|
+
export function sessionIntentChanged(a, b) {
|
|
95
|
+
return (a.mode !== b.mode ||
|
|
96
|
+
a.focus !== b.focus ||
|
|
97
|
+
a.fullFrame !== b.fullFrame ||
|
|
98
|
+
JSON.stringify(a.roiHint ?? null) !== JSON.stringify(b.roiHint ?? null));
|
|
99
|
+
}
|
|
87
100
|
//# sourceMappingURL=intent.js.map
|
package/lib/stage5/intent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/stage5/intent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,MAAM,CAAC,MAAM,OAAO,GAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,YAAY,GAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAqB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,YAAY,GAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAEpC,MAAM,UAAU,KAAK,CAAC,CAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAmB;IACzD,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,mBAAmB,CAAC,IAAiB,EAAE,KAAgB;IACrE,IAAI,KAAa,CAAC;IAClB,IAAI,SAAiB,CAAC;IACtB,IAAI,KAAa,CAAC;IAClB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,KAAK,GAAG,IAAI,CAAC;YACb,SAAS,GAAG,IAAI,CAAC;YACjB,KAAK,GAAG,IAAI,CAAC;YACb,MAAM;QACR,KAAK,QAAQ;YACX,KAAK,GAAG,IAAI,CAAC;YACb,SAAS,GAAG,IAAI,CAAC;YACjB,KAAK,GAAG,IAAI,CAAC;YACb,MAAM;QACR;YACE,KAAK,GAAG,IAAI,CAAC;YACb,SAAS,GAAG,IAAI,CAAC;YACjB,KAAK,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,GAAG,GAAG,CAAC;IACtB,IAAI,MAAM,GAAG,eAAe,CAAC;IAC7B,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,QAAQ;YACX,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC;YACpB,WAAW,GAAG,GAAG,CAAC;YAClB,MAAM;QACR,KAAK,QAAQ;YACX,WAAW,GAAG,GAAG,CAAC;YAClB,MAAM,GAAG,eAAe,GAAG,GAAG,CAAC;YAC/B,MAAM;QACR;YACE,WAAW,GAAG,GAAG,CAAC;IACtB,CAAC;IACD,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,GAAG,CAAC;IACtB,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC;QACxC,WAAW,EAAE,WAAW;QACxB,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,cAAc,CAAC;QAC9C,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC;QACxC,QAAQ,EAAE,KAAK;QACf,MAAM;KACP,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB,CAChC,OAAsB,EACtB,MAAmC,EACnC,QAAiD;IAEjD,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,IAAI,GAAkB;QAC1B,GAAG,
|
|
1
|
+
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/stage5/intent.ts"],"names":[],"mappings":"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"}
|
package/lib/stage6/precheck.d.ts
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* 规格《六》§2:
|
|
5
5
|
* - 单次请求 56 MiB 安全字节水位:Base64 膨胀按 4/3 计入(预留协议结构余量);
|
|
6
6
|
* - 图像单边 ≤ 4096 px 不变量:PF-Stream 画布最大边 1344 px 天然合规;
|
|
7
|
-
* imageCountTiersEnabled
|
|
7
|
+
* imageCountTiersEnabled(多图降档规则)默认关闭;开启时超限画布放行,
|
|
8
|
+
* 由调用方的多图降档规则接管(当前产物恒 ≤1344,分支实际不可达)。
|
|
8
9
|
* - 截断顺序:优先从旧到新丢弃冷区引用,其次从旧到新丢弃热区条带,
|
|
9
10
|
* 最后切分当前增量包(保留时序前缀)。
|
|
10
11
|
*/
|
|
@@ -40,7 +41,8 @@ export interface PrecheckResult {
|
|
|
40
41
|
}
|
|
41
42
|
/** Base64 膨胀后的请求字节估算。 */
|
|
42
43
|
export declare function encodedSizeOf(bytes: Buffer): number;
|
|
43
|
-
/** 画布边长不变量(契约级防护,违规即错误而非降级)。
|
|
44
|
+
/** 画布边长不变量(契约级防护,违规即错误而非降级)。
|
|
45
|
+
* imageCountTiersEnabled 开启时放行超限画布(由调用方多图降档规则接管)。 */
|
|
44
46
|
export declare function assertCanvasEdgeLegal(artifact: PacketArtifact, tiersEnabled: boolean): void;
|
|
45
47
|
/**
|
|
46
48
|
* 单图 Token 上限校验(meteringProfile.maxTokensPerImage 消费点):
|
package/lib/stage6/precheck.js
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* 规格《六》§2:
|
|
5
5
|
* - 单次请求 56 MiB 安全字节水位:Base64 膨胀按 4/3 计入(预留协议结构余量);
|
|
6
6
|
* - 图像单边 ≤ 4096 px 不变量:PF-Stream 画布最大边 1344 px 天然合规;
|
|
7
|
-
* imageCountTiersEnabled
|
|
7
|
+
* imageCountTiersEnabled(多图降档规则)默认关闭;开启时超限画布放行,
|
|
8
|
+
* 由调用方的多图降档规则接管(当前产物恒 ≤1344,分支实际不可达)。
|
|
8
9
|
* - 截断顺序:优先从旧到新丢弃冷区引用,其次从旧到新丢弃热区条带,
|
|
9
10
|
* 最后切分当前增量包(保留时序前缀)。
|
|
10
11
|
*/
|
|
@@ -15,12 +16,13 @@ export const MAX_CANVAS_EDGE_PX = 4096;
|
|
|
15
16
|
export function encodedSizeOf(bytes) {
|
|
16
17
|
return Math.ceil((bytes.length * 4) / 3);
|
|
17
18
|
}
|
|
18
|
-
/** 画布边长不变量(契约级防护,违规即错误而非降级)。
|
|
19
|
+
/** 画布边长不变量(契约级防护,违规即错误而非降级)。
|
|
20
|
+
* imageCountTiersEnabled 开启时放行超限画布(由调用方多图降档规则接管)。 */
|
|
19
21
|
export function assertCanvasEdgeLegal(artifact, tiersEnabled) {
|
|
20
22
|
const [w, h] = artifact.packet.canvasSize;
|
|
21
23
|
if (w > MAX_CANVAS_EDGE_PX || h > MAX_CANVAS_EDGE_PX) {
|
|
22
24
|
if (tiersEnabled)
|
|
23
|
-
return;
|
|
25
|
+
return;
|
|
24
26
|
throw new PfStreamError('PFSTREAM_CANVAS_EDGE_OVER_LIMIT', `画布单边 ${Math.max(w, h)}px 超过 ${MAX_CANVAS_EDGE_PX}px 上限(packet #${artifact.packet.packetId})`);
|
|
25
27
|
}
|
|
26
28
|
}
|
|
@@ -48,8 +50,6 @@ export function precheckBundle(items, options) {
|
|
|
48
50
|
assertCanvasTokenLegal(it.artifact, options.maxTokensPerImage);
|
|
49
51
|
}
|
|
50
52
|
const tokensOf = (a) => billTokens(a.packet.canvasSize[0], a.packet.canvasSize[1]);
|
|
51
|
-
const totalTokens = items.reduce((acc, it) => acc + tokensOf(it.artifact), 0);
|
|
52
|
-
const totalBytes = items.reduce((acc, it) => acc + encodedSizeOf(it.artifact.imageBytes), 0);
|
|
53
53
|
let kept = items.slice();
|
|
54
54
|
const dropped = [];
|
|
55
55
|
let truncatedCurrent = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"precheck.js","sourceRoot":"","sources":["../../src/stage6/precheck.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"precheck.js","sourceRoot":"","sources":["../../src/stage6/precheck.ts"],"names":[],"mappings":"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"}
|
package/lib/tool/handler.d.ts
CHANGED
|
@@ -19,7 +19,18 @@ export interface ToolExec {
|
|
|
19
19
|
signal: AbortSignal;
|
|
20
20
|
/** 宿主会话标识(缺省聚合到 'default')。 */
|
|
21
21
|
sessionId?: string | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* 宿主 ToolExec 的 agent 投影(dsh-tools 语义:exec.agent.session 为当前会话)。
|
|
24
|
+
* 宿主未提供顶层 sessionId 时按 agent.session.id 取会话标识。
|
|
25
|
+
*/
|
|
26
|
+
agent?: {
|
|
27
|
+
session?: {
|
|
28
|
+
id?: string | undefined;
|
|
29
|
+
};
|
|
30
|
+
} | undefined;
|
|
22
31
|
}
|
|
32
|
+
/** 会话标识解析:顶层 sessionId 优先,其次宿主 agent.session.id,缺省聚合 'default'。 */
|
|
33
|
+
export declare function resolveSessionId(exec: ToolExec | undefined): string | undefined;
|
|
23
34
|
export type ToolResult = Record<string, unknown>;
|
|
24
35
|
/** 宿主图像内容块引用的 JSON 投影(只含宿主 schema 允许的字段)。 */
|
|
25
36
|
export interface AttachedImage {
|
|
@@ -48,6 +59,12 @@ export interface ToolDeps {
|
|
|
48
59
|
stream?: StreamFn | undefined;
|
|
49
60
|
/** 宿主附件回传(可选:缺省时只返回画布元数据)。 */
|
|
50
61
|
attachImages?: AttachImagesFn | undefined;
|
|
62
|
+
/** 入口适配器钳制上限(缺省用插件默认配置值)。 */
|
|
63
|
+
limits?: {
|
|
64
|
+
maxPackets: number;
|
|
65
|
+
maxTokensBudget: number;
|
|
66
|
+
maxFrames: number;
|
|
67
|
+
} | undefined;
|
|
51
68
|
}
|
|
52
69
|
export declare function resolveAction(args: ToolCallArgs): NonNullable<IntentDirective['action']>;
|
|
53
70
|
export declare function handleToolCall(args: ToolCallArgs, exec: ToolExec | undefined, deps: ToolDeps): Promise<ToolResult>;
|
package/lib/tool/handler.js
CHANGED
|
@@ -6,7 +6,12 @@
|
|
|
6
6
|
* M1 起 timestamps / uniform 由确定性检视通道承载。
|
|
7
7
|
*/
|
|
8
8
|
import { PfStreamError } from '../errors.js';
|
|
9
|
+
import { adaptCallArgs } from '../entry/adapter.js';
|
|
9
10
|
export { PfStreamError } from '../errors.js';
|
|
11
|
+
/** 会话标识解析:顶层 sessionId 优先,其次宿主 agent.session.id,缺省聚合 'default'。 */
|
|
12
|
+
export function resolveSessionId(exec) {
|
|
13
|
+
return exec?.sessionId ?? exec?.agent?.session?.id;
|
|
14
|
+
}
|
|
10
15
|
export function resolveAction(args) {
|
|
11
16
|
if (args.intent?.action)
|
|
12
17
|
return args.intent.action;
|
|
@@ -23,17 +28,25 @@ async function withPacketImages(artifacts, attachImages) {
|
|
|
23
28
|
});
|
|
24
29
|
}
|
|
25
30
|
export async function handleToolCall(args, exec, deps) {
|
|
26
|
-
|
|
31
|
+
// 统一入口:probe 后经入口适配器归一化(历史便捷字段 + 枚举校验 + 钳制),
|
|
32
|
+
// 再按 intent.action 路由(《五》§1 与《七》§1)。
|
|
33
|
+
const probeResult = await deps.probe(args.video_path, exec?.signal);
|
|
34
|
+
const { intent } = adaptCallArgs(args, {
|
|
35
|
+
lastPtsMs: probeResult.lastPtsMs,
|
|
36
|
+
displayWidth: probeResult.displayWidth,
|
|
37
|
+
displayHeight: probeResult.displayHeight,
|
|
38
|
+
maxPackets: deps.limits?.maxPackets ?? 64,
|
|
39
|
+
maxTokensBudget: deps.limits?.maxTokensBudget ?? 65536,
|
|
40
|
+
maxFrames: deps.limits?.maxFrames ?? 128,
|
|
41
|
+
});
|
|
42
|
+
const action = intent.action ?? 'pf_stream';
|
|
27
43
|
if (action === 'probe') {
|
|
28
|
-
const probeResult = await deps.probe(args.video_path, exec?.signal);
|
|
29
44
|
return { action: 'probe', probe: probeResult };
|
|
30
45
|
}
|
|
31
46
|
if (action === 'timestamps' || action === 'uniform') {
|
|
32
47
|
if (!deps.inspect) {
|
|
33
48
|
throw new PfStreamError('PFSTREAM_ACTION_UNAVAILABLE', `action '${action}' 通道不可用`);
|
|
34
49
|
}
|
|
35
|
-
const probeResult = await deps.probe(args.video_path, exec?.signal);
|
|
36
|
-
const intent = (args.intent ?? {});
|
|
37
50
|
const inspection = await deps.inspect(args.video_path, probeResult, intent, exec?.signal);
|
|
38
51
|
const packets = await withPacketImages(inspection.packets, deps.attachImages);
|
|
39
52
|
return {
|
|
@@ -47,9 +60,7 @@ export async function handleToolCall(args, exec, deps) {
|
|
|
47
60
|
if (!deps.stream) {
|
|
48
61
|
throw new PfStreamError('PFSTREAM_ACTION_UNAVAILABLE', `action '${action}' 通道不可用`);
|
|
49
62
|
}
|
|
50
|
-
const
|
|
51
|
-
const intent = (args.intent ?? {});
|
|
52
|
-
const stream = await deps.stream(args.video_path, probeResult, intent, exec?.sessionId, exec?.signal);
|
|
63
|
+
const stream = await deps.stream(args.video_path, probeResult, intent, resolveSessionId(exec), exec?.signal);
|
|
53
64
|
const packets = await withPacketImages(stream.packets, deps.attachImages);
|
|
54
65
|
return {
|
|
55
66
|
action: 'pf_stream',
|
package/lib/tool/handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/tool/handler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/tool/handler.ts"],"names":[],"mappings":"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"}
|
package/lib/tool/schema.d.ts
CHANGED
|
@@ -20,7 +20,10 @@ export interface ValueSchema {
|
|
|
20
20
|
description?: string;
|
|
21
21
|
}
|
|
22
22
|
export declare const intentValueSchema: ValueSchema;
|
|
23
|
-
/**
|
|
23
|
+
/** 历史便捷字段(顶层):由入口适配器归一化为标准 IntentDirective(《五》§1.1)。 */
|
|
24
|
+
export declare const legacyValueSchemas: Record<string, ValueSchema>;
|
|
25
|
+
/** 工具 parameters:属性名 → 值 schema 映射。顶层额外声明历史便捷字段
|
|
26
|
+
* (宿主会剥离未声明参数,故必须显式列出才能到达适配器)。 */
|
|
24
27
|
export declare const toolParameters: Record<string, ValueSchema>;
|
|
25
28
|
export declare const TOOL_DESCRIPTION: string;
|
|
26
29
|
/** 输出 schema:随各里程碑交付逐步收紧,当前为对象根。 */
|
package/lib/tool/schema.js
CHANGED
|
@@ -42,10 +42,24 @@ export const intentValueSchema = {
|
|
|
42
42
|
},
|
|
43
43
|
additionalProperties: false,
|
|
44
44
|
};
|
|
45
|
-
/**
|
|
45
|
+
/** 历史便捷字段(顶层):由入口适配器归一化为标准 IntentDirective(《五》§1.1)。 */
|
|
46
|
+
export const legacyValueSchemas = {
|
|
47
|
+
start_time: { type: 'number', description: '起始时间(秒或毫秒,≤2×时长数值判秒;归一化为 intent.pts_window)' },
|
|
48
|
+
end_time: { type: 'number', description: '结束时间(秒或毫秒;归一化为 intent.pts_window)' },
|
|
49
|
+
time_range: { type: 'array', items: { type: 'number' }, description: '时间范围 [start, end](秒或毫秒)' },
|
|
50
|
+
timestamps: { type: 'array', items: { type: 'number' }, description: '抽帧时间戳列表(秒或毫秒,触发 timestamps 检视)' },
|
|
51
|
+
fps: { type: 'number', description: '均匀抽帧帧率(触发 uniform 检视)' },
|
|
52
|
+
interval: { type: 'number', description: '均匀抽帧间隔(秒或毫秒,触发 uniform 检视)' },
|
|
53
|
+
num_frames: { type: 'number', description: '均匀抽帧目标总帧数(触发 uniform 检视)' },
|
|
54
|
+
crop: { type: 'object', description: '局部区域(归一化或像素坐标,归一化为 intent.roi_hint)' },
|
|
55
|
+
probe_only: { type: 'boolean', description: '仅探测视频元数据(等价 action="probe")' },
|
|
56
|
+
};
|
|
57
|
+
/** 工具 parameters:属性名 → 值 schema 映射。顶层额外声明历史便捷字段
|
|
58
|
+
* (宿主会剥离未声明参数,故必须显式列出才能到达适配器)。 */
|
|
46
59
|
export const toolParameters = {
|
|
47
60
|
video_path: { type: 'string', description: '待处理的本地视频文件路径' },
|
|
48
61
|
intent: intentValueSchema,
|
|
62
|
+
...legacyValueSchemas,
|
|
49
63
|
};
|
|
50
64
|
export const TOOL_DESCRIPTION = 'Look at a local video: adaptive dual-scale streaming perception (low-token P units during motion, ' +
|
|
51
65
|
'high-detail F units at settle) plus deterministic inspection (probe metadata, exact-timestamp frames, ' +
|
package/lib/tool/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/tool/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC;AAEzC,MAAM,CAAC,MAAM,kBAAkB,GAC7B,YAAY;IACZ,wGAAwG;IACxG,sDAAsD;IACtD,0DAA0D;IAC1D,8BAA8B;IAC9B,4BAA4B,CAAC;AAc/B,MAAM,CAAC,MAAM,iBAAiB,GAAgB;IAC5C,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,kBAAkB;IAC/B,UAAU,EAAE;QACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;QACjF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE;QAC/D,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE;QACjE,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,iCAAiC,EAAE;QACxG,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE;QAC1F,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;QAC1D,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE;QACzD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACrB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACrB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACrB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aACtB;YACD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAC9B,WAAW,EAAE,mBAAmB;SACjC;QACD,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sBAAsB,EAAE;QACpE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;QAC5D,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE;QACvE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE;KACvD;IACD,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/tool/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC;AAEzC,MAAM,CAAC,MAAM,kBAAkB,GAC7B,YAAY;IACZ,wGAAwG;IACxG,sDAAsD;IACtD,0DAA0D;IAC1D,8BAA8B;IAC9B,4BAA4B,CAAC;AAc/B,MAAM,CAAC,MAAM,iBAAiB,GAAgB;IAC5C,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,kBAAkB;IAC/B,UAAU,EAAE;QACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;QACjF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE;QAC/D,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE;QACjE,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,iCAAiC,EAAE;QACxG,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE;QAC1F,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;QAC1D,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE;QACzD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACrB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACrB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACrB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aACtB;YACD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAC9B,WAAW,EAAE,mBAAmB;SACjC;QACD,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sBAAsB,EAAE;QACpE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;QAC5D,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE;QACvE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE;KACvD;IACD,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF,wDAAwD;AACxD,MAAM,CAAC,MAAM,kBAAkB,GAAgC;IAC7D,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;IAC1F,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;IAC9E,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE;IAChG,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE;IACvG,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;IAC7D,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;IACvE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;IACvE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;IAC5E,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE;CAC5E,CAAC;AAEF;kCACkC;AAClC,MAAM,CAAC,MAAM,cAAc,GAAgC;IACzD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;IAC3D,MAAM,EAAE,iBAAiB;IACzB,GAAG,kBAAkB;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAC3B,oGAAoG;IACpG,wGAAwG;IACxG,wGAAwG;IACxG,+FAA+F;IAC/F,0DAA0D,CAAC;AAE7D,oCAAoC;AACpC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,QAAQ;CACN,CAAC"}
|
package/lib/tool/streamCall.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ import { baselinesFromIntent } from '../stage5/intent.js';
|
|
|
10
10
|
import type { IntentDirective, ProbeResult } from '../types.js';
|
|
11
11
|
export interface StreamCallOptions {
|
|
12
12
|
ffmpegPath: string;
|
|
13
|
+
/** 末帧探测与定点索引用的 ffprobe;缺省由 ffmpegPath 同目录派生。 */
|
|
14
|
+
ffprobePath?: string | undefined;
|
|
13
15
|
renderVisualId: boolean;
|
|
14
16
|
defaultStreamWindowMs: number;
|
|
15
17
|
streamWorkMaxEdge: number;
|
package/lib/tool/streamCall.js
CHANGED
|
@@ -8,22 +8,48 @@ import { runStreamPass } from '../stage3/streamSampler.js';
|
|
|
8
8
|
import { timelineHintLine } from '../stage4/canvasPacker.js';
|
|
9
9
|
import { coldRefHintLine, compactEpoch, HOT_WINDOW, planHistoryRefs, recordPackets, } from '../stage6/history.js';
|
|
10
10
|
import { precheckBundle, } from '../stage6/precheck.js';
|
|
11
|
-
import { baselinesFromIntent, mergeSessionIntent } from '../stage5/intent.js';
|
|
11
|
+
import { baselinesFromIntent, mergeSessionIntent, sessionIntentChanged } from '../stage5/intent.js';
|
|
12
12
|
import { fingerprintOf, getSessionState, getVideoSlot } from '../session/state.js';
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* 会话级串行化:同一 sessionId 的流式调用按 promise 链排队执行。
|
|
15
|
+
*
|
|
16
|
+
* 会话状态(packetSeq/intentSeq/历史环/游标)为进程内存态,两次并发调用会读到
|
|
17
|
+
* 同一快照并各自分配相同序号(packetId 重复)。宿主侧 isConcurrencySafe=false
|
|
18
|
+
* 已声明串行语义,此队列作为插件内的第二道防线(防御直接并发调用 execute)。
|
|
19
|
+
*/
|
|
20
|
+
const sessionLocks = new Map();
|
|
21
|
+
export function runStreamCall(videoPath, probe, intent, sessionId, options) {
|
|
22
|
+
const tail = sessionLocks.get(sessionId) ?? Promise.resolve();
|
|
23
|
+
const task = tail
|
|
24
|
+
.catch(() => undefined)
|
|
25
|
+
.then(() => runStreamCallLocked(videoPath, probe, intent, sessionId, options));
|
|
26
|
+
const sentinel = task.then(() => undefined, () => undefined);
|
|
27
|
+
sessionLocks.set(sessionId, sentinel);
|
|
28
|
+
void sentinel.finally(() => {
|
|
29
|
+
if (sessionLocks.get(sessionId) === sentinel)
|
|
30
|
+
sessionLocks.delete(sessionId);
|
|
31
|
+
});
|
|
32
|
+
return task;
|
|
33
|
+
}
|
|
34
|
+
async function runStreamCallLocked(videoPath, probe, intent, sessionId, options) {
|
|
14
35
|
const session = getSessionState(sessionId);
|
|
15
36
|
const fingerprint = fingerprintOf(videoPath);
|
|
16
37
|
const slot = getVideoSlot(session, fingerprint);
|
|
17
|
-
// 意图层:字段级合并到 session_intent(规格《五》§1.3
|
|
18
|
-
|
|
19
|
-
const
|
|
38
|
+
// 意图层:字段级合并到 session_intent(规格《五》§1.3);
|
|
39
|
+
// 会话意图实际变化时才递增 intentSeq(probe/重复调用不产生新 intentId)。
|
|
40
|
+
const prevIntent = session.intent;
|
|
41
|
+
const merged = mergeSessionIntent(prevIntent, intent, {
|
|
20
42
|
mode: 'standard',
|
|
21
43
|
focus: 'balanced',
|
|
22
44
|
});
|
|
45
|
+
if (sessionIntentChanged(prevIntent, merged) || session.intentSeq === 0) {
|
|
46
|
+
session.intentSeq += 1;
|
|
47
|
+
}
|
|
23
48
|
merged.intentId = `intent_${session.intentSeq}`;
|
|
24
49
|
session.intent = merged;
|
|
25
50
|
const result = await runStreamPass(videoPath, probe, merged, slot.cursor, {
|
|
26
51
|
ffmpegPath: options.ffmpegPath,
|
|
52
|
+
ffprobePath: options.ffprobePath,
|
|
27
53
|
renderVisualId: options.renderVisualId,
|
|
28
54
|
windowMs: intent.pts_window
|
|
29
55
|
? Math.max(1, intent.pts_window[1] - intent.pts_window[0])
|
|
@@ -55,10 +81,17 @@ export async function runStreamCall(videoPath, probe, intent, sessionId, options
|
|
|
55
81
|
return session.packetSeq;
|
|
56
82
|
}, merged.intentId);
|
|
57
83
|
const { cold } = planHistoryRefs(slot, merged.intentId);
|
|
84
|
+
// 本次增量包被 Epoch 收编为冷区引用时,原始条带不再重复输出
|
|
85
|
+
// (规格《六》§3:按最终包龄输出冷区 FORM_3 与热区条带,每包只出现一次)。
|
|
86
|
+
const newPacketIds = new Set(result.packets.map((a) => a.packet.packetId));
|
|
87
|
+
const absorbedNewIds = new Set(slot.epoch.coldRefs
|
|
88
|
+
.map((c) => c.sourcePacketId)
|
|
89
|
+
.filter((id) => newPacketIds.has(id)));
|
|
90
|
+
const incremental = result.packets.filter((a) => !absorbedNewIds.has(a.packet.packetId));
|
|
58
91
|
const items = [
|
|
59
92
|
...cold.map((artifact) => ({ kind: 'cold', artifact })),
|
|
60
93
|
...hot.map((artifact) => ({ kind: 'hot', artifact })),
|
|
61
|
-
...
|
|
94
|
+
...incremental.map((artifact) => ({ kind: 'new', artifact })),
|
|
62
95
|
];
|
|
63
96
|
const precheck = precheckBundle(items, {
|
|
64
97
|
maxRequestBytes: options.maxRequestBytes,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamCall.js","sourceRoot":"","sources":["../../src/tool/streamCall.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAwB,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAuB,MAAM,2BAA2B,CAAC;AAClF,OAAO,EACL,eAAe,EACf,YAAY,EACZ,UAAU,EACV,eAAe,EACf,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,GAIf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"streamCall.js","sourceRoot":"","sources":["../../src/tool/streamCall.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
|
@@ -221,16 +221,12 @@ export interface StateMachineSnapshot {
|
|
|
221
221
|
gEma: number;
|
|
222
222
|
emaWarmupLeft: number;
|
|
223
223
|
settleStartPtsMs: number | null;
|
|
224
|
-
lastKCandidates: number[] | null;
|
|
225
|
-
lastMotionVec: [number, number] | null;
|
|
226
|
-
arena: ArenaCandidate | null;
|
|
227
224
|
mergeStartPtsMs?: number | null;
|
|
228
225
|
switchStaticSincePtsMs?: number | null;
|
|
229
226
|
fSwitchPending?: boolean;
|
|
230
227
|
clarityWarmupLeft?: number;
|
|
231
228
|
rhoHistory?: number[];
|
|
232
229
|
motionEnteredAtPtsMs?: number | null;
|
|
233
|
-
maxDSinceLastF?: number;
|
|
234
230
|
lastHeartbeatPtsMs?: number | null;
|
|
235
231
|
/** 自闭环控制器状态(M3 起填充)。 */
|
|
236
232
|
ctrl?: ControllerSnapshot;
|
|
@@ -340,6 +336,8 @@ export interface MeteringProfile {
|
|
|
340
336
|
export interface PfStreamPluginConfig {
|
|
341
337
|
renderVisualId: boolean;
|
|
342
338
|
maxPacketsPerCall: number;
|
|
339
|
+
/** 确定性抽帧(uniform frame_count)单次目标帧数上限。 */
|
|
340
|
+
maxFramesPerCall: number;
|
|
343
341
|
/** 单次调用回传画布图像的上限(宿主单条消息图像上限 20)。 */
|
|
344
342
|
maxImagesPerCall: number;
|
|
345
343
|
maxTokensBudgetPerCall: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-pf-stream",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "DeepSeek Harness video perception plugin: adaptive dual-scale streaming sampling plus deterministic inspection, aligned to the DeepSeek-V4.1-Flash vision pipeline (42px superpixel grid, <=1024 tokens per image).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|