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.
Files changed (42) hide show
  1. package/CHANGELOG.ja.md +94 -87
  2. package/CHANGELOG.ko.md +94 -87
  3. package/CHANGELOG.md +18 -8
  4. package/INSTALL.ja.md +151 -151
  5. package/INSTALL.ko.md +151 -151
  6. package/README.en.md +9 -7
  7. package/README.ja.md +192 -187
  8. package/README.ko.md +186 -181
  9. package/README.md +9 -6
  10. package/dsh.plugin.json +16 -16
  11. package/lib/client.js +646 -226
  12. package/lib/client.js.map +1 -1
  13. package/lib/types/client/compat.d.ts +68 -0
  14. package/lib/types/client/compat.d.ts.map +1 -0
  15. package/lib/types/client/compat.js +37 -0
  16. package/lib/types/client/compat.js.map +1 -0
  17. package/lib/types/client/freeze-button.d.ts +3 -3
  18. package/lib/types/client/freeze-button.d.ts.map +1 -1
  19. package/lib/types/client/freeze-button.js +12 -4
  20. package/lib/types/client/freeze-button.js.map +1 -1
  21. package/lib/types/client/index.d.ts +19 -8
  22. package/lib/types/client/index.d.ts.map +1 -1
  23. package/lib/types/client/index.js +37 -22
  24. package/lib/types/client/index.js.map +1 -1
  25. package/lib/types/client/locales.d.ts +12 -0
  26. package/lib/types/client/locales.d.ts.map +1 -1
  27. package/lib/types/client/locales.js +277 -0
  28. package/lib/types/client/locales.js.map +1 -1
  29. package/lib/types/client/steer-queue-dock.d.ts +11 -1
  30. package/lib/types/client/steer-queue-dock.d.ts.map +1 -1
  31. package/lib/types/client/steer-queue-dock.js +53 -36
  32. package/lib/types/client/steer-queue-dock.js.map +1 -1
  33. package/locale/de.json +1 -0
  34. package/locale/en.json +1 -0
  35. package/locale/es.json +1 -0
  36. package/locale/fr.json +1 -0
  37. package/locale/it.json +1 -0
  38. package/locale/ja.json +1 -0
  39. package/locale/ko.json +1 -0
  40. package/locale/ru.json +1 -0
  41. package/locale/zh.json +1 -0
  42. 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 { SteerQueueDockInjected } from './steer-queue-dock.tsx';
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'>, 'useSession' | 'sessionId'> & SteerQueueDockInjected & PropsLocale<'steer'>;
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({ useSession, updateQueue, cancel, send, sendSteer, sessionId, setComposerBlock, notify, t }: FreezeButtonProps): import("react").JSX.Element;
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,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAIpE;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAC3B,IAAI,CAAC,YAAY,CAAC,0BAA0B,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC,GACxE,sBAAsB,GACtB,WAAW,CAAC,OAAO,CAAC,CAAA;AAExB;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,iBAAiB,+BAqE3I"}
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({ useSession, updateQueue, cancel, send, sendSteer, sessionId, setComposerBlock, notify, t }) {
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 queue = useSession(s => s.queue);
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 rows = queue.filter(row => row.placement === 'queued' || row.placement === 'steering');
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 === null ? [] : [{ text: row.text, tier: row.placement === 'steering' ? 'safe_point' : 'queue' }]);
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":"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"}
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 on 0.1.5-rc.2: `todo` 0,
23
- * `goal` 10, official `queue` 20, `dsh-perm-gate.notice` 30. Note 0.1.5 also
24
- * introduces adjacent slots (`conversation.composer.dock`,
25
- * `conversation.input.left`) — a third party registering a larger `order`
26
- * inside this slot could still land below us.
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 on 0.1.5-rc.2: `todo` 0,
38
- * `goal` 10, official `queue` 20, `dsh-perm-gate.notice` 30. DSH has no "last"
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
- /** Services required by the browser half. */
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAkBnE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAA;AAkBpC,6CAA6C;AAC7C,eAAO,MAAM,MAAM,UAAiE,CAAA;AAEpF;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CA4F9C"}
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, en, zh } from "./locales.js";
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 on 0.1.5-rc.2: `todo` 0,
16
- * `goal` 10, official `queue` 20, `dsh-perm-gate.notice` 30. DSH has no "last"
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
- /** Services required by the browser half. */
39
- export const inject = ['slots', 'locale', 'sessions', 'conversation', 'configForms'];
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, { zh, en }), 'dsh-input-traffic: dictionaries');
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
- // 0.1.7: cross-entry config writes go through configForms; the conversation
58
- // entry id happens to equal the old settings namespace (`ui-conversation`).
59
- const conversationSettings = ctx.configForms.get(CONVERSATION_SETTINGS_NAMESPACE);
60
- void conversationSettings.set(BUSY_ENTER_FIELD, 'queue');
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: (text) => { conversation.input.for(actx).setDraft(text); },
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: (text) => { conversation.input.for(actx).setDraft(text); },
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -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"}