dsh-input-traffic 0.6.0 → 0.7.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.ja.md +94 -87
- package/CHANGELOG.ko.md +94 -87
- package/CHANGELOG.md +18 -8
- package/INSTALL.ja.md +151 -151
- package/INSTALL.ko.md +151 -151
- package/README.en.md +9 -7
- package/README.ja.md +192 -187
- package/README.ko.md +186 -181
- package/README.md +9 -6
- package/dsh.plugin.json +16 -16
- package/lib/client.js +646 -226
- package/lib/client.js.map +1 -1
- package/lib/types/client/compat.d.ts +68 -0
- package/lib/types/client/compat.d.ts.map +1 -0
- package/lib/types/client/compat.js +37 -0
- package/lib/types/client/compat.js.map +1 -0
- package/lib/types/client/freeze-button.d.ts +3 -3
- package/lib/types/client/freeze-button.d.ts.map +1 -1
- package/lib/types/client/freeze-button.js +12 -4
- package/lib/types/client/freeze-button.js.map +1 -1
- package/lib/types/client/index.d.ts +19 -8
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/index.js +37 -22
- package/lib/types/client/index.js.map +1 -1
- package/lib/types/client/locales.d.ts +12 -0
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/locales.js +277 -0
- package/lib/types/client/locales.js.map +1 -1
- package/lib/types/client/steer-queue-dock.d.ts +11 -1
- package/lib/types/client/steer-queue-dock.d.ts.map +1 -1
- package/lib/types/client/steer-queue-dock.js +53 -36
- package/lib/types/client/steer-queue-dock.js.map +1 -1
- package/locale/de.json +1 -0
- package/locale/en.json +1 -0
- package/locale/es.json +1 -0
- package/locale/fr.json +1 -0
- package/locale/it.json +1 -0
- package/locale/ja.json +1 -0
- package/locale/ko.json +1 -0
- package/locale/ru.json +1 -0
- package/locale/zh.json +1 -0
- package/package.json +31 -52
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* compat.ts —— 版本敏感代码的**唯一窄腰**(INDEX §C:版本差异代码只许出现在
|
|
3
|
+
* 窄腰文件,能力探测优先,禁止读宿主版本号)。
|
|
4
|
+
*
|
|
5
|
+
* 本插件已核实的两处分叉(findings §1.1 #5 / 迁移执行期补勘):
|
|
6
|
+
* 1. 持久化设置面:0.1.7+ 走 `configForms.get(ns)`;≤0.1.5 走
|
|
7
|
+
* `settingsScope.bind({ namespace })`。0.1.7-rc.1 的 client-ui-settings 包
|
|
8
|
+
* 已不含 `settingsScope` 字样(2026-10-04 node_modules 全文核查)——两服务
|
|
9
|
+
* 按代互斥,双 scoped-inject 天然不会双触发。
|
|
10
|
+
* 2. 草稿回填:≤0.1.5 在 `input.for(actx).actions.setDraft`,0.1.7+ 直挂
|
|
11
|
+
* `.setDraft`(compat/0.1.5:src/client/index.ts vs 本分支同文件)。
|
|
12
|
+
*
|
|
13
|
+
* 缺席服务上的 scoped-inject fiber 永久 PENDING:与 `dsh-family.tab` 在持有者
|
|
14
|
+
* (跨插件族,非宿主本体)缺席时的惰性等待同型,不阻塞插件其余半区——
|
|
15
|
+
* 插件级 inject 清单因此**只含六线通用服务**,防整插件 PENDING 静默失活。
|
|
16
|
+
*
|
|
17
|
+
* All @deepseek-ai/* imports are type-only (client bundle purity).
|
|
18
|
+
*/
|
|
19
|
+
import type { Context as ClientContext } from '@deepseek-ai/cordis';
|
|
20
|
+
/**
|
|
21
|
+
* Structural minimum of a durable settings document handle — shared by
|
|
22
|
+
* `configForms.get()` (0.1.7+) and `settingsScope.bind()` (≤0.1.5). Declared
|
|
23
|
+
* locally (NOT as ambient augmentation of `@deepseek-ai/dsh-client-ui-settings/client`)
|
|
24
|
+
* so the compile face stays identical against every host line's real types.
|
|
25
|
+
*/
|
|
26
|
+
export interface SettingsDocHandle {
|
|
27
|
+
getSnapshot(): {
|
|
28
|
+
status: string;
|
|
29
|
+
value: {
|
|
30
|
+
busyEnter?: string;
|
|
31
|
+
} | undefined;
|
|
32
|
+
writable: boolean;
|
|
33
|
+
};
|
|
34
|
+
subscribe(listener: () => void): () => void;
|
|
35
|
+
set(field: string, value: unknown): Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
/** Anything registerSettingsFaces needs beyond the pin itself. */
|
|
38
|
+
export interface SettingsFacesDeps {
|
|
39
|
+
/** Durable namespace holding the pinned field (`ui-conversation`). */
|
|
40
|
+
namespace: string;
|
|
41
|
+
/** Field to pin (busy-Enter takeover). */
|
|
42
|
+
field: string;
|
|
43
|
+
/** Value to pin. */
|
|
44
|
+
value: unknown;
|
|
45
|
+
/** Called once a settings face resolves; receives the scope handle (the
|
|
46
|
+
* family tab card reads it). Never called on hosts with neither service. */
|
|
47
|
+
onScope: (scope: SettingsDocHandle) => void;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Pin the busy-Enter field through whichever durable-settings service this
|
|
51
|
+
* host line carries, then hand the resolved scope to `onScope`.
|
|
52
|
+
*
|
|
53
|
+
* Both variants are scoped sub-injects: on a host without the service the
|
|
54
|
+
* fiber waits forever WITHOUT blocking the plugin's other faces (same posture
|
|
55
|
+
* as the family tab's slot-inject when the family holder is absent).
|
|
56
|
+
*/
|
|
57
|
+
export declare function registerSettingsFaces(ctx: ClientContext, deps: SettingsFacesDeps): void;
|
|
58
|
+
/**
|
|
59
|
+
* Draft back-fill normalized across host lines: prefers the direct
|
|
60
|
+
* `.setDraft` (0.1.7+), falls back to the `.actions` parking spot (≤0.1.5).
|
|
61
|
+
* Pure shape probing on the conversation row object — no version reads.
|
|
62
|
+
*/
|
|
63
|
+
export declare function draftWriter(conversation: {
|
|
64
|
+
input: {
|
|
65
|
+
for(actx: unknown): unknown;
|
|
66
|
+
};
|
|
67
|
+
}, actx: unknown): (text: string) => void;
|
|
68
|
+
//# sourceMappingURL=compat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compat.d.ts","sourceRoot":"","sources":["../../../src/client/compat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnE;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAA;IAC/F,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;IAC3C,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAClD;AAED,kEAAkE;AAClE,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAA;IACjB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,oBAAoB;IACpB,KAAK,EAAE,OAAO,CAAA;IACd;gFAC4E;IAC5E,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAA;CAC5C;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAevF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,YAAY,EAAE;IAAE,KAAK,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAA;KAAE,CAAA;CAAE,EACxD,IAAI,EAAE,OAAO,GACZ,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CASxB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pin the busy-Enter field through whichever durable-settings service this
|
|
3
|
+
* host line carries, then hand the resolved scope to `onScope`.
|
|
4
|
+
*
|
|
5
|
+
* Both variants are scoped sub-injects: on a host without the service the
|
|
6
|
+
* fiber waits forever WITHOUT blocking the plugin's other faces (same posture
|
|
7
|
+
* as the family tab's slot-inject when the family holder is absent).
|
|
8
|
+
*/
|
|
9
|
+
export function registerSettingsFaces(ctx, deps) {
|
|
10
|
+
// Modern hosts (0.1.7+): configForms owns cross-entry durable writes.
|
|
11
|
+
ctx.inject(['configForms'], (configForms) => {
|
|
12
|
+
const scope = configForms.get(deps.namespace);
|
|
13
|
+
void scope.set(deps.field, deps.value);
|
|
14
|
+
deps.onScope(scope);
|
|
15
|
+
});
|
|
16
|
+
// Old hosts (≤0.1.5): namespaced durable scope via bind().
|
|
17
|
+
ctx.inject(['settingsScope'], (settingsScope) => {
|
|
18
|
+
const scope = settingsScope.bind({ namespace: deps.namespace });
|
|
19
|
+
void scope.set(deps.field, deps.value);
|
|
20
|
+
deps.onScope(scope);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Draft back-fill normalized across host lines: prefers the direct
|
|
25
|
+
* `.setDraft` (0.1.7+), falls back to the `.actions` parking spot (≤0.1.5).
|
|
26
|
+
* Pure shape probing on the conversation row object — no version reads.
|
|
27
|
+
*/
|
|
28
|
+
export function draftWriter(conversation, actx) {
|
|
29
|
+
return (text) => {
|
|
30
|
+
const row = conversation.input.for(actx);
|
|
31
|
+
if (typeof row.setDraft === 'function')
|
|
32
|
+
row.setDraft(text);
|
|
33
|
+
else
|
|
34
|
+
row.actions?.setDraft(text);
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=compat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compat.js","sourceRoot":"","sources":["../../../src/client/compat.ts"],"names":[],"mappings":"AA6CA;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAkB,EAAE,IAAuB;IAC/E,sEAAsE;IACtE,GAAG,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,WAAoB,EAAE,EAAE;QACnD,MAAM,KAAK,GAAI,WAA6D,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAChG,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC,CAAC,CAAA;IACF,2DAA2D;IAC3D,GAAG,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,aAAsB,EAAE,EAAE;QACvD,MAAM,KAAK,GAAI,aAEb,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;QACtC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,YAAwD,EACxD,IAAa;IAEb,OAAO,CAAC,IAAY,EAAE,EAAE;QACtB,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAGtC,CAAA;QACD,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,UAAU;YAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;;YACrD,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
2
|
-
import type
|
|
2
|
+
import { type SteerQueueDockInjected } from './steer-queue-dock.tsx';
|
|
3
3
|
/**
|
|
4
4
|
* Full props of the composer-right entry.
|
|
5
5
|
*
|
|
@@ -8,10 +8,10 @@ import type { SteerQueueDockInjected } from './steer-queue-dock.tsx';
|
|
|
8
8
|
* the session standard kit is shared, so the type declares exactly that —
|
|
9
9
|
* reading `session`/`input` off this slot is a compile error, not a crash.
|
|
10
10
|
*/
|
|
11
|
-
export type FreezeButtonProps = Pick<PropsRuntime<'conversation.input.right'>, '
|
|
11
|
+
export type FreezeButtonProps = Pick<PropsRuntime<'conversation.input.right'>, 'useProjection' | 'sessionId'> & SteerQueueDockInjected & PropsLocale<'steer'>;
|
|
12
12
|
/**
|
|
13
13
|
* Freeze/resume toggle for the peak-hour scenario.
|
|
14
14
|
* @param props - slot props; the session snapshot drives the detach list.
|
|
15
15
|
*/
|
|
16
|
-
export declare function FreezeButton({
|
|
16
|
+
export declare function FreezeButton({ useProjection, updateQueue, cancel, send, sendSteer, sessionId, setComposerBlock, notify, t }: FreezeButtonProps): import("react").JSX.Element;
|
|
17
17
|
//# sourceMappingURL=freeze-button.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freeze-button.d.ts","sourceRoot":"","sources":["../../../src/client/freeze-button.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAIjF,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"freeze-button.d.ts","sourceRoot":"","sources":["../../../src/client/freeze-button.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAIjF,OAAO,EAAU,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAI5E;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAC3B,IAAI,CAAC,YAAY,CAAC,0BAA0B,CAAC,EAAE,eAAe,GAAG,WAAW,CAAC,GAC3E,sBAAsB,GACtB,WAAW,CAAC,OAAO,CAAC,CAAA;AAExB;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,iBAAiB,+BA4E9I"}
|
|
@@ -18,25 +18,33 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
18
18
|
*/
|
|
19
19
|
import { useSyncExternalStore } from 'react';
|
|
20
20
|
import { freezeStore } from "./freeze-store.js";
|
|
21
|
+
import { textOf } from "./steer-queue-dock.js";
|
|
21
22
|
import { sessionGuardResume, sessionGuardStopNextTurn } from "./session-guard-bridge.js";
|
|
22
23
|
import css from './freeze-button.module.css';
|
|
23
24
|
/**
|
|
24
25
|
* Freeze/resume toggle for the peak-hour scenario.
|
|
25
26
|
* @param props - slot props; the session snapshot drives the detach list.
|
|
26
27
|
*/
|
|
27
|
-
export function FreezeButton({
|
|
28
|
+
export function FreezeButton({ useProjection, updateQueue, cancel, send, sendSteer, sessionId, setComposerBlock, notify, t }) {
|
|
28
29
|
// The freeze store is keyed by session: read the owning session's snapshot.
|
|
29
30
|
const sid = sessionId ?? '';
|
|
30
31
|
const { frozen } = useSyncExternalStore(freezeStore.subscribe, () => freezeStore.getSnapshot(sid));
|
|
31
|
-
const
|
|
32
|
+
const inbox = useProjection('inbox');
|
|
32
33
|
const freeze = async () => {
|
|
33
34
|
// Detach every pending input row — queued (next-turn) and already-steered
|
|
34
35
|
// (next-step) alike — so nothing stays in the live queue while frozen.
|
|
35
36
|
// Steered rows keep their next intent as a safe_point plan for resume.
|
|
36
|
-
const
|
|
37
|
+
const steeredIds = new Set((inbox?.['next-step'] ?? []).map(row => row.id));
|
|
38
|
+
// Store order first (next-turn), then the steered band — matching the
|
|
39
|
+
// pre-projection queue ordering the resume path replays. Wire rows carry
|
|
40
|
+
// no `.text`; derive it from the content blocks like the dock does.
|
|
41
|
+
const rows = [...(inbox?.['next-turn'] ?? []), ...(inbox?.['next-step'] ?? [])].map(row => ({
|
|
42
|
+
...row,
|
|
43
|
+
text: textOf(row.content) ?? row.text ?? null,
|
|
44
|
+
}));
|
|
37
45
|
// Preserve plain-text copies; non-text rows cannot be re-sent and are
|
|
38
46
|
// released by the freeze (documented limitation).
|
|
39
|
-
const pending = rows.flatMap(row => row.text ===
|
|
47
|
+
const pending = rows.flatMap(row => typeof row.text === 'string' && row.text !== '' ? [{ text: row.text, tier: steeredIds.has(row.id) ? 'safe_point' : 'queue' }] : []);
|
|
40
48
|
// Detach every pending row: the running turn finishes naturally, then the
|
|
41
49
|
// driver finds no pending work and stops.
|
|
42
50
|
await Promise.all(rows.map(row => updateQueue(row.id, { kind: 'remove' }).catch(() => undefined)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freeze-button.js","sourceRoot":"","sources":["../../../src/client/freeze-button.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAG5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"freeze-button.js","sourceRoot":"","sources":["../../../src/client/freeze-button.tsx"],"names":[],"mappings":"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"}
|
|
@@ -19,11 +19,15 @@
|
|
|
19
19
|
* notice registers order 30), which pushed that notice between the queue
|
|
20
20
|
* strip and the composer card. A deliberately high order keeps the strip
|
|
21
21
|
* adjacent to the card; priority stays -1 so the cell takeover still holds.
|
|
22
|
-
* Known `conversation.input.dock` contributors
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* `
|
|
26
|
-
*
|
|
22
|
+
* Known `conversation.input.dock` contributors (tarball-verified across every
|
|
23
|
+
* released host 0.1.5-rc.1 → 0.2.0-rc.2; the official registration never
|
|
24
|
+
* changed): official `queue` 20, `todo` 0, `dsh-perm-gate.notice` 30,
|
|
25
|
+
* `dsh-brief-sidebar` shadows the `todo` cell (priority -1),
|
|
26
|
+
* `dsh-tidy-display-entry` 0 (order omitted). No host version ever registered
|
|
27
|
+
* a `goal` entry here — earlier comments citing one were wrong. Adjacent
|
|
28
|
+
* slots (`conversation.composer.dock`, `conversation.input.left`) are
|
|
29
|
+
* separate bands — a third party registering a larger `order` inside THIS
|
|
30
|
+
* slot could still land below us.
|
|
27
31
|
*
|
|
28
32
|
* All @deepseek-ai/* imports are type-only: collaboration happens through
|
|
29
33
|
* cordis services and slot registration only (client bundle purity).
|
|
@@ -34,14 +38,21 @@ import type { Context as ClientContext } from '@deepseek-ai/cordis';
|
|
|
34
38
|
*
|
|
35
39
|
* List rows render sorted by `order` ascending, so a value above every other
|
|
36
40
|
* contributor keeps the strip as the bottom-most entry of the band — directly
|
|
37
|
-
* on top of the composer card. Known contributors
|
|
38
|
-
* `
|
|
41
|
+
* on top of the composer card. Known contributors (stable across hosts
|
|
42
|
+
* 0.1.5-rc.1 → 0.2.0-rc.2): `todo` 0, official `queue` 20,
|
|
43
|
+
* `dsh-perm-gate.notice` 30, `dsh-tidy-display-entry` 0. DSH has no "last"
|
|
39
44
|
* slot semantics, so this is a convention, not a
|
|
40
45
|
* structural guarantee: a third party registering a larger value could still
|
|
41
46
|
* land below us.
|
|
42
47
|
*/
|
|
43
48
|
export declare const QUEUE_DOCK_ORDER = 1000;
|
|
44
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Services required by the browser half. Only the six-line-universal faces
|
|
51
|
+
* live here — the durable-settings face (`configForms` on 0.1.7+,
|
|
52
|
+
* `settingsScope` on ≤0.1.5) is resolved by scoped sub-injects inside the
|
|
53
|
+
* compat waist, because a plugin-level inject of a per-line service would
|
|
54
|
+
* leave the WHOLE fiber PENDING on the other line (silent total deactivation).
|
|
55
|
+
*/
|
|
45
56
|
export declare const inject: string[];
|
|
46
57
|
/**
|
|
47
58
|
* Client plugin body: dictionaries, busy-Enter pinning, and the two slot
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAmBnE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAA;AAkBpC;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,UAAkD,CAAA;AAErE;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAgG9C"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { NS,
|
|
1
|
+
import { NS, dictionaries } from "./locales.js";
|
|
2
2
|
import { SteerQueueDock } from "./steer-queue-dock.js";
|
|
3
3
|
import { FreezeButton } from "./freeze-button.js";
|
|
4
4
|
import { InputTrafficFamilyCard } from "./family-card.js";
|
|
5
5
|
import { HideEnterRow } from "./hide-enter-row.js";
|
|
6
|
+
import { draftWriter, registerSettingsFaces } from "./compat.js";
|
|
6
7
|
/** Durable conversation settings namespace owned by ui-conversation. */
|
|
7
8
|
const CONVERSATION_SETTINGS_NAMESPACE = 'ui-conversation';
|
|
8
9
|
/** Busy-Enter field inside that namespace; the plugin pins it to queue. */
|
|
@@ -12,8 +13,9 @@ const BUSY_ENTER_FIELD = 'busyEnter';
|
|
|
12
13
|
*
|
|
13
14
|
* List rows render sorted by `order` ascending, so a value above every other
|
|
14
15
|
* contributor keeps the strip as the bottom-most entry of the band — directly
|
|
15
|
-
* on top of the composer card. Known contributors
|
|
16
|
-
* `
|
|
16
|
+
* on top of the composer card. Known contributors (stable across hosts
|
|
17
|
+
* 0.1.5-rc.1 → 0.2.0-rc.2): `todo` 0, official `queue` 20,
|
|
18
|
+
* `dsh-perm-gate.notice` 30, `dsh-tidy-display-entry` 0. DSH has no "last"
|
|
17
19
|
* slot semantics, so this is a convention, not a
|
|
18
20
|
* structural guarantee: a third party registering a larger value could still
|
|
19
21
|
* land below us.
|
|
@@ -35,15 +37,21 @@ function steerPrompt(actx, text) {
|
|
|
35
37
|
return Promise.reject(new Error('steer resume: conversation service unavailable'));
|
|
36
38
|
return conversation.send(text);
|
|
37
39
|
}
|
|
38
|
-
/**
|
|
39
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Services required by the browser half. Only the six-line-universal faces
|
|
42
|
+
* live here — the durable-settings face (`configForms` on 0.1.7+,
|
|
43
|
+
* `settingsScope` on ≤0.1.5) is resolved by scoped sub-injects inside the
|
|
44
|
+
* compat waist, because a plugin-level inject of a per-line service would
|
|
45
|
+
* leave the WHOLE fiber PENDING on the other line (silent total deactivation).
|
|
46
|
+
*/
|
|
47
|
+
export const inject = ['slots', 'locale', 'sessions', 'conversation'];
|
|
40
48
|
/**
|
|
41
49
|
* Client plugin body: dictionaries, busy-Enter pinning, and the two slot
|
|
42
50
|
* shadowings.
|
|
43
51
|
* @param ctx - client root context.
|
|
44
52
|
*/
|
|
45
53
|
export function apply(ctx) {
|
|
46
|
-
ctx.effect(() => ctx.locale.register(NS,
|
|
54
|
+
ctx.effect(() => ctx.locale.register(NS, dictionaries), 'dsh-input-traffic: dictionaries');
|
|
47
55
|
// Family-tab label translator, captured EAGERLY: the family holder evaluates
|
|
48
56
|
// `label()` during its own render; a lazy ctx.locale access inside the thunk
|
|
49
57
|
// is a cross-context accessor call and can throw there (killing the whole
|
|
@@ -54,10 +62,27 @@ export function apply(ctx) {
|
|
|
54
62
|
// the official row is hidden. Pinning here also repairs a persisted `steer`
|
|
55
63
|
// preference that would otherwise keep working invisibly behind the hidden
|
|
56
64
|
// row. Best-effort: a memory-mode host simply accepts it locally.
|
|
57
|
-
//
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
65
|
+
// The durable-settings service is per-line (configForms 0.1.7+ /
|
|
66
|
+
// settingsScope ≤0.1.5) — the compat waist resolves it and the family tab
|
|
67
|
+
// registers against whichever scope resolves.
|
|
68
|
+
registerSettingsFaces(ctx, {
|
|
69
|
+
namespace: CONVERSATION_SETTINGS_NAMESPACE,
|
|
70
|
+
field: BUSY_ENTER_FIELD,
|
|
71
|
+
value: 'queue',
|
|
72
|
+
onScope: (scope) => {
|
|
73
|
+
// 插件族共用设置 tab:只读状态卡(busyEnter 钉死展示 + 使用说明)。
|
|
74
|
+
// 持有者是跨插件族(thinking-levels 一族,非宿主本体),缺席时 slot
|
|
75
|
+
// inject 静默等待,不阻塞客户端半。
|
|
76
|
+
ctx.slots.inject('dsh-family.tab', () => ctx.slots.register({
|
|
77
|
+
name: 'dsh-family.tab',
|
|
78
|
+
id: 'input-traffic',
|
|
79
|
+
order: 50,
|
|
80
|
+
label: () => tFamily('family.title'),
|
|
81
|
+
locale: NS,
|
|
82
|
+
inject: () => ({ scope }),
|
|
83
|
+
}, InputTrafficFamilyCard));
|
|
84
|
+
},
|
|
85
|
+
});
|
|
61
86
|
// Shadow the official queue dock with the three-tier planning strip. The
|
|
62
87
|
// high `order` keeps it the bottom-most entry of the band (see the file
|
|
63
88
|
// header); `priority: -1` is what wins the official `queue` cell.
|
|
@@ -78,7 +103,7 @@ export function apply(ctx) {
|
|
|
78
103
|
updateQueue: (itemId, action) => conversation.updateQueue(itemId, action),
|
|
79
104
|
cancel: () => conversation.cancel(),
|
|
80
105
|
send: (text) => conversation.send(text),
|
|
81
|
-
setDraft: (
|
|
106
|
+
setDraft: draftWriter(conversation, actx),
|
|
82
107
|
notify: (level, text) => { conversation.input.for(actx).notify(level, text); },
|
|
83
108
|
};
|
|
84
109
|
},
|
|
@@ -103,7 +128,7 @@ export function apply(ctx) {
|
|
|
103
128
|
// safe_point 恢复经 conversation.send 排队到下一轮(本版契约无 steer prompt 面)。
|
|
104
129
|
sendSteer: (text) => steerPrompt(actx, text),
|
|
105
130
|
sessionId: String(sessionId),
|
|
106
|
-
setDraft: (
|
|
131
|
+
setDraft: draftWriter(conversation, actx),
|
|
107
132
|
notify: (level, text) => { conversation.input.for(actx).notify(level, text); },
|
|
108
133
|
// 冻结期间 raise composer block:composer 变 inert(回车/发送按钮全部失效),
|
|
109
134
|
// 输入不会漏进对话;恢复时清除。block 不锁 input.right(恢复按钮仍可点)。
|
|
@@ -113,16 +138,6 @@ export function apply(ctx) {
|
|
|
113
138
|
};
|
|
114
139
|
},
|
|
115
140
|
}, FreezeButton));
|
|
116
|
-
// 插件族共用设置 tab:只读状态卡(busyEnter 钉死展示 + 使用说明)。
|
|
117
|
-
// thinking-levels 缺席时 inject 静默等待,不阻塞客户端半。
|
|
118
|
-
ctx.slots.inject('dsh-family.tab', () => ctx.slots.register({
|
|
119
|
-
name: 'dsh-family.tab',
|
|
120
|
-
id: 'input-traffic',
|
|
121
|
-
order: 50,
|
|
122
|
-
label: () => tFamily('family.title'),
|
|
123
|
-
locale: NS,
|
|
124
|
-
inject: () => ({ scope: conversationSettings }),
|
|
125
|
-
}, InputTrafficFamilyCard));
|
|
126
141
|
// Hide the official busy-Enter settings row (null render wins the cell).
|
|
127
142
|
ctx.slots.inject('settings.general.item', () => ctx.slots.register({
|
|
128
143
|
name: 'settings.general.item',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAuCA,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAwB,CAAA;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAqB,CAAA;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAmB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAsB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAEhE,wEAAwE;AACxE,MAAM,+BAA+B,GAAG,iBAAiB,CAAA;AAEzD,2EAA2E;AAC3E,MAAM,gBAAgB,GAAG,WAAW,CAAA;AAEpC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAA;AAEpC;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,IAAmB,EAAE,IAAY;IACpD,uEAAuE;IACvE,uDAAuD;IACvD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC7C,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAA;IAClH,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAChC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC,CAAA;AAErE;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,GAAkB;IACtC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,iCAAiC,CAAC,CAAA;IAC1F,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,4EAA4E;IAC5E,kBAAkB;IAClB,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEnC,yEAAyE;IACzE,4EAA4E;IAC5E,2EAA2E;IAC3E,kEAAkE;IAClE,iEAAiE;IACjE,0EAA0E;IAC1E,8CAA8C;IAC9C,qBAAqB,CAAC,GAAG,EAAE;QACzB,SAAS,EAAE,+BAA+B;QAC1C,KAAK,EAAE,gBAAgB;QACvB,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,4CAA4C;YAC5C,8CAA8C;YAC9C,uBAAuB;YACvB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC1D,IAAI,EAAE,gBAAgB;gBACtB,EAAE,EAAE,eAAe;gBACnB,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC;gBACpC,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;aAC1B,EAAE,sBAAsB,CAAC,CAAC,CAAA;QAC7B,CAAC;KACF,CAAC,CAAA;IAEF,yEAAyE;IACzE,wEAAwE;IACxE,kEAAkE;IAClE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnE,IAAI,EAAE,yBAAyB;QAC/B,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,gBAAgB;QACvB,QAAQ,EAAE,CAAC,CAAC;QACZ,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,CAAC,SAAoB,EAA0B,EAAE;YACvD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAC1C,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,SAAS,qBAAqB,CAAC,CAAA;YAC/F,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;YAC7C,IAAI,YAAY,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;YAC/F,OAAO;gBACL,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,MAAe,EAAE,MAAM,CAAC;gBAClF,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE;gBACnC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBACvC,QAAQ,EAAE,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC;gBACzC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA,CAAC,CAAC;aAC9E,CAAA;QACH,CAAC;KACF,EAAE,cAAc,CAAC,CAAC,CAAA;IAEnB,2EAA2E;IAC3E,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QACpE,IAAI,EAAE,0BAA0B;QAChC,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,CAAC,SAAoB,EAA0B,EAAE;YACvD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAC1C,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,SAAS,qBAAqB,CAAC,CAAA;YACjG,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;YAC7C,IAAI,YAAY,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;YACjG,OAAO;gBACL,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,MAAe,EAAE,MAAM,CAAC;gBAClF,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE;gBACnC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBACvC,iEAAiE;gBACjE,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC5C,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC;gBAC5B,QAAQ,EAAE,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC;gBACzC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA,CAAC,CAAC;gBAC7E,2DAA2D;gBAC3D,gDAAgD;gBAChD,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE;oBAC3B,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;gBACnF,CAAC;aACF,CAAA;QACH,CAAC;KACF,EAAE,YAAY,CAAC,CAAC,CAAA;IAEjB,yEAAyE;IACzE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QACjE,IAAI,EAAE,uBAAuB;QAC7B,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,CAAC,CAAC;QACZ,MAAM,EAAE,EAAE;KACX,EAAE,YAAY,CAAC,CAAC,CAAA;AACnB,CAAC"}
|
|
@@ -62,6 +62,18 @@ export declare const en: Record<keyof typeof zh, string>;
|
|
|
62
62
|
export declare const ja: Record<keyof typeof zh, string>;
|
|
63
63
|
/** Korean dictionary (keys mirror zh). */
|
|
64
64
|
export declare const ko: Record<keyof typeof zh, string>;
|
|
65
|
+
/** French dictionary (keys mirror zh). */
|
|
66
|
+
export declare const fr: Record<keyof typeof zh, string>;
|
|
67
|
+
/** German dictionary (keys mirror zh). */
|
|
68
|
+
export declare const de: Record<keyof typeof zh, string>;
|
|
69
|
+
/** Italian dictionary (keys mirror zh). */
|
|
70
|
+
export declare const it: Record<keyof typeof zh, string>;
|
|
71
|
+
/** Russian dictionary (keys mirror zh). */
|
|
72
|
+
export declare const ru: Record<keyof typeof zh, string>;
|
|
73
|
+
/** Spanish dictionary (keys mirror zh). */
|
|
74
|
+
export declare const es: Record<keyof typeof zh, string>;
|
|
75
|
+
/** Combined dictionary map covering all 9 languages. */
|
|
76
|
+
export declare const dictionaries: Record<string, Record<string, string>>;
|
|
65
77
|
/** Dictionary key union. */
|
|
66
78
|
export type SteerKey = keyof typeof zh;
|
|
67
79
|
//# sourceMappingURL=locales.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,iDAAiD;AACjD,eAAO,MAAM,EAAE,UAAU,CAAA;AAEzB,mEAAmE;AACnE,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDmB,CAAA;AAElC,2CAA2C;AAC3C,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAqD9C,CAAA;AAED,4CAA4C;AAC5C,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAqD9C,CAAA;AAED,0CAA0C;AAC1C,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAqD9C,CAAA;AAED,4BAA4B;AAC5B,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,EAAE,CAAA"}
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,iDAAiD;AACjD,eAAO,MAAM,EAAE,UAAU,CAAA;AAEzB,mEAAmE;AACnE,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDmB,CAAA;AAElC,2CAA2C;AAC3C,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAqD9C,CAAA;AAED,4CAA4C;AAC5C,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAqD9C,CAAA;AAED,0CAA0C;AAC1C,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAqD9C,CAAA;AAED,0CAA0C;AAC1C,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAqD9C,CAAA;AAED,0CAA0C;AAC1C,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAqD9C,CAAA;AAED,2CAA2C;AAC3C,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAqD9C,CAAA;AAED,2CAA2C;AAC3C,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAqD9C,CAAA;AAED,2CAA2C;AAC3C,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAqD9C,CAAA;AAED,wDAAwD;AACxD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAA0C,CAAA;AAE1G,4BAA4B;AAC5B,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,EAAE,CAAA"}
|