dsh-input-traffic 0.1.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 (40) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +202 -0
  3. package/README.md +202 -0
  4. package/cordis.patch.yml +11 -0
  5. package/lib/client.js +920 -0
  6. package/lib/client.js.map +1 -0
  7. package/lib/index.js +5 -0
  8. package/lib/types/client/freeze-button.d.ts +10 -0
  9. package/lib/types/client/freeze-button.d.ts.map +1 -0
  10. package/lib/types/client/freeze-button.js +51 -0
  11. package/lib/types/client/freeze-button.js.map +1 -0
  12. package/lib/types/client/freeze-store.d.ts +24 -0
  13. package/lib/types/client/freeze-store.d.ts.map +1 -0
  14. package/lib/types/client/freeze-store.js +24 -0
  15. package/lib/types/client/freeze-store.js.map +1 -0
  16. package/lib/types/client/hide-enter-row.d.ts +17 -0
  17. package/lib/types/client/hide-enter-row.d.ts.map +1 -0
  18. package/lib/types/client/hide-enter-row.js +5 -0
  19. package/lib/types/client/hide-enter-row.js.map +1 -0
  20. package/lib/types/client/index.d.ts +25 -0
  21. package/lib/types/client/index.d.ts.map +1 -0
  22. package/lib/types/client/index.js +80 -0
  23. package/lib/types/client/index.js.map +1 -0
  24. package/lib/types/client/locales.d.ts +54 -0
  25. package/lib/types/client/locales.d.ts.map +1 -0
  26. package/lib/types/client/locales.js +96 -0
  27. package/lib/types/client/locales.js.map +1 -0
  28. package/lib/types/client/steer-queue-dock.d.ts +59 -0
  29. package/lib/types/client/steer-queue-dock.d.ts.map +1 -0
  30. package/lib/types/client/steer-queue-dock.js +320 -0
  31. package/lib/types/client/steer-queue-dock.js.map +1 -0
  32. package/lib/types/index.d.ts +11 -0
  33. package/lib/types/index.d.ts.map +1 -0
  34. package/lib/types/index.js +5 -0
  35. package/lib/types/index.js.map +1 -0
  36. package/lib/types/invariant.d.ts +12 -0
  37. package/lib/types/invariant.d.ts.map +1 -0
  38. package/lib/types/invariant.js +12 -0
  39. package/lib/types/invariant.js.map +1 -0
  40. package/package.json +96 -0
@@ -0,0 +1,59 @@
1
+ import type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
2
+ /** One mutation accepted by the conversation queue verb. */
3
+ export type SteerQueueAction = {
4
+ kind: 'edit';
5
+ content: readonly {
6
+ type: 'text';
7
+ text: string;
8
+ }[];
9
+ } | {
10
+ kind: 'remove';
11
+ } | {
12
+ kind: 'steer';
13
+ };
14
+ /** Queue operations injected by the session-scoped registration. */
15
+ export interface SteerQueueDockInjected {
16
+ updateQueue: (itemId: string, action: SteerQueueAction) => Promise<void>;
17
+ /** Cancel the current turn while preserving the pending queue. */
18
+ cancel: () => Promise<void>;
19
+ /** Re-send one plain-text message as a queued follow-up (the revoke path). */
20
+ send: (text: string) => Promise<void>;
21
+ /** Back-fill the composer draft (the pull-back-to-composer edit path). */
22
+ setDraft: (text: string) => void;
23
+ notify: (level: 'info' | 'error', text: string) => void;
24
+ }
25
+ /** Full props of a dock entry: InputZone owner share + session standard kit + global seat + the locale seat. */
26
+ export type SteerQueueDockProps = PropsRuntime<'conversation.input.dock'> & SteerQueueDockInjected & PropsLocale<'steer'>;
27
+ /** The planning tier of one queued row. */
28
+ export type SteerTier = 'now' | 'next' | 'later';
29
+ /**
30
+ * Resolve the action sequence for one planning button press. Pure so the
31
+ * button wiring and its tests share one truth.
32
+ * @param tier - the pressed planning tier.
33
+ * @returns the queue mutation (red re-uses a steer-shaped action for the
34
+ * yellow branch; the red branch performs cancel + remove + resend instead).
35
+ */
36
+ export declare function planActionFor(tier: SteerTier): {
37
+ action: SteerQueueAction;
38
+ interruptFirst: boolean;
39
+ };
40
+ /**
41
+ * Project the tier badge of one inbox row from its placement. Pure so the
42
+ * row rendering and its tests share one truth.
43
+ * @param placement - the inbox projection placement.
44
+ * @returns the tier badge, or null for non-visible context rows.
45
+ */
46
+ export declare function badgeFor(placement: 'queued' | 'steering' | 'context'): SteerTier | null;
47
+ /**
48
+ * Auto-grow one edit textarea to its content. The CSS max-height caps the
49
+ * growth; beyond it the textarea scrolls internally. Height is reset first so
50
+ * shrink (deleting lines) also tracks the content.
51
+ * @param el - the textarea to resize in place.
52
+ */
53
+ export declare function resizeEditor(el: HTMLTextAreaElement): void;
54
+ /**
55
+ * Queue strip with three-tier planning: one item renders directly; multiple
56
+ * items default to a collapsible count header; an empty queue renders nothing.
57
+ */
58
+ export declare function SteerQueueDock({ useSession, input, updateQueue, cancel, send, setDraft, notify, t }: SteerQueueDockProps): import("react").JSX.Element | null;
59
+ //# sourceMappingURL=steer-queue-dock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steer-queue-dock.d.ts","sourceRoot":"","sources":["../../../src/client/steer-queue-dock.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAYjF,4DAA4D;AAC5D,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAA;AAKrB,oEAAoE;AACpE,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxE,kEAAkE;IAClE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,8EAA8E;IAC9E,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,0EAA0E;IAC1E,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACxD;AAED,gHAAgH;AAChH,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC,yBAAyB,CAAC,GAAG,sBAAsB,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAEzH,2CAA2C;AAC3C,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAA;AAEhD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAIpG;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAIvF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,mBAAmB,GAAG,IAAI,CAG1D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,mBAAmB,sCAmbxH"}
@@ -0,0 +1,320 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * Three-tier steering queue dock: the shadowing replacement for the official
4
+ * `conversation.input.dock` entry (same cell id `queue`, priority -1, so the
5
+ * lower priority wins and the official QueueDock never renders while this
6
+ * plugin is mounted).
7
+ *
8
+ * Every queued row carries three planning buttons:
9
+ * - green (later, the default state): the row already queues for the next
10
+ * turn —plain Enter keeps feeding rows here; pressing green on a row that
11
+ * was already steered (yellow) revokes the insertion and pulls it back to
12
+ * later (the yellow flow is reversible);
13
+ * - yellow (next): strict-steer the row into the running turn, consumed at
14
+ * the next step boundary (after the current action finishes);
15
+ * - red (now): cancel the running turn, then remove the row and re-send its
16
+ * text as a fresh message —the re-send arms the harness wake latch (the
17
+ * converged driver restarts) and the interrupted input is processed as the
18
+ * next turn's input. A plain steer after cancel would re-insert a message
19
+ * that is already pending in next-turn and the inbox rejects it.
20
+ *
21
+ * The toolbar also exposes a queue-level "cancel and clear" that stops the
22
+ * current run and removes every queued row, plus a session-level
23
+ * freeze/resume toggle for the peak-hour scenario: freeze stops the current
24
+ * run while preserving the queue (keepInbox), resume re-arms the driver by
25
+ * re-sending the first queued row so the preserved work continues.
26
+ */
27
+ import { useEffect, useId, useMemo, useRef, useState, useSyncExternalStore } from 'react';
28
+ import { IconCheckOutline16, IconChevronDownOutline14, IconChevronUpOutline14, IconCloseOutline16, IconEditOutline16, IconQueueOutline14, IconRightUpOutline16, IconTrashOutline16, Tooltip, } from '@deepseek-ai/dsh-client-ui-primitives';
29
+ import { freezeStore } from "./freeze-store.js";
30
+ import css from './steer-queue-dock.module.css';
31
+ /** Busy marker for a whole-queue rebuild (reorder); locks every row action. */
32
+ const REORDER_MARK = '__reorder__';
33
+ /**
34
+ * Resolve the action sequence for one planning button press. Pure so the
35
+ * button wiring and its tests share one truth.
36
+ * @param tier - the pressed planning tier.
37
+ * @returns the queue mutation (red re-uses a steer-shaped action for the
38
+ * yellow branch; the red branch performs cancel + remove + resend instead).
39
+ */
40
+ export function planActionFor(tier) {
41
+ if (tier === 'later')
42
+ return { action: { kind: 'steer' }, interruptFirst: false };
43
+ // Yellow steers only; red cancels the running turn first, then steers.
44
+ return { action: { kind: 'steer' }, interruptFirst: tier === 'now' };
45
+ }
46
+ /**
47
+ * Project the tier badge of one inbox row from its placement. Pure so the
48
+ * row rendering and its tests share one truth.
49
+ * @param placement - the inbox projection placement.
50
+ * @returns the tier badge, or null for non-visible context rows.
51
+ */
52
+ export function badgeFor(placement) {
53
+ if (placement === 'steering')
54
+ return 'next';
55
+ if (placement === 'queued')
56
+ return 'later';
57
+ return null;
58
+ }
59
+ /**
60
+ * Auto-grow one edit textarea to its content. The CSS max-height caps the
61
+ * growth; beyond it the textarea scrolls internally. Height is reset first so
62
+ * shrink (deleting lines) also tracks the content.
63
+ * @param el - the textarea to resize in place.
64
+ */
65
+ export function resizeEditor(el) {
66
+ el.style.height = 'auto';
67
+ el.style.height = `${el.scrollHeight}px`;
68
+ }
69
+ /**
70
+ * Queue strip with three-tier planning: one item renders directly; multiple
71
+ * items default to a collapsible count header; an empty queue renders nothing.
72
+ */
73
+ export function SteerQueueDock({ useSession, input, updateQueue, cancel, send, setDraft, notify, t }) {
74
+ const inbox = useSession(s => s.queue);
75
+ const queue = useMemo(() => inbox.filter(row => row.placement === 'queued'), [inbox]);
76
+ const steering = useMemo(() => inbox.filter(row => row.placement === 'steering'), [inbox]);
77
+ const running = useSession(s => s.running);
78
+ const queueMutable = useSession(s => s.subagent === null);
79
+ const [editing, setEditing] = useState(null);
80
+ const [busy, setBusy] = useState(null);
81
+ const [clearing, setClearing] = useState(false);
82
+ const [collapsed, setCollapsed] = useState(true);
83
+ // Session-level freeze lives in the composer-right control; the dock reads
84
+ // the shared store for the banner and inert states.
85
+ const { frozen } = useSyncExternalStore(freezeStore.subscribe, freezeStore.getSnapshot);
86
+ const listId = useId();
87
+ // The edit textarea; grown to its content on entry and on every input.
88
+ const editorRef = useRef(null);
89
+ useEffect(() => {
90
+ if (queue.length === 0 && !collapsed)
91
+ setCollapsed(true);
92
+ if (editing !== null && (!queueMutable || !queue.some(row => row.id === editing.id)))
93
+ setEditing(null);
94
+ }, [collapsed, editing, queue, queueMutable]);
95
+ // Grow the editor to its full content when a row enters edit mode.
96
+ useEffect(() => {
97
+ if (editing === null)
98
+ return;
99
+ const el = editorRef.current;
100
+ if (el !== null)
101
+ resizeEditor(el);
102
+ }, [editing?.id]);
103
+ // The dock stays mounted while the agent runs (the freeze entry must be
104
+ // reachable before any message queues), and while any row is pending.
105
+ if (queue.length === 0 && steering.length === 0 && !running)
106
+ return null;
107
+ const interactionActive = queueMutable && (editing !== null || busy !== null || clearing);
108
+ const expanded = !collapsed || interactionActive;
109
+ const listVisible = queue.length === 1 || expanded;
110
+ const planDisabled = !queueMutable || !running || frozen;
111
+ const nothingPending = queue.length === 0 && steering.length === 0;
112
+ // Reordering rebuilds the queue by re-sending texts; non-text rows cannot
113
+ // be re-sent, so sorting is disabled while any such row is queued.
114
+ const reorderUnsupported = queue.some(row => row.text === null);
115
+ // Pull-back-to-composer is only offered when the composer draft is empty:
116
+ // the pulled message back-fills the draft, so an occupied composer would be
117
+ // overwritten. Steered (yellow/red) rows never offer it — once inserted,
118
+ // they are not deeply re-edited.
119
+ const composerEmpty = input.draft.trim() === '';
120
+ const applyAction = async (itemId, action, failure) => {
121
+ setBusy(itemId);
122
+ try {
123
+ await updateQueue(itemId, action);
124
+ return true;
125
+ }
126
+ catch {
127
+ notify('error', failure);
128
+ return false;
129
+ }
130
+ finally {
131
+ setBusy(current => current === itemId ? null : current);
132
+ }
133
+ };
134
+ const saveEdit = async () => {
135
+ if (editing === null || editing.text.trim() === '')
136
+ return;
137
+ const itemId = editing.id;
138
+ const text = editing.text;
139
+ setBusy(itemId);
140
+ try {
141
+ await updateQueue(itemId, { kind: 'edit', content: [{ type: 'text', text }] });
142
+ setEditing(null);
143
+ }
144
+ catch {
145
+ // The edit failed (the agent may have claimed the row mid-edit): fall
146
+ // back to the composer so the edited content is never lost. Only when
147
+ // the composer is free — an occupied draft must not be overwritten.
148
+ if (input.draft.trim() === '') {
149
+ setDraft(text);
150
+ setEditing(null);
151
+ notify('error', t('queue.editFailed.pulledBack'));
152
+ }
153
+ else {
154
+ notify('error', t('queue.editFailed'));
155
+ }
156
+ }
157
+ finally {
158
+ setBusy(current => current === itemId ? null : current);
159
+ }
160
+ };
161
+ const steerRow = async (row, tier) => {
162
+ setBusy(row.id);
163
+ try {
164
+ if (tier === 'now') {
165
+ // Interrupt, then re-submit: cancel stops the current run (keepInbox),
166
+ // the row is removed so its identity cannot collide, and re-sending
167
+ // the text arms the harness wake latch (the converged driver restarts
168
+ // and processes it as the next turn's input). A plain steer after
169
+ // cancel would re-insert a message already pending in next-turn and
170
+ // the inbox rejects the duplicate.
171
+ await cancel();
172
+ await updateQueue(row.id, { kind: 'remove' });
173
+ if (row.text !== null)
174
+ await send(row.text);
175
+ }
176
+ else {
177
+ await updateQueue(row.id, { kind: 'steer' });
178
+ }
179
+ }
180
+ catch {
181
+ notify('error', tier === 'now' ? t('steer.nowFailed') : t('steer.nextFailed'));
182
+ }
183
+ finally {
184
+ setBusy(current => current === row.id ? null : current);
185
+ }
186
+ };
187
+ /**
188
+ * Revoke a steered (yellow) or interrupting (red) row back to later: remove
189
+ * the admitted row and re-send its text as a queued follow-up, so it lands
190
+ * in next-turn again (the yellow flow is reversible).
191
+ */
192
+ const revokeToLater = async (row) => {
193
+ if (row.text === null)
194
+ return;
195
+ setBusy(row.id);
196
+ try {
197
+ await updateQueue(row.id, { kind: 'remove' });
198
+ await send(row.text);
199
+ }
200
+ catch {
201
+ notify('error', t('steer.revokeFailed'));
202
+ }
203
+ finally {
204
+ setBusy(current => current === row.id ? null : current);
205
+ }
206
+ };
207
+ /**
208
+ * Move one queued row up/down in the FIFO order. The queue is rebuilt in
209
+ * the new order: every queued row is removed and re-sent sequentially
210
+ * (plain-text rows only), so the agent's next-turn list matches the
211
+ * reordered view.
212
+ */
213
+ const reorder = async (rowId, delta) => {
214
+ const rows = queue;
215
+ const index = rows.findIndex(row => row.id === rowId);
216
+ const target = index + delta;
217
+ if (index < 0 || target < 0 || target >= rows.length)
218
+ return;
219
+ const next = [...rows];
220
+ const swapped = next[index];
221
+ next[index] = next[target];
222
+ next[target] = swapped;
223
+ if (next.some(row => row.text === null)) {
224
+ notify('error', t('steer.reorder.unsupported'));
225
+ return;
226
+ }
227
+ setBusy(REORDER_MARK);
228
+ try {
229
+ for (const row of rows)
230
+ await updateQueue(row.id, { kind: 'remove' });
231
+ for (const row of next)
232
+ await send(row.text);
233
+ }
234
+ catch {
235
+ notify('error', t('steer.reorderFailed'));
236
+ }
237
+ finally {
238
+ setBusy(null);
239
+ }
240
+ };
241
+ /**
242
+ * Pull one queued row back into the composer draft for editing: the text
243
+ * back-fills the input box and the row leaves the queue; the user edits and
244
+ * resubmits it as a fresh message.
245
+ */
246
+ const pullBackToComposer = async (row) => {
247
+ if (row.text === null)
248
+ return;
249
+ setDraft(row.text);
250
+ setBusy(row.id);
251
+ try {
252
+ await updateQueue(row.id, { kind: 'remove' });
253
+ }
254
+ catch {
255
+ notify('error', t('steer.pullBackFailed'));
256
+ }
257
+ finally {
258
+ setBusy(current => current === row.id ? null : current);
259
+ }
260
+ };
261
+ const clearAll = async () => {
262
+ setClearing(true);
263
+ // Cancel the current run and clear every pending row (queued and
264
+ // steering alike). Removal races the agent claiming rows;
265
+ // item-not-found is a normal convergence and must not surface.
266
+ const pending = [...queue, ...steering];
267
+ try {
268
+ await cancel();
269
+ await Promise.all(pending.map(row => updateQueue(row.id, { kind: 'remove' }).catch(() => undefined)));
270
+ }
271
+ catch {
272
+ notify('error', t('steer.clearFailed'));
273
+ }
274
+ finally {
275
+ setClearing(false);
276
+ }
277
+ };
278
+ return (_jsx("div", { className: css.dock, "data-steer-dock": "", children: _jsxs("div", { className: css.panel, children: [_jsxs("div", { className: css.toolbar, children: [_jsxs("button", { type: "button", className: css.header, "aria-controls": listId, "aria-expanded": expanded, disabled: queue.length <= 1 || interactionActive, onClick: () => { setCollapsed(value => !value); }, children: [_jsx("span", { className: css.lead, "aria-hidden": true, children: _jsx(IconQueueOutline14, {}) }), queue.length > 0 && (_jsx("span", { className: css.count, children: t('queue.count', { n: queue.length }) })), queue.length > 1 && (_jsx("span", { className: css.chevron, "aria-hidden": true, children: expanded ? _jsx(IconChevronDownOutline14, {}) : _jsx(IconChevronUpOutline14, {}) }))] }), _jsx("div", { className: css.toolbarActions, children: _jsx(Tooltip, { label: t('steer.clear'), side: "top", delayMs: 500, children: _jsxs("button", { type: "button", className: css.clear, "aria-label": t('steer.clear'), disabled: clearing || busy !== null || nothingPending, onClick: () => { void clearAll(); }, children: [_jsx(IconTrashOutline16, { size: 14 }), _jsx("span", { className: css.clearLabel, children: t('steer.clear') })] }) }) })] }), frozen && (_jsx("div", { className: css.frozenBanner, role: "status", children: t('steer.frozen') })), _jsx("ul", { id: listId, className: css.list, hidden: !listVisible, children: listVisible && queue.map(row => (_jsxs("li", { className: css.row, "data-tier": badgeFor('queued') ?? undefined, "data-editing": editing?.id === row.id ? '' : undefined, children: [queue.length === 1 && _jsx("span", { className: css.lead, "aria-hidden": true, children: _jsx(IconQueueOutline14, {}) }), _jsx(SteerBadge, { tier: badgeFor('queued'), t: t }), editing?.id === row.id
279
+ ? (_jsx("textarea", { ref: editorRef, autoFocus: true, className: css.editor, "aria-label": t('queue.edit'), rows: 1, value: editing.text, onChange: (event) => { setEditing({ id: row.id, text: event.currentTarget.value }); }, onInput: (event) => { resizeEditor(event.currentTarget); }, onKeyDown: (event) => {
280
+ if (event.key === 'Escape') {
281
+ setEditing(null);
282
+ return;
283
+ }
284
+ // Plain Enter saves; Shift+Enter keeps editing (newline).
285
+ if (event.key === 'Enter' && !event.shiftKey && !event.nativeEvent.isComposing) {
286
+ event.preventDefault();
287
+ void saveEdit();
288
+ }
289
+ } }))
290
+ : _jsx("span", { className: css.preview, children: row.preview }), queueMutable && _jsx("div", { className: css.actions, children: editing?.id === row.id
291
+ ? (_jsxs(_Fragment, { children: [_jsx(Tooltip, { label: t('queue.save'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('queue.save'), disabled: busy !== null || editing.text.trim() === '', onClick: () => { void saveEdit(); }, children: _jsx(IconCheckOutline16, { size: 14 }) }) }), _jsx(Tooltip, { label: t('queue.cancelEdit'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('queue.cancelEdit'), disabled: busy !== null, onClick: () => { setEditing(null); }, children: _jsx(IconCloseOutline16, { size: 14 }) }) })] }))
292
+ : (_jsxs(_Fragment, { children: [_jsx(Tooltip, { label: t('steer.moveUp'), side: "bottom", delayMs: 500, disabled: frozen || reorderUnsupported, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('steer.moveUp'), title: reorderUnsupported ? t('steer.reorder.unsupported') : undefined, disabled: busy !== null || frozen || reorderUnsupported, onClick: () => { void reorder(row.id, -1); }, children: _jsx(IconChevronUpOutline14, {}) }) }), _jsx(Tooltip, { label: t('steer.moveDown'), side: "bottom", delayMs: 500, disabled: frozen || reorderUnsupported, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('steer.moveDown'), title: reorderUnsupported ? t('steer.reorder.unsupported') : undefined, disabled: busy !== null || frozen || reorderUnsupported, onClick: () => { void reorder(row.id, 1); }, children: _jsx(IconChevronDownOutline14, {}) }) }), _jsx(Tooltip, { label: t('steer.pullBack'), side: "bottom", delayMs: 500, disabled: row.text === null || !composerEmpty, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('steer.pullBack'), title: row.text === null ? t('steer.pullBack.unsupported') : !composerEmpty ? t('steer.pullBack.composerBusy') : undefined, disabled: busy !== null || frozen || row.text === null || !composerEmpty, onClick: () => { void pullBackToComposer(row); }, children: _jsx(IconRightUpOutline16, {}) }) }), _jsx(Tooltip, { label: t('queue.edit'), side: "bottom", delayMs: 500, disabled: row.text === null, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('queue.edit'), title: row.text === null ? t('queue.edit.unsupported') : undefined, disabled: busy !== null || row.text === null, onClick: () => {
293
+ if (row.text !== null)
294
+ setEditing({ id: row.id, text: row.text });
295
+ }, children: _jsx(IconEditOutline16, { size: 14 }) }) }), _jsx(Tooltip, { label: t('queue.remove'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('queue.remove'), disabled: busy !== null, onClick: () => {
296
+ void applyAction(row.id, { kind: 'remove' }, t('queue.removeFailed'));
297
+ }, children: _jsx(IconTrashOutline16, { size: 14 }) }) }), _jsxs("span", { className: css.plan, role: "group", "aria-label": t('steer.later.aria'), children: [_jsx(Tooltip, { label: t('steer.now'), side: "bottom", delayMs: 500, disabled: planDisabled || row.text === null, children: _jsx("button", { type: "button", className: `${css.tier} ${css.tierNow}`, "aria-label": t('steer.now'), title: planDisabled ? t('steer.unavailable.running') : row.text === null ? t('steer.now.unsupported') : undefined, disabled: busy !== null || planDisabled || row.text === null, onClick: () => { void steerRow(row, 'now'); }, children: _jsx("span", { className: css.dot, "aria-hidden": true }) }) }), _jsx(Tooltip, { label: t('steer.next'), side: "bottom", delayMs: 500, disabled: planDisabled, children: _jsx("button", { type: "button", className: `${css.tier} ${css.tierNext}`, "aria-label": t('steer.next'), title: planDisabled ? t('steer.unavailable.running') : undefined, disabled: busy !== null || planDisabled, onClick: () => { void steerRow(row, 'next'); }, children: _jsx("span", { className: css.dot, "aria-hidden": true }) }) }), _jsx(Tooltip, { label: t('steer.later'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: `${css.tier} ${css.tierLater}`, "aria-label": t('steer.later'), "aria-pressed": true, disabled: busy !== null || clearing, onClick: () => {
298
+ // Later is the default queue state; pressing it
299
+ // keeps the row queued (no-op by design).
300
+ }, children: _jsx("span", { className: css.dot, "aria-hidden": true }) }) })] })] })) })] }, row.id))) }), steering.length > 0 && (_jsx("ul", { className: css.steeringList, "data-steering-list": "", children: steering.map(row => (_jsxs("li", { className: css.row, "data-tier": badgeFor('steering') ?? undefined, children: [_jsx("span", { className: css.lead, "aria-hidden": true, children: _jsx(IconQueueOutline14, {}) }), _jsx(SteerBadge, { tier: badgeFor('steering'), t: t }), _jsx("span", { className: css.preview, children: row.preview }), _jsx("div", { className: css.actions, children: _jsx(Tooltip, { label: t('steer.revoke'), side: "bottom", delayMs: 500, disabled: row.text === null, children: _jsx("button", { type: "button", className: `${css.tier} ${css.tierLater}`, "aria-label": t('steer.revoke'), title: row.text === null ? t('steer.revoke.unsupported') : undefined, disabled: busy !== null || row.text === null || frozen, onClick: () => { void revokeToLater(row); }, children: _jsx("span", { className: css.dot, "aria-hidden": true }) }) }) })] }, row.id))) }))] }) }));
301
+ }
302
+ /** Badge label keys per tier. */
303
+ const BADGE_KEYS = {
304
+ now: 'steer.badge.now',
305
+ next: 'steer.badge.next',
306
+ later: 'steer.badge.later',
307
+ };
308
+ /** Badge tint classes per tier (present at bundle time; typed through the css-modules declaration). */
309
+ const BADGE_CLASSES = {
310
+ now: css.badgeNow,
311
+ next: css.badgeNext,
312
+ later: css.badgeLater,
313
+ };
314
+ /** One row's tier badge: colored dot + label; context rows render nothing. */
315
+ function SteerBadge({ tier, t }) {
316
+ if (tier === null)
317
+ return null;
318
+ return (_jsxs("span", { className: `${css.badge} ${BADGE_CLASSES[tier]}`, "data-badge": tier, children: [_jsx("span", { className: css.dot, "aria-hidden": true }), _jsx("span", { className: css.badgeLabel, children: t(BADGE_KEYS[tier]) })] }));
319
+ }
320
+ //# sourceMappingURL=steer-queue-dock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steer-queue-dock.js","sourceRoot":"","sources":["../../../src/client/steer-queue-dock.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * dsh-input-traffic —node half.
3
+ *
4
+ * The node half is the Loader entry every client plugin must ship; it carries
5
+ * no host-side behavior. The browser half (src/client/index.ts) owns the
6
+ * whole takeover: the three-tier planning dock and the busy-Enter row hiding.
7
+ */
8
+ import type { Context } from '@deepseek-ai/cordis';
9
+ /** @param ctx - host-side context; intentionally unused (client-plugin shape). */
10
+ export declare function apply(ctx: Context): void;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,kFAAkF;AAClF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAExC"}
@@ -0,0 +1,5 @@
1
+ /** @param ctx - host-side context; intentionally unused (client-plugin shape). */
2
+ export function apply(ctx) {
3
+ void ctx;
4
+ }
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AASA,kFAAkF;AAClF,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,KAAK,GAAG,CAAA;AACV,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Companion invariant for the input-traffic client plugin.
3
+ *
4
+ * The takeover contract: the plugin owns the busy-Enter queue surface while
5
+ * the official composer keeps the Enter-as-queue path. If the conversation
6
+ * service or the input-dock declaration is absent, the plugin must not
7
+ * silently degrade to the official two-mode busy-Enter row —?the settings row
8
+ * it hides would otherwise leave the user with a preference the plugin no
9
+ * longer honours.
10
+ */
11
+ export declare const STEER_INPUT_INVARIANT = "dsh-input-traffic requires the conversation service and the input-dock slot; refusing partial takeover";
12
+ //# sourceMappingURL=invariant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariant.d.ts","sourceRoot":"","sources":["../../src/invariant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,2GAA2G,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Companion invariant for the input-traffic client plugin.
3
+ *
4
+ * The takeover contract: the plugin owns the busy-Enter queue surface while
5
+ * the official composer keeps the Enter-as-queue path. If the conversation
6
+ * service or the input-dock declaration is absent, the plugin must not
7
+ * silently degrade to the official two-mode busy-Enter row —?the settings row
8
+ * it hides would otherwise leave the user with a preference the plugin no
9
+ * longer honours.
10
+ */
11
+ export const STEER_INPUT_INVARIANT = 'dsh-input-traffic requires the conversation service and the input-dock slot; refusing partial takeover';
12
+ //# sourceMappingURL=invariant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariant.js","sourceRoot":"","sources":["../../src/invariant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,wGAAwG,CAAA"}
package/package.json ADDED
@@ -0,0 +1,96 @@
1
+ {
2
+ "name": "dsh-input-traffic",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Three-tier (now/next/later) input steering for the DeepSeek Harness web GUI: replaces the busy-Enter queue dock with a red/yellow/green planning strip, hides the official busy-Enter behavior row, and keeps plain Enter as queue-later —a cordis client plugin, no dsh source changes, no PR required",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/drscrewdriver/dsh-input-traffic.git"
9
+ },
10
+ "main": "lib/index.js",
11
+ "types": "lib/types/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./lib/types/index.d.ts",
15
+ "default": "./lib/index.js"
16
+ },
17
+ "./client": {
18
+ "types": "./lib/types/client/index.d.ts",
19
+ "default": "./lib/client.js"
20
+ },
21
+ "./package.json": "./package.json"
22
+ },
23
+ "files": [
24
+ "lib/",
25
+ "cordis.patch.yml",
26
+ "README.md"
27
+ ],
28
+ "dsh": {
29
+ "bundle": {
30
+ "patch": "./cordis.patch.yml"
31
+ },
32
+ "client": {
33
+ "inject": [
34
+ "@deepseek-ai/dsh-client-locale",
35
+ "@deepseek-ai/dsh-client-ui-conversation"
36
+ ],
37
+ "platform": "web"
38
+ }
39
+ },
40
+ "scripts": {
41
+ "build": "tsc -p tsconfig.json && tsdown",
42
+ "test": "vitest run",
43
+ "clean": "node -e \"require('node:fs').rmSync('lib', { recursive: true, force: true })\""
44
+ },
45
+ "engines": {
46
+ "node": ">=20"
47
+ },
48
+ "license": "MIT",
49
+ "peerDependencies": {
50
+ "@deepseek-ai/cordis": "^4.0.1",
51
+ "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.5",
52
+ "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.5",
53
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.5",
54
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.5",
55
+ "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.5",
56
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.5"
57
+ },
58
+ "peerDependenciesMeta": {
59
+ "@deepseek-ai/cordis": {
60
+ "optional": true
61
+ },
62
+ "@deepseek-ai/dsh-client-locale": {
63
+ "optional": true
64
+ },
65
+ "@deepseek-ai/dsh-client-runtime": {
66
+ "optional": true
67
+ },
68
+ "@deepseek-ai/dsh-client-ui-conversation": {
69
+ "optional": true
70
+ },
71
+ "@deepseek-ai/dsh-client-ui-primitives": {
72
+ "optional": true
73
+ },
74
+ "@deepseek-ai/dsh-client-ui-settings": {
75
+ "optional": true
76
+ },
77
+ "@deepseek-ai/dsh-client-ui-slots": {
78
+ "optional": true
79
+ }
80
+ },
81
+ "devDependencies": {
82
+ "@deepseek-ai/cordis": "^4.0.1",
83
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.0.1-rc.1",
84
+ "@testing-library/dom": "^10.4.1",
85
+ "@testing-library/react": "^16.3.2",
86
+ "@types/node": "^22.20.0",
87
+ "@types/react": "~18.3.1",
88
+ "@types/react-dom": "~18.3.1",
89
+ "jsdom": "^29.1.1",
90
+ "lightningcss": "^1.32.0",
91
+ "react": "^18.2.0",
92
+ "tsdown": "^0.22.2",
93
+ "typescript": "^6.0.3",
94
+ "vitest": "^4.1.8"
95
+ }
96
+ }