@playcraft/common 0.0.53 → 0.0.56
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/dist/agent/competitor-report.d.ts +165 -0
- package/dist/agent/competitor-report.d.ts.map +1 -0
- package/dist/agent/competitor-report.js +261 -0
- package/dist/agent/competitor-report.js.map +1 -0
- package/dist/agent/context-usage.d.ts +8 -1
- package/dist/agent/context-usage.d.ts.map +1 -1
- package/dist/agent/context-usage.js +6 -1
- package/dist/agent/context-usage.js.map +1 -1
- package/dist/agent/index.d.ts +5 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +5 -0
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/model-context-window.d.ts.map +1 -1
- package/dist/agent/model-context-window.js +40 -4
- package/dist/agent/model-context-window.js.map +1 -1
- package/dist/agent/reference-images.d.ts +66 -0
- package/dist/agent/reference-images.d.ts.map +1 -0
- package/dist/agent/reference-images.js +181 -0
- package/dist/agent/reference-images.js.map +1 -0
- package/dist/agent/runtime-failure.d.ts +31 -0
- package/dist/agent/runtime-failure.d.ts.map +1 -0
- package/dist/agent/runtime-failure.js +83 -0
- package/dist/agent/runtime-failure.js.map +1 -0
- package/dist/agent/session-title.d.ts +8 -0
- package/dist/agent/session-title.d.ts.map +1 -0
- package/dist/agent/session-title.js +16 -0
- package/dist/agent/session-title.js.map +1 -0
- package/dist/agent/turn.d.ts +8 -0
- package/dist/agent/turn.d.ts.map +1 -0
- package/dist/agent/turn.js +7 -0
- package/dist/agent/turn.js.map +1 -0
- package/dist/agent-jobs/identity.d.ts +8 -0
- package/dist/agent-jobs/identity.d.ts.map +1 -0
- package/dist/agent-jobs/identity.js +32 -0
- package/dist/agent-jobs/identity.js.map +1 -0
- package/dist/agent-jobs/index.d.ts +34 -0
- package/dist/agent-jobs/index.d.ts.map +1 -0
- package/dist/agent-jobs/index.js +39 -0
- package/dist/agent-jobs/index.js.map +1 -0
- package/dist/agent-jobs/legacy-http-gone.d.ts +13 -0
- package/dist/agent-jobs/legacy-http-gone.d.ts.map +1 -0
- package/dist/agent-jobs/legacy-http-gone.js +15 -0
- package/dist/agent-jobs/legacy-http-gone.js.map +1 -0
- package/dist/agent-jobs/legacy-run-task.d.ts +12 -0
- package/dist/agent-jobs/legacy-run-task.d.ts.map +1 -0
- package/dist/agent-jobs/legacy-run-task.js +14 -0
- package/dist/agent-jobs/legacy-run-task.js.map +1 -0
- package/dist/agent-jobs/portal-sandbox-team-mount.d.ts +8 -0
- package/dist/agent-jobs/portal-sandbox-team-mount.d.ts.map +1 -0
- package/dist/agent-jobs/portal-sandbox-team-mount.js +10 -0
- package/dist/agent-jobs/portal-sandbox-team-mount.js.map +1 -0
- package/dist/agent-jobs/runtime-metrics.d.ts +12 -0
- package/dist/agent-jobs/runtime-metrics.d.ts.map +1 -0
- package/dist/agent-jobs/runtime-metrics.js +19 -0
- package/dist/agent-jobs/runtime-metrics.js.map +1 -0
- package/dist/agent-jobs/runtime-timing.d.ts +21 -0
- package/dist/agent-jobs/runtime-timing.d.ts.map +1 -0
- package/dist/agent-jobs/runtime-timing.js +20 -0
- package/dist/agent-jobs/runtime-timing.js.map +1 -0
- package/dist/agent-jobs/runtime-v2.d.ts +8 -0
- package/dist/agent-jobs/runtime-v2.d.ts.map +1 -0
- package/dist/agent-jobs/runtime-v2.js +10 -0
- package/dist/agent-jobs/runtime-v2.js.map +1 -0
- package/dist/agent-messages/db-message-converter.d.ts +61 -0
- package/dist/agent-messages/db-message-converter.d.ts.map +1 -0
- package/dist/agent-messages/db-message-converter.js +478 -0
- package/dist/agent-messages/db-message-converter.js.map +1 -0
- package/dist/agent-messages/index.d.ts +4 -0
- package/dist/agent-messages/index.d.ts.map +1 -0
- package/dist/agent-messages/index.js +4 -0
- package/dist/agent-messages/index.js.map +1 -0
- package/dist/agent-messages/message-merge.d.ts +31 -0
- package/dist/agent-messages/message-merge.d.ts.map +1 -0
- package/dist/agent-messages/message-merge.js +221 -0
- package/dist/agent-messages/message-merge.js.map +1 -0
- package/dist/agent-messages/runtime-user-messages.d.ts +51 -0
- package/dist/agent-messages/runtime-user-messages.d.ts.map +1 -0
- package/dist/agent-messages/runtime-user-messages.js +296 -0
- package/dist/agent-messages/runtime-user-messages.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/prefab/index.d.ts +1 -0
- package/dist/prefab/index.d.ts.map +1 -1
- package/dist/prefab/index.js +1 -0
- package/dist/prefab/index.js.map +1 -1
- package/dist/prefab/schema-condition.d.ts +27 -0
- package/dist/prefab/schema-condition.d.ts.map +1 -0
- package/dist/prefab/schema-condition.js +107 -0
- package/dist/prefab/schema-condition.js.map +1 -0
- package/dist/prefab/schema-walker.d.ts +46 -4
- package/dist/prefab/schema-walker.d.ts.map +1 -1
- package/dist/prefab/schema-walker.js +155 -11
- package/dist/prefab/schema-walker.js.map +1 -1
- package/dist/prefab/types.d.ts +21 -2
- package/dist/prefab/types.d.ts.map +1 -1
- package/dist/recommend/atom-graph/basic-atom-graph.d.ts.map +1 -1
- package/dist/recommend/atom-graph/basic-atom-graph.js +80 -63
- package/dist/recommend/atom-graph/basic-atom-graph.js.map +1 -1
- package/dist/recommend/atom-graph/basic-atom-skill-graph.d.ts.map +1 -1
- package/dist/recommend/atom-graph/basic-atom-skill-graph.js +8 -0
- package/dist/recommend/atom-graph/basic-atom-skill-graph.js.map +1 -1
- package/dist/storage/cos.d.ts +4 -4
- package/dist/storage/cos.d.ts.map +1 -1
- package/dist/storage/cos.js +19 -1
- package/dist/storage/cos.js.map +1 -1
- package/dist/storage/interface.d.ts +5 -1
- package/dist/storage/interface.d.ts.map +1 -1
- package/package.json +28 -2
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* 报告呈现模式:品类 TopN 洞察 vs 单 URL 深拆。
|
|
4
|
+
* 业务代码请用常量 / 类型守卫比较,不要散落字符串字面量。
|
|
5
|
+
*/
|
|
6
|
+
export declare const COMPETITOR_REPORT_MODE: {
|
|
7
|
+
readonly Category: "category";
|
|
8
|
+
readonly Url: "url";
|
|
9
|
+
};
|
|
10
|
+
export type CompetitorReportMode = (typeof COMPETITOR_REPORT_MODE)[keyof typeof COMPETITOR_REPORT_MODE];
|
|
11
|
+
export declare function isCompetitorReportMode(value: unknown, expected: CompetitorReportMode): boolean;
|
|
12
|
+
export declare const CompetitorCreativeSchema: z.ZodObject<{
|
|
13
|
+
rank: z.ZodNumber;
|
|
14
|
+
title: z.ZodString;
|
|
15
|
+
videoUrl: z.ZodOptional<z.ZodString>;
|
|
16
|
+
previewUrl: z.ZodOptional<z.ZodString>;
|
|
17
|
+
impressions: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
note: z.ZodOptional<z.ZodString>;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
/**
|
|
21
|
+
* 单 URL 深拆的主角素材。在 Creative 之上补 Hero 区可选字段;
|
|
22
|
+
* 投放指标一律 optional——知识源没有就省略键,禁止用 0 / [] 冒充。
|
|
23
|
+
*/
|
|
24
|
+
export declare const CompetitorSubjectSchema: z.ZodObject<{
|
|
25
|
+
rank: z.ZodNumber;
|
|
26
|
+
title: z.ZodString;
|
|
27
|
+
videoUrl: z.ZodOptional<z.ZodString>;
|
|
28
|
+
previewUrl: z.ZodOptional<z.ZodString>;
|
|
29
|
+
impressions: z.ZodOptional<z.ZodNumber>;
|
|
30
|
+
note: z.ZodOptional<z.ZodString>;
|
|
31
|
+
sourceUrl: z.ZodOptional<z.ZodString>;
|
|
32
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
33
|
+
downloads: z.ZodOptional<z.ZodNumber>;
|
|
34
|
+
platforms: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
35
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
36
|
+
}, z.core.$strip>;
|
|
37
|
+
export declare const CompetitorCtaMomentSchema: z.ZodObject<{
|
|
38
|
+
atSeconds: z.ZodNumber;
|
|
39
|
+
label: z.ZodString;
|
|
40
|
+
}, z.core.$strip>;
|
|
41
|
+
export declare const CompetitorPacingBucketSchema: z.ZodObject<{
|
|
42
|
+
label: z.ZodString;
|
|
43
|
+
value: z.ZodNumber;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
export declare const CompetitorDimensionsSchema: z.ZodObject<{
|
|
46
|
+
mechanics: z.ZodOptional<z.ZodObject<{
|
|
47
|
+
summary: z.ZodString;
|
|
48
|
+
highlights: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
49
|
+
}, z.core.$strip>>;
|
|
50
|
+
uiLayout: z.ZodOptional<z.ZodObject<{
|
|
51
|
+
summary: z.ZodString;
|
|
52
|
+
heatmapUrl: z.ZodOptional<z.ZodString>;
|
|
53
|
+
}, z.core.$strip>>;
|
|
54
|
+
cta: z.ZodOptional<z.ZodObject<{
|
|
55
|
+
summary: z.ZodString;
|
|
56
|
+
timeline: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
57
|
+
atSeconds: z.ZodNumber;
|
|
58
|
+
label: z.ZodString;
|
|
59
|
+
}, z.core.$strip>>>;
|
|
60
|
+
}, z.core.$strip>>;
|
|
61
|
+
pacing: z.ZodOptional<z.ZodObject<{
|
|
62
|
+
summary: z.ZodString;
|
|
63
|
+
buckets: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
64
|
+
label: z.ZodString;
|
|
65
|
+
value: z.ZodNumber;
|
|
66
|
+
}, z.core.$strip>>>;
|
|
67
|
+
}, z.core.$strip>>;
|
|
68
|
+
}, z.core.$strip>;
|
|
69
|
+
export declare const CompetitorSuggestionSchema: z.ZodObject<{
|
|
70
|
+
id: z.ZodString;
|
|
71
|
+
text: z.ZodString;
|
|
72
|
+
targetSlug: z.ZodOptional<z.ZodString>;
|
|
73
|
+
targetTitle: z.ZodOptional<z.ZodString>;
|
|
74
|
+
dimension: z.ZodOptional<z.ZodString>;
|
|
75
|
+
fromValue: z.ZodOptional<z.ZodString>;
|
|
76
|
+
toValue: z.ZodOptional<z.ZodString>;
|
|
77
|
+
}, z.core.$strip>;
|
|
78
|
+
export declare const CompetitorInsightReportSchema: z.ZodObject<{
|
|
79
|
+
generatedAt: z.ZodString;
|
|
80
|
+
category: z.ZodString;
|
|
81
|
+
summary: z.ZodString;
|
|
82
|
+
datasetDir: z.ZodOptional<z.ZodString>;
|
|
83
|
+
mode: z.ZodDefault<z.ZodEnum<{
|
|
84
|
+
url: "url";
|
|
85
|
+
category: "category";
|
|
86
|
+
}>>;
|
|
87
|
+
subject: z.ZodOptional<z.ZodObject<{
|
|
88
|
+
rank: z.ZodNumber;
|
|
89
|
+
title: z.ZodString;
|
|
90
|
+
videoUrl: z.ZodOptional<z.ZodString>;
|
|
91
|
+
previewUrl: z.ZodOptional<z.ZodString>;
|
|
92
|
+
impressions: z.ZodOptional<z.ZodNumber>;
|
|
93
|
+
note: z.ZodOptional<z.ZodString>;
|
|
94
|
+
sourceUrl: z.ZodOptional<z.ZodString>;
|
|
95
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
96
|
+
downloads: z.ZodOptional<z.ZodNumber>;
|
|
97
|
+
platforms: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
98
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
99
|
+
}, z.core.$strip>>;
|
|
100
|
+
topCreatives: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
101
|
+
rank: z.ZodNumber;
|
|
102
|
+
title: z.ZodString;
|
|
103
|
+
videoUrl: z.ZodOptional<z.ZodString>;
|
|
104
|
+
previewUrl: z.ZodOptional<z.ZodString>;
|
|
105
|
+
impressions: z.ZodOptional<z.ZodNumber>;
|
|
106
|
+
note: z.ZodOptional<z.ZodString>;
|
|
107
|
+
}, z.core.$strip>>>;
|
|
108
|
+
dimensions: z.ZodDefault<z.ZodObject<{
|
|
109
|
+
mechanics: z.ZodOptional<z.ZodObject<{
|
|
110
|
+
summary: z.ZodString;
|
|
111
|
+
highlights: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
112
|
+
}, z.core.$strip>>;
|
|
113
|
+
uiLayout: z.ZodOptional<z.ZodObject<{
|
|
114
|
+
summary: z.ZodString;
|
|
115
|
+
heatmapUrl: z.ZodOptional<z.ZodString>;
|
|
116
|
+
}, z.core.$strip>>;
|
|
117
|
+
cta: z.ZodOptional<z.ZodObject<{
|
|
118
|
+
summary: z.ZodString;
|
|
119
|
+
timeline: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
120
|
+
atSeconds: z.ZodNumber;
|
|
121
|
+
label: z.ZodString;
|
|
122
|
+
}, z.core.$strip>>>;
|
|
123
|
+
}, z.core.$strip>>;
|
|
124
|
+
pacing: z.ZodOptional<z.ZodObject<{
|
|
125
|
+
summary: z.ZodString;
|
|
126
|
+
buckets: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
127
|
+
label: z.ZodString;
|
|
128
|
+
value: z.ZodNumber;
|
|
129
|
+
}, z.core.$strip>>>;
|
|
130
|
+
}, z.core.$strip>>;
|
|
131
|
+
}, z.core.$strip>>;
|
|
132
|
+
suggestions: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
133
|
+
id: z.ZodString;
|
|
134
|
+
text: z.ZodString;
|
|
135
|
+
targetSlug: z.ZodOptional<z.ZodString>;
|
|
136
|
+
targetTitle: z.ZodOptional<z.ZodString>;
|
|
137
|
+
dimension: z.ZodOptional<z.ZodString>;
|
|
138
|
+
fromValue: z.ZodOptional<z.ZodString>;
|
|
139
|
+
toValue: z.ZodOptional<z.ZodString>;
|
|
140
|
+
}, z.core.$strip>>>;
|
|
141
|
+
}, z.core.$strip>;
|
|
142
|
+
export type CompetitorCreative = z.infer<typeof CompetitorCreativeSchema>;
|
|
143
|
+
export type CompetitorSubject = z.infer<typeof CompetitorSubjectSchema>;
|
|
144
|
+
export type CompetitorCtaMoment = z.infer<typeof CompetitorCtaMomentSchema>;
|
|
145
|
+
export type CompetitorPacingBucket = z.infer<typeof CompetitorPacingBucketSchema>;
|
|
146
|
+
export type CompetitorDimensions = z.infer<typeof CompetitorDimensionsSchema>;
|
|
147
|
+
export type CompetitorSuggestion = z.infer<typeof CompetitorSuggestionSchema>;
|
|
148
|
+
export type CompetitorInsightReport = z.infer<typeof CompetitorInsightReportSchema>;
|
|
149
|
+
/** 单 URL 深拆报告:mode 已归一且带 subject。 */
|
|
150
|
+
export type UrlCompetitorInsightReport = CompetitorInsightReport & {
|
|
151
|
+
mode: typeof COMPETITOR_REPORT_MODE.Url;
|
|
152
|
+
subject: CompetitorSubject;
|
|
153
|
+
};
|
|
154
|
+
export declare function isUrlCompetitorInsightReport(report: CompetitorInsightReport): report is UrlCompetitorInsightReport;
|
|
155
|
+
export declare function isCategoryCompetitorInsightReport(report: CompetitorInsightReport): boolean;
|
|
156
|
+
export declare function sanitizeCompetitorReportJson(input: unknown): unknown;
|
|
157
|
+
/** Sanitize then validate; shared by the publish tool and the turn-end auto-publish path. */
|
|
158
|
+
export declare function parseCompetitorInsightReport(input: unknown): {
|
|
159
|
+
success: true;
|
|
160
|
+
data: CompetitorInsightReport;
|
|
161
|
+
} | {
|
|
162
|
+
success: false;
|
|
163
|
+
error: z.ZodError;
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=competitor-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"competitor-report.d.ts","sourceRoot":"","sources":["../../src/agent/competitor-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;CAGzB,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAC9B,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,OAAO,sBAAsB,CAAC,CAAC;AAOvE,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAET;AAED,eAAO,MAAM,wBAAwB;;;;;;;iBAanC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;iBAgBlC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;iBAGpC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;iBAGvC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;iBAyBrC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;iBAmBrC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqCtC,CAAC;AAEL,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAClF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,qCAAqC;AACrC,MAAM,MAAM,0BAA0B,GAAG,uBAAuB,GAAG;IACjE,IAAI,EAAE,OAAO,sBAAsB,CAAC,GAAG,CAAC;IACxC,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,uBAAuB,GAC9B,MAAM,IAAI,0BAA0B,CAItC;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAET;AAqBD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAgCpE;AA+CD,6FAA6F;AAC7F,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GACvD;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,uBAAuB,CAAA;CAAE,GAChD;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAA;CAAE,CAOxC"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* 竞品洞察报告的共享形状。
|
|
4
|
+
*
|
|
5
|
+
* 后端 `publish_competitor_report` 用它校验 Agent 写在沙箱里的 `report.json`,
|
|
6
|
+
* 前端洞察卡片用同一份类型渲染——两边共用一份定义,模型写歪了在工具层就会被打回。
|
|
7
|
+
*
|
|
8
|
+
* 媒体一律是知识源返回的远程 URL:沙箱里的文件前端取不到,报告卡片也不该等下载。
|
|
9
|
+
*/
|
|
10
|
+
const remoteUrl = z.string().trim().url().max(2048);
|
|
11
|
+
/** Optional media fields that must be remote http(s) URLs when present. */
|
|
12
|
+
const MEDIA_URL_KEYS = new Set(['videoUrl', 'previewUrl', 'heatmapUrl', 'sourceUrl']);
|
|
13
|
+
/**
|
|
14
|
+
* 报告呈现模式:品类 TopN 洞察 vs 单 URL 深拆。
|
|
15
|
+
* 业务代码请用常量 / 类型守卫比较,不要散落字符串字面量。
|
|
16
|
+
*/
|
|
17
|
+
export const COMPETITOR_REPORT_MODE = {
|
|
18
|
+
Category: 'category',
|
|
19
|
+
Url: 'url',
|
|
20
|
+
};
|
|
21
|
+
const COMPETITOR_REPORT_MODE_VALUES = [
|
|
22
|
+
COMPETITOR_REPORT_MODE.Category,
|
|
23
|
+
COMPETITOR_REPORT_MODE.Url,
|
|
24
|
+
];
|
|
25
|
+
export function isCompetitorReportMode(value, expected) {
|
|
26
|
+
return value === expected;
|
|
27
|
+
}
|
|
28
|
+
export const CompetitorCreativeSchema = z.object({
|
|
29
|
+
rank: z.number().int().min(1).max(100),
|
|
30
|
+
title: z.string().trim().min(1).max(200),
|
|
31
|
+
/**
|
|
32
|
+
* 远程录屏视频(`.mp4` / `.webm` 等)。不要填可玩广告 `.html`——那是 `previewUrl`。
|
|
33
|
+
* 本地 `video_path` 由 `publish_competitor_report` 上传 COS 后回填。
|
|
34
|
+
*/
|
|
35
|
+
videoUrl: remoteUrl.optional(),
|
|
36
|
+
/** 可玩广告 HTML 入口(知识源 `url`);前端用 iframe 打开。 */
|
|
37
|
+
previewUrl: remoteUrl.optional(),
|
|
38
|
+
/** 曝光量;知识源没给就省略,不要填 0 冒充。 */
|
|
39
|
+
impressions: z.number().nonnegative().optional(),
|
|
40
|
+
note: z.string().trim().max(500).optional(),
|
|
41
|
+
});
|
|
42
|
+
/**
|
|
43
|
+
* 单 URL 深拆的主角素材。在 Creative 之上补 Hero 区可选字段;
|
|
44
|
+
* 投放指标一律 optional——知识源没有就省略键,禁止用 0 / [] 冒充。
|
|
45
|
+
*/
|
|
46
|
+
export const CompetitorSubjectSchema = CompetitorCreativeSchema.extend({
|
|
47
|
+
/** 用户原始输入 URL;可与 previewUrl 相同。 */
|
|
48
|
+
sourceUrl: remoteUrl.optional(),
|
|
49
|
+
tags: z.array(z.string().trim().min(1).max(60)).max(8).optional(),
|
|
50
|
+
downloads: z.number().nonnegative().optional(),
|
|
51
|
+
platforms: z.array(z.string().trim().min(1).max(60)).max(12).optional(),
|
|
52
|
+
/** 能在 combined_data.json 查到时填写,供落地反查。 */
|
|
53
|
+
slug: z.string().trim().min(1).max(64).optional(),
|
|
54
|
+
}).superRefine((subject, ctx) => {
|
|
55
|
+
if (!subject.previewUrl && !subject.sourceUrl) {
|
|
56
|
+
ctx.addIssue({
|
|
57
|
+
code: z.ZodIssueCode.custom,
|
|
58
|
+
message: 'subject requires previewUrl or sourceUrl',
|
|
59
|
+
path: ['previewUrl'],
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
export const CompetitorCtaMomentSchema = z.object({
|
|
64
|
+
atSeconds: z.number().nonnegative().max(3600),
|
|
65
|
+
label: z.string().trim().min(1).max(120),
|
|
66
|
+
});
|
|
67
|
+
export const CompetitorPacingBucketSchema = z.object({
|
|
68
|
+
label: z.string().trim().min(1).max(60),
|
|
69
|
+
value: z.number().nonnegative(),
|
|
70
|
+
});
|
|
71
|
+
export const CompetitorDimensionsSchema = z.object({
|
|
72
|
+
mechanics: z
|
|
73
|
+
.object({
|
|
74
|
+
summary: z.string().trim().min(1).max(2000),
|
|
75
|
+
highlights: z.array(z.string().trim().min(1).max(300)).max(10).optional(),
|
|
76
|
+
})
|
|
77
|
+
.optional(),
|
|
78
|
+
uiLayout: z
|
|
79
|
+
.object({
|
|
80
|
+
summary: z.string().trim().min(1).max(2000),
|
|
81
|
+
heatmapUrl: remoteUrl.optional(),
|
|
82
|
+
})
|
|
83
|
+
.optional(),
|
|
84
|
+
cta: z
|
|
85
|
+
.object({
|
|
86
|
+
summary: z.string().trim().min(1).max(2000),
|
|
87
|
+
timeline: z.array(CompetitorCtaMomentSchema).max(20).optional(),
|
|
88
|
+
})
|
|
89
|
+
.optional(),
|
|
90
|
+
pacing: z
|
|
91
|
+
.object({
|
|
92
|
+
summary: z.string().trim().min(1).max(2000),
|
|
93
|
+
buckets: z.array(CompetitorPacingBucketSchema).max(24).optional(),
|
|
94
|
+
})
|
|
95
|
+
.optional(),
|
|
96
|
+
});
|
|
97
|
+
export const CompetitorSuggestionSchema = z.object({
|
|
98
|
+
/**
|
|
99
|
+
* 该方向的稳定标识,落地时由 `generate_replica_variants` 反查回本条建议。
|
|
100
|
+
*
|
|
101
|
+
* 模型没写就由 `parseCompetitorInsightReport` 按下标补 `sug-N`——洞察卡上的
|
|
102
|
+
* 「采纳 / 去量产」按钮把它填进输入框,没有 id 就没法把「方向 A」对应回具体素材。
|
|
103
|
+
*/
|
|
104
|
+
id: z.string().trim().min(1).max(64),
|
|
105
|
+
text: z.string().trim().min(1).max(500),
|
|
106
|
+
/** 该方向要复刻的目标素材 slug,对应 `combined_data.json` 里的记录。 */
|
|
107
|
+
targetSlug: z.string().trim().max(64).optional(),
|
|
108
|
+
/** 目标素材的可读标签,仅用于错误提示与卡片文案。 */
|
|
109
|
+
targetTitle: z.string().trim().max(200).optional(),
|
|
110
|
+
/** 要替换的变体维度名,如 `arrow_color`。 */
|
|
111
|
+
dimension: z.string().trim().max(120).optional(),
|
|
112
|
+
/** 目标素材在该维度上的当前值。 */
|
|
113
|
+
fromValue: z.string().trim().max(300).optional(),
|
|
114
|
+
/** 该方向要替换成的目标值。 */
|
|
115
|
+
toValue: z.string().trim().max(300).optional(),
|
|
116
|
+
});
|
|
117
|
+
export const CompetitorInsightReportSchema = z
|
|
118
|
+
.object({
|
|
119
|
+
generatedAt: z.string().trim().min(1).max(64),
|
|
120
|
+
category: z.string().trim().min(1).max(120),
|
|
121
|
+
summary: z.string().trim().min(1).max(4000),
|
|
122
|
+
/**
|
|
123
|
+
* 沙箱里 CDN 产物的解压根目录(含 `recordings/<slug>/`)。
|
|
124
|
+
*
|
|
125
|
+
* 落地阶段拿它去捞参考关键帧。沙箱被回收后目录就没了,所以只是加分项——
|
|
126
|
+
* 拿不到时落地只发 prompt 不发参考图,不阻断生产。
|
|
127
|
+
*/
|
|
128
|
+
datasetDir: z.string().trim().max(1024).optional(),
|
|
129
|
+
/**
|
|
130
|
+
* 缺省 / 旧报告 → 品类 TopN;单 URL 深拆必须带 {@link CompetitorSubjectSchema}。
|
|
131
|
+
*/
|
|
132
|
+
mode: z.enum(COMPETITOR_REPORT_MODE_VALUES).default(COMPETITOR_REPORT_MODE.Category),
|
|
133
|
+
/** 单 URL 深拆的主角;品类模式下省略。 */
|
|
134
|
+
subject: CompetitorSubjectSchema.optional(),
|
|
135
|
+
/**
|
|
136
|
+
* 品类模式:Top 素材网格。
|
|
137
|
+
* URL 模式:可选的参照批次对比素材,前端默认不主展示。
|
|
138
|
+
*/
|
|
139
|
+
topCreatives: z.array(CompetitorCreativeSchema).max(10).default([]),
|
|
140
|
+
dimensions: CompetitorDimensionsSchema.default({}),
|
|
141
|
+
suggestions: z.array(CompetitorSuggestionSchema).max(10).default([]),
|
|
142
|
+
})
|
|
143
|
+
.superRefine((report, ctx) => {
|
|
144
|
+
if (isCompetitorReportMode(report.mode, COMPETITOR_REPORT_MODE.Url) &&
|
|
145
|
+
report.subject == null) {
|
|
146
|
+
ctx.addIssue({
|
|
147
|
+
code: z.ZodIssueCode.custom,
|
|
148
|
+
message: 'url-mode report requires subject',
|
|
149
|
+
path: ['subject'],
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
export function isUrlCompetitorInsightReport(report) {
|
|
154
|
+
return (isCompetitorReportMode(report.mode, COMPETITOR_REPORT_MODE.Url) && report.subject != null);
|
|
155
|
+
}
|
|
156
|
+
export function isCategoryCompetitorInsightReport(report) {
|
|
157
|
+
return isCompetitorReportMode(report.mode, COMPETITOR_REPORT_MODE.Category);
|
|
158
|
+
}
|
|
159
|
+
function isRemoteHttpUrl(value) {
|
|
160
|
+
try {
|
|
161
|
+
const parsed = new URL(value.trim());
|
|
162
|
+
return parsed.protocol === 'http:' || parsed.protocol === 'https:';
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Soft-clean model-written report.json before Zod.
|
|
170
|
+
*
|
|
171
|
+
* Models often write `"videoUrl": null` / `"previewUrl": null` or stuff a local /
|
|
172
|
+
* non-URL path into media fields. Those should be omitted — not fail the whole
|
|
173
|
+
* publish — so the insight card can still render text conclusions.
|
|
174
|
+
*/
|
|
175
|
+
/** Hero 标签 / 平台:空数组按「未提供」处理,省略键以免 UI 画出空 pill 行。 */
|
|
176
|
+
const EMPTY_OMIT_ARRAY_KEYS = new Set(['tags', 'platforms']);
|
|
177
|
+
export function sanitizeCompetitorReportJson(input) {
|
|
178
|
+
if (Array.isArray(input)) {
|
|
179
|
+
return input.map((item) => sanitizeCompetitorReportJson(item));
|
|
180
|
+
}
|
|
181
|
+
if (input == null || typeof input !== 'object') {
|
|
182
|
+
return input;
|
|
183
|
+
}
|
|
184
|
+
const out = {};
|
|
185
|
+
for (const [key, value] of Object.entries(input)) {
|
|
186
|
+
if (value === null)
|
|
187
|
+
continue;
|
|
188
|
+
if (MEDIA_URL_KEYS.has(key)) {
|
|
189
|
+
if (typeof value !== 'string' || !isRemoteHttpUrl(value))
|
|
190
|
+
continue;
|
|
191
|
+
out[key] = value.trim();
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
if (Array.isArray(value)) {
|
|
195
|
+
if (EMPTY_OMIT_ARRAY_KEYS.has(key) && value.length === 0)
|
|
196
|
+
continue;
|
|
197
|
+
out[key] = sanitizeCompetitorReportJson(value);
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
if (typeof value === 'object' && value !== null) {
|
|
201
|
+
out[key] = sanitizeCompetitorReportJson(value);
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
out[key] = value;
|
|
205
|
+
}
|
|
206
|
+
return out;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Give every suggestion a usable `id`.
|
|
210
|
+
*
|
|
211
|
+
* The insight card puts this id into the composer, and `generate_replica_variants`
|
|
212
|
+
* resolves it back to a creative — so a report whose suggestions lack ids would
|
|
213
|
+
* render buttons that go nowhere. Backfilling beats rejecting the whole publish:
|
|
214
|
+
* the analysis is expensive and the id carries no information the model must supply.
|
|
215
|
+
*/
|
|
216
|
+
function backfillSuggestionIds(input) {
|
|
217
|
+
if (input == null || typeof input !== 'object' || Array.isArray(input))
|
|
218
|
+
return input;
|
|
219
|
+
const report = input;
|
|
220
|
+
if (!Array.isArray(report.suggestions))
|
|
221
|
+
return input;
|
|
222
|
+
const seen = new Set();
|
|
223
|
+
const suggestions = report.suggestions.map((item, index) => {
|
|
224
|
+
if (item == null || typeof item !== 'object' || Array.isArray(item))
|
|
225
|
+
return item;
|
|
226
|
+
const entry = item;
|
|
227
|
+
const declared = typeof entry.id === 'string' ? entry.id.trim().slice(0, 64) : '';
|
|
228
|
+
let id = declared || `sug-${index + 1}`;
|
|
229
|
+
while (seen.has(id))
|
|
230
|
+
id = `${id}-${index + 1}`;
|
|
231
|
+
seen.add(id);
|
|
232
|
+
return { ...entry, id };
|
|
233
|
+
});
|
|
234
|
+
return { ...report, suggestions };
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* URL 模式 subject 常漏写 rank;补 1 比整报打回更划算——分析很贵,rank 对 Hero 无信息量。
|
|
238
|
+
*/
|
|
239
|
+
function backfillSubjectDefaults(input) {
|
|
240
|
+
if (input == null || typeof input !== 'object' || Array.isArray(input))
|
|
241
|
+
return input;
|
|
242
|
+
const report = input;
|
|
243
|
+
if (!isCompetitorReportMode(report.mode, COMPETITOR_REPORT_MODE.Url))
|
|
244
|
+
return input;
|
|
245
|
+
if (report.subject == null || typeof report.subject !== 'object' || Array.isArray(report.subject)) {
|
|
246
|
+
return input;
|
|
247
|
+
}
|
|
248
|
+
const subject = report.subject;
|
|
249
|
+
if (typeof subject.rank === 'number' && Number.isFinite(subject.rank))
|
|
250
|
+
return input;
|
|
251
|
+
return { ...report, subject: { ...subject, rank: 1 } };
|
|
252
|
+
}
|
|
253
|
+
/** Sanitize then validate; shared by the publish tool and the turn-end auto-publish path. */
|
|
254
|
+
export function parseCompetitorInsightReport(input) {
|
|
255
|
+
const cleaned = backfillSubjectDefaults(backfillSuggestionIds(sanitizeCompetitorReportJson(input)));
|
|
256
|
+
const parsed = CompetitorInsightReportSchema.safeParse(cleaned);
|
|
257
|
+
if (!parsed.success)
|
|
258
|
+
return { success: false, error: parsed.error };
|
|
259
|
+
return { success: true, data: parsed.data };
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=competitor-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"competitor-report.js","sourceRoot":"","sources":["../../src/agent/competitor-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,13 @@ export declare function buildContextUsageSnapshot(input: {
|
|
|
36
36
|
exact: boolean;
|
|
37
37
|
breakdown: ContextUsageBreakdown;
|
|
38
38
|
updatedAt?: number;
|
|
39
|
+
/**
|
|
40
|
+
* 外部注入的上下文窗口上限(通常来自后端 models.dev)。
|
|
41
|
+
* 优先于静态表 getContextWindowSize;缺省时回退静态表(保持原行为)。
|
|
42
|
+
*/
|
|
43
|
+
maxContextTokens?: number;
|
|
44
|
+
}): ContextUsageSnapshot;
|
|
45
|
+
export declare function createEmptyContextUsageSnapshot(overrides?: Partial<Pick<ContextUsageSnapshot, 'sessionId' | 'agentId' | 'model'>> & {
|
|
46
|
+
maxContextTokens?: number;
|
|
39
47
|
}): ContextUsageSnapshot;
|
|
40
|
-
export declare function createEmptyContextUsageSnapshot(overrides?: Partial<Pick<ContextUsageSnapshot, 'sessionId' | 'agentId' | 'model'>>): ContextUsageSnapshot;
|
|
41
48
|
//# sourceMappingURL=context-usage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-usage.d.ts","sourceRoot":"","sources":["../../src/agent/context-usage.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7E,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,qBAAqB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,qBAS3C,CAAC;AAEF,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAMvE;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,qBAAqB,GAAG,MAAM,CAWjF;AAED,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,GACvB,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,GAAG,YAAY,GAAG,QAAQ,CAAC,CASzE;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,qBAAqB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"context-usage.d.ts","sourceRoot":"","sources":["../../src/agent/context-usage.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7E,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,qBAAqB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,qBAS3C,CAAC;AAEF,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAMvE;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,qBAAqB,GAAG,MAAM,CAWjF;AAED,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,GACvB,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,GAAG,YAAY,GAAG,QAAQ,CAAC,CASzE;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,qBAAqB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,oBAAoB,CAiBvB;AAED,wBAAgB,+BAA+B,CAC7C,SAAS,GAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,GAAG;IAClF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACtB,GACL,oBAAoB,CAYtB"}
|
|
@@ -41,7 +41,9 @@ export function computeContextUsageMetrics(usedTokens, maxContextTokens) {
|
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
43
|
export function buildContextUsageSnapshot(input) {
|
|
44
|
-
const maxContextTokens =
|
|
44
|
+
const maxContextTokens = typeof input.maxContextTokens === "number" && input.maxContextTokens > 0
|
|
45
|
+
? input.maxContextTokens
|
|
46
|
+
: getContextWindowSize(input.model ?? undefined);
|
|
45
47
|
const metrics = computeContextUsageMetrics(input.usedTokens, maxContextTokens);
|
|
46
48
|
return {
|
|
47
49
|
sessionId: input.sessionId ?? null,
|
|
@@ -63,6 +65,9 @@ export function createEmptyContextUsageSnapshot(overrides = {}) {
|
|
|
63
65
|
usedTokens: 0,
|
|
64
66
|
exact: false,
|
|
65
67
|
breakdown: { ...EMPTY_CONTEXT_USAGE_BREAKDOWN },
|
|
68
|
+
...(typeof overrides.maxContextTokens === 'number'
|
|
69
|
+
? { maxContextTokens: overrides.maxContextTokens }
|
|
70
|
+
: {}),
|
|
66
71
|
});
|
|
67
72
|
}
|
|
68
73
|
//# sourceMappingURL=context-usage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-usage.js","sourceRoot":"","sources":["../../src/agent/context-usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AA8BjE,MAAM,CAAC,MAAM,6BAA6B,GAA0B;IAClE,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;IACf,iBAAiB,EAAE,CAAC;IACpB,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,CAAC;IACd,KAAK,EAAE,CAAC;IACR,gBAAgB,EAAE,CAAC;IACnB,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,gFAAgF;AAChF,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,MAAM,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;IACxB,IAAI,GAAG,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IAC/B,IAAI,GAAG,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,GAAG,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,SAAgC;IACvE,OAAO,CACL,SAAS,CAAC,YAAY;QACtB,SAAS,CAAC,YAAY;QACtB,SAAS,CAAC,iBAAiB;QAC3B,SAAS,CAAC,SAAS;QACnB,SAAS,CAAC,WAAW;QACrB,SAAS,CAAC,KAAK;QACf,SAAS,CAAC,gBAAgB;QAC1B,SAAS,CAAC,KAAK,CAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,UAAkB,EAClB,gBAAwB;IAExB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC;IACtD,OAAO;QACL,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;QACnD,UAAU;QACV,MAAM,EAAE,qBAAqB,CAAC,UAAU,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,
|
|
1
|
+
{"version":3,"file":"context-usage.js","sourceRoot":"","sources":["../../src/agent/context-usage.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/index.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
export * from "./turn.js";
|
|
1
2
|
export * from './model-context-window.js';
|
|
2
3
|
export * from './context-usage.js';
|
|
4
|
+
export * from './competitor-report.js';
|
|
5
|
+
export * from './session-title.js';
|
|
6
|
+
export * from './reference-images.js';
|
|
7
|
+
export * from './runtime-failure.js';
|
|
3
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC"}
|
package/dist/agent/index.js
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
export * from "./turn.js";
|
|
1
2
|
export * from './model-context-window.js';
|
|
2
3
|
export * from './context-usage.js';
|
|
4
|
+
export * from './competitor-report.js';
|
|
5
|
+
export * from './session-title.js';
|
|
6
|
+
export * from './reference-images.js';
|
|
7
|
+
export * from './runtime-failure.js';
|
|
3
8
|
//# sourceMappingURL=index.js.map
|
package/dist/agent/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-context-window.d.ts","sourceRoot":"","sources":["../../src/agent/model-context-window.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-context-window.d.ts","sourceRoot":"","sources":["../../src/agent/model-context-window.ts"],"names":[],"mappings":"AAkFA,wFAAwF;AACxF,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAS7D;AAED,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhE"}
|
|
@@ -1,26 +1,62 @@
|
|
|
1
|
+
// 上下文窗口取值来源:models.dev 官方 provider 的 limit.context(与后端
|
|
2
|
+
// ModelsDevService.getContextWindow 的 canonical 路径同源)。非 canonical
|
|
3
|
+
// provider 名的模型(glm/kimi/hy3/minimax 等)后端 inferCanonicalProvider
|
|
4
|
+
// 推不出 canonical,会直接落本静态表——故这些条目是 remix editor 取得正确
|
|
5
|
+
// 分母的唯一来源,必须在此显式列出。值核实日期:2026-08-19。
|
|
1
6
|
const MODEL_CONTEXT_WINDOWS = {
|
|
7
|
+
// ── Anthropic Claude(官方 limit.context = 200k 起,4.5+ 为 1M)──
|
|
2
8
|
'claude-sonnet-4-20250514': 200_000,
|
|
3
|
-
'claude-sonnet-4-6':
|
|
9
|
+
'claude-sonnet-4-6': 1_000_000,
|
|
10
|
+
'claude-sonnet-4-5': 1_000_000,
|
|
4
11
|
'claude-sonnet-4': 200_000,
|
|
12
|
+
'claude-sonnet-5': 1_000_000,
|
|
5
13
|
'claude-3-7-sonnet': 200_000,
|
|
6
14
|
'claude-3-5-sonnet': 200_000,
|
|
7
15
|
'claude-3-5-haiku': 200_000,
|
|
8
16
|
'claude-3-opus': 200_000,
|
|
17
|
+
'claude-opus-4-8': 1_000_000,
|
|
18
|
+
'claude-opus-4-7': 1_000_000,
|
|
19
|
+
'claude-opus-4-6': 1_000_000,
|
|
20
|
+
'claude-opus-5': 1_000_000,
|
|
21
|
+
'claude-opus-5-fast': 1_000_000,
|
|
22
|
+
'claude-fable-5': 1_000_000,
|
|
23
|
+
// ── OpenAI GPT(官方 limit.context;gpt-5.x 主线 1.05M)──
|
|
9
24
|
'gpt-4o': 128_000,
|
|
10
25
|
'gpt-4o-mini': 128_000,
|
|
11
26
|
'gpt-4-turbo': 128_000,
|
|
12
27
|
'gpt-4.1': 1_000_000,
|
|
28
|
+
'gpt-5.6-sol': 1_050_000,
|
|
29
|
+
'gpt-5.6': 1_050_000,
|
|
30
|
+
'gpt-5.5': 1_050_000,
|
|
31
|
+
'gpt-5.4': 1_050_000,
|
|
32
|
+
'gpt-5': 400_000,
|
|
13
33
|
'o3': 200_000,
|
|
14
34
|
'o4-mini': 200_000,
|
|
35
|
+
// ── Google Gemini(官方 limit.context = 1_048_576)──
|
|
36
|
+
'gemini-3.1-pro-preview': 1_048_576,
|
|
37
|
+
'gemini-3.5-flash': 1_048_576,
|
|
38
|
+
'gemini-2.0-flash': 1_000_000,
|
|
39
|
+
'gemini-2.5-pro': 1_000_000,
|
|
40
|
+
'gemini-2.5-flash': 1_000_000,
|
|
41
|
+
// ── DeepSeek(官方 limit.context = 1M;旧 chat/reasoner 仍 64k)──
|
|
15
42
|
'deepseek-chat': 64_000,
|
|
16
43
|
'deepseek-reasoner': 64_000,
|
|
17
44
|
'deepseek-v4-flash': 1_000_000,
|
|
18
45
|
'deepseek-v4-pro': 1_000_000,
|
|
19
46
|
/** 其它 deepseek-v4-* 变体;勿用 `deepseek` 前缀,以免覆盖 chat/reasoner 的 64k */
|
|
20
47
|
'deepseek-v4': 1_000_000,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
'
|
|
48
|
+
// ── 非 canonical provider 模型(后端 inferCanonicalProvider 推不出,落本表)──
|
|
49
|
+
// 智谱 GLM:glm-5.2 官方 1M,glm-5.1/glm-5-maas 官方 ~200k
|
|
50
|
+
'glm-5.2': 1_000_000,
|
|
51
|
+
'glm-5.1': 200_000,
|
|
52
|
+
'glm-5-maas': 204_800,
|
|
53
|
+
// 月之暗面 Kimi:k3 官方 1_048_576,k2.6 官方 262_144
|
|
54
|
+
'kimi-k3': 1_048_576,
|
|
55
|
+
'kimi-k2.6': 262_144,
|
|
56
|
+
// 腾讯混元 hy3-preview 官方 256_000
|
|
57
|
+
'hy3-preview': 256_000,
|
|
58
|
+
// MiniMax-M2.7 官方 204_800
|
|
59
|
+
'minimax-m2.7': 204_800,
|
|
24
60
|
};
|
|
25
61
|
const DEFAULT_CONTEXT_WINDOW = 128_000;
|
|
26
62
|
const COMPRESSION_THRESHOLD = 0.8;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-context-window.js","sourceRoot":"","sources":["../../src/agent/model-context-window.ts"],"names":[],"mappings":"AAAA,MAAM,qBAAqB,GAA2B;IACpD,0BAA0B,EAAE,OAAO;IACnC,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"model-context-window.js","sourceRoot":"","sources":["../../src/agent/model-context-window.ts"],"names":[],"mappings":"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"}
|