dsh-zen-remote 1.1.13 → 1.1.14
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/README.md +3 -2
- package/README.zh-CN.md +3 -2
- package/docs/interface.md +46 -3
- package/lib/client.js +3421 -103
- package/lib/index.js +13 -0
- package/lib/index.js.map +1 -1
- package/lib/share-export.js +347 -0
- package/lib/share-export.js.map +1 -0
- package/lib/types/client/MobileAttachButton.d.ts +8 -1
- package/lib/types/client/MobileAttachButton.d.ts.map +1 -1
- package/lib/types/client/MobileAttachChips.d.ts.map +1 -1
- package/lib/types/client/MobileSessionHeader.d.ts +7 -8
- package/lib/types/client/MobileSessionHeader.d.ts.map +1 -1
- package/lib/types/client/MobileSessionInfo.d.ts.map +1 -1
- package/lib/types/client/effects/keyboard-avoid.d.ts.map +1 -1
- package/lib/types/client/effects/keyboard-guard.d.ts +16 -11
- package/lib/types/client/effects/keyboard-guard.d.ts.map +1 -1
- package/lib/types/client/host-attach.d.ts +38 -0
- package/lib/types/client/host-attach.d.ts.map +1 -0
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/locales.d.ts +23 -0
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/share/fetch-share.d.ts +77 -0
- package/lib/types/client/share/fetch-share.d.ts.map +1 -0
- package/lib/types/client/share/markdown.d.ts +97 -0
- package/lib/types/client/share/markdown.d.ts.map +1 -0
- package/lib/types/client/share/png-stitch.d.ts +96 -0
- package/lib/types/client/share/png-stitch.d.ts.map +1 -0
- package/lib/types/client/share/rasterize.d.ts +317 -0
- package/lib/types/client/share/rasterize.d.ts.map +1 -0
- package/lib/types/client/share/share-card.d.ts +93 -0
- package/lib/types/client/share/share-card.d.ts.map +1 -0
- package/lib/types/client/share/share-constants.d.ts +27 -0
- package/lib/types/client/share/share-constants.d.ts.map +1 -0
- package/lib/types/client/share/share-flow.d.ts +76 -0
- package/lib/types/client/share/share-flow.d.ts.map +1 -0
- package/lib/types/client/share/share-preview.d.ts +11 -0
- package/lib/types/client/share/share-preview.d.ts.map +1 -0
- package/lib/types/client/share/share-sheet.d.ts +17 -0
- package/lib/types/client/share/share-sheet.d.ts.map +1 -0
- package/lib/types/client/share/text-layout.d.ts +48 -0
- package/lib/types/client/share/text-layout.d.ts.map +1 -0
- package/lib/types/client/styles/header.css.d.ts +1 -1
- package/lib/types/client/styles/header.css.d.ts.map +1 -1
- package/lib/types/client/styles/layout.css.d.ts +1 -1
- package/lib/types/client/styles/layout.css.d.ts.map +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/share-export.d.ts +66 -0
- package/lib/types/share-export.d.ts.map +1 -0
- package/package.json +7 -2
- package/scripts/check-host-shadow.mjs +41 -9
- package/scripts/check-keyboard-avoid.mjs +4 -2
- package/scripts/check-share-image.mjs +970 -0
- package/scripts/check-upload-endpoint.mjs +10 -3
- package/src/client/MobileAttachButton.tsx +13 -0
- package/src/client/MobileAttachChips.tsx +8 -1
- package/src/client/MobileSessionHeader.tsx +90 -30
- package/src/client/MobileSessionInfo.tsx +234 -1
- package/src/client/effects/keyboard-avoid.ts +14 -7
- package/src/client/effects/keyboard-guard.ts +28 -18
- package/src/client/host-attach.ts +54 -0
- package/src/client/index.tsx +16 -0
- package/src/client/locales.ts +46 -0
- package/src/client/share/fetch-share.ts +161 -0
- package/src/client/share/markdown.ts +609 -0
- package/src/client/share/png-stitch.ts +281 -0
- package/src/client/share/rasterize.ts +1078 -0
- package/src/client/share/share-card.tsx +637 -0
- package/src/client/share/share-constants.ts +30 -0
- package/src/client/share/share-flow.ts +166 -0
- package/src/client/share/share-preview.tsx +337 -0
- package/src/client/share/share-sheet.tsx +222 -0
- package/src/client/share/text-layout.ts +147 -0
- package/src/client/styles/header.css.ts +30 -0
- package/src/client/styles/layout.css.ts +5 -2
- package/src/index.ts +13 -0
- package/src/share-export.ts +431 -0
package/lib/index.js
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { lstat, mkdir, open, realpath, rm } from 'node:fs/promises';
|
|
18
18
|
import { basename, extname, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
19
|
+
import { handleShareExport, SHARE_EXPORT_ROUTE } from './share-export.js';
|
|
19
20
|
/** Exact route the phone composer POSTs one file body to. */
|
|
20
21
|
export const UPLOAD_ROUTE = '/_dsh/mobile-nav/upload';
|
|
21
22
|
/** Exact route the browser GETs the plugin row's client-facing knobs from.
|
|
@@ -346,5 +347,17 @@ export function apply(ctx, config = {}) {
|
|
|
346
347
|
},
|
|
347
348
|
}), 'dsh-mobile-nav: client config route');
|
|
348
349
|
});
|
|
350
|
+
// Share-image transcript route (issue #7): needs the sessionQuery service
|
|
351
|
+
// every standard dsh-base composition provides. Injected lazily like the
|
|
352
|
+
// two routes above, so a composition without it (Electron carries neither
|
|
353
|
+
// webServer nor sessionQuery) simply never mounts the route — the browser
|
|
354
|
+
// half's fetch then 404s into its "needs full DSH" message.
|
|
355
|
+
ctx.inject(['webServer', 'sessionQuery'], (webCtx) => {
|
|
356
|
+
webCtx.effect(() => webCtx.webServer.register({
|
|
357
|
+
kind: 'exact',
|
|
358
|
+
path: SHARE_EXPORT_ROUTE,
|
|
359
|
+
handler: (req, res) => handleShareExport(webCtx, req, res),
|
|
360
|
+
}), 'dsh-mobile-nav: share export route');
|
|
361
|
+
});
|
|
349
362
|
}
|
|
350
363
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Share-image transcript route (issue #7): fold one session's raw event log
|
|
3
|
+
* into the flat user/assistant transcript the phone rasterizes into shareable
|
|
4
|
+
* PNG cards.
|
|
5
|
+
*
|
|
6
|
+
* Why a host route at all: the Chat view is a paged window over a surface the
|
|
7
|
+
* compactor rewrites, so the browser DOM never holds the whole conversation
|
|
8
|
+
* and cloning it cannot work. The whole-log source of truth is the host-side
|
|
9
|
+
* `sessionQuery` service (standard dsh-base composition), which no browser
|
|
10
|
+
* half can reach.
|
|
11
|
+
*
|
|
12
|
+
* Why the RAW log (`readSession`) and not the observed surface: the surface
|
|
13
|
+
* deliberately shadows replaced ranges, so once a replacement lands it shows
|
|
14
|
+
* LESS than the user already saw — wrong source for a human transcript (the
|
|
15
|
+
* official trap note on `isAppendSurfaceEvent`: append-origin events are the
|
|
16
|
+
* transcript's durable source material). The raw log additionally carries the
|
|
17
|
+
* `agent/inbox/spliced` bookkeeping the steering classification below folds —
|
|
18
|
+
* it never exists on the surface. The fold keeps every append-origin message
|
|
19
|
+
* in log order and never applies the shadows, so a steered or compacted
|
|
20
|
+
* session still exports everything the user saw.
|
|
21
|
+
*/
|
|
22
|
+
// The two pure projection helpers are the canonical per-node rules from the
|
|
23
|
+
// session package's browser-safe subpath. Duplicating them here would be a
|
|
24
|
+
// second fold that silently drifts from the one every other consumer uses.
|
|
25
|
+
import { deriveEventMessage, isAppendSurfaceEvent } from '@deepseek-ai/dsh-session/surface';
|
|
26
|
+
/** Exact route the browser GETs a session's share transcript from. */
|
|
27
|
+
export const SHARE_EXPORT_ROUTE = '/_dsh/mobile-nav/share-export';
|
|
28
|
+
/** Upper bound on `turns` for `range=last` (PLAN §4). 500 exchanges is
|
|
29
|
+
* already more wall of text than any share card wants, and the cap keeps a
|
|
30
|
+
* careless `turns=99999999` from quietly meaning "the whole log". */
|
|
31
|
+
export const MAX_SHARE_TURNS = 500;
|
|
32
|
+
/**
|
|
33
|
+
* One rejection carrying the status the client should see.
|
|
34
|
+
*
|
|
35
|
+
* Fields are assigned in the body rather than declared as constructor
|
|
36
|
+
* parameter properties: the check scripts import this module through Node's
|
|
37
|
+
* strip-only type stripping, which rejects that syntax (same reason as
|
|
38
|
+
* UploadError in index.ts).
|
|
39
|
+
*/
|
|
40
|
+
class ShareExportError extends Error {
|
|
41
|
+
status;
|
|
42
|
+
code;
|
|
43
|
+
constructor(status, code, message) {
|
|
44
|
+
super(message);
|
|
45
|
+
this.name = 'ShareExportError';
|
|
46
|
+
this.status = status;
|
|
47
|
+
this.code = code;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function message(error) {
|
|
51
|
+
return error instanceof Error ? error.message : String(error);
|
|
52
|
+
}
|
|
53
|
+
/** Identical envelope to index.ts's responseJson — kept local so this route
|
|
54
|
+
* module stays importable without a cycle back into the entry file. */
|
|
55
|
+
function responseJson(res, status, body) {
|
|
56
|
+
const bytes = Buffer.from(JSON.stringify(body));
|
|
57
|
+
res.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
58
|
+
res.setHeader('Content-Length', String(bytes.length));
|
|
59
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
60
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
61
|
+
res.setHeader('Content-Security-Policy', "default-src 'none'; frame-ancestors 'none'");
|
|
62
|
+
res.writeHead(status);
|
|
63
|
+
res.end(bytes);
|
|
64
|
+
}
|
|
65
|
+
function singleQuery(url, key) {
|
|
66
|
+
const values = url.searchParams.getAll(key);
|
|
67
|
+
const value = values[0];
|
|
68
|
+
if (values.length !== 1 || value === undefined || value === '') {
|
|
69
|
+
throw new ShareExportError(400, 'bad-request', `${key} is required exactly once`);
|
|
70
|
+
}
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Validate the `range`/`turns` pair. Absent `range` means `all`; `last`
|
|
75
|
+
* must carry exactly one `turns` that is a plain integer 1–500 — the phone
|
|
76
|
+
* only offers presets, so a fractional/negative/oversized/repeated value is
|
|
77
|
+
* a hand-typed URL or a client bug, and a loud 400 beats slicing to a
|
|
78
|
+
* guessed intent. `turns` next to any other range (or to none) is rejected
|
|
79
|
+
* rather than ignored: silently dropping it would answer a different
|
|
80
|
+
* question than the URL asks.
|
|
81
|
+
*/
|
|
82
|
+
function parseRange(url) {
|
|
83
|
+
const values = url.searchParams.getAll('range');
|
|
84
|
+
const value = values[0];
|
|
85
|
+
if (values.length === 0)
|
|
86
|
+
return { kind: 'all' };
|
|
87
|
+
if (values.length !== 1 || value === undefined || value === '') {
|
|
88
|
+
throw new ShareExportError(400, 'bad-request', 'range is allowed at most once');
|
|
89
|
+
}
|
|
90
|
+
if (value === 'all')
|
|
91
|
+
return { kind: 'all' };
|
|
92
|
+
if (value !== 'last') {
|
|
93
|
+
throw new ShareExportError(400, 'bad-request', `unsupported range: ${value}`);
|
|
94
|
+
}
|
|
95
|
+
const turnsList = url.searchParams.getAll('turns');
|
|
96
|
+
const turns = turnsList[0];
|
|
97
|
+
if (turnsList.length !== 1 || turns === undefined || turns === '') {
|
|
98
|
+
throw new ShareExportError(400, 'bad-request', 'turns is required exactly once when range=last');
|
|
99
|
+
}
|
|
100
|
+
const count = /^[0-9]+$/.test(turns) ? Number(turns) : Number.NaN;
|
|
101
|
+
if (!Number.isInteger(count) || count < 1 || count > MAX_SHARE_TURNS) {
|
|
102
|
+
throw new ShareExportError(400, 'bad-request', `turns must be an integer between 1 and ${MAX_SHARE_TURNS}`);
|
|
103
|
+
}
|
|
104
|
+
return { kind: 'last', turns: count };
|
|
105
|
+
}
|
|
106
|
+
/** Reject a `turns` parameter on a request that is not range=last. */
|
|
107
|
+
function rejectStrayTurns(url) {
|
|
108
|
+
if (url.searchParams.has('turns')) {
|
|
109
|
+
throw new ShareExportError(400, 'bad-request', 'turns is only valid with range=last');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** `SESSION_QUERY_SESSION_NOT_FOUND`, read structurally: the error class
|
|
113
|
+
* lives in a package this module only knows by type, and the taxonomy string
|
|
114
|
+
* is the stable contract either side can be checked against. */
|
|
115
|
+
function isSessionNotFound(error) {
|
|
116
|
+
return error instanceof Error && error.code === 'SESSION_QUERY_SESSION_NOT_FOUND';
|
|
117
|
+
}
|
|
118
|
+
/** `agent/inbox/spliced` for the NEXT-STEP inbox, or null for anything else
|
|
119
|
+
* (including next-turn splices: the Chat classifier reads only the next-step
|
|
120
|
+
* node, and turn claiming is none of this fold's business). */
|
|
121
|
+
function nextStepSpliceOf(event) {
|
|
122
|
+
// The double cast widens deliberately: the 0.1.2-rc.1 union cannot even
|
|
123
|
+
// NAME the newer event type, so a same-type cast would keep narrowing the
|
|
124
|
+
// literal and reject the comparison outright.
|
|
125
|
+
const widened = event;
|
|
126
|
+
return widened.type === 'agent/inbox/spliced' && widened.data.target === 'next-step'
|
|
127
|
+
? widened.data
|
|
128
|
+
: null;
|
|
129
|
+
}
|
|
130
|
+
const NO_CLAIM = new Set();
|
|
131
|
+
/**
|
|
132
|
+
* Apply one next-step splice, replicated from the host Chat client's
|
|
133
|
+
* conversation-node fold (`nextStepInboxDefinition` → `applySplice` /
|
|
134
|
+
* `materializePending` / `withoutInserted` in dsh-client-ui-chat lib/client.js,
|
|
135
|
+
* closure @deepseek-ai/dsh-client-ui-chat 0.1.5-rc.2 — re-pin and re-verify
|
|
136
|
+
* that block when the harness version moves):
|
|
137
|
+
*
|
|
138
|
+
* - a REMOVING splice with no `canceled` outcome is an entered claim: the
|
|
139
|
+
* pending list loses the removed ids (an insert/cancel chain is materialized
|
|
140
|
+
* first, since the host keeps pending lazily) and `currentClaimed` is
|
|
141
|
+
* REPLACED by exactly the removed ids — the comment there: "An entered claim
|
|
142
|
+
* logs its complete message batch before another claim; a rejected claim
|
|
143
|
+
* logs no messages, so only the current claim can classify a later
|
|
144
|
+
* `user/message`";
|
|
145
|
+
* - a pure insert or a cancel (including a cancel that also inserts — the
|
|
146
|
+
* in-place replace path) leaves the claim verdict alone except that any
|
|
147
|
+
* INSERTED id leaves the claimed set: a message back in the inbox is pending
|
|
148
|
+
* again, not steering.
|
|
149
|
+
*
|
|
150
|
+
* Deviations from the closure source, none observable in the fold result: the
|
|
151
|
+
* pending list is an eager array (the host's lazy splice chain only defers the
|
|
152
|
+
* same materialization), and ids are `String()`-normalized on BOTH sides (the
|
|
153
|
+
* host stores raw inserted ids and String()-coerces only the lookup key —
|
|
154
|
+
* identical while message ids are strings, which `MessageId` brands them to
|
|
155
|
+
* be).
|
|
156
|
+
*/
|
|
157
|
+
function applyNextStepSplice(previous, splice) {
|
|
158
|
+
const insertedIds = splice.inserted.map((identity) => String(identity.id));
|
|
159
|
+
const removedCount = splice.removedCount ?? 0;
|
|
160
|
+
const pending = previous.pending.slice();
|
|
161
|
+
const removedIds = pending.splice(splice.start, removedCount, ...insertedIds).map(String);
|
|
162
|
+
if (removedCount > 0 && splice.outcome !== 'canceled') {
|
|
163
|
+
return { pending, currentClaimed: new Set(removedIds) };
|
|
164
|
+
}
|
|
165
|
+
const currentClaimed = new Set(previous.currentClaimed);
|
|
166
|
+
for (const id of insertedIds)
|
|
167
|
+
currentClaimed.delete(id);
|
|
168
|
+
return { pending, currentClaimed };
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Fold one session's complete raw event log into transcript rows, in log order.
|
|
172
|
+
*
|
|
173
|
+
* Row admission, in the order the filters run:
|
|
174
|
+
* - `agent/inbox/spliced` (next-step) events are not rows at all: they only
|
|
175
|
+
* advance the Inbox state that classifies the user rows below;
|
|
176
|
+
* - append-origin surface events only (`isAppendSurfaceEvent`): a replacement
|
|
177
|
+
* copy is model-only and must not add itself to the transcript — this also
|
|
178
|
+
* keeps a compaction checkpoint (`isReplacementSurfaceEvent` user/message
|
|
179
|
+
* with `source.plugin === 'compact'`) out, exactly as the Chat view's
|
|
180
|
+
* `messageDefinition` excludes it — while the ranges a replacement shadowed
|
|
181
|
+
* stay in place; that is what makes this a human transcript rather than the
|
|
182
|
+
* model surface;
|
|
183
|
+
* - `deriveEventMessage` drops events that produce no message, which covers
|
|
184
|
+
* turn/step boundaries AND the usage-only empty assistant message;
|
|
185
|
+
* - system never renders in a shared conversation;
|
|
186
|
+
* - user rows must be human-authored (`source.kind === 'user'`): injected
|
|
187
|
+
* contexts (file notices, skill content, …) are also user-role messages,
|
|
188
|
+
* and the Chat view renders them as context rows, not conversation — a
|
|
189
|
+
* share card shows the words people exchanged, not the machinery;
|
|
190
|
+
* - a human user row then gets its turn verdict from the Inbox state: claimed
|
|
191
|
+
* (`currentClaimed.has(id)`, `String()`-normalized like the host) means
|
|
192
|
+
* STEERING — it stays in the transcript and in its turn as an ordinary
|
|
193
|
+
* user bubble, but never anchors a new one; unclaimed means a true question
|
|
194
|
+
* that opens the next turn;
|
|
195
|
+
* - blocks: text passes verbatim, image becomes a `{kind:'image'}` placeholder
|
|
196
|
+
* (attachments live on the host disk and stay out of v1), everything else —
|
|
197
|
+
* reasoning (folded on the phone anyway), tool-call/tool-result, file, and
|
|
198
|
+
* block types this fold does not know — is dropped;
|
|
199
|
+
* - a row that survives every filter above but yields no exportable block
|
|
200
|
+
* (a file-only human message, a tool-call-only assistant step) is KEPT
|
|
201
|
+
* here with `blocks: []`: the turn grouping below needs the conversation's
|
|
202
|
+
* true anchor shape, and only the serializers drop the empties.
|
|
203
|
+
* @param events - complete raw log, contiguous ascending seq.
|
|
204
|
+
* @returns the admitted rows in conversation order, empty ones included.
|
|
205
|
+
*/
|
|
206
|
+
function foldRows(events) {
|
|
207
|
+
const rows = [];
|
|
208
|
+
let inbox = { pending: [], currentClaimed: NO_CLAIM };
|
|
209
|
+
for (const event of events) {
|
|
210
|
+
const splice = nextStepSpliceOf(event);
|
|
211
|
+
if (splice !== null) {
|
|
212
|
+
inbox = applyNextStepSplice(inbox, splice);
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
if (!isAppendSurfaceEvent(event))
|
|
216
|
+
continue;
|
|
217
|
+
const msg = deriveEventMessage(event);
|
|
218
|
+
if (msg === null)
|
|
219
|
+
continue;
|
|
220
|
+
if (msg.role !== 'user' && msg.role !== 'assistant')
|
|
221
|
+
continue;
|
|
222
|
+
if (msg.role === 'user' && msg.source.kind !== 'user')
|
|
223
|
+
continue;
|
|
224
|
+
const blocks = [];
|
|
225
|
+
for (const block of msg.content) {
|
|
226
|
+
if (block.type === 'text')
|
|
227
|
+
blocks.push({ kind: 'text', text: block.text });
|
|
228
|
+
else if (block.type === 'image')
|
|
229
|
+
blocks.push({ kind: 'image' });
|
|
230
|
+
}
|
|
231
|
+
rows.push({
|
|
232
|
+
role: msg.role,
|
|
233
|
+
seq: event.seq,
|
|
234
|
+
blocks,
|
|
235
|
+
// Assistant rows are never anchors; a user row anchors unless the Inbox
|
|
236
|
+
// state claims its id as steering.
|
|
237
|
+
anchor: msg.role === 'user' && !inbox.currentClaimed.has(String(msg.id)),
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
return rows;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Rows with at least one exportable block — an empty bubble is not worth
|
|
244
|
+
* shipping, so every serializer (the all-body and the last-N tail) drops
|
|
245
|
+
* them and strips the internal anchor flag through this one helper, leaving
|
|
246
|
+
* the plain `ShareTurn` wire shape.
|
|
247
|
+
*/
|
|
248
|
+
function serializeRows(rows) {
|
|
249
|
+
return rows.flatMap(({ anchor: _anchor, ...turn }) => (turn.blocks.length > 0 ? [turn] : []));
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Group folded rows into conversation turns (PLAN §4.5): one turn is a true
|
|
253
|
+
* question — a user row the Inbox state left unclaimed — plus everything up
|
|
254
|
+
* to the next question. A steering row never opens a turn: it belongs to the
|
|
255
|
+
* turn it interrupted, exactly where the user saw it. Assistant rows before
|
|
256
|
+
* the FIRST question form turn 0: a fork inherits history that begins
|
|
257
|
+
* mid-conversation, and those rows belong to no anchor yet.
|
|
258
|
+
*/
|
|
259
|
+
function groupRowsIntoTurns(rows) {
|
|
260
|
+
const groups = [];
|
|
261
|
+
let current = [];
|
|
262
|
+
for (const row of rows) {
|
|
263
|
+
// An empty `current` on an anchor means the log OPENED on this anchor:
|
|
264
|
+
// nothing was inherited, so turn 0 simply does not exist here.
|
|
265
|
+
if (row.anchor && current.length > 0) {
|
|
266
|
+
groups.push(current);
|
|
267
|
+
current = [];
|
|
268
|
+
}
|
|
269
|
+
current.push(row);
|
|
270
|
+
}
|
|
271
|
+
if (current.length > 0)
|
|
272
|
+
groups.push(current);
|
|
273
|
+
return groups;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* The `range=last&turns=N` body: the transcript of the last N turns that
|
|
277
|
+
* fold to at least one block, counted in the true-question sense above.
|
|
278
|
+
* Walked from the end so a turn whose every row went empty (a file-only
|
|
279
|
+
* message answered by tool-call-only steps — the exchange happened, but a
|
|
280
|
+
* share card has nothing to show) is skipped WITHOUT eating one of the N
|
|
281
|
+
* slots; rows that went empty INSIDE a kept turn still never serialize.
|
|
282
|
+
* Only the selected tail is returned — the cut head never reaches the
|
|
283
|
+
* response body.
|
|
284
|
+
*/
|
|
285
|
+
function sliceLastTurns(rows, count) {
|
|
286
|
+
const groups = groupRowsIntoTurns(rows);
|
|
287
|
+
const selected = [];
|
|
288
|
+
let remaining = count;
|
|
289
|
+
for (let i = groups.length - 1; i >= 0 && remaining > 0; i -= 1) {
|
|
290
|
+
const group = groups[i];
|
|
291
|
+
if (group.every((row) => row.blocks.length === 0))
|
|
292
|
+
continue;
|
|
293
|
+
selected.unshift(...group);
|
|
294
|
+
remaining -= 1;
|
|
295
|
+
}
|
|
296
|
+
return serializeRows(selected);
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Handle one `GET {@link SHARE_EXPORT_ROUTE}?session=<id>&range=all|last&turns=N`
|
|
300
|
+
* request.
|
|
301
|
+
*
|
|
302
|
+
* Exported so an integration test can drive it with a plain node:http server
|
|
303
|
+
* and a fake sessionQuery service instead of booting a harness.
|
|
304
|
+
* @param ctx - host context carrying the sessionQuery service and logger.
|
|
305
|
+
* @param req - inbound request; no body is read.
|
|
306
|
+
* @param res - the response this call owns end to end.
|
|
307
|
+
*/
|
|
308
|
+
export async function handleShareExport(ctx, req, res) {
|
|
309
|
+
if (req.method !== 'GET') {
|
|
310
|
+
res.setHeader('Allow', 'GET');
|
|
311
|
+
responseJson(res, 405, { ok: false, error: { code: 'method-not-allowed', message: 'Use GET' } });
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
try {
|
|
315
|
+
const url = new URL(req.url ?? SHARE_EXPORT_ROUTE, 'http://dsh.internal');
|
|
316
|
+
const sessionId = singleQuery(url, 'session');
|
|
317
|
+
const range = parseRange(url);
|
|
318
|
+
if (range.kind === 'all')
|
|
319
|
+
rejectStrayTurns(url);
|
|
320
|
+
// readSession (not observeSession): the fold needs the COMPLETE raw log in
|
|
321
|
+
// log order — the surface observation is model-ordered, shadows replaced
|
|
322
|
+
// ranges, and never carries `agent/inbox/spliced`. The returned
|
|
323
|
+
// SessionLogSnapshot is detached and fully cloned: unlike
|
|
324
|
+
// SessionObservation it declares no dispose/retain (checked against
|
|
325
|
+
// @deepseek-ai/dsh-session-query 0.1.2-rc.1 types), so there is no lease
|
|
326
|
+
// to release — its replay validation is what guarantees the contiguous
|
|
327
|
+
// ascending events the fold and the Inbox machine rely on.
|
|
328
|
+
const snapshot = await ctx.sessionQuery.readSession(sessionId);
|
|
329
|
+
// One fold of the whole log (the last N turns cannot be found from the
|
|
330
|
+
// tail alone); the range decides which slice of it is serialized.
|
|
331
|
+
const rows = foldRows(snapshot.events);
|
|
332
|
+
const body = {
|
|
333
|
+
ok: true,
|
|
334
|
+
createdAt: snapshot.session.createdAt,
|
|
335
|
+
turns: range.kind === 'last' ? sliceLastTurns(rows, range.turns) : serializeRows(rows),
|
|
336
|
+
truncated: false,
|
|
337
|
+
};
|
|
338
|
+
responseJson(res, 200, body);
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
const status = error instanceof ShareExportError ? error.status : isSessionNotFound(error) ? 404 : 500;
|
|
342
|
+
const code = error instanceof ShareExportError ? error.code : isSessionNotFound(error) ? 'session-not-found' : 'export-failed';
|
|
343
|
+
ctx.logger.warn('dsh-mobile-nav share-export rejected: %s', message(error));
|
|
344
|
+
responseJson(res, status, { ok: false, error: { code, message: message(error) } });
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=share-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share-export.js","sourceRoot":"","sources":["../src/share-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,13 @@ export type MobileAttachButtonProps = PropsRuntime<'conversation.input.left'> &
|
|
|
11
11
|
* the CLIENT's picker — no `accept` attribute on purpose, so iOS offers the
|
|
12
12
|
* full 相册 / 拍照 / 选取文件 sheet rather than one of them.
|
|
13
13
|
*
|
|
14
|
+
* DSH 0.1.5 gave the official tool row its own paperclip (the host attachment
|
|
15
|
+
* flow), which made TWO identical controls on a phone. This button now stands
|
|
16
|
+
* down entirely while the host ships its own picker (`host-attach.ts` probes
|
|
17
|
+
* for it) — the official flow uploads into `~/.dsh/attachments` and renders
|
|
18
|
+
* its own rail, so the composer keeps exactly one attach affordance. On a
|
|
19
|
+
* host without one (DSH ≤ 0.1.2) everything below loads exactly as before.
|
|
20
|
+
*
|
|
14
21
|
* Every picked file takes the SAME path: upload to the node half, then append
|
|
15
22
|
* `@.dsh-uploads/name` to the draft through `inputActions.setDraft` (the
|
|
16
23
|
* official write path — no DOM value poking). S7.1 removed the split that used
|
|
@@ -21,5 +28,5 @@ export type MobileAttachButtonProps = PropsRuntime<'conversation.input.left'> &
|
|
|
21
28
|
* Files upload one at a time: a phone uplink gains nothing from parallelism
|
|
22
29
|
* and a serial loop keeps the mentions in pick order.
|
|
23
30
|
*/
|
|
24
|
-
export declare function MobileAttachButton({ t, sessionId, useInput, inputActions }: MobileAttachButtonProps): import("react").JSX.Element;
|
|
31
|
+
export declare function MobileAttachButton({ t, sessionId, useInput, inputActions }: MobileAttachButtonProps): import("react").JSX.Element | null;
|
|
25
32
|
//# sourceMappingURL=MobileAttachButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileAttachButton.d.ts","sourceRoot":"","sources":["../../../src/client/MobileAttachButton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAGjF,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"MobileAttachButton.d.ts","sourceRoot":"","sources":["../../../src/client/MobileAttachButton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAGjF,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAIjC,mDAAmD;AACnD,MAAM,MAAM,uBAAuB,GAC/B,YAAY,CAAC,yBAAyB,CAAC,GACvC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;AAsB1B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,uBAAuB,sCA6EnG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileAttachChips.d.ts","sourceRoot":"","sources":["../../../src/client/MobileAttachChips.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAEjF,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"MobileAttachChips.d.ts","sourceRoot":"","sources":["../../../src/client/MobileAttachChips.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAEjF,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAWjC,iDAAiD;AACjD,MAAM,MAAM,sBAAsB,GAC9B,YAAY,CAAC,yBAAyB,CAAC,GACvC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,sBAAsB,sCA8CtF"}
|
|
@@ -45,14 +45,13 @@ export declare function MobileHeaderActions({ sessionId, useSessions, t }: Mobil
|
|
|
45
45
|
export type MobileHeaderUtilitiesProps = PropsRuntime<'conversation.session.header.utilities'> & PropsLocale<typeof NS>;
|
|
46
46
|
/**
|
|
47
47
|
* Session header, right lane: the session-info entry (S4 owns the actual
|
|
48
|
-
* sheet — this fires a hook event for it to pick up) and the
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* for a content open, not a bare type-only open
|
|
52
|
-
* plugin's real toggle
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* other workbench-style plugin sharing that convention, is not installed.
|
|
48
|
+
* sheet — this fires a hook event for it to pick up) and the sidebar entry.
|
|
49
|
+
* The sidebar button routes per {@link SidebarTarget}: better-sidebar's own
|
|
50
|
+
* toggle (no public "open the panel" API — BetterSidebarService.openTab only
|
|
51
|
+
* auto-expands for a content open, not a bare type-only open, so it clicks
|
|
52
|
+
* the plugin's real toggle through its root marker `[data-dsh-better-
|
|
53
|
+
* sidebar]` plus the `_toggleButton` class suffix, verified live 2026-08-17),
|
|
54
|
+
* the official right sidebar's controls, or nothing when neither exists.
|
|
56
55
|
*/
|
|
57
56
|
export declare function MobileHeaderUtilities({ t }: MobileHeaderUtilitiesProps): import("react").JSX.Element;
|
|
58
57
|
//# sourceMappingURL=MobileSessionHeader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileSessionHeader.d.ts","sourceRoot":"","sources":["../../../src/client/MobileSessionHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAEjF,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAyHjC,yEAAyE;AACzE,MAAM,MAAM,wBAAwB,GAChC,YAAY,CAAC,qCAAqC,CAAC,GACnD,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;AAE1B,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,iBAAiB,CAAA;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,IAAI,WAAW,EAAE,CAQ5C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,IAAI,WAAW,EAAE,CAe3C;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,wBAAwB,+BA4E1F;AAED,sEAAsE;AACtE,MAAM,MAAM,0BAA0B,GAClC,YAAY,CAAC,uCAAuC,CAAC,GACrD,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"MobileSessionHeader.d.ts","sourceRoot":"","sources":["../../../src/client/MobileSessionHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAEjF,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAyHjC,yEAAyE;AACzE,MAAM,MAAM,wBAAwB,GAChC,YAAY,CAAC,qCAAqC,CAAC,GACnD,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;AAE1B,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,iBAAiB,CAAA;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,IAAI,WAAW,EAAE,CAQ5C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,IAAI,WAAW,EAAE,CAe3C;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,wBAAwB,+BA4E1F;AAED,sEAAsE;AACtE,MAAM,MAAM,0BAA0B,GAClC,YAAY,CAAC,uCAAuC,CAAC,GACrD,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;AAyE1B;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,CAAC,EAAE,EAAE,0BAA0B,+BAwFtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileSessionInfo.d.ts","sourceRoot":"","sources":["../../../src/client/MobileSessionInfo.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"MobileSessionInfo.d.ts","sourceRoot":"","sources":["../../../src/client/MobileSessionInfo.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAWjF,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAgCjC,8EAA8E;AAC9E,MAAM,MAAM,sBAAsB,GAC9B,YAAY,CAAC,uCAAuC,CAAC,GACrD,WAAW,CAAC,OAAO,EAAE,CAAC,GACtB;IACA,4CAA4C;IAC5C,WAAW,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAA;IACzD,yEAAyE;IACzE,WAAW,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,CAAA;IACpC,iGAAiG;IACjG,aAAa,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAA;IAChF,sDAAsD;IACtD,cAAc,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,6FAA6F;IAC7F,kBAAkB,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5D,CAAA;AA0CH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,WAAW,EACX,aAAa,EACb,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,CAAC,GACF,EAAE,sBAAsB,sCAgbxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard-avoid.d.ts","sourceRoot":"","sources":["../../../../src/client/effects/keyboard-avoid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAmC,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAoC1F;;;uEAGuE;AACvE,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAsB,GAAG,MAAM,CAElF;AAyBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAE,cAAkC,GAAG,MAAM,CAErG;AAED,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAA;IACnB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAI7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,OAAO,EACvB,GAAG,EAAE,MAAM,GACV,MAAM,CAUR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"keyboard-avoid.d.ts","sourceRoot":"","sources":["../../../../src/client/effects/keyboard-avoid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAmC,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAoC1F;;;uEAGuE;AACvE,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAsB,GAAG,MAAM,CAElF;AAyBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAE,cAAkC,GAAG,MAAM,CAErG;AAED,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAA;IACnB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAI7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,OAAO,EACvB,GAAG,EAAE,MAAM,GACV,MAAM,CAUR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAkM7D"}
|
|
@@ -2,24 +2,29 @@ import type { ClientContext } from '../compat/types.ts';
|
|
|
2
2
|
/**
|
|
3
3
|
* S9 — keep the phone keyboard down until the user asks for it.
|
|
4
4
|
*
|
|
5
|
-
* dsh-client-ui-conversation focuses the composer
|
|
6
|
-
* sessionId change (
|
|
7
|
-
*
|
|
8
|
-
* software keyboard over half the screen every time a
|
|
5
|
+
* dsh-client-ui-conversation focuses the composer's editing host on every
|
|
6
|
+
* sessionId change (0.1.2: `el.focus({preventScroll:true})` on the textarea;
|
|
7
|
+
* 0.1.5: the same on the Lexical contenteditable). Sensible on desktop; on a
|
|
8
|
+
* phone it pops the software keyboard over half the screen every time a
|
|
9
|
+
* session opens.
|
|
9
10
|
*
|
|
10
|
-
* Rule: focus on the composer
|
|
11
|
-
* it — a tap on the
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* send) is blurred.
|
|
11
|
+
* Rule: focus on the composer field survives only when the user asked for
|
|
12
|
+
* it — a tap on the field itself or typing on a hardware keyboard. Anything
|
|
13
|
+
* else (session-open autofocus, push-deep-link opens, the refocus side
|
|
14
|
+
* effects of the other composer buttons — the official attach paperclip's
|
|
15
|
+
* `keepFocus` mousedown, the slash-command toggle, send) is blurred. That
|
|
16
|
+
* attach case is not hypothetical: 0.1.5's official paperclip refocuses the
|
|
17
|
+
* editor on MOUSEDOWN, and while this guard was blind to the contenteditable
|
|
18
|
+
* (2026-09-11 report) every tap on it popped the keyboard and shoved the
|
|
19
|
+
* composer up the screen.
|
|
15
20
|
*
|
|
16
21
|
* Two triggers, because one is not enough:
|
|
17
22
|
* - focusin catches the autofocus the moment it happens;
|
|
18
23
|
* - a body MutationObserver re-runs the check after transcript swaps
|
|
19
|
-
* (opening a session re-renders the flow but may reuse the same
|
|
24
|
+
* (opening a session re-renders the flow but may reuse the same field,
|
|
20
25
|
* and a focus that landed before this plugin loaded never fired focusin
|
|
21
26
|
* for us at all).
|
|
22
|
-
* Once focus is user-granted it stays granted until the
|
|
27
|
+
* Once focus is user-granted it stays granted until the field blurs, so
|
|
23
28
|
* the observer never yanks a keyboard the user opened (e.g. while the agent
|
|
24
29
|
* streams and the user pauses typing).
|
|
25
30
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard-guard.d.ts","sourceRoot":"","sources":["../../../../src/client/effects/keyboard-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAWvD
|
|
1
|
+
{"version":3,"file":"keyboard-guard.d.ts","sourceRoot":"","sources":["../../../../src/client/effects/keyboard-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAWvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CA0F7D"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The host composer's own hidden file picker, when the running DSH ships one.
|
|
3
|
+
*
|
|
4
|
+
* DSH 0.1.5 grew a native attachment flow (dsh-attachment / dsh-client-file-
|
|
5
|
+
* upload): the official tool row carries a second `_add` paperclip whose click
|
|
6
|
+
* drives an `<input type="file" hidden>` that is a DIRECT sibling of the
|
|
7
|
+
* buttons inside `_tools`. That input is the one structural, locale-free
|
|
8
|
+
* proof that the host implements composer attachment upload — the button
|
|
9
|
+
* itself can only be told apart from the "+" command menu by its localized
|
|
10
|
+
* aria-label, and the capability prop (`addFiles`) lives on the composer
|
|
11
|
+
* bar's own inject face, which never reaches `conversation.input.left`
|
|
12
|
+
* registrants. Scoped to `_tools` children so a third-party plugin parking
|
|
13
|
+
* its own file input somewhere else in the composer cannot be misread as
|
|
14
|
+
* the official feature; `:not([data-mobile-nav])` keeps OUR picker
|
|
15
|
+
* (`attach-picker`) out of the match.
|
|
16
|
+
*/
|
|
17
|
+
export declare const HOST_ATTACH_INPUT = "[data-slot=\"conversation.composer.bar\"] [class$=\"_tools\"] > input[type=\"file\"]:not([data-mobile-nav])";
|
|
18
|
+
/** Synchronous read: does this host's composer ship its own attach picker? */
|
|
19
|
+
export declare function hostAttachPresent(): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* True while OUR attachment UI should mount (the host has none of its own).
|
|
22
|
+
*
|
|
23
|
+
* The rule this encodes (2026-09-11): where the host implements attachment
|
|
24
|
+
* upload, the phone composer shows exactly ONE attach control — the host's —
|
|
25
|
+
* and this plugin's S7 button and chips row stand down; on a host without
|
|
26
|
+
* one (DSH ≤ 0.1.2), both load as they always have.
|
|
27
|
+
*
|
|
28
|
+
* `useLayoutEffect`, not `useEffect`: on the composer's very first mount our
|
|
29
|
+
* slot child renders in the same React pass as the host's tool row, so the
|
|
30
|
+
* state initializer below reads the DOM BEFORE either exists — the layout
|
|
31
|
+
* effect re-checks after the commit and before the browser paints, so the
|
|
32
|
+
* demotion to hidden (or, on an old host, the decision to stay) never
|
|
33
|
+
* reaches the screen as a flash. The MutationObserver covers the lifetime
|
|
34
|
+
* after that: the picker's existence only really changes with the page, but
|
|
35
|
+
* a dynamic host plugin or a reload must not strand a stale verdict.
|
|
36
|
+
*/
|
|
37
|
+
export declare function useOwnAttachUi(): boolean;
|
|
38
|
+
//# sourceMappingURL=host-attach.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-attach.d.ts","sourceRoot":"","sources":["../../../src/client/host-attach.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,gHAC2E,CAAA;AAEzG,8EAA8E;AAC9E,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAUxC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAA0B,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAA0B,MAAM,mBAAmB,CAAA;AA0B9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,sCAAsC;QACtC,WAAW,EAAE,YAAY,CAAA;KAC1B;CACF;AAED,0GAA0G;AAC1G,eAAO,MAAM,MAAM,UAAgF,CAAA;AAmBnG;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAsP9C"}
|