@eddyskywalker/dsh-chatgpt-subscription 0.31.0 → 0.32.0
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/CHANGELOG.md +34 -0
- package/README.md +64 -1
- package/lib/client.js +29654 -1099
- package/lib/client.js.map +1 -1
- package/lib/index.js +7163 -1484
- package/lib/types/client/cline-pass/ClinePassComposerQuota.d.ts +20 -0
- package/lib/types/client/cline-pass/ClinePassComposerQuota.d.ts.map +1 -0
- package/lib/types/client/cline-pass/ClinePassSection.d.ts +17 -0
- package/lib/types/client/cline-pass/ClinePassSection.d.ts.map +1 -0
- package/lib/types/client/cline-pass/api.d.ts +84 -0
- package/lib/types/client/cline-pass/api.d.ts.map +1 -0
- package/lib/types/client/cline-pass/locales.d.ts +1025 -0
- package/lib/types/client/cline-pass/locales.d.ts.map +1 -0
- package/lib/types/client/cline-pass/styles.d.ts +7 -0
- package/lib/types/client/cline-pass/styles.d.ts.map +1 -0
- package/lib/types/client/hub/brand-icons.d.ts +2 -2
- package/lib/types/client/hub/brand-icons.d.ts.map +1 -1
- package/lib/types/client/hub/providers.d.ts.map +1 -1
- package/lib/types/client/index.d.ts +2 -0
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/mermaid/renderer.d.ts +23 -0
- package/lib/types/client/mermaid/renderer.d.ts.map +1 -1
- package/lib/types/client/minimax-code/MinimaxVideoDocumentBody.d.ts +31 -14
- package/lib/types/client/minimax-code/MinimaxVideoDocumentBody.d.ts.map +1 -1
- package/lib/types/client/minimax-code/MinimaxVideoToolView.d.ts.map +1 -1
- package/lib/types/client/minimax-code/video-contract.d.ts +36 -0
- package/lib/types/client/minimax-code/video-contract.d.ts.map +1 -1
- package/lib/types/client/minimax-code/video-slots.d.ts +58 -5
- package/lib/types/client/minimax-code/video-slots.d.ts.map +1 -1
- package/lib/types/client/progress-updates/markdown-lite.d.ts +19 -6
- package/lib/types/client/progress-updates/markdown-lite.d.ts.map +1 -1
- package/lib/types/host/antigravity/adapter.d.ts.map +1 -1
- package/lib/types/host/cline-pass/account-pool.d.ts +63 -0
- package/lib/types/host/cline-pass/account-pool.d.ts.map +1 -0
- package/lib/types/host/cline-pass/adapter.d.ts +49 -0
- package/lib/types/host/cline-pass/adapter.d.ts.map +1 -0
- package/lib/types/host/cline-pass/catalog.d.ts +49 -0
- package/lib/types/host/cline-pass/catalog.d.ts.map +1 -0
- package/lib/types/host/cline-pass/client.d.ts +118 -0
- package/lib/types/host/cline-pass/client.d.ts.map +1 -0
- package/lib/types/host/cline-pass/engine.d.ts +223 -0
- package/lib/types/host/cline-pass/engine.d.ts.map +1 -0
- package/lib/types/host/cline-pass/line.d.ts +55 -0
- package/lib/types/host/cline-pass/line.d.ts.map +1 -0
- package/lib/types/host/cline-pass/mapper.d.ts +112 -0
- package/lib/types/host/cline-pass/mapper.d.ts.map +1 -0
- package/lib/types/host/cline-pass/oauth.d.ts +134 -0
- package/lib/types/host/cline-pass/oauth.d.ts.map +1 -0
- package/lib/types/host/cline-pass/protocol.d.ts +186 -0
- package/lib/types/host/cline-pass/protocol.d.ts.map +1 -0
- package/lib/types/host/cline-pass/routes.d.ts +71 -0
- package/lib/types/host/cline-pass/routes.d.ts.map +1 -0
- package/lib/types/host/cline-pass/store.d.ts +97 -0
- package/lib/types/host/cline-pass/store.d.ts.map +1 -0
- package/lib/types/host/cline-pass/token-store.d.ts +168 -0
- package/lib/types/host/cline-pass/token-store.d.ts.map +1 -0
- package/lib/types/host/cline-pass/tools.d.ts +21 -0
- package/lib/types/host/cline-pass/tools.d.ts.map +1 -0
- package/lib/types/host/cline-pass/types.d.ts +168 -0
- package/lib/types/host/cline-pass/types.d.ts.map +1 -0
- package/lib/types/host/common/model-request-control.d.ts +1 -1
- package/lib/types/host/common/model-request-control.d.ts.map +1 -1
- package/lib/types/host/common/request-diagnostics.d.ts +1 -1
- package/lib/types/host/common/request-diagnostics.d.ts.map +1 -1
- package/lib/types/index.d.ts +12 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/shared/cline-pass-contracts.d.ts +267 -0
- package/lib/types/shared/cline-pass-contracts.d.ts.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../src/client/cline-pass/locales.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,mBAAmB,CAAA;AAE7C,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwJL,CAAA;AAEV,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsJL,CAAA;AAIV,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKxB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cline Pass's own prefixed classes only: layout the shared `.dsha-*`
|
|
3
|
+
* vocabulary has no expression for (channel chips, the pin row, the usage
|
|
4
|
+
* grid, the history table). Everything else on the tab reuses the shared card.
|
|
5
|
+
*/
|
|
6
|
+
export declare function installClinePassStyles(): void;
|
|
7
|
+
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/client/cline-pass/styles.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAyD7C"}
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
* (the same principle claude-style's brand.js documents).
|
|
11
11
|
*/
|
|
12
12
|
import { type BrandMarkKey } from './brand-svg.ts';
|
|
13
|
-
export type HubProviderId = 'chatgpt' | 'antigravity' | 'command-code' | 'kimi-code' | 'workbuddy' | 'minimax-code' | 'glm-coding-plan' | 'claude' | 'ollama' | 'step-code';
|
|
13
|
+
export type HubProviderId = 'chatgpt' | 'antigravity' | 'command-code' | 'kimi-code' | 'workbuddy' | 'minimax-code' | 'glm-coding-plan' | 'claude' | 'ollama' | 'step-code' | 'cline-pass';
|
|
14
14
|
/** 一张标记的键:BRAND_MARKS 的全部键,加上本文件自带的键。 */
|
|
15
|
-
export type ProviderMarkKey = BrandMarkKey | 'glm' | 'step-code';
|
|
15
|
+
export type ProviderMarkKey = BrandMarkKey | 'glm' | 'step-code' | 'cline-pass';
|
|
16
16
|
interface ProviderBrand {
|
|
17
17
|
/** Key into BRAND_MARKS (or LOCAL_MARKS); absent for monogram-only providers. */
|
|
18
18
|
mark?: ProviderMarkKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand-icons.d.ts","sourceRoot":"","sources":["../../../../src/client/hub/brand-icons.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAe,KAAK,YAAY,EAAqB,MAAM,gBAAgB,CAAA;AAElF,MAAM,MAAM,aAAa,GACrB,SAAS,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,GACxD,WAAW,GAAG,cAAc,GAAG,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GACtE,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"brand-icons.d.ts","sourceRoot":"","sources":["../../../../src/client/hub/brand-icons.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAe,KAAK,YAAY,EAAqB,MAAM,gBAAgB,CAAA;AAElF,MAAM,MAAM,aAAa,GACrB,SAAS,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,GACxD,WAAW,GAAG,cAAc,GAAG,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GACtE,WAAW,GAAG,YAAY,CAAA;AA6E9B,yCAAyC;AACzC,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,KAAK,GAAG,WAAW,GAAG,YAAY,CAAA;AAS/E,UAAU,aAAa;IACrB,iFAAiF;IACjF,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE,aAAa,CAmBhE,CAAA;AAED,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAUjI;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE,IAAS,EAAE,EAAE;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAWpG;AAoBD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAMtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../../src/client/hub/providers.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../../src/client/hub/providers.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAuBpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,uDAAuD;AACvD,MAAM,WAAW,oBAAoB;IACnC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,gFAAgF;IAChF,OAAO,EAAE,YAAY,CAAC,kBAAkB,CAAC,CAAA;CAC1C;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,aAAa,CAAA;IACjB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;;OAOG;IACH,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;IACxD,YAAY,CAAC,KAAK,EAAE,oBAAoB,GAAG,YAAY,CAAA;CACxD;AA4BD,6DAA6D;AAC7D,eAAO,MAAM,aAAa,EAAE,SAAS,qBAAqB,EAuEzD,CAAA;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAEnF"}
|
|
@@ -9,6 +9,7 @@ import { type WorkBuddyLocaleKey } from './workbuddy/locales.ts';
|
|
|
9
9
|
import { type GlmCodingPlanLocaleKey } from './glm-coding-plan/locales.ts';
|
|
10
10
|
import { type OllamaLocaleKey } from './ollama/locales.ts';
|
|
11
11
|
import { type StepCodeLocaleKey } from './step-code/locales.ts';
|
|
12
|
+
import { type ClinePassLocaleKey } from './cline-pass/locales.ts';
|
|
12
13
|
import { type ProgressUpdatesLocaleKey } from './progress-updates/locales.ts';
|
|
13
14
|
declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
14
15
|
/**
|
|
@@ -30,6 +31,7 @@ declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
|
30
31
|
'dsh-glm-coding-plan': GlmCodingPlanLocaleKey;
|
|
31
32
|
'dsh-ollama': OllamaLocaleKey;
|
|
32
33
|
'dsh-step-code': StepCodeLocaleKey;
|
|
34
|
+
'dsh-cline-pass': ClinePassLocaleKey;
|
|
33
35
|
'dsh-progress-updates': ProgressUpdatesLocaleKey;
|
|
34
36
|
}
|
|
35
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAenE,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AAM/D,OAAO,EAAoD,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGtH,OAAO,EAA0C,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAGlG,OAAO,EAAqD,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAExH,OAAO,EAA+C,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAM5G,OAAO,EAAqD,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAKxH,OAAO,EAAgD,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAG9G,OAAO,EAA0D,KAAK,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAElI,OAAO,EAA0C,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAElG,OAAO,EAA+C,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAenE,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AAM/D,OAAO,EAAoD,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGtH,OAAO,EAA0C,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAGlG,OAAO,EAAqD,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAExH,OAAO,EAA+C,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAM5G,OAAO,EAAqD,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAKxH,OAAO,EAAgD,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAG9G,OAAO,EAA0D,KAAK,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAElI,OAAO,EAA0C,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAElG,OAAO,EAA+C,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG5G,OAAO,EAAiD,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAMhH,OAAO,EAA6D,KAAK,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AAExI,OAAO,QAAQ,kCAAkC,CAAC;IAChD;;;;;;;OAOG;IACH,UAAU,kBAAkB;QAC1B,0BAA0B,EAAE,SAAS,CAAA;QACrC,iBAAiB,EAAE,oBAAoB,CAAA;QACvC,YAAY,EAAE,eAAe,CAAA;QAC7B,kBAAkB,EAAE,oBAAoB,CAAA;QACxC,eAAe,EAAE,iBAAiB,CAAA;QAClC,kBAAkB,EAAE,oBAAoB,CAAA;QACxC,eAAe,EAAE,kBAAkB,CAAA;QACnC,qBAAqB,EAAE,sBAAsB,CAAA;QAC7C,YAAY,EAAE,eAAe,CAAA;QAC7B,eAAe,EAAE,iBAAiB,CAAA;QAClC,gBAAgB,EAAE,kBAAkB,CAAA;QACpC,sBAAsB,EAAE,wBAAwB,CAAA;KACjD;CACF;AAED,eAAO,MAAM,MAAM,UAQlB,CAAA;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CA0M9C"}
|
|
@@ -1,3 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 判断一个 `<code>` 是不是要渲染的 mermaid 代码块。
|
|
3
|
+
*
|
|
4
|
+
* 判据按优先级排列,命中即返回:
|
|
5
|
+
* 1. `<code>` 自身或祖先带 mermaid 类;
|
|
6
|
+
* 2. 平台代码块 banner 上的语言标签等于 mermaid(一票通过);
|
|
7
|
+
* 3. banner 上是别的具体语言(ts、json …)时直接否掉,绝不看正文(一票否决);
|
|
8
|
+
* 4. 语言标签读不到、或只是平台占位文案(「代码块」/「Code block」)时,退回正文判断:
|
|
9
|
+
* 剥掉 %%{init}%% / %% 注释 / frontmatter 这类前置噪音后,以 mermaid 图型关键字开头即命中。
|
|
10
|
+
*
|
|
11
|
+
* 第 4 条只在「拿不到具体语言」时启用:一个标了 ts、正文里出现 graph 字样的块不该被当成
|
|
12
|
+
* mermaid —— 它在第 3 条就被否掉了。占位符之所以等同于「没标签」,是因为 mermaid 不在
|
|
13
|
+
* highlighter 的语言表里,主聊天区显示的就是占位文案,而不是 "mermaid"。
|
|
14
|
+
* 不用 mermaid.detectType 做判据 —— 实测它在未加载的图型上会抛 UnknownDiagramError,连
|
|
15
|
+
* flowchart 都抛,靠不住。
|
|
16
|
+
*
|
|
17
|
+
* @param codeEl - 待判定的 `<code>` 元素。
|
|
18
|
+
* @returns 需要渲染时的宿主容器与源码;不是 mermaid 代码块时返回 null。
|
|
19
|
+
*/
|
|
20
|
+
export declare function findMermaidCandidate(codeEl: HTMLElement): {
|
|
21
|
+
host: HTMLElement;
|
|
22
|
+
code: string;
|
|
23
|
+
} | null;
|
|
1
24
|
export declare function scanAndRenderMermaid(): void;
|
|
2
25
|
export declare function setupMermaidObserver(): () => void;
|
|
3
26
|
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../../src/client/mermaid/renderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../../src/client/mermaid/renderer.ts"],"names":[],"mappings":"AA6PA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA0BpG;AAqGD,wBAAgB,oBAAoB,IAAI,IAAI,CAY3C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,IAAI,CA+DjD"}
|
|
@@ -15,14 +15,22 @@
|
|
|
15
15
|
* `binaryExtensions` 必须与 `extensions` 是同一组后缀:`register` 会拒绝
|
|
16
16
|
* `binaryExtensions` 里出现在 `extensions` 之外的项。
|
|
17
17
|
*
|
|
18
|
-
* ##
|
|
18
|
+
* ## 字节从哪来:宿主读好的那一段
|
|
19
19
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* `
|
|
24
|
-
*
|
|
25
|
-
*
|
|
20
|
+
* 定义声明的是 `loading: 'bytes-complete'`,所以**宿主替这个实现把整段文件读
|
|
21
|
+
* 出来**,再通过 keyed 槽的 `content` 交下来——与内置的图像渲染器同一条路
|
|
22
|
+
* (宿主 `ui-sidebar-documentpreview/src/client/TextPreview.tsx`:
|
|
23
|
+
* `content = { kind: 'bytes', data }`)。
|
|
24
|
+
*
|
|
25
|
+
* 这里**不再自己读一遍**,理由有三:
|
|
26
|
+
*
|
|
27
|
+
* - 自己读要把同一段字节在 RPC 上再传一次,视频动辄几十 MB;
|
|
28
|
+
* - 宿主读的那一份带着它自己的整文件上限与失败文案,读一次就够;
|
|
29
|
+
* - 两个快照可能不是同一个文件版本,屏幕上会是一段旧片子。
|
|
30
|
+
*
|
|
31
|
+
* 之前这里自己读远端(`ctx.remote.workspaceFiles.readBytes`),而那条远端
|
|
32
|
+
* **不抛异常**:它把结果装成 `{ ok, value }` / `{ ok, error }`。于是字节永远
|
|
33
|
+
* 是 `undefined`,视频台就一直停在「正在读取视频」,右侧栏也放不出画面。
|
|
26
34
|
*
|
|
27
35
|
* ## 为什么和对话流卡片长得一样
|
|
28
36
|
*
|
|
@@ -34,15 +42,24 @@
|
|
|
34
42
|
*/
|
|
35
43
|
import { type ReactNode } from 'react';
|
|
36
44
|
import { type MinimaxCodeLocaleKey } from './locales.ts';
|
|
37
|
-
|
|
45
|
+
/**
|
|
46
|
+
* 宿主下发的那份内容,这里只认 `bytes` 一支。
|
|
47
|
+
*
|
|
48
|
+
* 宿主的内容是一个三分支的并集(文本 / 字节 / 渲染器自管),但视频只可能落在
|
|
49
|
+
* `bytes` 一支上;其余分支对这个渲染器没有意义,所以这里只声明用到的那一支。
|
|
50
|
+
*/
|
|
51
|
+
export interface DocumentContentLike {
|
|
52
|
+
/** 内容形态;视频只认 `bytes`。 */
|
|
53
|
+
readonly kind?: string;
|
|
54
|
+
/** `bytes` 一支的整段字节。 */
|
|
55
|
+
readonly data?: Uint8Array;
|
|
56
|
+
}
|
|
38
57
|
/** 本渲染器真正读到的 props(只声明用到的字段,理由同对话流卡片)。 */
|
|
39
58
|
export interface MinimaxVideoDocumentBodyProps {
|
|
40
59
|
/** 页签的内容地址:`dsh-resource://file/session/<sessionId>/<path>`。 */
|
|
41
60
|
readonly resourceAddress?: string | undefined;
|
|
42
|
-
/**
|
|
43
|
-
readonly
|
|
44
|
-
/** 取字节的通道;缺席时视频台退回占位块。 */
|
|
45
|
-
readonly readVideo?: ReadVideoBytes | undefined;
|
|
61
|
+
/** 宿主读好的内容;`bytes` 一支带整段字节。 */
|
|
62
|
+
readonly content?: DocumentContentLike | undefined;
|
|
46
63
|
/** 命名空间化的翻译;缺席时用本文件的中文字典兜底。 */
|
|
47
64
|
readonly t?: ((key: MinimaxCodeLocaleKey) => string) | undefined;
|
|
48
65
|
/** 兼容槽位交来的其余座位,本视图不读。 */
|
|
@@ -51,7 +68,7 @@ export interface MinimaxVideoDocumentBodyProps {
|
|
|
51
68
|
/**
|
|
52
69
|
* 一个文件地址里的会话与路径。
|
|
53
70
|
*
|
|
54
|
-
* 只认 `session` 作用域:`absolute`
|
|
71
|
+
* 只认 `session` 作用域:`absolute` 地址没有会话,宿主读那一段时需要会话身份,
|
|
55
72
|
* 所以那种地址这里当作「没有可读的文件」,由视频台画占位块。
|
|
56
73
|
* @param address - `dsh-resource://file/…` 地址。
|
|
57
74
|
* @returns 会话 id 与路径;不是会话地址时 undefined。
|
|
@@ -62,7 +79,7 @@ export declare function sessionFileOf(address: string | undefined): {
|
|
|
62
79
|
} | undefined;
|
|
63
80
|
/**
|
|
64
81
|
* 侧边栏视频正文。
|
|
65
|
-
* @param props -
|
|
82
|
+
* @param props - 地址、宿主下发的内容与文案。
|
|
66
83
|
* @returns 16:9 视频台与下方一行元数据。
|
|
67
84
|
*/
|
|
68
85
|
export declare function MinimaxVideoDocumentBody(props: MinimaxVideoDocumentBodyProps): ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MinimaxVideoDocumentBody.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/MinimaxVideoDocumentBody.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"MinimaxVideoDocumentBody.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/MinimaxVideoDocumentBody.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAM,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAI5D;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,yBAAyB;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAC3B;AAED,0CAA0C;AAC1C,MAAM,WAAW,6BAA6B;IAC5C,gEAAgE;IAChE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7C,+BAA+B;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAA;IAClD,+BAA+B;IAC/B,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IAChE,yBAAyB;IACzB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAChC;AAOD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAU5H;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,GAAG,SAAS,CAwBxF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MinimaxVideoToolView.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/MinimaxVideoToolView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAA;AAC7E,OAAO,EAAM,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAEc,KAAK,cAAc,EACvC,MAAM,qBAAqB,CAAA;AAG5B;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB;IACxC,gBAAgB;IAChB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;IACjC,2BAA2B;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,uBAAuB;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IACrF,4BAA4B;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;IAC/C,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,oDAAoD;IACpD,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IAChE,wDAAwD;IACxD,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAChC;AAED,mBAAmB;AACnB,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,qBAAqB;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAA;IAC1C,uBAAuB;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,iDAAiD;QACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;KACzC,CAAA;IACD,kBAAkB;IAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CACxB;AAOD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA2CxF;
|
|
1
|
+
{"version":3,"file":"MinimaxVideoToolView.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/MinimaxVideoToolView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAA;AAC7E,OAAO,EAAM,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAEc,KAAK,cAAc,EACvC,MAAM,qBAAqB,CAAA;AAG5B;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB;IACxC,gBAAgB;IAChB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;IACjC,2BAA2B;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,uBAAuB;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IACrF,4BAA4B;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;IAC/C,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,oDAAoD;IACpD,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IAChE,wDAAwD;IACxD,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAChC;AAED,mBAAmB;AACnB,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,qBAAqB;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAA;IAC1C,uBAAuB;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,iDAAiD;QACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;KACzC,CAAA;IACD,kBAAkB;IAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CACxB;AAOD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA2CxF;AAiJD,uBAAuB;AACvB,MAAM,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,yBAAyB,KAAK,SAAS,CAAA"}
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
*
|
|
25
25
|
* @module @eddyskywalker/dsh-chatgpt-subscription/client/minimax-code/video-contract
|
|
26
26
|
*/
|
|
27
|
+
import type { RemoteBytes, RemoteResult } from './video-slots.ts';
|
|
27
28
|
/**
|
|
28
29
|
* `minimax_generate_video` 的线上工具名。
|
|
29
30
|
*
|
|
@@ -93,6 +94,41 @@ export declare function absoluteVideoPath(cwd: string | undefined, videoPath: st
|
|
|
93
94
|
* @returns 整段文件字节。
|
|
94
95
|
*/
|
|
95
96
|
export type ReadVideoBytes = (sessionId: string, path: string, signal?: AbortSignal) => Promise<Uint8Array>;
|
|
97
|
+
/**
|
|
98
|
+
* 一次远端取字节的结果 → 字节。
|
|
99
|
+
*
|
|
100
|
+
* 远端调用**不抛异常**:它把结果装成 `{ ok: true, value }` 或
|
|
101
|
+
* `{ ok: false, error }`(见 `@deepseek-ai/dsh-typert-protocol` 的
|
|
102
|
+
* `RemoteResult`)。所以字节在 `value.data`,而不是结果对象的 `data`——
|
|
103
|
+
* 直接读 `(await call()).data` 拿到的是 `undefined`,界面会把它显示成
|
|
104
|
+
* 「一直在读」。
|
|
105
|
+
*
|
|
106
|
+
* 失败那一支**抛出去**:卡片按 `code` 与 `details.limit` 区分「文件太大」和
|
|
107
|
+
* 「读不到」,那需要一条真正的异常(`RemoteError` 本身就是带这两个字段的
|
|
108
|
+
* `Error`)。
|
|
109
|
+
*
|
|
110
|
+
* **载荷有两代形状**:≤0.1.6 的宿主给 base64 字符串,≥0.1.7 的宿主给
|
|
111
|
+
* `Uint8Array`。两种都认,否则旧世代会拿到一串 base64 而不是字节。
|
|
112
|
+
*
|
|
113
|
+
* @param result - 远端返回的结果。
|
|
114
|
+
* @returns 整段文件字节。
|
|
115
|
+
* @throws 远端声明的失败,或一份「成功却没有字节」的结果。
|
|
116
|
+
*/
|
|
117
|
+
export declare function unwrapVideoBytes(result: RemoteResult<{
|
|
118
|
+
readonly data: RemoteBytes;
|
|
119
|
+
}>): Uint8Array;
|
|
120
|
+
/**
|
|
121
|
+
* 宿主的字节载荷 → 浏览器要用的字节。
|
|
122
|
+
*
|
|
123
|
+
* ≥0.1.7 的宿主直接给 `Uint8Array`;≤0.1.6 的宿主给 base64 字符串,
|
|
124
|
+
* 宿主自己的预览也是用 `atob` 解的(`ui-sidebar-documentpreview/src/client/rpc.ts`
|
|
125
|
+
* 的 `documentFileBytes`)。这里照抄同一套判定。
|
|
126
|
+
*
|
|
127
|
+
* @param data - 远端交回的载荷。
|
|
128
|
+
* @returns 整段文件字节。
|
|
129
|
+
* @throws 载荷既不是字节也不是可解的 base64。
|
|
130
|
+
*/
|
|
131
|
+
export declare function decodeVideoBytes(data: RemoteBytes): Uint8Array;
|
|
96
132
|
/**
|
|
97
133
|
* 一次取字节失败的原因。
|
|
98
134
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video-contract.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/video-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,2BAA2B,CAAA;AAE/D;;;;;;GAMG;AACH,MAAM,WAAW,4BAA4B;IAC3C,mCAAmC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gCAAgC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,kCAAkC;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,uBAAuB;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,4BAA4B,GAAG,SAAS,CAqBrF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQpF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;AAE3G;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,YAAY,CAAA;AAEzD,sDAAsD;AACtD,eAAO,MAAM,wBAAwB,6BAA6B,CAAA;AAElE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAKnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMnE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAcjD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,EACnC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOtD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C"}
|
|
1
|
+
{"version":3,"file":"video-contract.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/video-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,2BAA2B,CAAA;AAE/D;;;;;;GAMG;AACH,MAAM,WAAW,4BAA4B;IAC3C,mCAAmC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gCAAgC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,kCAAkC;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,uBAAuB;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,4BAA4B,GAAG,SAAS,CAqBrF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQpF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;AAE3G;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,GAAG,UAAU,CAGjG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAW9D;AAED;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,YAAY,CAAA;AAEzD,sDAAsD;AACtD,eAAO,MAAM,wBAAwB,6BAA6B,CAAA;AAElE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAKnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMnE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAcjD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,EACnC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOtD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C"}
|
|
@@ -44,22 +44,65 @@ export interface DocumentPreviewRegistryService {
|
|
|
44
44
|
*/
|
|
45
45
|
register(definition: DocumentPreviewRegistration): () => void;
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* 一次远端调用声明的失败。
|
|
49
|
+
*
|
|
50
|
+
* 形状与宿主的 `RemoteError` 一致:稳定的 `code`、一句 `message`,以及该码
|
|
51
|
+
* 专属的结构化 `details`。判定只看 `code`,不看 `message` 里的英文。
|
|
52
|
+
*/
|
|
53
|
+
export interface RemoteFailure {
|
|
54
|
+
/** 稳定的失败码,如 `workspace-file/too-large`。 */
|
|
55
|
+
readonly code: string;
|
|
56
|
+
/** 人读的诊断信息。 */
|
|
57
|
+
readonly message?: string;
|
|
58
|
+
/** 该码专属的结构化载荷(如 too-large 的 `limit`)。 */
|
|
59
|
+
readonly details?: unknown;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 一次远端调用的结果:**成功给值,失败给原因**。
|
|
63
|
+
*
|
|
64
|
+
* 远端调用不抛异常——宿主把它声明的失败装进结果里(见
|
|
65
|
+
* `@deepseek-ai/dsh-typert-protocol` 的 `RemoteResult`)。所以读字节的人
|
|
66
|
+
* 必须先看 `ok`,再去 `value`;直接读 `(await call()).data` 拿到的是
|
|
67
|
+
* `undefined`,而界面会把「没拿到字节」显示成「一直在读」。
|
|
68
|
+
*/
|
|
69
|
+
export type RemoteResult<T> = {
|
|
70
|
+
readonly ok: true;
|
|
71
|
+
readonly value: T;
|
|
72
|
+
} | {
|
|
73
|
+
readonly ok: false;
|
|
74
|
+
readonly error: RemoteFailure;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* 宿主交回来的字节载荷。
|
|
78
|
+
*
|
|
79
|
+
* **两代形状**:≤0.1.6 的宿主把字节编成 base64 字符串(宿主
|
|
80
|
+
* `readAll`/`readBytes` 返回 `data: string`),≥0.1.7 的宿主直接给
|
|
81
|
+
* `Uint8Array`(`packages/api/workspace-files/src/types.ts` 的
|
|
82
|
+
* `WorkspaceFileBytes.data`)。本插件支持两代,所以两种都认。
|
|
83
|
+
*/
|
|
84
|
+
export type RemoteBytes = Uint8Array | string;
|
|
47
85
|
/**
|
|
48
86
|
* 本插件用到的 `remote.workspaceFiles` 面。
|
|
49
87
|
*
|
|
50
88
|
* 与宿主 `ui-sidebar-documentpreview/src/client/rpc.ts` 的
|
|
51
89
|
* `WorkspaceFilesReadRemote` 同形:不传 `range` 就是整文件读取(上限由宿主
|
|
52
90
|
* `maxFileBytes` 决定),`baseFile` 用于把相对路径解析到基准文件目录。
|
|
91
|
+
*
|
|
92
|
+
* `readAll` 是 **≤0.1.6 那一代**的整文件读取法(宿主在 0.1.7 把它并进了
|
|
93
|
+
* `readBytes` 的 `options` 形态)。留着它是为了旧世代仍能整文件取字节:
|
|
94
|
+
* 那一代的 `readBytes` 收的是**字节窗口**而不是 `options`,拿它读整文件
|
|
95
|
+
* 只会读到 `maxBytes` 那么多。
|
|
53
96
|
*/
|
|
54
97
|
export interface WorkspaceFilesRemote {
|
|
55
98
|
readonly workspaceFiles: {
|
|
56
99
|
/**
|
|
57
|
-
*
|
|
100
|
+
* 读整段文件字节(≥0.1.7 那一代的形态)。
|
|
58
101
|
* @param sessionId - 决定工作区根的会话 id。
|
|
59
102
|
* @param path - 绝对路径,或相对该会话工作区根的路径。
|
|
60
103
|
* @param options - 可选的字节窗口与基准文件;本实现不传。
|
|
61
104
|
* @param signal - 取消信号。
|
|
62
|
-
* @returns
|
|
105
|
+
* @returns 结果:成功时 `value.data` 是字节,失败时 `error` 带原因码。
|
|
63
106
|
*/
|
|
64
107
|
readBytes(sessionId: string, path: string, options: {
|
|
65
108
|
readonly baseFile?: string;
|
|
@@ -67,9 +110,19 @@ export interface WorkspaceFilesRemote {
|
|
|
67
110
|
readonly offset?: number;
|
|
68
111
|
readonly length?: number;
|
|
69
112
|
};
|
|
70
|
-
}, signal?: AbortSignal): Promise<{
|
|
71
|
-
readonly data:
|
|
72
|
-
}
|
|
113
|
+
}, signal?: AbortSignal): Promise<RemoteResult<{
|
|
114
|
+
readonly data: RemoteBytes;
|
|
115
|
+
}>>;
|
|
116
|
+
/**
|
|
117
|
+
* 读整段文件字节(≤0.1.6 那一代的形态;≥0.1.7 已无此方法)。
|
|
118
|
+
* @param sessionId - 决定工作区根的会话 id。
|
|
119
|
+
* @param path - 绝对路径,或相对该会话工作区根的路径。
|
|
120
|
+
* @param signal - 取消信号。
|
|
121
|
+
* @returns 结果:成功时 `value.data` 是 base64 字符串,失败时带原因码。
|
|
122
|
+
*/
|
|
123
|
+
readAll?(sessionId: string, path: string, signal?: AbortSignal): Promise<RemoteResult<{
|
|
124
|
+
readonly data: RemoteBytes;
|
|
125
|
+
}>>;
|
|
73
126
|
};
|
|
74
127
|
}
|
|
75
128
|
declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video-slots.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/video-slots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,4EAA4E;AAC5E,MAAM,WAAW,2BAA2B;IAC1C,sBAAsB;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,oBAAoB;IACpB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,0CAA0C;IAC1C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7C,mBAAmB;IACnB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,WAAW,CAAA;IAC3C,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAA;IAC5B,cAAc;IACd,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,GAAG,UAAU,CAAA;IAC9D,mBAAmB;IACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,mCAAmC;AACnC,MAAM,WAAW,8BAA8B;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,2BAA2B,GAAG,MAAM,IAAI,CAAA;CAC9D;AAED
|
|
1
|
+
{"version":3,"file":"video-slots.d.ts","sourceRoot":"","sources":["../../../../src/client/minimax-code/video-slots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,4EAA4E;AAC5E,MAAM,WAAW,2BAA2B;IAC1C,sBAAsB;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,oBAAoB;IACpB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,0CAA0C;IAC1C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7C,mBAAmB;IACnB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,WAAW,CAAA;IAC3C,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAA;IAC5B,cAAc;IACd,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,GAAG,UAAU,CAAA;IAC9D,mBAAmB;IACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,mCAAmC;AACnC,MAAM,WAAW,8BAA8B;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,2BAA2B,GAAG,MAAM,IAAI,CAAA;CAC9D;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,eAAe;IACf,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,yCAAyC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IACtB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACxC;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAA;AAEzD;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,MAAM,CAAA;AAE7C;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,cAAc,EAAE;QACvB;;;;;;;WAOG;QACH,SAAS,CACP,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;YAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,EAChH,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC;YAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;SAAE,CAAC,CAAC,CAAA;QACxD;;;;;;WAMG;QACH,OAAO,CAAC,CACN,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC;YAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;SAAE,CAAC,CAAC,CAAA;KACzD,CAAA;CACF;AAED,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,OAAO;QACf;;;WAGG;QACH,4BAA4B,EAAE;YAAE,IAAI,EAAE,OAAO,CAAC;YAAC,KAAK,EAAE,SAAS,CAAA;SAAE,CAAA;KAClE;CACF"}
|
|
@@ -19,14 +19,20 @@
|
|
|
19
19
|
* - 行内 `code`
|
|
20
20
|
* - `**粗体**`
|
|
21
21
|
* - `###` 标题(最多三级)
|
|
22
|
+
* - 围栏代码块(三连及以上的反引号或波浪号:**不做语法高亮**,语言标签只当标题)
|
|
23
|
+
* - 数学公式:行内 `$…$` / `\(…\)`,块级 `$$…$$` / `\[…\]`,交给 KaTeX
|
|
22
24
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
25
|
+
* 表格与围栏代码块都是**后补**的:早先版本把它们当「超出契约」排除了,结果模型写出来的
|
|
26
|
+
* 管道符表格整块落进段落分支、原样上屏(用户直接看到一堆竖线),围栏代码块同样把三反
|
|
27
|
+
* 引号露在正文里。渲染它们的代价只是一次前瞻扫描,远小于它被读错造成的损失。
|
|
26
28
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* `dangerouslySetInnerHTML
|
|
29
|
+
* 数学走 KaTeX 而不是自己画:公式排版(分式、上下标、矩阵)不是几十行手写能覆盖的面。
|
|
30
|
+
* KaTeX 只输出 HTML 串(`.katex` 那棵 span/MathML 树),本文件把它经 `DOMParser` 转成
|
|
31
|
+
* React 元素,**不经过 `dangerouslySetInnerHTML`** —— 整份渲染结果因此仍然是「全是
|
|
32
|
+
* React 元素」,没有注入面。KaTeX 的 CSS 与字体由平台 `ui-primitives` 随页面引入
|
|
33
|
+
* (`katex.min.css`),本插件不打包样式,只负责出结构。
|
|
34
|
+
*
|
|
35
|
+
* 仍然刻意**不做**图片、链接、原始 HTML、脚注与语法高亮。
|
|
30
36
|
*
|
|
31
37
|
* @module @eddyskywalker/dsh-chatgpt-subscription/client/progress-updates/markdown-lite
|
|
32
38
|
*/
|
|
@@ -52,6 +58,13 @@ type Block = {
|
|
|
52
58
|
header: string[];
|
|
53
59
|
aligns: ColumnAlign[];
|
|
54
60
|
rows: string[][];
|
|
61
|
+
} | {
|
|
62
|
+
kind: 'code';
|
|
63
|
+
lang: string;
|
|
64
|
+
code: string;
|
|
65
|
+
} | {
|
|
66
|
+
kind: 'math';
|
|
67
|
+
tex: string;
|
|
55
68
|
};
|
|
56
69
|
/**
|
|
57
70
|
* 一行表格 → 单元格数组。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-lite.d.ts","sourceRoot":"","sources":["../../../../src/client/progress-updates/markdown-lite.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"markdown-lite.d.ts","sourceRoot":"","sources":["../../../../src/client/progress-updates/markdown-lite.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAGH,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAgIrD,wDAAwD;AACxD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AAErD,oBAAoB;AACpB,KAAK,KAAK,GACN;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAWjC;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAM/C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAQxD;AA4BD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,CAkInD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAgHlE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EAEV,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAWrE,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EAEtB,KAAK,0BAA0B,EAChC,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EAQL,KAAK,qBAAqB,EAC3B,MAAM,aAAa,CAAA;AAKpB,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,GAC/B,iBAAiB,GAAG,SAAS,CAc/B;AAED,OAAO,EAAE,gBAAgB,EAAuB,MAAM,mBAAmB,CAAA;AAKzE;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM,GAAG,SAAS,CAgCjG;AA4BD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM3E;AAED,qBAAa,kBAAmB,SAAQ,UAAU;IAS9C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAX1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;IAC9C;;;OAGG;IACH,OAAO,CAAC,4BAA4B,CAAQ;gBAGzB,KAAK,sBAA4B,EACjC,aAAa,yBAA+B,EAC5C,WAAW,CAAC,EAAE,0BAA0B,YAAA,EACxC,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;QAAC,WAAW,CAAC,EAAE,qBAAqB,CAAA;KAAO,EAC9F,WAAW,CAAC,EAAE,gBAAgB;IAMhC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe;IAI/C,mBAAmB,IAAI,SAAS;IAIhC,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS;IAInE,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB;;;;;;;;;;IAIzE,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;IAsB/D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAyCpG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAO/F,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,CAAC,WAAW,CAAC;YA0BpD,aAAa;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EAEV,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAWrE,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EAEtB,KAAK,0BAA0B,EAChC,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EAQL,KAAK,qBAAqB,EAC3B,MAAM,aAAa,CAAA;AAKpB,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,GAC/B,iBAAiB,GAAG,SAAS,CAc/B;AAED,OAAO,EAAE,gBAAgB,EAAuB,MAAM,mBAAmB,CAAA;AAKzE;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM,GAAG,SAAS,CAgCjG;AA4BD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM3E;AAED,qBAAa,kBAAmB,SAAQ,UAAU;IAS9C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAX1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;IAC9C;;;OAGG;IACH,OAAO,CAAC,4BAA4B,CAAQ;gBAGzB,KAAK,sBAA4B,EACjC,aAAa,yBAA+B,EAC5C,WAAW,CAAC,EAAE,0BAA0B,YAAA,EACxC,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;QAAC,WAAW,CAAC,EAAE,qBAAqB,CAAA;KAAO,EAC9F,WAAW,CAAC,EAAE,gBAAgB;IAMhC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe;IAI/C,mBAAmB,IAAI,SAAS;IAIhC,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS;IAInE,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB;;;;;;;;;;IAIzE,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;IAsB/D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAyCpG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAO/F,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,CAAC,WAAW,CAAC;YA0BpD,aAAa;CAiR7B"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { AccountPoolCore, type PoolAccountShape, type PoolData } from '../common/account-pool.ts';
|
|
2
|
+
import type { CredentialStore } from '../token-store.ts';
|
|
3
|
+
import { FileCredentialStore, type ClinePassCredentials } from './token-store.ts';
|
|
4
|
+
import type { AccountPoolStatusDto, AccountRotationStrategy } from '../../shared/account-pool-contracts.ts';
|
|
5
|
+
import type { ClinePassAccountSummaryDto } from '../../shared/cline-pass-contracts.ts';
|
|
6
|
+
/** One pooled Cline Pass key: the bearer key plus the display facts the card renders. */
|
|
7
|
+
export interface ClinePassPoolAccount extends PoolAccountShape<ClinePassCredentials> {
|
|
8
|
+
/** Model id this account last served, for the card's detail line. */
|
|
9
|
+
lastModelId?: string;
|
|
10
|
+
}
|
|
11
|
+
export type ClinePassPoolStatusDto = AccountPoolStatusDto;
|
|
12
|
+
/** Encrypted pool file this line owns. */
|
|
13
|
+
export declare function clinePassPoolPath(): string;
|
|
14
|
+
/** The credential name the standalone plugin reads when no key was pasted. */
|
|
15
|
+
export declare const CLINE_PASS_API_KEY_ENV = "CLINE_PASS_API_KEY";
|
|
16
|
+
/**
|
|
17
|
+
* Stable identity of one key.
|
|
18
|
+
*
|
|
19
|
+
* Cline hands the user a bare key and nothing else — no account id, no email —
|
|
20
|
+
* so the key's own digest is the only identity available. It is never written
|
|
21
|
+
* anywhere: it exists to tell two pasted keys apart inside the pool document,
|
|
22
|
+
* and it is not a credential and cannot be used as one.
|
|
23
|
+
*/
|
|
24
|
+
export declare function clinePassAccountKey(credentials: ClinePassCredentials): string;
|
|
25
|
+
/** Validate and normalize one whole pool document. */
|
|
26
|
+
export declare function parseClinePassPoolData(value: unknown): PoolData<ClinePassPoolAccount>;
|
|
27
|
+
export interface ClinePassAccountPoolOptions {
|
|
28
|
+
/** Pre-pool credential file the pool mirrors its primary account into. */
|
|
29
|
+
store?: FileCredentialStore;
|
|
30
|
+
/** Test seam; production builds the platform backend from the pool path. */
|
|
31
|
+
backend?: CredentialStore<PoolData<ClinePassPoolAccount>>;
|
|
32
|
+
maxAccounts?: number;
|
|
33
|
+
/** The line's current chat base URL, used when an account names none. */
|
|
34
|
+
baseURL?: () => string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Cline Pass's account pool.
|
|
38
|
+
*
|
|
39
|
+
* Two credential kinds share one pool: an OAuth session (WorkOS device sign-in,
|
|
40
|
+
* rotating refresh token, expiry) and a legacy static API key. The kernel's
|
|
41
|
+
* refresh hooks are wired for the first and are no-ops for the second.
|
|
42
|
+
*/
|
|
43
|
+
export declare class ClinePassAccountPool extends AccountPoolCore<ClinePassCredentials, ClinePassPoolAccount, ClinePassAccountSummaryDto> {
|
|
44
|
+
private readonly store;
|
|
45
|
+
constructor(options?: ClinePassAccountPoolOptions);
|
|
46
|
+
/**
|
|
47
|
+
* Pick the key for the next request, skipping accounts already tried.
|
|
48
|
+
*
|
|
49
|
+
* The credential carries its own base-URL override, so the account and the key
|
|
50
|
+
* are returned together.
|
|
51
|
+
*/
|
|
52
|
+
getEffectiveCredential(excludeIds?: ReadonlySet<string>, fetchFn?: typeof fetch): Promise<{
|
|
53
|
+
account: ClinePassPoolAccount;
|
|
54
|
+
credentials: ClinePassCredentials;
|
|
55
|
+
}>;
|
|
56
|
+
/** The pre-pool credential file this pool mirrors its primary account into. */
|
|
57
|
+
mirrorStore(): FileCredentialStore;
|
|
58
|
+
/** The rotation strategy as the settings card renders it. */
|
|
59
|
+
strategy(): Promise<AccountRotationStrategy>;
|
|
60
|
+
/** Remember which model an account last served, best-effort. */
|
|
61
|
+
recordModel(accountId: string, model: string): Promise<void>;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=account-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-pool.d.ts","sourceRoot":"","sources":["../../../../src/host/cline-pass/account-pool.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EAGf,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACd,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EACL,mBAAmB,EAMnB,KAAK,oBAAoB,EAC1B,MAAM,kBAAkB,CAAA;AAGzB,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAA;AAEtF,yFAAyF;AACzF,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB,CAAC,oBAAoB,CAAC;IAClF,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,CAAA;AAEzD,0CAA0C;AAC1C,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,8EAA8E;AAC9E,eAAO,MAAM,sBAAsB,uBAAuB,CAAA;AAQ1D;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,oBAAoB,GAAG,MAAM,CAE7E;AASD,sDAAsD;AACtD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAkCrF;AAED,MAAM,WAAW,2BAA2B;IAC1C,0EAA0E;IAC1E,KAAK,CAAC,EAAE,mBAAmB,CAAA;IAC3B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAA;IACzD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,MAAM,CAAA;CACvB;AAED;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,eAAe,CACvD,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,CAC3B;IACC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;gBAE/B,OAAO,GAAE,2BAAgC;IAoGrD;;;;;OAKG;IACG,sBAAsB,CAC1B,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAChC,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC;QAAE,OAAO,EAAE,oBAAoB,CAAC;QAAC,WAAW,EAAE,oBAAoB,CAAA;KAAE,CAAC;IAIhF,+EAA+E;IAC/E,WAAW,IAAI,mBAAmB;IAIlC,6DAA6D;IACvD,QAAQ,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAIlD,gEAAgE;IAC1D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOnE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Cline Pass LLM adapter: an OpenAI-compatible `chat/completions` stream
|
|
3
|
+
* with upstream pinning, per-account rotation, and pre-first-token failover.
|
|
4
|
+
*
|
|
5
|
+
* Transport and mapping live in `client.ts` / `mapper.ts`; account selection and
|
|
6
|
+
* probing live in `engine.ts`. This module owns the request loop: which account,
|
|
7
|
+
* which channel, and when an attempt is abandoned.
|
|
8
|
+
*
|
|
9
|
+
* @module dsh-chatgpt-subscription/cline-pass-adapter
|
|
10
|
+
*/
|
|
11
|
+
import { LlmAdapter, type GenerateOptions as HarnessGenerateOptions, type LlmModelInfo, type LlmProviderInfo, type LlmResolvedModelInfo, type PreparedAdapterCall, type ResolvedRetryPolicy, type StreamChunk } from '@deepseek-ai/dsh-llm';
|
|
12
|
+
import type { ClinePassEngine } from './engine.ts';
|
|
13
|
+
import type { ClinePassStore } from './store.ts';
|
|
14
|
+
import type { ClinePassModelSettingsStore } from './token-store.ts';
|
|
15
|
+
import type { ClinePassAccountPool } from './account-pool.ts';
|
|
16
|
+
import { type AttachmentImageReader } from '../common/request-images.ts';
|
|
17
|
+
export interface ClinePassAdapterOptions {
|
|
18
|
+
/** Durable attachment service, for request images. */
|
|
19
|
+
attachments?: AttachmentImageReader;
|
|
20
|
+
}
|
|
21
|
+
export declare class ClinePassAdapter extends LlmAdapter {
|
|
22
|
+
private readonly engine;
|
|
23
|
+
private readonly store;
|
|
24
|
+
private readonly modelSettings;
|
|
25
|
+
private readonly accountPool;
|
|
26
|
+
private readonly options;
|
|
27
|
+
private readonly gate;
|
|
28
|
+
constructor(engine: ClinePassEngine, store: ClinePassStore, modelSettings: ClinePassModelSettingsStore, accountPool: ClinePassAccountPool, options?: ClinePassAdapterOptions);
|
|
29
|
+
providerInfo(provider: string): LlmProviderInfo;
|
|
30
|
+
providerRetryPolicy(): ResolvedRetryPolicy;
|
|
31
|
+
imageRequestPricing(): undefined;
|
|
32
|
+
private settings;
|
|
33
|
+
/**
|
|
34
|
+
* The ids the route advertises: the shipped table, models a live scan adopted,
|
|
35
|
+
* and (when asked) the gateway's own catalog — narrowed by the user's selection
|
|
36
|
+
* and hidden list.
|
|
37
|
+
*/
|
|
38
|
+
private availableModelIds;
|
|
39
|
+
/** One model's resolved descriptor, from the shipped catalog plus live data. */
|
|
40
|
+
private modelInfo;
|
|
41
|
+
listModels(provider?: string): Promise<readonly LlmModelInfo[]>;
|
|
42
|
+
resolveModel(provider: string, modelId: string, signal?: AbortSignal): Promise<LlmResolvedModelInfo>;
|
|
43
|
+
prepareCall(provider: string, model: string, signal?: AbortSignal): Promise<PreparedAdapterCall>;
|
|
44
|
+
stream(options: HarnessGenerateOptions): AsyncIterable<StreamChunk>;
|
|
45
|
+
private requestStream;
|
|
46
|
+
/** Park an account that refused a request, for the reason it refused. */
|
|
47
|
+
private standDown;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/host/cline-pass/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,UAAU,EAIV,KAAK,eAAe,IAAI,sBAAsB,EAC9C,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAEjB,MAAM,sBAAsB,CAAA;AAoB7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,KAAK,EAA0B,2BAA2B,EAAE,MAAM,kBAAkB,CAAA;AAC3F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAQ7D,OAAO,EAA4C,KAAK,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAgClH,MAAM,WAAW,uBAAuB;IACtC,sDAAsD;IACtD,WAAW,CAAC,EAAE,qBAAqB,CAAA;CACpC;AAED,qBAAa,gBAAiB,SAAQ,UAAU;IAI5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;gBAG1B,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,2BAA2B,EAC1C,WAAW,EAAE,oBAAoB,EACjC,OAAO,GAAE,uBAA4B;IAKxD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe;IAI/C,mBAAmB,IAAI,mBAAmB;IAI1C,mBAAmB,IAAI,SAAS;IAIhC,OAAO,CAAC,QAAQ;IAIhB;;;;OAIG;YACW,iBAAiB;IAW/B,gFAAgF;YAClE,SAAS;IAyBjB,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;IAgB/D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAoBpG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAO/F,MAAM,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAAC,WAAW,CAAC;YAW3D,aAAa;IA6P5B,yEAAyE;YAC3D,SAAS;CAOxB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge the shipped catalog, the live scan and the user's per-model override into
|
|
3
|
+
* the descriptor the harness validates.
|
|
4
|
+
*
|
|
5
|
+
* Context window and output cap are provider facts, not preferences: the harness
|
|
6
|
+
* sizes its prompt budget against `context.contextWindow`, so an understated
|
|
7
|
+
* window silently truncates history.
|
|
8
|
+
*
|
|
9
|
+
* @module dsh-chatgpt-subscription/cline-pass-catalog
|
|
10
|
+
*/
|
|
11
|
+
import { type ClinePassDiscoveredModel, type ClinePassModelInfo } from './types.ts';
|
|
12
|
+
import type { ClinePassCatalogModel } from './token-store.ts';
|
|
13
|
+
/**
|
|
14
|
+
* The output budget to advertise for one model.
|
|
15
|
+
*
|
|
16
|
+
* `defaultMaxTokens` is what a request asks for, not what the model can emit, and
|
|
17
|
+
* the harness spends it twice: it fills a request's `max_tokens` from it and
|
|
18
|
+
* reserves the same number as completion room before deciding to compact. So the
|
|
19
|
+
* published output ceiling clamps the configured budget rather than becoming it,
|
|
20
|
+
* and a budget is never taken past half the window.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveOutputBudget(budget: number | undefined, ceiling: number | undefined, contextWindow: number): number | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the metadata one model is advertised with.
|
|
25
|
+
*
|
|
26
|
+
* Precedence per field: the user's override, then the shipped table, then what
|
|
27
|
+
* the last official scan published, then the entry the last gateway catalog sync
|
|
28
|
+
* stored, then the route-wide fallback.
|
|
29
|
+
*
|
|
30
|
+
* The live scan sits below the shipped table because the shipped entry is
|
|
31
|
+
* curated: a community catalog reports extra modalities and underscore-free
|
|
32
|
+
* spellings the seam or the provider's label does not want. It exists to cover
|
|
33
|
+
* what the table cannot know — a model published after this release.
|
|
34
|
+
*/
|
|
35
|
+
export declare function resolveModelInfo(model: string, options: {
|
|
36
|
+
/** Display name for the bare id. */
|
|
37
|
+
displayName: string;
|
|
38
|
+
/** Entries persisted by the last catalog sync. */
|
|
39
|
+
synced: readonly ClinePassCatalogModel[];
|
|
40
|
+
/** What the last official scan published for this id. */
|
|
41
|
+
discovered?: ClinePassDiscoveredModel;
|
|
42
|
+
/** Stored context-window override. */
|
|
43
|
+
contextWindowOverride?: number;
|
|
44
|
+
/** Route-wide fallback window. */
|
|
45
|
+
defaultContextWindow?: number;
|
|
46
|
+
/** Route-wide output budget. */
|
|
47
|
+
defaultMaxTokens?: number;
|
|
48
|
+
}): ClinePassModelInfo;
|
|
49
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../../src/host/cline-pass/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAKL,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAsB7D;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOtI;AAOD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IACP,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,kDAAkD;IAClD,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAA;IACxC,yDAAyD;IACzD,UAAU,CAAC,EAAE,wBAAwB,CAAA;IACrC,sCAAsC;IACtC,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,kCAAkC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,gCAAgC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,GACA,kBAAkB,CAsCpB"}
|