@dsh-enhanced/owner-console 0.0.0-stage → 0.1.66

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 (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +312 -2
  3. package/cordis.patch.yml +3 -0
  4. package/lib/art.d.ts +7 -0
  5. package/lib/art.d.ts.map +1 -0
  6. package/lib/art.js +22 -0
  7. package/lib/art.js.map +1 -0
  8. package/lib/artwork.d.ts +13 -0
  9. package/lib/artwork.d.ts.map +1 -0
  10. package/lib/artwork.js +13 -0
  11. package/lib/artwork.js.map +1 -0
  12. package/lib/build-approvals.d.ts +11 -0
  13. package/lib/build-approvals.d.ts.map +1 -0
  14. package/lib/build-approvals.js +64 -0
  15. package/lib/build-approvals.js.map +1 -0
  16. package/lib/chat-view.d.ts +50 -0
  17. package/lib/chat-view.d.ts.map +1 -0
  18. package/lib/chat-view.js +560 -0
  19. package/lib/chat-view.js.map +1 -0
  20. package/lib/chat.d.ts +345 -0
  21. package/lib/chat.d.ts.map +1 -0
  22. package/lib/chat.js +418 -0
  23. package/lib/chat.js.map +1 -0
  24. package/lib/client.d.ts +126 -0
  25. package/lib/client.d.ts.map +1 -0
  26. package/lib/client.js +17241 -0
  27. package/lib/client.js.map +1 -0
  28. package/lib/index.d.ts +16 -0
  29. package/lib/index.d.ts.map +1 -0
  30. package/lib/index.js +18 -0
  31. package/lib/index.js.map +1 -0
  32. package/lib/service.d.ts +77 -0
  33. package/lib/service.d.ts.map +1 -0
  34. package/lib/service.js +689 -0
  35. package/lib/service.js.map +1 -0
  36. package/lib/settings.d.ts +136 -0
  37. package/lib/settings.d.ts.map +1 -0
  38. package/lib/settings.js +31 -0
  39. package/lib/settings.js.map +1 -0
  40. package/lib/state.d.ts +35 -0
  41. package/lib/state.d.ts.map +1 -0
  42. package/lib/state.js +84 -0
  43. package/lib/state.js.map +1 -0
  44. package/lib/typert.d.ts +1307 -0
  45. package/lib/typert.d.ts.map +1 -0
  46. package/lib/typert.js +271 -0
  47. package/lib/typert.js.map +1 -0
  48. package/lib/ui.d.ts +142 -0
  49. package/lib/ui.d.ts.map +1 -0
  50. package/lib/ui.js +87 -0
  51. package/lib/ui.js.map +1 -0
  52. package/lib/version.d.ts +2 -0
  53. package/lib/version.d.ts.map +1 -0
  54. package/lib/version.js +2 -0
  55. package/lib/version.js.map +1 -0
  56. package/package.json +99 -3
package/lib/chat.js ADDED
@@ -0,0 +1,418 @@
1
+ /**
2
+ * Chat-window domain helpers for the 文鳐 panel. Everything here operates on the
3
+ * native Session services the Host exposes to a client plugin: the retained Session's
4
+ * durable event window, its `prompt`/`command`/`cancel` verbs, the staged file-upload
5
+ * service, and the Session `permissions` projection. No second agent loop and no
6
+ * message-sending shortcut lives here.
7
+ *
8
+ * Types are structural on purpose: a client package may only import `react` at runtime,
9
+ * so the Host service shapes are declared locally and resolved through `ctx.get()`.
10
+ */
11
+ /** localStorage key for the panel's dedicated chat Session (browser-local only). */
12
+ export const CHAT_SESSION_KEY = 'dsh.owner-console.chat-session';
13
+ /** Consumer label for the retained reference; a Session value survives page reloads. */
14
+ export const CHAT_REFERENCE_SOURCE = 'ownerConsoleChat';
15
+ /** Most recent transcript rows kept in memory for rendering. */
16
+ export const CHAT_MESSAGE_LIMIT = 200;
17
+ const textOf = (block) => {
18
+ if (block.type !== 'text' || typeof block.text !== 'string')
19
+ return undefined;
20
+ return block.text;
21
+ };
22
+ /** Human-readable transcript text; attachments stay named placeholders, never fabricated content. */
23
+ export function messageText(message) {
24
+ if (message?.content === undefined)
25
+ return '';
26
+ const parts = [];
27
+ for (const block of message.content) {
28
+ const text = textOf(block);
29
+ if (text !== undefined) {
30
+ parts.push(text);
31
+ continue;
32
+ }
33
+ if (block.type === 'image')
34
+ parts.push('[图片]');
35
+ else if (block.type === 'file')
36
+ parts.push(block.attachment?.name === undefined ? '[文件]' : `[文件:${block.attachment.name}]`);
37
+ }
38
+ return parts.join('\n').trim();
39
+ }
40
+ const failureText = (error) => {
41
+ if (error?.code !== undefined && error.message !== undefined)
42
+ return `${error.code}:${error.message}`;
43
+ if (error?.message !== undefined)
44
+ return error.message;
45
+ return 'Host 未说明的拒绝';
46
+ };
47
+ /** Display-ready Remote failure, shared by the chat and permission notices. */
48
+ export const remoteFailureSummary = failureText;
49
+ /** Bound an error/notification line so a pathological Host message cannot force a huge DOM node. */
50
+ export function boundedText(text, limit = 600) {
51
+ const normalized = text.replace(/\s+/gu, ' ').trim();
52
+ return normalized.length > limit ? `${normalized.slice(0, limit)}…` : normalized;
53
+ }
54
+ /**
55
+ * Project the durable event window into chat rows. Only human prompts become user
56
+ * bubbles; injected `agent.inject()` context is not a human message and stays out of
57
+ * this compact transcript. Assistant text, tool activity, and turn errors remain.
58
+ */
59
+ export function chatMessages(entries) {
60
+ if (entries === undefined)
61
+ return [];
62
+ const messages = [];
63
+ const tools = new Map();
64
+ for (const entry of entries) {
65
+ if (entry.type !== 'event')
66
+ continue;
67
+ const { event } = entry;
68
+ const seq = Number.isFinite(event.seq) ? event.seq : messages.length;
69
+ switch (event.type) {
70
+ case 'user/message': {
71
+ if (event.data?.message?.source?.kind !== 'user')
72
+ break;
73
+ const text = messageText(event.data.message);
74
+ if (text !== '')
75
+ messages.push({ kind: 'user', key: `user:${seq}`, seq, text });
76
+ break;
77
+ }
78
+ case 'assistant/message': {
79
+ const text = messageText(event.data?.message);
80
+ if (text !== '')
81
+ messages.push({ kind: 'assistant', key: `assistant:${seq}`, seq, text });
82
+ break;
83
+ }
84
+ case 'tool/call': {
85
+ const callId = event.data?.callId;
86
+ const name = event.data?.name === undefined || event.data.name === '' ? 'tool' : event.data.name;
87
+ const message = { kind: 'tool', key: `tool:${seq}`, seq, name, status: 'running' };
88
+ if (callId !== undefined)
89
+ tools.set(callId, messages.length);
90
+ messages.push(message);
91
+ break;
92
+ }
93
+ case 'tool/result': {
94
+ // The result event's own data has no call id or name: the identity lives on the
95
+ // model-facing message (`source.callId`, and `toolCallId` for the same value).
96
+ const message = event.data?.message;
97
+ const callId = message?.source?.callId ?? message?.toolCallId;
98
+ const status = message?.isError === true ? 'error' : 'ok';
99
+ const index = callId === undefined ? undefined : tools.get(callId);
100
+ const previous = index === undefined ? undefined : messages[index];
101
+ if (previous?.kind === 'tool' && index !== undefined) {
102
+ // Pair with its `tool/call` row: keep that row's name and settle its status.
103
+ messages[index] = { ...previous, status };
104
+ break;
105
+ }
106
+ // No paired call in the window (e.g. it aged out); keep the result visible without inventing a name.
107
+ messages.push({ kind: 'tool', key: `tool:${seq}`, seq, name: 'tool', status });
108
+ break;
109
+ }
110
+ case 'turn/end': {
111
+ if (event.data?.reason?.kind !== 'error')
112
+ break;
113
+ const error = event.data.reason.error;
114
+ const text = boundedText(failureText(error));
115
+ messages.push({ kind: 'error', key: `error:${seq}`, seq, text });
116
+ break;
117
+ }
118
+ default:
119
+ break;
120
+ }
121
+ }
122
+ return messages.length <= CHAT_MESSAGE_LIMIT ? messages : messages.slice(-CHAT_MESSAGE_LIMIT);
123
+ }
124
+ /** Text streamed by the open Assistant attempt, before its durable message settles. */
125
+ export function streamingAssistantText(entries) {
126
+ if (entries === undefined)
127
+ return '';
128
+ const attempts = new Map();
129
+ let last;
130
+ for (const entry of entries) {
131
+ if (entry.type !== 'transient')
132
+ continue;
133
+ const attempt = entry.event.data?.attemptId;
134
+ if (attempt === undefined)
135
+ continue;
136
+ if (!attempts.has(attempt))
137
+ attempts.set(attempt, '');
138
+ const chunk = entry.event.data?.chunk;
139
+ if (chunk?.type !== 'text-delta' || typeof chunk.text !== 'string')
140
+ continue;
141
+ attempts.set(attempt, (attempts.get(attempt) ?? '') + chunk.text);
142
+ last = attempt;
143
+ }
144
+ if (last === undefined)
145
+ return '';
146
+ return (attempts.get(last) ?? '').trim();
147
+ }
148
+ /** Read a stored chat Session id, rejecting empty/whitespace values from a stale store. */
149
+ export function storedChatSession(storage) {
150
+ try {
151
+ const value = storage?.getItem(CHAT_SESSION_KEY)?.trim();
152
+ return value === undefined || value === '' ? undefined : value;
153
+ }
154
+ catch {
155
+ return undefined;
156
+ }
157
+ }
158
+ /** Persist the dedicated chat Session; a browser refusing storage is not fatal to the chat. */
159
+ export function rememberChatSession(storage, sessionId) {
160
+ try {
161
+ storage?.setItem(CHAT_SESSION_KEY, sessionId);
162
+ }
163
+ catch {
164
+ // A private-mode/quota failure only loses the reuse convenience, not the Session.
165
+ }
166
+ }
167
+ /** Remove a stale id after its Session generation could not be opened. */
168
+ export function forgetChatSession(storage) {
169
+ try {
170
+ storage?.removeItem(CHAT_SESSION_KEY);
171
+ }
172
+ catch {
173
+ // Nothing else to release.
174
+ }
175
+ }
176
+ /** A retained Session whose history failed to open must be replaced, not shown as ready. */
177
+ function chatOpenFailed(reference) {
178
+ try {
179
+ const snapshot = reference.binding.session.getSnapshot();
180
+ return snapshot.openState === 'error' || snapshot.removed === true;
181
+ }
182
+ catch {
183
+ return true;
184
+ }
185
+ }
186
+ /** Abort reason for a cancelled acquisition; falls back when the caller gave the signal no reason. */
187
+ function abortReason(signal) {
188
+ return signal?.reason ?? new Error('会话打开已取消。');
189
+ }
190
+ /** Read `aborted` through a call so control-flow narrowing is not retained across the awaits. */
191
+ function isAborted(signal) {
192
+ return signal?.aborted === true;
193
+ }
194
+ /**
195
+ * Open the dedicated chat Session: reuse the stored one when it is still openable, otherwise
196
+ * create one through the native Session controller and remember it. `ready` resolves even when
197
+ * the Host failed to open the retained history (`openState: 'error'`), so the snapshot decides.
198
+ * `signal` cancels the acquisition itself (the Host also stops waiting through `retain`), so an
199
+ * unmounted chat surface cannot keep a hung open retained. The caller owns the returned reference
200
+ * and must release it when the chat surface unmounts.
201
+ */
202
+ export async function openDedicatedChatSession(sessions, storage, source = CHAT_REFERENCE_SOURCE, create = undefined, signal) {
203
+ const stored = storedChatSession(storage);
204
+ if (stored !== undefined) {
205
+ let reference;
206
+ try {
207
+ reference = sessions.retain(stored, { source, signal });
208
+ await reference.ready;
209
+ if (!chatOpenFailed(reference)) {
210
+ if (isAborted(signal))
211
+ throw abortReason(signal);
212
+ return reference;
213
+ }
214
+ }
215
+ catch {
216
+ // A stale generation or a failed open both fall through to a fresh Session.
217
+ }
218
+ if (isAborted(signal)) {
219
+ // Cancellation is not a stale generation: keep the stored id for the next attempt.
220
+ reference?.release();
221
+ throw abortReason(signal);
222
+ }
223
+ reference?.release();
224
+ forgetChatSession(storage);
225
+ }
226
+ const sessionId = create === undefined ? await sessions.create() : await create();
227
+ if (isAborted(signal))
228
+ throw abortReason(signal);
229
+ const reference = sessions.retain(sessionId, { source, signal });
230
+ try {
231
+ await reference.ready;
232
+ }
233
+ catch (error) {
234
+ reference.release();
235
+ forgetChatSession(storage);
236
+ throw isAborted(signal) ? abortReason(signal) : error;
237
+ }
238
+ if (isAborted(signal)) {
239
+ reference.release();
240
+ forgetChatSession(storage);
241
+ throw abortReason(signal);
242
+ }
243
+ if (chatOpenFailed(reference)) {
244
+ reference.release();
245
+ forgetChatSession(storage);
246
+ throw new Error('新建的会话无法打开,请重试。');
247
+ }
248
+ rememberChatSession(storage, sessionId);
249
+ return reference;
250
+ }
251
+ /** Supported prompt-image media types; other blobs travel as ordinary files. */
252
+ const PROMPT_IMAGE_TYPES = new Set(['image/png', 'image/jpeg', 'image/webp', 'image/gif']);
253
+ const nameOf = (file) => {
254
+ const name = file.name;
255
+ return typeof name === 'string' && name !== '' ? name : undefined;
256
+ };
257
+ const mediaTypeOf = (file) => {
258
+ const mediaType = file.type;
259
+ return typeof mediaType === 'string' ? mediaType : undefined;
260
+ };
261
+ /** Upload a file/image and turn it into the native prompt part that cites its staged receipt. */
262
+ async function stagedPart(uploads, sessionId, file) {
263
+ const name = nameOf(file);
264
+ const mediaType = mediaTypeOf(file);
265
+ if (mediaType !== undefined && PROMPT_IMAGE_TYPES.has(mediaType) && uploads.uploadImage !== undefined) {
266
+ const result = await uploads.uploadImage(sessionId, file, mediaType, name);
267
+ if (!result.ok)
268
+ throw new ChatSendError(`附件上传被 Host 拒绝(${failureText(result.error)})`);
269
+ return { type: 'file', receiptId: result.value.receiptId };
270
+ }
271
+ const result = await uploads.upload(sessionId, file, name);
272
+ if (!result.ok)
273
+ throw new ChatSendError(`附件上传被 Host 拒绝(${failureText(result.error)})`);
274
+ return { type: 'file', receiptId: result.value.receiptId };
275
+ }
276
+ /** Local send failure with user-facing text, kept distinct from Host Remote failures. */
277
+ export class ChatSendError extends Error {
278
+ name = 'ChatSendError';
279
+ /** @param message - already display-ready Chinese text. */
280
+ constructor(message) {
281
+ super(message);
282
+ }
283
+ }
284
+ /**
285
+ * Upload ordered attachments, then submit one prompt through the native Session.
286
+ * Nothing is reported as sent until the Host accepts the prompt; a failed upload
287
+ * aborts the whole send and keeps the caller's draft/attachment state intact.
288
+ */
289
+ export async function sendChatMessage(input) {
290
+ if (input.text.trim() === '' && (input.files === undefined || input.files.length === 0)) {
291
+ return { ok: false, error: '消息不能为空。' };
292
+ }
293
+ try {
294
+ const fileParts = [];
295
+ for (const file of input.files ?? []) {
296
+ if (input.uploads === undefined) {
297
+ return { ok: false, error: '当前界面未提供附件上传服务(fileUpload 未加载),无法上传附件。' };
298
+ }
299
+ fileParts.push(await stagedPart(input.uploads, input.sessionId, file));
300
+ }
301
+ const content = input.text.trim() === ''
302
+ ? fileParts
303
+ : [{ type: 'text', text: input.text }, ...fileParts];
304
+ const result = await input.session.prompt(content, 'queue', input.signal);
305
+ if (!result.ok)
306
+ return { ok: false, error: `消息未发送(${failureText(result.error)})` };
307
+ return { ok: true };
308
+ }
309
+ catch (error) {
310
+ return { ok: false, error: error instanceof Error ? boundedText(error.message) : '消息未发送,稍后重试。' };
311
+ }
312
+ }
313
+ const PERMISSION_LABELS = {
314
+ 'read-only': '只读',
315
+ 'workspace-write': '工作区写入',
316
+ 'danger-full-access': '完全访问',
317
+ 'auto': '自动审查',
318
+ 'custom': '自定义',
319
+ };
320
+ /** Display label for one permission value, preferring the product label over a raw key. */
321
+ export function permissionLabel(value, catalog) {
322
+ if (value === undefined || value === '')
323
+ return '权限不可用';
324
+ const builtIn = PERMISSION_LABELS[value];
325
+ if (builtIn !== undefined)
326
+ return builtIn;
327
+ const option = catalog?.options.find(item => item.value === value);
328
+ return option === undefined ? value : option.name;
329
+ }
330
+ /** High-risk presets need an explicit in-panel confirmation before the native command runs. */
331
+ export function requiresPermissionConfirmation(value) {
332
+ return value === 'danger-full-access' || value === 'auto';
333
+ }
334
+ /** Current value of the Session `permissions` projection; absence means no permission service. */
335
+ export function permissionValue(snapshot) {
336
+ if (snapshot === null || typeof snapshot !== 'object')
337
+ return undefined;
338
+ const value = snapshot.currentValue;
339
+ return typeof value === 'string' && value !== '' ? value : undefined;
340
+ }
341
+ /** Options for the permission select, including a current value the catalog does not list. */
342
+ export function permissionOptions(catalog, current) {
343
+ const options = catalog.options.map(option => ({ value: option.value, name: option.name }));
344
+ if (current !== undefined && current !== '' && !options.some(option => option.value === current)) {
345
+ return [...options, { value: current, name: permissionLabel(current) }];
346
+ }
347
+ return options;
348
+ }
349
+ /** Browser localStorage when the embedding actually provides a usable one. */
350
+ export function browserStorage() {
351
+ try {
352
+ const storage = globalThis.localStorage;
353
+ if (storage === null || typeof storage !== 'object')
354
+ return undefined;
355
+ const candidate = storage;
356
+ if (typeof candidate.getItem !== 'function' || typeof candidate.setItem !== 'function'
357
+ || typeof candidate.removeItem !== 'function')
358
+ return undefined;
359
+ return storage;
360
+ }
361
+ catch {
362
+ return undefined;
363
+ }
364
+ }
365
+ /** Browser SpeechRecognition constructor, including the WebKit-prefixed spelling. */
366
+ export function browserSpeechRecognition() {
367
+ try {
368
+ const scope = globalThis;
369
+ for (const candidate of [scope.SpeechRecognition, scope.webkitSpeechRecognition]) {
370
+ if (typeof candidate === 'function')
371
+ return candidate;
372
+ }
373
+ }
374
+ catch {
375
+ // A locked-down embedding may deny access to the global; treat it as unsupported.
376
+ }
377
+ return undefined;
378
+ }
379
+ /** Document language used for recognition/synthesis; a safe Chinese default. */
380
+ export function browserLang() {
381
+ try {
382
+ const document = globalThis.document;
383
+ const lang = document?.documentElement?.lang;
384
+ return typeof lang === 'string' && lang !== '' ? lang : 'zh-CN';
385
+ }
386
+ catch {
387
+ return 'zh-CN';
388
+ }
389
+ }
390
+ /** Speak text with the browser's built-in synthesis; false means this browser cannot. */
391
+ export function speakInBrowser(text) {
392
+ try {
393
+ const synthesis = globalThis.speechSynthesis;
394
+ const Utterance = globalThis.SpeechSynthesisUtterance;
395
+ if (synthesis === undefined || typeof Utterance !== 'function' || text.trim() === '')
396
+ return false;
397
+ synthesis.cancel();
398
+ const utterance = new Utterance(text);
399
+ utterance.lang = browserLang();
400
+ synthesis.speak(utterance);
401
+ return true;
402
+ }
403
+ catch {
404
+ return false;
405
+ }
406
+ }
407
+ /** Whether browser speech synthesis is installed; keeps the read-aloud button honest. */
408
+ export function browserSpeechSynthesisAvailable() {
409
+ try {
410
+ const scope = globalThis;
411
+ return typeof scope.speechSynthesis === 'object' && scope.speechSynthesis !== null
412
+ && typeof scope.SpeechSynthesisUtterance === 'function';
413
+ }
414
+ catch {
415
+ return false;
416
+ }
417
+ }
418
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ import type { IntakeAgreementAvailability, OwnerConsoleIntakeAgreement, OwnerConsoleStatus, OwnerConsoleTrendSnapshots, OwnerConsoleWriteResult } from './typert.js';
2
+ import { type OwnerConsoleRendererSeat } from './chat-view.js';
3
+ import { type ChatRuntime } from './chat.js';
4
+ import { type StatusTone } from './ui.js';
5
+ /** Only the reference the owner picked is submitted; the other stays empty. */
6
+ export declare function feishuSecretRefs(source: 'env' | 'handle', env: string, handle: string): Readonly<{
7
+ appSecretEnv: string;
8
+ credentialHandle: string;
9
+ }>;
10
+ /** Browser confirmation channel. Without one the panel never performs a destructive or
11
+ * install-script-authorizing step, and the caller must show that refusal instead of going silent. */
12
+ export declare function askOwner(confirm: ((message: string) => boolean) | undefined, message: string): 'approved' | 'declined' | 'unavailable';
13
+ /** The visible consequence of a confirmation: an unavailable channel and a decline must not be silent. */
14
+ export declare function confirmationNotice(answer: 'approved' | 'declined' | 'unavailable', message: string): string | undefined;
15
+ /** Render a gateway failure verbatim (bounded), keeping its stable code for support. */
16
+ export declare function remoteFailureText(error: RemoteFailure | undefined): string;
17
+ /**
18
+ * One install click, then one explicit confirmation when the Host recorded dependency build
19
+ * scripts. Only the names the Host itself reported as pending are approved on the retry; with no
20
+ * confirmation channel, or a failure that recorded none, the package stays uninstalled.
21
+ */
22
+ export declare function installWithApproval(remote: Pick<ConsoleRemote, 'installProjectBundle'>, spec: string, confirm: (message: string) => boolean): Promise<RemoteResult<OwnerConsoleWriteResult>>;
23
+ /** Read-only label for `larkChannel.health()`; the error code is shown as its stable identifier. */
24
+ export declare function larkConnectionLabel(connection: OwnerConsoleStatus['feishu']['connection'], lastErrorCode?: string): string;
25
+ /** Read-only tone for the lark-channel connection pill. */
26
+ export declare function larkConnectionTone(connection: OwnerConsoleStatus['feishu']['connection'], lastErrorCode?: string): StatusTone;
27
+ /** One bounded line of Host-provided diagnostic text for a row. */
28
+ export declare function boundedLine(text: string, limit?: number): string;
29
+ /** A plugin row's status comes from its fiber, not from the persisted enable flag. */
30
+ export declare function fiberState(phase: OwnerConsoleStatus['plugins'][number]['fiberPhase'], enabled: boolean): Readonly<{
31
+ label: string;
32
+ tone: StatusTone;
33
+ }>;
34
+ export type { StatusTone } from './ui.js';
35
+ /** The installed Host supplies remote and the slot registry. */
36
+ export declare const inject: string[];
37
+ /** The gateway's failure result keeps the business code and unchanged message; the panel must show
38
+ * both instead of one generic sentence. `error` stays optional so a minimal transport result is legal. */
39
+ type RemoteFailure = Readonly<{
40
+ code: string;
41
+ message: string;
42
+ details?: unknown;
43
+ }>;
44
+ type RemoteResult<T> = Readonly<{
45
+ ok: true;
46
+ value: T;
47
+ }> | Readonly<{
48
+ ok: false;
49
+ error?: RemoteFailure;
50
+ }>;
51
+ type ConsoleRemote = Readonly<{
52
+ status(): Promise<RemoteResult<OwnerConsoleStatus>>;
53
+ trendSnapshots(planId: string, beforeSequence: number, limit: number): Promise<RemoteResult<OwnerConsoleTrendSnapshots>>;
54
+ intakeAgreement(workspace: string, preset: string): Promise<RemoteResult<OwnerConsoleIntakeAgreement>>;
55
+ configureFeishu(appId: string, appSecretEnv: string, credentialHandle: string, account: string, tenant: string, discoverAppId: boolean): Promise<RemoteResult<OwnerConsoleWriteResult>>;
56
+ configureTraex(enabled: boolean, command: string): Promise<RemoteResult<OwnerConsoleWriteResult>>;
57
+ configureBundle(entry: string, config: Readonly<Record<string, unknown>>): Promise<RemoteResult<OwnerConsoleWriteResult>>;
58
+ setBundleEnabled(name: string, enabled: boolean): Promise<RemoteResult<OwnerConsoleWriteResult>>;
59
+ setPluginEnabled(entryId: string, enabled: boolean): Promise<RemoteResult<OwnerConsoleWriteResult>>;
60
+ installProjectBundle(spec: string, approvedBuilds: readonly string[]): Promise<RemoteResult<OwnerConsoleWriteResult>>;
61
+ removeProjectBundle(name: string): Promise<RemoteResult<OwnerConsoleWriteResult>>;
62
+ }>;
63
+ type SlotRuntime = {
64
+ readonly remote: Readonly<{
65
+ ownerConsole: ConsoleRemote;
66
+ }>;
67
+ readonly slots: {
68
+ inject(name: string, factory: () => unknown): () => void;
69
+ register(options: unknown, component: unknown): () => void;
70
+ };
71
+ };
72
+ type ClientContext = {
73
+ readonly remote: {
74
+ readonly $mount: (value: unknown) => Promise<() => Promise<void>>;
75
+ };
76
+ readonly get: <T>(name: string) => T | undefined;
77
+ inject(dependencies: readonly string[], callback: (runtime: SlotRuntime) => unknown): {
78
+ dispose(): Promise<void>;
79
+ };
80
+ };
81
+ /**
82
+ * Hook-free rendering of one read-only snapshot page. The only control is paging to older rows, which
83
+ * re-reads; nothing here seals, edits or deletes a snapshot.
84
+ */
85
+ export declare function trendSnapshotsView(page: OwnerConsoleTrendSnapshots | undefined, failed: boolean, older: (beforeSequence: number) => void): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
86
+ /** Read-only trend snapshot card; it only ever calls `trendSnapshots`. */
87
+ export declare function TrendSnapshotsCard({ remote }: Readonly<{
88
+ remote: ConsoleRemote;
89
+ }>): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
90
+ /**
91
+ * Hook-free rendering of one read-only intake agreement result. It shows counts only; nothing here
92
+ * writes, adopts or sends, and a switched-off Evaluation is shown as not enabled.
93
+ */
94
+ export declare function intakeAgreementView(result: OwnerConsoleIntakeAgreement | undefined, failed: boolean): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
95
+ /** Scope-free pill from `status`; the read below stays authoritative, so it never blocks the button. */
96
+ export declare function intakeAvailabilityPill(availability: IntakeAgreementAvailability | undefined): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
97
+ /** Read-only intake agreement card; its only control re-reads `intakeAgreement` for the typed scope. */
98
+ export declare function IntakeAgreementCard({ remote, availability }: Readonly<{
99
+ remote: ConsoleRemote;
100
+ availability?: IntakeAgreementAvailability;
101
+ }>): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
102
+ /** Sidebar entry: the 11 深海觉醒 whale mark, cropped square and shown as a round avatar. */
103
+ export declare function OwnerConsoleIcon(): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
104
+ export type OwnerConsoleNavigation = Readonly<{
105
+ openConversation(): void;
106
+ openPlugins(): void;
107
+ }>;
108
+ /** The main-slot panel: chat by default, with the configuration console behind the gear.
109
+ * The renderer's seats arrive as top-level props (no package import); in their absence the
110
+ * compact self-contained chat is the fallback. */
111
+ export type OwnerConsolePanelProps = OwnerConsoleRendererSeat & Readonly<{
112
+ remote: ConsoleRemote;
113
+ navigation: OwnerConsoleNavigation;
114
+ runtime: ChatRuntime;
115
+ }>;
116
+ export declare function OwnerConsolePanel({ remote, navigation, runtime, ...renderer }: OwnerConsolePanelProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
117
+ /** The existing configuration console, moved behind the chat header's ⚙ button. */
118
+ export declare function OwnerConsoleSettingsPanel({ remote, navigation, onBack }: Readonly<{
119
+ remote: ConsoleRemote;
120
+ navigation: OwnerConsoleNavigation;
121
+ onBack?: () => void;
122
+ }>): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
123
+ /** Main-slot root: fills the fixed-height Host pane; each view owns its own scrolling. */
124
+ export declare function OwnerConsoleMain(props: OwnerConsolePanelProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
125
+ export declare function apply(ctx: ClientContext): Promise<() => Promise<void>>;
126
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,kBAAkB,EACxF,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAE1E,OAAO,EAA8C,KAAK,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAC1G,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,WAAW,CAAA;AAClB,OAAO,EAGsF,KAAK,UAAU,EAC3G,MAAM,SAAS,CAAA;AAEhB,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,GAAG,QAAQ,EAAE,GAAG,EAAE,MAAM,EACpE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC,CAE9E;AAED;qGACqG;AACrG,wBAAgB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,EAC1E,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAG1D;AAED,0GAA0G;AAC1G,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGvH;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAI1E;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,sBAAsB,CAAC,EACnD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,GACpC,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAQhD;AAaD,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,EACxF,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAGhC;AAED,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,EACvF,aAAa,CAAC,EAAE,MAAM,GAAG,UAAU,CAKpC;AAMD,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,MAAM,CAG7D;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,KAAK,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,EACnF,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,CAOjE;AAUD,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,gEAAgE;AAChE,eAAO,MAAM,MAAM,UAAsB,CAAA;AAEzC;0GAC0G;AAC1G,KAAK,aAAa,GAAG,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAA;AACnF,KAAK,YAAY,CAAC,CAAC,IAAI,QAAQ,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,GAAG,QAAQ,CAAC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC,CAAA;AACxG,KAAK,aAAa,GAAG,QAAQ,CAAC;IAC5B,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAA;IACnD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC,CAAA;IACxH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,2BAA2B,CAAC,CAAC,CAAA;IACtG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAA;IAC1G,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAA;IACjG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAA;IACzH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAA;IAChG,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAA;IACnG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAA;IACrH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAA;CAClF,CAAC,CAAA;AACF,KAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;QAAE,YAAY,EAAE,aAAa,CAAA;KAAE,CAAC,CAAA;IAC1D,QAAQ,CAAC,KAAK,EAAE;QACd,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAA;QACxD,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,IAAI,CAAA;KAC3D,CAAA;CACF,CAAA;AAED,KAAK,aAAa,GAAG;IACnB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;KAAE,CAAA;IACtF,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,CAAA;IAChD,MAAM,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,GAAG;QAAE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAA;CACnH,CAAA;AAgBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,0BAA0B,GAAG,SAAS,EAAE,MAAM,EAAE,OAAO,EAC9F,KAAK,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,0FAgCxC;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC,0FAejF;AAYD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,2BAA2B,GAAG,SAAS,EAAE,MAAM,EAAE,OAAO,0FAwBnG;AASD,wGAAwG;AACxG,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,2BAA2B,GAAG,SAAS,0FAI3F;AAED,wGAAwG;AACxG,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,QAAQ,CAAC;IAAE,MAAM,EAAE,aAAa,CAAC;IAC7F,YAAY,CAAC,EAAE,2BAA2B,CAAA;CAAE,CAAC,0FAyC9C;AAED,yFAAyF;AACzF,wBAAgB,gBAAgB,2FAI/B;AAED,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAAE,gBAAgB,IAAI,IAAI,CAAC;IAAC,WAAW,IAAI,IAAI,CAAA;CAAE,CAAC,CAAA;AAEhG;;kDAEkD;AAClD,MAAM,MAAM,sBAAsB,GAAG,wBAAwB,GAAG,QAAQ,CAAC;IACvE,MAAM,EAAE,aAAa,CAAA;IACrB,UAAU,EAAE,sBAAsB,CAAA;IAClC,OAAO,EAAE,WAAW,CAAA;CACrB,CAAC,CAAA;AAEF,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,EAAE,sBAAsB,0FAKrG;AAED,mFAAmF;AACnF,wBAAgB,yBAAyB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC;IACjF,MAAM,EAAE,aAAa,CAAA;IACrB,UAAU,EAAE,sBAAsB,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB,CAAC,0FAgRD;AAiCD,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,0FAE7D;AAED,wBAAsB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAmI5E"}