@jingyi0605/codingns4dsh 0.2.1-beta.10 → 0.2.1-beta.11

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.
Files changed (145) hide show
  1. package/README.en.md +3 -3
  2. package/README.md +6 -4
  3. package/data/build/dist/client/bundle.js +8958 -7380
  4. package/data/build/dist/client/bundle.js.map +1 -1
  5. package/data/build/dist/client/cli-slots.d.ts +11 -2
  6. package/data/build/dist/client/cli-slots.d.ts.map +1 -1
  7. package/data/build/dist/client/cli-slots.js +67 -16
  8. package/data/build/dist/client/cli-slots.js.map +1 -1
  9. package/data/build/dist/client/client.assistant-configuration-view.js +8 -7
  10. package/data/build/dist/client/client.assistant-configuration-view.js.map +1 -1
  11. package/data/build/dist/client/client.moss-voice-output.js +581 -0
  12. package/data/build/dist/client/client.moss-voice-output.js.map +1 -0
  13. package/data/build/dist/client/client.native-workspace-store.js +1 -1
  14. package/data/build/dist/client/client.native-workspace-store.js.map +1 -1
  15. package/data/build/dist/client/client.primitives-adapter.js.map +1 -1
  16. package/data/build/dist/client/client.react-dom.js +0 -570
  17. package/data/build/dist/client/client.react-dom.js.map +1 -1
  18. package/data/build/dist/client/client.session-translation.js +97 -2
  19. package/data/build/dist/client/client.session-translation.js.map +1 -1
  20. package/data/build/dist/client/client.transport.js +57 -11
  21. package/data/build/dist/client/client.transport.js.map +1 -1
  22. package/data/build/dist/client/desktop-assistant.js +57 -11
  23. package/data/build/dist/client/features/cli-adapters.d.ts.map +1 -1
  24. package/data/build/dist/client/features/cli-adapters.js +3 -1
  25. package/data/build/dist/client/features/cli-adapters.js.map +1 -1
  26. package/data/build/dist/client/features/session-translation.d.ts.map +1 -1
  27. package/data/build/dist/client/features/session-translation.js +43 -48
  28. package/data/build/dist/client/features/session-translation.js.map +1 -1
  29. package/data/build/dist/client/locales/panels.d.ts.map +1 -1
  30. package/data/build/dist/client/locales/panels.js +57 -11
  31. package/data/build/dist/client/locales/panels.js.map +1 -1
  32. package/data/build/dist/client/native-model-translation-menu.d.ts +6 -0
  33. package/data/build/dist/client/native-model-translation-menu.d.ts.map +1 -0
  34. package/data/build/dist/client/native-model-translation-menu.js +57 -0
  35. package/data/build/dist/client/native-model-translation-menu.js.map +1 -0
  36. package/data/build/dist/client/native-translation-default.d.ts +6 -0
  37. package/data/build/dist/client/native-translation-default.d.ts.map +1 -0
  38. package/data/build/dist/client/native-translation-default.js +30 -0
  39. package/data/build/dist/client/native-translation-default.js.map +1 -0
  40. package/data/build/dist/client/session-translation-chat.d.ts +15 -0
  41. package/data/build/dist/client/session-translation-chat.d.ts.map +1 -1
  42. package/data/build/dist/client/session-translation-chat.js +109 -41
  43. package/data/build/dist/client/session-translation-chat.js.map +1 -1
  44. package/data/build/dist/client/session-translation-interactions.d.ts +31 -0
  45. package/data/build/dist/client/session-translation-interactions.d.ts.map +1 -0
  46. package/data/build/dist/client/session-translation-interactions.js +158 -0
  47. package/data/build/dist/client/session-translation-interactions.js.map +1 -0
  48. package/data/build/dist/client/session-translation-model-pool.d.ts +16 -0
  49. package/data/build/dist/client/session-translation-model-pool.d.ts.map +1 -0
  50. package/data/build/dist/client/session-translation-model-pool.js +246 -0
  51. package/data/build/dist/client/session-translation-model-pool.js.map +1 -0
  52. package/data/build/dist/client/session-translation-pending-dom.d.ts +8 -0
  53. package/data/build/dist/client/session-translation-pending-dom.d.ts.map +1 -0
  54. package/data/build/dist/client/session-translation-pending-dom.js +58 -0
  55. package/data/build/dist/client/session-translation-pending-dom.js.map +1 -0
  56. package/data/build/dist/dsh-capabilities/client/interaction-presentation-adapter.d.ts +30 -0
  57. package/data/build/dist/dsh-capabilities/client/interaction-presentation-adapter.d.ts.map +1 -0
  58. package/data/build/dist/dsh-capabilities/client/interaction-presentation-adapter.js +102 -0
  59. package/data/build/dist/dsh-capabilities/client/interaction-presentation-adapter.js.map +1 -0
  60. package/data/build/dist/dsh-capabilities/client/interaction-text-dom.d.ts +12 -0
  61. package/data/build/dist/dsh-capabilities/client/interaction-text-dom.d.ts.map +1 -0
  62. package/data/build/dist/dsh-capabilities/client/interaction-text-dom.js +181 -0
  63. package/data/build/dist/dsh-capabilities/client/interaction-text-dom.js.map +1 -0
  64. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts +1 -0
  65. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts.map +1 -1
  66. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js +1 -0
  67. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js.map +1 -1
  68. package/data/build/dist/dsh-capabilities/client/question-history-adapter.d.ts +20 -0
  69. package/data/build/dist/dsh-capabilities/client/question-history-adapter.d.ts.map +1 -0
  70. package/data/build/dist/dsh-capabilities/client/question-history-adapter.js +65 -0
  71. package/data/build/dist/dsh-capabilities/client/question-history-adapter.js.map +1 -0
  72. package/data/build/dist/dsh-capabilities/client/slot-presentation-mirror.d.ts +30 -0
  73. package/data/build/dist/dsh-capabilities/client/slot-presentation-mirror.d.ts.map +1 -0
  74. package/data/build/dist/dsh-capabilities/client/slot-presentation-mirror.js +62 -0
  75. package/data/build/dist/dsh-capabilities/client/slot-presentation-mirror.js.map +1 -0
  76. package/data/build/dist/dsh-capabilities/matrix.d.ts.map +1 -1
  77. package/data/build/dist/dsh-capabilities/matrix.js +1 -0
  78. package/data/build/dist/dsh-capabilities/matrix.js.map +1 -1
  79. package/data/build/dist/dsh-capabilities/routes.d.ts.map +1 -1
  80. package/data/build/dist/dsh-capabilities/routes.js +3 -0
  81. package/data/build/dist/dsh-capabilities/routes.js.map +1 -1
  82. package/data/build/dist/dsh-capabilities/types.d.ts +1 -1
  83. package/data/build/dist/dsh-capabilities/types.d.ts.map +1 -1
  84. package/data/build/dist/dsh-capabilities/types.js.map +1 -1
  85. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
  86. package/data/build/dist/host/cli-adapters/dsh-message-projector.js +17 -8
  87. package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
  88. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  89. package/data/build/dist/host/cli-adapters/feature.js +252 -39
  90. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  91. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js +2 -2
  92. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js.map +1 -1
  93. package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
  94. package/data/build/dist/host/cli-adapters/registry.js +2 -0
  95. package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
  96. package/data/build/dist/host/features/interaction-translation.d.ts +9 -0
  97. package/data/build/dist/host/features/interaction-translation.d.ts.map +1 -0
  98. package/data/build/dist/host/features/interaction-translation.js +168 -0
  99. package/data/build/dist/host/features/interaction-translation.js.map +1 -0
  100. package/data/build/dist/host/features/session-translation-protection.d.ts +11 -0
  101. package/data/build/dist/host/features/session-translation-protection.d.ts.map +1 -0
  102. package/data/build/dist/host/features/session-translation-protection.js +165 -0
  103. package/data/build/dist/host/features/session-translation-protection.js.map +1 -0
  104. package/data/build/dist/host/features/session-translation-runtime.d.ts +16 -0
  105. package/data/build/dist/host/features/session-translation-runtime.d.ts.map +1 -0
  106. package/data/build/dist/host/features/session-translation-runtime.js +85 -0
  107. package/data/build/dist/host/features/session-translation-runtime.js.map +1 -0
  108. package/data/build/dist/host/features/session-translation-service.d.ts +10 -3
  109. package/data/build/dist/host/features/session-translation-service.d.ts.map +1 -1
  110. package/data/build/dist/host/features/session-translation-service.js +159 -197
  111. package/data/build/dist/host/features/session-translation-service.js.map +1 -1
  112. package/data/build/dist/host/features/session-translation.js +1 -1
  113. package/data/build/dist/host/features/session-translation.js.map +1 -1
  114. package/data/build/dist/host/native-session-bridge.js +2 -2
  115. package/data/build/dist/host/native-session-bridge.js.map +1 -1
  116. package/data/build/dist/host/settings.d.ts.map +1 -1
  117. package/data/build/dist/host/settings.js +6 -2
  118. package/data/build/dist/host/settings.js.map +1 -1
  119. package/data/build/dist/shared/contracts/interaction-presentation.d.ts +32 -0
  120. package/data/build/dist/shared/contracts/interaction-presentation.d.ts.map +1 -0
  121. package/data/build/dist/shared/contracts/interaction-presentation.js +2 -0
  122. package/data/build/dist/shared/contracts/interaction-presentation.js.map +1 -0
  123. package/data/build/dist/shared/contracts/interaction-translation.d.ts +53 -0
  124. package/data/build/dist/shared/contracts/interaction-translation.d.ts.map +1 -0
  125. package/data/build/dist/shared/contracts/interaction-translation.js +44 -0
  126. package/data/build/dist/shared/contracts/interaction-translation.js.map +1 -0
  127. package/data/build/dist/shared/contracts/session-translation.d.ts +62 -7
  128. package/data/build/dist/shared/contracts/session-translation.d.ts.map +1 -1
  129. package/data/build/dist/shared/contracts/session-translation.js +122 -2
  130. package/data/build/dist/shared/contracts/session-translation.js.map +1 -1
  131. package/data/build/dist/shared/contracts/version.d.ts +1 -1
  132. package/data/build/dist/shared/contracts/version.js +1 -1
  133. package/data/build/dist/shared/index.d.ts +1 -1
  134. package/data/build/dist/shared/index.d.ts.map +1 -1
  135. package/data/build/dist/shared/index.js +1 -1
  136. package/data/build/dist/shared/index.js.map +1 -1
  137. package/data/build/dist/shared/translation-indicator.d.ts +26 -0
  138. package/data/build/dist/shared/translation-indicator.d.ts.map +1 -0
  139. package/data/build/dist/shared/translation-indicator.js +29 -0
  140. package/data/build/dist/shared/translation-indicator.js.map +1 -0
  141. package/package.json +1 -1
  142. package/profile/README.md +2 -2
  143. package/profile/package.json +2 -2
  144. package/profile/version.json +1 -1
  145. package/version.json +1 -1
@@ -0,0 +1,165 @@
1
+ import { fromMarkdown } from 'mdast-util-from-markdown';
2
+ const voidElements = new Set('area base br col embed hr img input link meta param source track wbr'.split(' '));
3
+ /** Numbers, dates, and numeric expressions have no prose to translate. */
4
+ export function isLanguageNeutralText(value) {
5
+ return /\p{N}/u.test(value) && /^[\p{N}\p{P}\p{S}\s]+$/u.test(value);
6
+ }
7
+ /** Keep source slices locally; only placeholders and prose reach the translation model. */
8
+ export function protectText(value) {
9
+ let ranges = [];
10
+ const blocks = [];
11
+ const visit = (node) => {
12
+ if (node.type === 'code' || node.type === 'inlineCode') {
13
+ const start = node.position?.start.offset;
14
+ const end = node.position?.end.offset;
15
+ if (start !== undefined && end !== undefined) {
16
+ ranges.push({ start, end });
17
+ if (node.type === 'code')
18
+ blocks.push({ start, end });
19
+ }
20
+ }
21
+ else if ('children' in node) {
22
+ for (const child of node.children)
23
+ visit(child);
24
+ }
25
+ };
26
+ visit(fromMarkdown(value));
27
+ // JSON strings may contain backticks; their enclosing document owns those spans.
28
+ ranges = mergeRanges([...ranges, ...collectInGaps(value, blocks, jsonRanges)]);
29
+ let markupSource = '';
30
+ let cursor = 0;
31
+ for (const range of ranges) {
32
+ // Keep offsets while hiding tags inside code. An outer element can still enclose code.
33
+ markupSource += value.slice(cursor, range.start) + value.slice(range.start, range.end).replace(/[^\r\n]/g, ' ');
34
+ cursor = range.end;
35
+ }
36
+ markupSource += value.slice(cursor);
37
+ ranges = mergeRanges([...ranges, ...markupRanges(markupSource)]);
38
+ ranges = mergeRanges([...ranges, ...collectInGaps(value, ranges, literalRanges)]);
39
+ const values = [];
40
+ let text = '';
41
+ cursor = 0;
42
+ for (const range of ranges) {
43
+ text += value.slice(cursor, range.start) + `@@CODINGNS_TRANSLATION_${values.length}@@`;
44
+ values.push(value.slice(range.start, range.end));
45
+ cursor = range.end;
46
+ }
47
+ return { text: text + value.slice(cursor), values };
48
+ }
49
+ function collectInGaps(value, ranges, collect) {
50
+ const additions = [];
51
+ let cursor = 0;
52
+ for (const range of [...ranges, { start: value.length, end: value.length }]) {
53
+ for (const item of collect(value.slice(cursor, range.start))) {
54
+ additions.push({ start: cursor + item.start, end: cursor + item.end });
55
+ }
56
+ cursor = range.end;
57
+ }
58
+ return additions;
59
+ }
60
+ function mergeRanges(ranges) {
61
+ const merged = [];
62
+ for (const range of ranges.sort((left, right) => left.start - right.start || right.end - left.end)) {
63
+ const last = merged.at(-1);
64
+ if (last === undefined || range.start >= last.end)
65
+ merged.push(range);
66
+ else if (range.end > last.end)
67
+ merged[merged.length - 1] = { start: last.start, end: range.end };
68
+ }
69
+ return merged;
70
+ }
71
+ /** Match whole paired elements, including their text, without consuming adjacent prose. */
72
+ function markupRanges(value) {
73
+ const ranges = [];
74
+ const stack = [];
75
+ const tags = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<!DOCTYPE(?:[^>"']|"[^"]*"|'[^']*')*>|<\/?([\p{L}_][\p{L}\p{N}_:.-]*)(?=[\s/>])(?:[^<>"']|"[^"]*"|'[^']*')*>/giu;
76
+ for (const match of value.matchAll(tags)) {
77
+ const tag = match[0];
78
+ const name = match[1]?.toLowerCase();
79
+ const end = match.index + tag.length;
80
+ ranges.push({ start: match.index, end });
81
+ if (name === undefined)
82
+ continue;
83
+ if (tag.startsWith('</')) {
84
+ let opening = stack.length - 1;
85
+ while (opening >= 0 && stack[opening].name !== name)
86
+ opening--;
87
+ if (opening >= 0) {
88
+ ranges.push({ start: stack[opening].start, end });
89
+ stack.length = opening;
90
+ }
91
+ }
92
+ else if (!voidElements.has(name) && !tag.endsWith('/>')) {
93
+ stack.push({ name, start: match.index });
94
+ }
95
+ }
96
+ return ranges;
97
+ }
98
+ /** Only valid JSON objects/arrays qualify; ordinary braces and Markdown links remain prose. */
99
+ function jsonRanges(value) {
100
+ const ranges = [];
101
+ let start = -1;
102
+ let quoted = false;
103
+ const stack = [];
104
+ for (let index = 0; index < value.length; index++) {
105
+ const character = value[index];
106
+ if (start < 0) {
107
+ if (character !== '{' && character !== '[')
108
+ continue;
109
+ start = index;
110
+ }
111
+ if (quoted) {
112
+ if (character === '\\')
113
+ index++;
114
+ else if (character === '"')
115
+ quoted = false;
116
+ }
117
+ else if (character === '"')
118
+ quoted = true;
119
+ else if (character === '{' || character === '[')
120
+ stack.push(character);
121
+ else if (character === '}' || character === ']') {
122
+ const opening = stack.pop();
123
+ if ((character === '}' ? '{' : '[') !== opening)
124
+ stack.length = 0;
125
+ if (stack.length === 0) {
126
+ try {
127
+ JSON.parse(value.slice(start, index + 1));
128
+ ranges.push({ start, end: index + 1 });
129
+ }
130
+ catch { /* An invalid candidate remains translatable text. */ }
131
+ start = -1;
132
+ }
133
+ }
134
+ }
135
+ return ranges;
136
+ }
137
+ function literalRanges(value) {
138
+ const ranges = [];
139
+ const literals = /@@CODINGNS_TRANSLATION_\d+@@|https?:\/\/[^\s)]+|(?:^|\s)(?:[~/][^\s]+|[A-Za-z]:\\[^\s]+)(?=\s|$)|(?:^|\n)[ \t]*(?:[$>#]\s+|(?:npm|pnpm|yarn|bun|git|node|python|python3|cargo|docker|kubectl|curl|ssh|chmod|chown|mkdir|rmdir|rm|cp|mv|ls|cat|echo|export|make)\s+)[^\n]+/gimu;
140
+ for (const match of value.matchAll(literals)) {
141
+ const leadingSpace = match[0].length - match[0].trimStart().length;
142
+ ranges.push({ start: match.index + leadingSpace, end: match.index + match[0].length });
143
+ }
144
+ return ranges;
145
+ }
146
+ export function stripPlaceholders(value) {
147
+ return value.replace(/@@CODINGNS_TRANSLATION_\d+@@/gu, ' ');
148
+ }
149
+ /** Missing, duplicated, or unknown markers invalidate the response instead of corrupting code. */
150
+ export function restoreText(value, values) {
151
+ const seen = new Set();
152
+ const restored = value.replace(/@@CODINGNS_TRANSLATION_(\d+)@@/gu, (match, index) => {
153
+ const position = Number(index);
154
+ const original = values[position];
155
+ if (original === undefined || seen.has(position) || match !== `@@CODINGNS_TRANSLATION_${position}@@`) {
156
+ throw new Error('translation changed protected text placeholders');
157
+ }
158
+ seen.add(position);
159
+ return original;
160
+ });
161
+ if (seen.size !== values.length)
162
+ throw new Error('translation omitted protected text placeholders');
163
+ return restored;
164
+ }
165
+ //# sourceMappingURL=session-translation-protection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-translation-protection.js","sourceRoot":"","sources":["../../../../../src/host/features/session-translation-protection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { SessionTranslationFailure } from '../../shared/contracts/session-translation.js';
2
+ /** Only known transient failures qualify for an automatic retry. */
3
+ export declare function translationFailure(error: unknown, signal?: AbortSignal): SessionTranslationFailure;
4
+ /** Providers may ignore cancellation while resolving metadata or streaming. */
5
+ export declare function withTranslationAbort<T>(operation: () => Promise<T>, signal: AbortSignal): Promise<T>;
6
+ export declare function translationDeadline(milliseconds: number, parent: AbortSignal): {
7
+ signal: AbortSignal;
8
+ dispose: () => void;
9
+ };
10
+ export declare function translationDelay(milliseconds: number, signal: AbortSignal): Promise<void>;
11
+ /** Start work on the next free slot; a slow field cannot block an idle slot. */
12
+ export declare function createTranslationQueue(concurrency: number): {
13
+ concurrency: number;
14
+ run<T>(operation: () => Promise<T>, signal: AbortSignal): Promise<T>;
15
+ };
16
+ //# sourceMappingURL=session-translation-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-translation-runtime.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/session-translation-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAA;AAE9F,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,yBAAyB,CAalG;AAED,+EAA+E;AAC/E,wBAAsB,oBAAoB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAS1G;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;;;EAI5E;AAED,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/F;AAED,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM;;QAMlD,CAAC,aAAa,MAAM,OAAO,CAAC,CAAC,CAAC,UAAU,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;EAmBvE"}
@@ -0,0 +1,85 @@
1
+ /** Only known transient failures qualify for an automatic retry. */
2
+ export function translationFailure(error, signal) {
3
+ const cause = signal?.aborted ? signal.reason : error;
4
+ const value = cause;
5
+ const message = [value?.name, value?.message ?? String(cause), value?.code, value?.cause?.code].join(' ');
6
+ const status = value?.status ?? value?.statusCode;
7
+ if (/timeout|timed out|ETIMEDOUT/iu.test(message))
8
+ return { code: 'timeout', retryable: true };
9
+ if (signal?.aborted || value?.name === 'AbortError')
10
+ return { code: 'cancelled', retryable: false };
11
+ if (status === 429 || /\b429\b|rate.?limit/iu.test(message))
12
+ return { code: 'rate-limit', retryable: true };
13
+ if (status !== undefined && status >= 500 && status < 600 || /\b50[0234]\b|service unavailable|overloaded/iu.test(message))
14
+ return { code: 'unavailable', retryable: true };
15
+ if (/ECONNRESET|ECONNREFUSED|EAI_AGAIN|ENETUNREACH|EPIPE|fetch failed|network|connection (?:lost|closed|reset)/iu.test(message))
16
+ return { code: 'network', retryable: true };
17
+ if (/unusable translation|translation.*placeholders/iu.test(message))
18
+ return { code: 'invalid-response', retryable: false };
19
+ if (status === 400 || status === 401 || status === 403 || status === 404 || /\b40[0134]\b|unauthori[sz]ed|invalid api key|model not found|unsupported/iu.test(message))
20
+ return { code: 'configuration', retryable: false };
21
+ return { code: 'provider', retryable: false };
22
+ }
23
+ /** Providers may ignore cancellation while resolving metadata or streaming. */
24
+ export async function withTranslationAbort(operation, signal) {
25
+ signal.throwIfAborted();
26
+ let onAbort = () => undefined;
27
+ const aborted = new Promise((_resolve, reject) => {
28
+ onAbort = () => reject(signal.reason);
29
+ signal.addEventListener('abort', onAbort, { once: true });
30
+ });
31
+ try {
32
+ return await Promise.race([operation(), aborted]);
33
+ }
34
+ finally {
35
+ signal.removeEventListener('abort', onAbort);
36
+ }
37
+ }
38
+ export function translationDeadline(milliseconds, parent) {
39
+ const controller = new AbortController();
40
+ const timer = setTimeout(() => controller.abort(new DOMException('Translation deadline exceeded', 'TimeoutError')), milliseconds);
41
+ return { signal: AbortSignal.any([parent, controller.signal]), dispose: () => clearTimeout(timer) };
42
+ }
43
+ export async function translationDelay(milliseconds, signal) {
44
+ let timer;
45
+ try {
46
+ await withTranslationAbort(() => new Promise(resolve => { timer = setTimeout(resolve, milliseconds); }), signal);
47
+ }
48
+ finally {
49
+ if (timer !== undefined)
50
+ clearTimeout(timer);
51
+ }
52
+ }
53
+ /** Start work on the next free slot; a slow field cannot block an idle slot. */
54
+ export function createTranslationQueue(concurrency) {
55
+ let active = 0;
56
+ const pending = [];
57
+ const drain = () => { while (active < concurrency && pending.length > 0)
58
+ pending.shift()(); };
59
+ return {
60
+ concurrency,
61
+ run(operation, signal) {
62
+ return new Promise((resolve, reject) => {
63
+ const cancel = () => {
64
+ const index = pending.indexOf(start);
65
+ if (index >= 0)
66
+ pending.splice(index, 1);
67
+ reject(signal.reason);
68
+ };
69
+ const start = () => {
70
+ signal.removeEventListener('abort', cancel);
71
+ active++;
72
+ void withTranslationAbort(operation, signal).then(resolve, reject).finally(() => { active--; drain(); });
73
+ };
74
+ if (signal.aborted) {
75
+ reject(signal.reason);
76
+ return;
77
+ }
78
+ signal.addEventListener('abort', cancel, { once: true });
79
+ pending.push(start);
80
+ drain();
81
+ });
82
+ },
83
+ };
84
+ }
85
+ //# sourceMappingURL=session-translation-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-translation-runtime.js","sourceRoot":"","sources":["../../../../../src/host/features/session-translation-runtime.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,17 @@
1
1
  import type { AssistantChatCatalog } from '../../shared/contracts/assistant.js';
2
- import type { SessionTranslationLanguage, SessionTranslationModel, SessionTranslationOutputKind, SessionTranslationRecord, SessionTranslationSettings } from '../../shared/contracts/session-translation.js';
2
+ import type { SessionTranslationLanguage, SessionTranslationModel, SessionTranslationOutputKind, SessionTranslationRecord, SessionTranslationSettings, SessionTranslationFailure, SessionTranslationMetrics } from '../../shared/contracts/session-translation.js';
3
3
  export interface SessionTranslationService {
4
4
  readonly enabled: boolean;
5
+ /** Changes with settings and the default model, invalidating structured display translations. */
6
+ readonly cacheKey?: string;
5
7
  /** 当前输入翻译的目标语言;旧测试替身未实现时由调用方回退为英语。 */
6
- readonly inputLanguage?: Exclude<SessionTranslationLanguage, 'zh'>;
8
+ readonly inputLanguage?: SessionTranslationLanguage;
7
9
  /** 当前输出翻译的目标语言;旧测试替身未实现时由调用方回退为中文。 */
8
10
  readonly outputLanguage?: SessionTranslationLanguage;
11
+ /** DSH 原生会话的总开关;旧测试替身未实现时按关闭处理。 */
12
+ readonly nativeEnabled?: boolean;
13
+ /** 是否在界面同时保留原文与译文;旧测试替身未实现时按关闭处理。 */
14
+ readonly bilingual?: boolean;
9
15
  catalog(): Promise<AssistantChatCatalog>;
10
16
  shouldTranslate(adapterId: string, kind: SessionTranslationOutputKind, sessionEnabled?: boolean): boolean;
11
17
  activate(): void;
@@ -13,12 +19,13 @@ export interface SessionTranslationService {
13
19
  configure(settings: SessionTranslationSettings | undefined): void;
14
20
  translateInput(adapterId: string, text: string, signal?: AbortSignal, sessionEnabled?: boolean): Promise<string>;
15
21
  /** 输入翻译的可审计结果;旧调用方仍可使用 translateInput。 */
16
- translateInputDetailed?(adapterId: string, text: string, signal?: AbortSignal, sessionEnabled?: boolean): Promise<{
22
+ translateInputDetailed?(adapterId: string, text: string, signal?: AbortSignal, sessionEnabled?: boolean): Promise<SessionTranslationMetrics & {
17
23
  readonly translated: string;
18
24
  readonly sourceLanguage?: SessionTranslationLanguage;
19
25
  readonly alreadyTargetLanguage?: boolean;
20
26
  readonly model?: SessionTranslationModel;
21
27
  readonly failed?: boolean;
28
+ readonly failure?: SessionTranslationFailure;
22
29
  }>;
23
30
  translateOutput(adapterId: string, kind: SessionTranslationOutputKind, text: string, signal?: AbortSignal, sessionEnabled?: boolean): Promise<SessionTranslationRecord | null>;
24
31
  dispose(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"session-translation-service.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/session-translation-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAI/E,OAAO,KAAK,EACV,0BAA0B,EAC1B,uBAAuB,EACvB,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,+CAA+C,CAAA;AAmBtD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,sCAAsC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAA;IAClE,sCAAsC;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,0BAA0B,CAAA;IACpD,OAAO,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACxC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IACzG,QAAQ,IAAI,IAAI,CAAA;IAChB,UAAU,IAAI,IAAI,CAAA;IAClB,SAAS,CAAC,QAAQ,EAAE,0BAA0B,GAAG,SAAS,GAAG,IAAI,CAAA;IACjE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAChH,0CAA0C;IAC1C,sBAAsB,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;QAChH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;QAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,0BAA0B,CAAA;QACpD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAA;QACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,uBAAuB,CAAA;QACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAC1B,CAAC,CAAA;IACF,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAA;IAC9K,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS,CAkOvH"}
1
+ {"version":3,"file":"session-translation-service.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/session-translation-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAM/E,OAAO,KAAK,EACV,0BAA0B,EAC1B,uBAAuB,EACvB,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EAC1B,MAAM,+CAA+C,CAAA;AAqBtD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,iGAAiG;IACjG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,sCAAsC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,0BAA0B,CAAA;IACnD,sCAAsC;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,0BAA0B,CAAA;IACpD,mCAAmC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,qCAAqC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,OAAO,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACxC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IACzG,QAAQ,IAAI,IAAI,CAAA;IAChB,UAAU,IAAI,IAAI,CAAA;IAClB,SAAS,CAAC,QAAQ,EAAE,0BAA0B,GAAG,SAAS,GAAG,IAAI,CAAA;IACjE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAChH,0CAA0C;IAC1C,sBAAsB,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,yBAAyB,GAAG;QAC5I,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;QAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,0BAA0B,CAAA;QACpD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAA;QACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,uBAAuB,CAAA;QACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;QACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,yBAAyB,CAAA;KAC7C,CAAC,CAAA;IACF,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAA;IAC9K,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS,CA6MvH"}