@percena/weft 0.4.0-next.7 → 0.4.0-next.9
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/dist/chat.cjs +2 -2
- package/dist/chat.d.cts +0 -167
- package/dist/chat.d.ts +0 -167
- package/dist/chat.js +2 -2
- package/dist/index.cjs +23 -17
- package/dist/index.d.cts +51 -1774
- package/dist/index.d.ts +51 -1774
- package/dist/index.js +23 -17
- package/dist/providers-flitro.cjs +35 -29
- package/dist/providers-flitro.d.cts +51 -49
- package/dist/providers-flitro.d.ts +51 -49
- package/dist/providers-flitro.js +31 -25
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -3124,13 +3124,13 @@ interface TimelineStream {
|
|
|
3124
3124
|
}
|
|
3125
3125
|
|
|
3126
3126
|
/**
|
|
3127
|
-
*
|
|
3127
|
+
* WeftHttpClient
|
|
3128
3128
|
*
|
|
3129
|
-
* Typed HTTP client for the
|
|
3130
|
-
* All methods map 1-to-1 with
|
|
3129
|
+
* Typed HTTP client for the Weft Server REST API.
|
|
3130
|
+
* All methods map 1-to-1 with the server's HTTP endpoints.
|
|
3131
3131
|
*/
|
|
3132
|
-
interface
|
|
3133
|
-
/** Base URL of the
|
|
3132
|
+
interface WeftHttpClientOptions {
|
|
3133
|
+
/** Base URL of the Weft server, e.g. http://localhost:8080 */
|
|
3134
3134
|
baseUrl: string;
|
|
3135
3135
|
/** Optional bearer token for API-key auth */
|
|
3136
3136
|
apiKey?: string;
|
|
@@ -3139,7 +3139,7 @@ interface FlitroClientOptions {
|
|
|
3139
3139
|
/** Optional timeout in milliseconds (default: 30000) */
|
|
3140
3140
|
timeout?: number;
|
|
3141
3141
|
/**
|
|
3142
|
-
* Scoped embed session token minted by the host backend via
|
|
3142
|
+
* Scoped embed session token minted by the host backend via
|
|
3143
3143
|
* `POST /v1/embed/sessions`. Sent as the Authorization bearer; the token
|
|
3144
3144
|
* already carries tenant and session scope, so apiKey/tenantId are not
|
|
3145
3145
|
* needed (and are ignored) when it is set.
|
|
@@ -3152,7 +3152,7 @@ interface FlitroClientOptions {
|
|
|
3152
3152
|
*/
|
|
3153
3153
|
onTokenExpired?: () => Promise<string | undefined> | string | undefined;
|
|
3154
3154
|
}
|
|
3155
|
-
interface
|
|
3155
|
+
interface WeftSession {
|
|
3156
3156
|
session_id: string;
|
|
3157
3157
|
tenant_id: string;
|
|
3158
3158
|
app_id?: string;
|
|
@@ -3172,7 +3172,7 @@ interface FlitroSession {
|
|
|
3172
3172
|
created_at: string;
|
|
3173
3173
|
updated_at: string;
|
|
3174
3174
|
}
|
|
3175
|
-
interface
|
|
3175
|
+
interface WeftRun {
|
|
3176
3176
|
run_id: string;
|
|
3177
3177
|
session_id: string;
|
|
3178
3178
|
tenant_id?: string;
|
|
@@ -3198,7 +3198,7 @@ interface FlitroRun {
|
|
|
3198
3198
|
created_at: string;
|
|
3199
3199
|
updated_at: string;
|
|
3200
3200
|
}
|
|
3201
|
-
interface
|
|
3201
|
+
interface WeftCapabilityReport {
|
|
3202
3202
|
provider: string;
|
|
3203
3203
|
runtimeKind: string;
|
|
3204
3204
|
selected: string;
|
|
@@ -3219,25 +3219,25 @@ interface FlitroCapabilityReport {
|
|
|
3219
3219
|
automationCapabilities: Record<string, unknown>;
|
|
3220
3220
|
hostToolCapabilities: Record<string, unknown>;
|
|
3221
3221
|
}
|
|
3222
|
-
interface
|
|
3222
|
+
interface WeftPatchSessionOptions {
|
|
3223
3223
|
title?: string;
|
|
3224
3224
|
status?: string;
|
|
3225
3225
|
labels?: string[];
|
|
3226
3226
|
flagged?: boolean;
|
|
3227
3227
|
topic?: string;
|
|
3228
3228
|
}
|
|
3229
|
-
interface
|
|
3229
|
+
interface WeftModelInfo {
|
|
3230
3230
|
id: string;
|
|
3231
3231
|
provider: string;
|
|
3232
3232
|
display_name?: string;
|
|
3233
3233
|
aliases?: string[];
|
|
3234
3234
|
capabilities: Record<string, unknown>;
|
|
3235
3235
|
}
|
|
3236
|
-
interface
|
|
3237
|
-
models:
|
|
3236
|
+
interface WeftModelListResult {
|
|
3237
|
+
models: WeftModelInfo[];
|
|
3238
3238
|
default?: string;
|
|
3239
3239
|
}
|
|
3240
|
-
interface
|
|
3240
|
+
interface WeftTimelineItem {
|
|
3241
3241
|
sessionId: string;
|
|
3242
3242
|
provider: string;
|
|
3243
3243
|
seq: number;
|
|
@@ -3245,28 +3245,30 @@ interface FlitroTimelineItem {
|
|
|
3245
3245
|
timestamp: number;
|
|
3246
3246
|
item: Record<string, unknown>;
|
|
3247
3247
|
}
|
|
3248
|
-
interface
|
|
3249
|
-
items:
|
|
3248
|
+
interface WeftTimelineFetchResult {
|
|
3249
|
+
items: WeftTimelineItem[];
|
|
3250
3250
|
nextCursor: {
|
|
3251
3251
|
epoch: string;
|
|
3252
3252
|
afterSeq: number;
|
|
3253
3253
|
};
|
|
3254
3254
|
hasGap: boolean;
|
|
3255
3255
|
}
|
|
3256
|
-
declare class
|
|
3256
|
+
declare class WeftHttpClient {
|
|
3257
3257
|
private readonly baseUrl;
|
|
3258
3258
|
private readonly timeout;
|
|
3259
3259
|
private readonly apiKey;
|
|
3260
3260
|
private readonly tenantId;
|
|
3261
3261
|
private readonly onTokenExpired?;
|
|
3262
3262
|
private token;
|
|
3263
|
-
|
|
3263
|
+
private readonly embedMode;
|
|
3264
|
+
constructor(options: WeftHttpClientOptions);
|
|
3265
|
+
private sessionPath;
|
|
3264
3266
|
/** Current Authorization bearer (scoped token wins over apiKey). */
|
|
3265
3267
|
getBearerToken(): string;
|
|
3266
3268
|
/** Replace the scoped token (e.g. after a host-backend refresh). */
|
|
3267
3269
|
setToken(token: string): void;
|
|
3268
3270
|
private buildHeaders;
|
|
3269
|
-
preflight(): Promise<
|
|
3271
|
+
preflight(): Promise<WeftCapabilityReport>;
|
|
3270
3272
|
health(): Promise<{
|
|
3271
3273
|
status: string;
|
|
3272
3274
|
}>;
|
|
@@ -3275,8 +3277,8 @@ declare class FlitroHttpClient {
|
|
|
3275
3277
|
model?: string;
|
|
3276
3278
|
skillNames?: string[];
|
|
3277
3279
|
mcpServerNames?: string[];
|
|
3278
|
-
}): Promise<
|
|
3279
|
-
getSession(sessionId: string): Promise<
|
|
3280
|
+
}): Promise<WeftSession>;
|
|
3281
|
+
getSession(sessionId: string): Promise<WeftSession>;
|
|
3280
3282
|
sendMessage(sessionId: string, message: string, options?: {
|
|
3281
3283
|
model?: string;
|
|
3282
3284
|
skillNames?: string[];
|
|
@@ -3290,7 +3292,7 @@ declare class FlitroHttpClient {
|
|
|
3290
3292
|
maxTokens?: number;
|
|
3291
3293
|
maxWallTimeSec?: number;
|
|
3292
3294
|
};
|
|
3293
|
-
}): Promise<
|
|
3295
|
+
}): Promise<WeftRun>;
|
|
3294
3296
|
cancelRun(runId: string): Promise<{
|
|
3295
3297
|
status: string;
|
|
3296
3298
|
}>;
|
|
@@ -3306,9 +3308,9 @@ declare class FlitroHttpClient {
|
|
|
3306
3308
|
type: string;
|
|
3307
3309
|
requestId: string;
|
|
3308
3310
|
}>;
|
|
3309
|
-
patchSession(sessionId: string, patch:
|
|
3310
|
-
listModels(): Promise<
|
|
3311
|
-
fetchTimeline(sessionId: string, afterSeq?: number, limit?: number): Promise<
|
|
3311
|
+
patchSession(sessionId: string, patch: WeftPatchSessionOptions): Promise<WeftSession>;
|
|
3312
|
+
listModels(): Promise<WeftModelListResult>;
|
|
3313
|
+
fetchTimeline(sessionId: string, afterSeq?: number, limit?: number): Promise<WeftTimelineFetchResult>;
|
|
3312
3314
|
/** Returns the SSE stream URL for a session's canonical timeline. */
|
|
3313
3315
|
sessionTimelineUrl(sessionId: string): string;
|
|
3314
3316
|
private get;
|
|
@@ -3318,13 +3320,13 @@ declare class FlitroHttpClient {
|
|
|
3318
3320
|
}
|
|
3319
3321
|
|
|
3320
3322
|
/**
|
|
3321
|
-
*
|
|
3323
|
+
* WeftSseTimelineStream
|
|
3322
3324
|
*
|
|
3323
|
-
* Consumes
|
|
3324
|
-
* a Weft TimelineStream.
|
|
3325
|
+
* Consumes the session-scoped SSE timeline endpoint and exposes it as
|
|
3326
|
+
* a Weft TimelineStream. Handles reconnection with cursor tracking.
|
|
3325
3327
|
*/
|
|
3326
3328
|
|
|
3327
|
-
interface
|
|
3329
|
+
interface WeftSseTimelineStreamOptions {
|
|
3328
3330
|
/** Full URL to the session timeline SSE endpoint */
|
|
3329
3331
|
url: string;
|
|
3330
3332
|
/** Optional bearer token */
|
|
@@ -3349,7 +3351,7 @@ interface FlitroSseTimelineStreamOptions {
|
|
|
3349
3351
|
*/
|
|
3350
3352
|
onTokenExpired?: () => Promise<string | undefined> | string | undefined;
|
|
3351
3353
|
}
|
|
3352
|
-
declare class
|
|
3354
|
+
declare class WeftSseTimelineStream implements TimelineStream {
|
|
3353
3355
|
private listeners;
|
|
3354
3356
|
private eventSource;
|
|
3355
3357
|
private disposed;
|
|
@@ -3357,7 +3359,7 @@ declare class FlitroSseTimelineStream implements TimelineStream {
|
|
|
3357
3359
|
private afterSeq;
|
|
3358
3360
|
private readonly getBearerToken?;
|
|
3359
3361
|
private readonly options;
|
|
3360
|
-
constructor(options:
|
|
3362
|
+
constructor(options: WeftSseTimelineStreamOptions);
|
|
3361
3363
|
connect(onEvent: (event: TimelineEnvelope) => void, onError?: (error: Error) => void, onClose?: () => void): void;
|
|
3362
3364
|
disconnect(): void;
|
|
3363
3365
|
isConnected(): boolean;
|
|
@@ -3370,7 +3372,7 @@ declare class FlitroSseTimelineStream implements TimelineStream {
|
|
|
3370
3372
|
* In Node.js environments (Node 18+) EventSource may not be available globally.
|
|
3371
3373
|
* This minimal polyfill wraps the fetch API for SSE consumption.
|
|
3372
3374
|
*/
|
|
3373
|
-
declare class
|
|
3375
|
+
declare class WeftFetchSseTimelineStream implements TimelineStream {
|
|
3374
3376
|
private listeners;
|
|
3375
3377
|
private abortController;
|
|
3376
3378
|
private connected;
|
|
@@ -3381,7 +3383,7 @@ declare class FlitroFetchSseTimelineStream implements TimelineStream {
|
|
|
3381
3383
|
private readonly getBearerToken?;
|
|
3382
3384
|
private readonly onTokenExpired?;
|
|
3383
3385
|
private readonly options;
|
|
3384
|
-
constructor(options:
|
|
3386
|
+
constructor(options: WeftSseTimelineStreamOptions);
|
|
3385
3387
|
connect(onEvent: (event: TimelineEnvelope) => void, onError?: (error: Error) => void, onClose?: () => void): void;
|
|
3386
3388
|
disconnect(): void;
|
|
3387
3389
|
isConnected(): boolean;
|
|
@@ -3392,16 +3394,16 @@ declare class FlitroFetchSseTimelineStream implements TimelineStream {
|
|
|
3392
3394
|
private emitError;
|
|
3393
3395
|
}
|
|
3394
3396
|
/**
|
|
3395
|
-
* Create an SSE stream for the
|
|
3397
|
+
* Create an SSE stream for the timeline endpoint.
|
|
3396
3398
|
* Always uses the fetch-based implementation so credentials are sent via
|
|
3397
3399
|
* Authorization header rather than URL query parameters.
|
|
3398
3400
|
*/
|
|
3399
|
-
declare function
|
|
3401
|
+
declare function createTimelineStream(options: WeftSseTimelineStreamOptions): TimelineStream;
|
|
3400
3402
|
|
|
3401
3403
|
/**
|
|
3402
3404
|
* WeftClient — the public L2 ("headless") contract.
|
|
3403
3405
|
*
|
|
3404
|
-
* A thin namespaced facade over
|
|
3406
|
+
* A thin namespaced facade over WeftHttpClient + the SSE timeline stream:
|
|
3405
3407
|
*
|
|
3406
3408
|
* ```ts
|
|
3407
3409
|
* const client = new WeftClient({ server, token })
|
|
@@ -3429,21 +3431,21 @@ interface WeftClientOptions {
|
|
|
3429
3431
|
* Called on HTTP 401 with a scoped token. Return a fresh token (e.g. by
|
|
3430
3432
|
* re-asking your backend) to retry once; return undefined to surface the 401.
|
|
3431
3433
|
*/
|
|
3432
|
-
onTokenExpired?:
|
|
3434
|
+
onTokenExpired?: WeftHttpClientOptions['onTokenExpired'];
|
|
3433
3435
|
}
|
|
3434
3436
|
interface TimelineSubscription extends TimelineStream, AsyncIterable<TimelineEnvelope> {
|
|
3435
3437
|
}
|
|
3436
3438
|
declare class WeftClient {
|
|
3437
3439
|
/** The underlying 1:1 HTTP client, for endpoints not wrapped below. */
|
|
3438
|
-
readonly http:
|
|
3440
|
+
readonly http: WeftHttpClient;
|
|
3439
3441
|
private readonly options;
|
|
3440
3442
|
constructor(options: WeftClientOptions);
|
|
3441
3443
|
/** Replace the scoped token (e.g. after a backend-driven refresh). */
|
|
3442
3444
|
setToken(token: string): void;
|
|
3443
3445
|
readonly sessions: {
|
|
3444
|
-
create: (options?: Parameters<
|
|
3445
|
-
get: (sessionId: string) => Promise<
|
|
3446
|
-
patch: (sessionId: string, patch:
|
|
3446
|
+
create: (options?: Parameters<WeftHttpClient["createSession"]>[0]) => Promise<WeftSession>;
|
|
3447
|
+
get: (sessionId: string) => Promise<WeftSession>;
|
|
3448
|
+
patch: (sessionId: string, patch: WeftPatchSessionOptions) => Promise<WeftSession>;
|
|
3447
3449
|
respondToPermission: (sessionId: string, requestId: string, allowed: boolean, options?: {
|
|
3448
3450
|
remember?: boolean;
|
|
3449
3451
|
text?: string;
|
|
@@ -3457,7 +3459,7 @@ declare class WeftClient {
|
|
|
3457
3459
|
readonly runs: {
|
|
3458
3460
|
create: (sessionId: string, options: {
|
|
3459
3461
|
message: string;
|
|
3460
|
-
} & NonNullable<Parameters<
|
|
3462
|
+
} & NonNullable<Parameters<WeftHttpClient["sendMessage"]>[2]>) => Promise<WeftRun>;
|
|
3461
3463
|
cancel: (runId: string) => Promise<{
|
|
3462
3464
|
status: string;
|
|
3463
3465
|
}>;
|
|
@@ -3466,17 +3468,17 @@ declare class WeftClient {
|
|
|
3466
3468
|
}>;
|
|
3467
3469
|
};
|
|
3468
3470
|
readonly timeline: {
|
|
3469
|
-
fetch: (sessionId: string, afterSeq?: number, limit?: number) => Promise<
|
|
3471
|
+
fetch: (sessionId: string, afterSeq?: number, limit?: number) => Promise<WeftTimelineFetchResult>;
|
|
3470
3472
|
/**
|
|
3471
3473
|
* Subscribe to the session's SSE timeline. Reconnects automatically with
|
|
3472
3474
|
* cursor tracking; usable both callback-style (`connect`) and as an
|
|
3473
3475
|
* async iterable (`for await`).
|
|
3474
3476
|
*/
|
|
3475
|
-
subscribe: (sessionId: string, options?: Partial<Omit<
|
|
3477
|
+
subscribe: (sessionId: string, options?: Partial<Omit<WeftSseTimelineStreamOptions, "url">>) => TimelineSubscription;
|
|
3476
3478
|
};
|
|
3477
3479
|
}
|
|
3478
3480
|
|
|
3479
|
-
export { type
|
|
3481
|
+
export { type TimelineEnvelope, type TimelineStream, type TimelineSubscription, type WeftCapabilityReport, WeftClient, type WeftClientOptions, WeftFetchSseTimelineStream, WeftHttpClient, type WeftHttpClientOptions, type WeftModelInfo, type WeftModelListResult, type WeftPatchSessionOptions, type WeftRun, type WeftSession, WeftSseTimelineStream, type WeftSseTimelineStreamOptions, type WeftTimelineFetchResult, type WeftTimelineItem, createTimelineStream };
|
|
3480
3482
|
|
|
3481
3483
|
// ── inlined from @weft/provider-flitro ──
|
|
3482
3484
|
// -- @weft/provider-flitro/index.d.ts --
|
|
@@ -3501,7 +3503,7 @@ interface FlitroProviderRuntimeDriver {
|
|
|
3501
3503
|
dispose?(): Promise<void>;
|
|
3502
3504
|
}
|
|
3503
3505
|
interface CreateFlitroDriverOptions {
|
|
3504
|
-
client:
|
|
3506
|
+
client: WeftHttpClient;
|
|
3505
3507
|
sessionId: string;
|
|
3506
3508
|
/** LLM model override sent to Flitro */
|
|
3507
3509
|
model?: string;
|
|
@@ -3542,7 +3544,7 @@ interface FlitroCapabilityProbeResult {
|
|
|
3542
3544
|
* process (the Go agentd binary) that the TypeScript provider communicates
|
|
3543
3545
|
* with over HTTP.
|
|
3544
3546
|
*/
|
|
3545
|
-
declare function probeFlitroCapabilities(client:
|
|
3547
|
+
declare function probeFlitroCapabilities(client: WeftHttpClient): Promise<FlitroCapabilityProbeResult>;
|
|
3546
3548
|
|
|
3547
3549
|
/**
|
|
3548
3550
|
* @weft/provider-flitro
|
|
@@ -3575,7 +3577,7 @@ interface CreateFlitroRuntimeCapabilityReportOptions {
|
|
|
3575
3577
|
declare function createFlitroRuntimeCapabilityReport(options: CreateFlitroRuntimeCapabilityReportOptions): RuntimeCapabilityReport;
|
|
3576
3578
|
interface CreateFlitroProviderRuntimeOptions extends CreateFlitroRuntimeCapabilityReportOptions {
|
|
3577
3579
|
/** Flitro server connection options */
|
|
3578
|
-
server:
|
|
3580
|
+
server: WeftHttpClientOptions;
|
|
3579
3581
|
/** Session ID — if omitted a new session is created on first sendMessage */
|
|
3580
3582
|
sessionId?: string;
|
|
3581
3583
|
/** Epoch string for the timeline (default: derived from sessionId) */
|
|
@@ -3635,7 +3637,7 @@ interface CreateFlitroEmbedRuntimeOptions {
|
|
|
3635
3637
|
declare function createFlitroEmbedRuntime(options: CreateFlitroEmbedRuntimeOptions): AgentRuntime;
|
|
3636
3638
|
interface CreateFlitroRuntimeOptions {
|
|
3637
3639
|
/** Flitro server connection options */
|
|
3638
|
-
server:
|
|
3640
|
+
server: WeftHttpClientOptions;
|
|
3639
3641
|
sessionId?: string;
|
|
3640
3642
|
epoch?: string;
|
|
3641
3643
|
now?: () => number;
|
|
@@ -3654,1728 +3656,3 @@ interface CreateFlitroRuntimeOptions {
|
|
|
3654
3656
|
declare function createFlitroRuntime(options: CreateFlitroRuntimeOptions): Promise<AgentRuntime>;
|
|
3655
3657
|
|
|
3656
3658
|
export { type CreateFlitroDriverOptions, type CreateFlitroEmbedRuntimeOptions, type CreateFlitroProviderRuntimeOptions, type CreateFlitroRuntimeCandidatesOptions, type CreateFlitroRuntimeCapabilityReportOptions, type CreateFlitroRuntimeOptions, type FlitroCapabilityProbeResult, type FlitroProviderRuntimeDriver, createFlitroDriver, createFlitroEmbedRuntime, createFlitroProviderRuntime, createFlitroRuntime, createFlitroRuntimeCandidates, createFlitroRuntimeCapabilityReport, probeFlitroCapabilities };
|
|
3657
|
-
|
|
3658
|
-
// ── inlined from @weft/ui ──
|
|
3659
|
-
// -- @weft/ui/index.d.ts --
|
|
3660
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3661
|
-
import * as React$1 from 'react';
|
|
3662
|
-
import React__default, { ReactNode } from 'react';
|
|
3663
|
-
|
|
3664
|
-
type ActivityStatus = 'pending' | 'running' | 'completed' | 'error' | 'backgrounded';
|
|
3665
|
-
type ActivityType = 'tool' | 'thinking' | 'intermediate' | 'status' | 'plan';
|
|
3666
|
-
type AnnotationInteractionMode = 'interactive' | 'tooltip-only';
|
|
3667
|
-
type TodoStatus = 'pending' | 'in_progress' | 'completed' | 'interrupted';
|
|
3668
|
-
interface TodoItem {
|
|
3669
|
-
/** Task content/description */
|
|
3670
|
-
content: string;
|
|
3671
|
-
/** Current status */
|
|
3672
|
-
status: TodoStatus;
|
|
3673
|
-
/** Present continuous form shown when in_progress (e.g., "Running tests") */
|
|
3674
|
-
activeForm?: string;
|
|
3675
|
-
}
|
|
3676
|
-
interface ActivityItem {
|
|
3677
|
-
id: string;
|
|
3678
|
-
type: ActivityType;
|
|
3679
|
-
status: ActivityStatus;
|
|
3680
|
-
toolName?: string;
|
|
3681
|
-
toolUseId?: string;
|
|
3682
|
-
toolInput?: Record<string, unknown>;
|
|
3683
|
-
content?: string;
|
|
3684
|
-
intent?: string;
|
|
3685
|
-
/** Optional backing message id (used by plan activities for branching/annotations) */
|
|
3686
|
-
messageId?: string;
|
|
3687
|
-
/** Optional persisted annotations (used by plan activities) */
|
|
3688
|
-
annotations?: AnnotationV1[];
|
|
3689
|
-
displayName?: string;
|
|
3690
|
-
toolDisplayMeta?: ToolDisplayMeta;
|
|
3691
|
-
timestamp: number;
|
|
3692
|
-
error?: string;
|
|
3693
|
-
parentId?: string;
|
|
3694
|
-
depth?: number;
|
|
3695
|
-
statusType?: string;
|
|
3696
|
-
taskId?: string;
|
|
3697
|
-
shellId?: string;
|
|
3698
|
-
elapsedSeconds?: number;
|
|
3699
|
-
isBackground?: boolean;
|
|
3700
|
-
}
|
|
3701
|
-
interface ResponseContent {
|
|
3702
|
-
text: string;
|
|
3703
|
-
isStreaming: boolean;
|
|
3704
|
-
streamStartTime?: number;
|
|
3705
|
-
/** Whether this response is a plan (renders with plan variant) */
|
|
3706
|
-
isPlan?: boolean;
|
|
3707
|
-
/** ID of the underlying message (for branching + annotations) */
|
|
3708
|
-
messageId?: string;
|
|
3709
|
-
/** Persisted annotations attached to the response message */
|
|
3710
|
-
annotations?: AnnotationV1[];
|
|
3711
|
-
}
|
|
3712
|
-
/** Represents one complete assistant turn */
|
|
3713
|
-
interface AssistantTurn {
|
|
3714
|
-
type: 'assistant';
|
|
3715
|
-
turnId: string;
|
|
3716
|
-
activities: ActivityItem[];
|
|
3717
|
-
response?: ResponseContent;
|
|
3718
|
-
intent?: string;
|
|
3719
|
-
isStreaming: boolean;
|
|
3720
|
-
isComplete: boolean;
|
|
3721
|
-
timestamp: number;
|
|
3722
|
-
/** Extracted from TodoWrite tool - latest todo state in this turn */
|
|
3723
|
-
todos?: TodoItem[];
|
|
3724
|
-
}
|
|
3725
|
-
/** Represents a user message */
|
|
3726
|
-
interface UserTurn {
|
|
3727
|
-
type: 'user';
|
|
3728
|
-
message: Message;
|
|
3729
|
-
timestamp: number;
|
|
3730
|
-
}
|
|
3731
|
-
/** Represents a system/info/error message that stands alone */
|
|
3732
|
-
interface SystemTurn {
|
|
3733
|
-
type: 'system';
|
|
3734
|
-
message: Message;
|
|
3735
|
-
timestamp: number;
|
|
3736
|
-
}
|
|
3737
|
-
/** Represents an auth request (credential input, OAuth flow) */
|
|
3738
|
-
interface AuthRequestTurn {
|
|
3739
|
-
type: 'auth-request';
|
|
3740
|
-
message: Message;
|
|
3741
|
-
timestamp: number;
|
|
3742
|
-
}
|
|
3743
|
-
type Turn = AssistantTurn | UserTurn | SystemTurn | AuthRequestTurn;
|
|
3744
|
-
type OpenAnnotationRequest = {
|
|
3745
|
-
messageId: string;
|
|
3746
|
-
annotationId: string;
|
|
3747
|
-
mode: 'view' | 'edit';
|
|
3748
|
-
anchorX?: number;
|
|
3749
|
-
anchorY?: number;
|
|
3750
|
-
nonce: number;
|
|
3751
|
-
};
|
|
3752
|
-
|
|
3753
|
-
/**
|
|
3754
|
-
* turn-phase.ts
|
|
3755
|
-
*
|
|
3756
|
-
* Turn lifecycle phase detection for assistant turns.
|
|
3757
|
-
*/
|
|
3758
|
-
|
|
3759
|
-
/**
|
|
3760
|
-
* Build a stable UI identity key for an assistant turn card.
|
|
3761
|
-
*
|
|
3762
|
-
* Why this exists:
|
|
3763
|
-
* - Backend turnId can be reused across visually split assistant cards
|
|
3764
|
-
* (e.g., steer/interruption boundaries).
|
|
3765
|
-
* - Expansion state must be keyed by UI-card identity, not raw backend turnId.
|
|
3766
|
-
*/
|
|
3767
|
-
declare function getAssistantTurnUiKey(turn: AssistantTurn, index: number): string;
|
|
3768
|
-
|
|
3769
|
-
/**
|
|
3770
|
-
* turn-grouping.ts
|
|
3771
|
-
*
|
|
3772
|
-
* Core groupMessagesByTurn function plus internal helpers for converting
|
|
3773
|
-
* a flat Message[] array into grouped Turn[] for TurnCard rendering.
|
|
3774
|
-
*/
|
|
3775
|
-
|
|
3776
|
-
/**
|
|
3777
|
-
* Groups messages into turns for TurnCard rendering
|
|
3778
|
-
*
|
|
3779
|
-
* Rules:
|
|
3780
|
-
* - User messages flush and start fresh context
|
|
3781
|
-
* - Tool messages + intermediate assistant messages belong to current turn
|
|
3782
|
-
* - Final assistant message (non-streaming, non-intermediate) flushes the turn
|
|
3783
|
-
* - Error/status/info messages are standalone system turns
|
|
3784
|
-
*
|
|
3785
|
-
* Note: We intentionally ignore turnId for grouping. The SDK generates a new
|
|
3786
|
-
* turnId for each API message, but from a user perspective, all work between
|
|
3787
|
-
* a user message and the final response should be ONE turn. We use isIntermediate
|
|
3788
|
-
* as the signal: isIntermediate=true means more work coming, isIntermediate=false
|
|
3789
|
-
* means final response.
|
|
3790
|
-
*/
|
|
3791
|
-
declare function groupMessagesByTurn(messages: Message[]): Turn[];
|
|
3792
|
-
|
|
3793
|
-
/**
|
|
3794
|
-
* Global size configuration for TurnCard components.
|
|
3795
|
-
* Adjust these values to scale the entire component uniformly.
|
|
3796
|
-
*/
|
|
3797
|
-
/** Shared size configuration for activity UI - exported for reuse in inline execution */
|
|
3798
|
-
declare const SIZE_CONFIG: {
|
|
3799
|
-
/** Base font size class for all text */
|
|
3800
|
-
readonly fontSize: "text-[13px]";
|
|
3801
|
-
/** Icon size class (width and height) */
|
|
3802
|
-
readonly iconSize: "w-3 h-3";
|
|
3803
|
-
/** Spinner text size class */
|
|
3804
|
-
readonly spinnerSize: "text-[10px]";
|
|
3805
|
-
/** Small spinner for header */
|
|
3806
|
-
readonly spinnerSizeSmall: "text-[8px]";
|
|
3807
|
-
/** Activity row height in pixels (approx for calculation) */
|
|
3808
|
-
readonly activityRowHeight: 24;
|
|
3809
|
-
/** Max visible activities before scrolling (show ~15 items) */
|
|
3810
|
-
readonly maxVisibleActivities: 15;
|
|
3811
|
-
/** Number of items before which we apply staggered animation */
|
|
3812
|
-
readonly staggeredAnimationLimit: 10;
|
|
3813
|
-
};
|
|
3814
|
-
type BufferReason = 'complete' | 'min_time' | 'timeout' | 'code_block' | 'list' | 'header' | 'question' | 'threshold_met' | 'high_word_count' | 'buffering';
|
|
3815
|
-
|
|
3816
|
-
/**
|
|
3817
|
-
* tool-display.ts
|
|
3818
|
-
*
|
|
3819
|
-
* Tool display formatting functions extracted from TurnCard.tsx.
|
|
3820
|
-
* No JSX — pure string/object formatting logic.
|
|
3821
|
-
*/
|
|
3822
|
-
|
|
3823
|
-
/**
|
|
3824
|
-
* Determine if buffered content should be shown.
|
|
3825
|
-
* This is the core buffering decision function.
|
|
3826
|
-
*
|
|
3827
|
-
* @param text - The accumulated response text
|
|
3828
|
-
* @param isStreaming - Whether the response is still streaming
|
|
3829
|
-
* @param streamStartTime - When streaming started (for timeout calculation)
|
|
3830
|
-
* @returns Decision with reason for debugging
|
|
3831
|
-
*/
|
|
3832
|
-
declare function shouldShowStreamingContent(text: string, isStreaming: boolean, streamStartTime?: number): {
|
|
3833
|
-
shouldShow: boolean;
|
|
3834
|
-
reason: BufferReason;
|
|
3835
|
-
wordCount: number;
|
|
3836
|
-
};
|
|
3837
|
-
|
|
3838
|
-
interface ResponseCardProps {
|
|
3839
|
-
/** The content to display (markdown) */
|
|
3840
|
-
text: string;
|
|
3841
|
-
/** Whether the content is still streaming */
|
|
3842
|
-
isStreaming: boolean;
|
|
3843
|
-
/** When streaming started - used for buffering timeout calculation */
|
|
3844
|
-
streamStartTime?: number;
|
|
3845
|
-
/** Callback to open file in editor */
|
|
3846
|
-
onOpenFile?: (path: string) => void;
|
|
3847
|
-
/** Callback to open URL */
|
|
3848
|
-
onOpenUrl?: (url: string) => void;
|
|
3849
|
-
/** Callback to open response in Monaco editor */
|
|
3850
|
-
onPopOut?: () => void;
|
|
3851
|
-
/** Card variant - 'response' for AI messages, 'plan' for plan messages */
|
|
3852
|
-
variant?: 'response' | 'plan';
|
|
3853
|
-
/** Parent session ID (used to reset local annotation/island UI state on session switches) */
|
|
3854
|
-
sessionId?: string;
|
|
3855
|
-
/** Underlying message ID for annotation actions */
|
|
3856
|
-
messageId?: string;
|
|
3857
|
-
/** Persisted annotations for this response */
|
|
3858
|
-
annotations?: AnnotationV1[];
|
|
3859
|
-
/** Callback when user accepts the plan (plan variant only) */
|
|
3860
|
-
onAccept?: () => void;
|
|
3861
|
-
/** Callback when user accepts the plan with compaction (compact first, then execute) */
|
|
3862
|
-
onAcceptWithCompact?: () => void;
|
|
3863
|
-
/** Whether this is the last response in the session (shows Accept Plan button only for last response) */
|
|
3864
|
-
isLastResponse?: boolean;
|
|
3865
|
-
/** Whether to show the Accept Plan button (default: true) */
|
|
3866
|
-
showAcceptPlan?: boolean;
|
|
3867
|
-
/** Hide footer for compact embedding (EditPopover) */
|
|
3868
|
-
compactMode?: boolean;
|
|
3869
|
-
/** Callback to branch the session from this response */
|
|
3870
|
-
onBranch?: (options?: {
|
|
3871
|
-
newPanel?: boolean;
|
|
3872
|
-
}) => void;
|
|
3873
|
-
/** Callback to add annotation from selected text */
|
|
3874
|
-
onAddAnnotation?: (messageId: string, annotation: AnnotationV1) => void;
|
|
3875
|
-
/** Callback to remove persisted annotation */
|
|
3876
|
-
onRemoveAnnotation?: (messageId: string, annotationId: string) => void;
|
|
3877
|
-
/** Callback to update persisted annotation */
|
|
3878
|
-
onUpdateAnnotation?: (messageId: string, annotationId: string, patch: Partial<AnnotationV1>) => void;
|
|
3879
|
-
/** Input send key behavior used by follow-up editor */
|
|
3880
|
-
sendMessageKey?: 'enter' | 'cmd-enter';
|
|
3881
|
-
/** Callback when follow-up is saved via "Save & Send" action */
|
|
3882
|
-
onSaveAndSendFollowUp?: (target: {
|
|
3883
|
-
messageId: string;
|
|
3884
|
-
annotationId: string;
|
|
3885
|
-
note: string;
|
|
3886
|
-
selectedText: string;
|
|
3887
|
-
}) => void;
|
|
3888
|
-
/** Whether there are active pending follow-up annotations in the session */
|
|
3889
|
-
hasActiveFollowUpAnnotations?: boolean;
|
|
3890
|
-
/** External request to open a specific annotation in this response */
|
|
3891
|
-
openAnnotationRequest?: OpenAnnotationRequest | null;
|
|
3892
|
-
/** Annotation interaction mode (viewer uses tooltip-only to suppress the island) */
|
|
3893
|
-
annotationInteractionMode?: AnnotationInteractionMode;
|
|
3894
|
-
}
|
|
3895
|
-
/**
|
|
3896
|
-
* ResponseCard - Unified card component for AI responses and plans
|
|
3897
|
-
*
|
|
3898
|
-
* Variants:
|
|
3899
|
-
* - 'response': Buffered streaming response with smart content gating
|
|
3900
|
-
* - 'plan': Plan message with header and Accept Plan button
|
|
3901
|
-
*
|
|
3902
|
-
* Response variant implements smart buffering:
|
|
3903
|
-
* - Waits for 40+ words with structure OR
|
|
3904
|
-
* - High-confidence patterns (code blocks, headers, lists) with lower threshold OR
|
|
3905
|
-
* - Timeout after 2.5 seconds
|
|
3906
|
-
*
|
|
3907
|
-
* Performance optimization: Uses throttled static snapshots instead of re-rendering
|
|
3908
|
-
* on every character. Content updates every 300ms during streaming, avoiding
|
|
3909
|
-
* expensive markdown parsing on every delta.
|
|
3910
|
-
*/
|
|
3911
|
-
declare function ResponseCard({ text, isStreaming, streamStartTime, onOpenFile, onOpenUrl, onPopOut, variant, sessionId, messageId, annotations, onAccept, onAcceptWithCompact, isLastResponse, showAcceptPlan, compactMode, onBranch, onAddAnnotation, onRemoveAnnotation, onUpdateAnnotation, sendMessageKey, onSaveAndSendFollowUp, hasActiveFollowUpAnnotations, openAnnotationRequest, annotationInteractionMode, }: ResponseCardProps): react_jsx_runtime.JSX.Element | null;
|
|
3912
|
-
|
|
3913
|
-
interface TurnCardProps {
|
|
3914
|
-
/** Session ID for state persistence (optional in shared context) */
|
|
3915
|
-
sessionId?: string;
|
|
3916
|
-
/** Turn ID for state persistence */
|
|
3917
|
-
turnId: string;
|
|
3918
|
-
/** All activities in this turn (tools, thinking, intermediate text) */
|
|
3919
|
-
activities: ActivityItem[];
|
|
3920
|
-
/** Final response content (may be streaming) */
|
|
3921
|
-
response?: ResponseContent;
|
|
3922
|
-
/** Primary intent/goal for this turn (shown in collapsed preview) */
|
|
3923
|
-
intent?: string;
|
|
3924
|
-
/** Whether content is still being received */
|
|
3925
|
-
isStreaming: boolean;
|
|
3926
|
-
/** Whether this turn is fully complete */
|
|
3927
|
-
isComplete: boolean;
|
|
3928
|
-
/** Start in expanded state */
|
|
3929
|
-
defaultExpanded?: boolean;
|
|
3930
|
-
/** Controlled expansion state (overrides internal state) */
|
|
3931
|
-
isExpanded?: boolean;
|
|
3932
|
-
/** Callback when expansion state changes */
|
|
3933
|
-
onExpandedChange?: (expanded: boolean) => void;
|
|
3934
|
-
/** Controlled expansion state for activity groups */
|
|
3935
|
-
expandedActivityGroups?: Set<string>;
|
|
3936
|
-
/** Callback when activity group expansion changes */
|
|
3937
|
-
onExpandedActivityGroupsChange?: (groups: Set<string>) => void;
|
|
3938
|
-
/** Callback when file path is clicked */
|
|
3939
|
-
onOpenFile?: (path: string) => void;
|
|
3940
|
-
/** Callback when URL is clicked */
|
|
3941
|
-
onOpenUrl?: (url: string) => void;
|
|
3942
|
-
/** Callback to open response in Monaco editor */
|
|
3943
|
-
onPopOut?: (text: string) => void;
|
|
3944
|
-
/** Callback to open turn details in a new window */
|
|
3945
|
-
onOpenDetails?: () => void;
|
|
3946
|
-
/** Callback to open individual activity details in Monaco */
|
|
3947
|
-
onOpenActivityDetails?: (activity: ActivityItem) => void;
|
|
3948
|
-
/** Callback to open all edits/writes in multi-file diff view */
|
|
3949
|
-
onOpenMultiFileDiff?: () => void;
|
|
3950
|
-
/** Whether this turn has any Edit or Write activities */
|
|
3951
|
-
hasEditOrWriteActivities?: boolean;
|
|
3952
|
-
/** TodoWrite tool state - shown at bottom of turn */
|
|
3953
|
-
todos?: TodoItem[];
|
|
3954
|
-
/** Optional render prop for actions menu (Electron provides dropdown) */
|
|
3955
|
-
renderActionsMenu?: () => React$1.ReactNode;
|
|
3956
|
-
/** Callback when user accepts the plan (plan responses only) */
|
|
3957
|
-
onAcceptPlan?: () => void;
|
|
3958
|
-
/** Callback when user accepts the plan with compaction (compact conversation first, then execute) */
|
|
3959
|
-
onAcceptPlanWithCompact?: () => void;
|
|
3960
|
-
/** Whether this is the last response in the session (shows Accept Plan button only for last response) */
|
|
3961
|
-
isLastResponse?: boolean;
|
|
3962
|
-
/** Session folder path for stripping from file paths in tool display */
|
|
3963
|
-
sessionFolderPath?: string;
|
|
3964
|
-
/** Display mode: 'detailed' shows all info, 'informative' hides MCP/API names and params */
|
|
3965
|
-
displayMode?: 'informative' | 'detailed';
|
|
3966
|
-
/** Animate response appearance (for playground demos) */
|
|
3967
|
-
animateResponse?: boolean;
|
|
3968
|
-
/** Hide footers for compact embedding (EditPopover) */
|
|
3969
|
-
compactMode?: boolean;
|
|
3970
|
-
/** Callback to branch the session from a specific message */
|
|
3971
|
-
onBranch?: (messageId: string, options?: {
|
|
3972
|
-
newPanel?: boolean;
|
|
3973
|
-
}) => void;
|
|
3974
|
-
/** Callback to add an annotation to a response message */
|
|
3975
|
-
onAddAnnotation?: (messageId: string, annotation: AnnotationV1) => void;
|
|
3976
|
-
/** Callback to remove a persisted annotation from a response message */
|
|
3977
|
-
onRemoveAnnotation?: (messageId: string, annotationId: string) => void;
|
|
3978
|
-
/** Callback to update a persisted annotation */
|
|
3979
|
-
onUpdateAnnotation?: (messageId: string, annotationId: string, patch: Partial<AnnotationV1>) => void;
|
|
3980
|
-
/** Input send key behavior used by follow-up editor */
|
|
3981
|
-
sendMessageKey?: 'enter' | 'cmd-enter';
|
|
3982
|
-
/** Callback when follow-up is saved via "Save & Send" action */
|
|
3983
|
-
onSaveAndSendFollowUp?: (target: {
|
|
3984
|
-
messageId: string;
|
|
3985
|
-
annotationId: string;
|
|
3986
|
-
note: string;
|
|
3987
|
-
selectedText: string;
|
|
3988
|
-
}) => void;
|
|
3989
|
-
/** Whether there are active pending follow-up annotations in the session */
|
|
3990
|
-
hasActiveFollowUpAnnotations?: boolean;
|
|
3991
|
-
/** External request to open a specific annotation in the follow-up island */
|
|
3992
|
-
openAnnotationRequest?: OpenAnnotationRequest | null;
|
|
3993
|
-
/** Annotation interaction mode (viewer uses tooltip-only to suppress the island) */
|
|
3994
|
-
annotationInteractionMode?: AnnotationInteractionMode;
|
|
3995
|
-
}
|
|
3996
|
-
/**
|
|
3997
|
-
* TurnCard - Email-like display for one assistant turn
|
|
3998
|
-
*
|
|
3999
|
-
* Batches all activities (tools, thinking) into a collapsible section
|
|
4000
|
-
* with the final response displayed separately below.
|
|
4001
|
-
*
|
|
4002
|
-
* Memoized to prevent re-renders of completed turns during session switches.
|
|
4003
|
-
* Only complete, non-streaming turns are memoized - active turns always re-render.
|
|
4004
|
-
*/
|
|
4005
|
-
declare const TurnCard: React$1.MemoExoticComponent<({ sessionId, turnId, activities, response, intent, isStreaming, isComplete, defaultExpanded, isExpanded: externalIsExpanded, onExpandedChange, expandedActivityGroups: externalExpandedActivityGroups, onExpandedActivityGroupsChange, onOpenFile, onOpenUrl, onPopOut, onOpenDetails, onOpenActivityDetails, onOpenMultiFileDiff, hasEditOrWriteActivities, todos, renderActionsMenu, onAcceptPlan, onAcceptPlanWithCompact, isLastResponse, sessionFolderPath, displayMode, animateResponse, compactMode, onBranch, onAddAnnotation, onRemoveAnnotation, onUpdateAnnotation, sendMessageKey, onSaveAndSendFollowUp, hasActiveFollowUpAnnotations, openAnnotationRequest, annotationInteractionMode, }: TurnCardProps) => react_jsx_runtime.JSX.Element | null>;
|
|
4006
|
-
|
|
4007
|
-
type InlineExecutionStatus = 'executing' | 'success' | 'error';
|
|
4008
|
-
interface InlineActivityItem {
|
|
4009
|
-
id: string;
|
|
4010
|
-
name: string;
|
|
4011
|
-
status: ActivityStatus;
|
|
4012
|
-
description?: string;
|
|
4013
|
-
}
|
|
4014
|
-
interface InlineExecutionProps {
|
|
4015
|
-
/** Current execution status */
|
|
4016
|
-
status: InlineExecutionStatus;
|
|
4017
|
-
/** Activities to display (simplified from full ActivityItem) */
|
|
4018
|
-
activities: InlineActivityItem[];
|
|
4019
|
-
/** Result message on success */
|
|
4020
|
-
result?: string;
|
|
4021
|
-
/** Error message on failure */
|
|
4022
|
-
error?: string;
|
|
4023
|
-
/** Callback to cancel execution */
|
|
4024
|
-
onCancel?: () => void;
|
|
4025
|
-
/** Callback to dismiss (on success/error) */
|
|
4026
|
-
onDismiss?: () => void;
|
|
4027
|
-
/** Callback to retry (on error) */
|
|
4028
|
-
onRetry?: () => void;
|
|
4029
|
-
/** Optional className */
|
|
4030
|
-
className?: string;
|
|
4031
|
-
}
|
|
4032
|
-
declare function InlineExecution({ status, activities, result, error, onCancel, onDismiss, onRetry, className, }: InlineExecutionProps): react_jsx_runtime.JSX.Element;
|
|
4033
|
-
|
|
4034
|
-
/**
|
|
4035
|
-
* Platform-specific actions for UI components.
|
|
4036
|
-
* Consumers provide these via PlatformProvider.
|
|
4037
|
-
*/
|
|
4038
|
-
interface PlatformActions {
|
|
4039
|
-
/** Open a file in the system editor/Finder */
|
|
4040
|
-
onOpenFile?: (path: string) => void;
|
|
4041
|
-
/** Open a URL in the system browser */
|
|
4042
|
-
onOpenUrl?: (url: string) => void;
|
|
4043
|
-
/** Open a markdown preview popover */
|
|
4044
|
-
onOpenMarkdownPreview?: (sessionId: string, markdown: string) => void;
|
|
4045
|
-
/** Open turn details in a new window/panel */
|
|
4046
|
-
onOpenTurnDetails?: (sessionId: string, turnId: string) => void;
|
|
4047
|
-
/** Open activity details */
|
|
4048
|
-
onOpenActivityDetails?: (sessionId: string, activityId: string) => void;
|
|
4049
|
-
/** Open multi-file diff view for a turn */
|
|
4050
|
-
onOpenMultiFileDiff?: (sessionId: string, turnId: string) => void;
|
|
4051
|
-
/** Respond to a permission or auth request */
|
|
4052
|
-
onPermissionAllow?: (requestId: string, allowed: boolean, remember?: boolean) => void;
|
|
4053
|
-
}
|
|
4054
|
-
/**
|
|
4055
|
-
* Provider that injects platform-specific actions into the component tree.
|
|
4056
|
-
*/
|
|
4057
|
-
declare function PlatformProvider({ actions, children, }: {
|
|
4058
|
-
actions: PlatformActions;
|
|
4059
|
-
children: React__default.ReactNode;
|
|
4060
|
-
}): react_jsx_runtime.JSX.Element;
|
|
4061
|
-
|
|
4062
|
-
interface ChatTranscriptProps {
|
|
4063
|
-
messages: Message[];
|
|
4064
|
-
platformActions?: PlatformActions;
|
|
4065
|
-
className?: string;
|
|
4066
|
-
onTurnClick?: (turnId: string) => void;
|
|
4067
|
-
onActivityClick?: (activity: ActivityItem) => void;
|
|
4068
|
-
defaultExpanded?: boolean;
|
|
4069
|
-
displayMode?: 'informative' | 'detailed';
|
|
4070
|
-
animateResponse?: boolean;
|
|
4071
|
-
annotationInteractionMode?: AnnotationInteractionMode;
|
|
4072
|
-
sessionId?: string;
|
|
4073
|
-
sessionFolderPath?: string;
|
|
4074
|
-
children?: ReactNode;
|
|
4075
|
-
}
|
|
4076
|
-
declare function ChatTranscript({ messages, platformActions, className, onTurnClick, onActivityClick, defaultExpanded, displayMode, animateResponse, annotationInteractionMode, sessionId, sessionFolderPath, children, }: ChatTranscriptProps): react_jsx_runtime.JSX.Element;
|
|
4077
|
-
|
|
4078
|
-
type SessionViewerMode = 'interactive' | 'readonly';
|
|
4079
|
-
interface SessionViewerProps {
|
|
4080
|
-
session: StoredSession;
|
|
4081
|
-
mode?: SessionViewerMode;
|
|
4082
|
-
platformActions?: PlatformActions;
|
|
4083
|
-
className?: string;
|
|
4084
|
-
onTurnClick?: (turnId: string) => void;
|
|
4085
|
-
onActivityClick?: (activity: ActivityItem) => void;
|
|
4086
|
-
defaultExpanded?: boolean;
|
|
4087
|
-
header?: ReactNode;
|
|
4088
|
-
footer?: ReactNode;
|
|
4089
|
-
sessionFolderPath?: string;
|
|
4090
|
-
}
|
|
4091
|
-
declare function SessionViewer({ session, mode, platformActions, className, onTurnClick, onActivityClick, defaultExpanded, header, footer, sessionFolderPath, }: SessionViewerProps): react_jsx_runtime.JSX.Element;
|
|
4092
|
-
|
|
4093
|
-
interface PendingIndicatorProps {
|
|
4094
|
-
isReconnecting?: boolean;
|
|
4095
|
-
}
|
|
4096
|
-
declare function PendingIndicator({ isReconnecting, }: PendingIndicatorProps): react_jsx_runtime.JSX.Element;
|
|
4097
|
-
|
|
4098
|
-
interface UserMessageBubbleProps {
|
|
4099
|
-
/** Message content (markdown supported) */
|
|
4100
|
-
content: string;
|
|
4101
|
-
/** Additional className for the outer container */
|
|
4102
|
-
className?: string;
|
|
4103
|
-
/** Callback when a URL is clicked */
|
|
4104
|
-
onUrlClick?: (url: string) => void;
|
|
4105
|
-
/** Callback when a file path is clicked */
|
|
4106
|
-
onFileClick?: (path: string) => void;
|
|
4107
|
-
/** Stored attachments (images, documents) */
|
|
4108
|
-
attachments?: StoredAttachment[];
|
|
4109
|
-
/** Content badges for inline display (sources, skills) */
|
|
4110
|
-
badges?: ContentBadge[];
|
|
4111
|
-
/** Whether the message is awaiting backend confirmation. User bubbles stay visually stable. */
|
|
4112
|
-
isPending?: boolean;
|
|
4113
|
-
/** Whether the message is queued (badge shown) */
|
|
4114
|
-
isQueued?: boolean;
|
|
4115
|
-
/** Compact mode - reduces padding for popover embedding */
|
|
4116
|
-
compactMode?: boolean;
|
|
4117
|
-
}
|
|
4118
|
-
declare function UserMessageBubble({ content, className, onUrlClick, onFileClick, attachments, badges, isQueued, compactMode, }: UserMessageBubbleProps): react_jsx_runtime.JSX.Element;
|
|
4119
|
-
|
|
4120
|
-
/**
|
|
4121
|
-
* SystemMessage - Displays system/info/error/warning messages
|
|
4122
|
-
*
|
|
4123
|
-
* Used for displaying non-conversational messages like errors, warnings,
|
|
4124
|
-
* info notices, and general system messages. Supports different visual
|
|
4125
|
-
* styles based on the message type.
|
|
4126
|
-
*
|
|
4127
|
-
* Error and warning types use shadow-tinted for a softer, more polished appearance.
|
|
4128
|
-
* System and info types use a simple bordered style.
|
|
4129
|
-
*/
|
|
4130
|
-
type SystemMessageType = 'error' | 'info' | 'warning' | 'system';
|
|
4131
|
-
interface SystemMessageProps {
|
|
4132
|
-
/** Message content (markdown supported) */
|
|
4133
|
-
content: string;
|
|
4134
|
-
/** Message type determining visual style */
|
|
4135
|
-
type: SystemMessageType;
|
|
4136
|
-
/** Additional className for the outer container */
|
|
4137
|
-
className?: string;
|
|
4138
|
-
}
|
|
4139
|
-
/**
|
|
4140
|
-
* SystemMessage - Renders a styled message bubble based on type
|
|
4141
|
-
*/
|
|
4142
|
-
declare function SystemMessage({ content, type, className, }: SystemMessageProps): react_jsx_runtime.JSX.Element;
|
|
4143
|
-
|
|
4144
|
-
/**
|
|
4145
|
-
* PermissionRequestCard - Inline permission prompt for agent tool approval
|
|
4146
|
-
*
|
|
4147
|
-
* Renders when the agent is paused awaiting user approval for a tool
|
|
4148
|
-
* invocation (e.g. bash command, file write, MCP mutation). Displays
|
|
4149
|
-
* the tool name, input preview, and reason, with Allow/Deny/Remember
|
|
4150
|
-
* action buttons.
|
|
4151
|
-
*
|
|
4152
|
-
* Styling follows the Weft design system:
|
|
4153
|
-
* - Rounded-[8px] card with shadow-minimal
|
|
4154
|
-
* - Accent-coloured header strip for tool identity
|
|
4155
|
-
* - Truncated input preview in a subtle code block
|
|
4156
|
-
* - Two or three action buttons (Allow, Deny, Remember)
|
|
4157
|
-
*/
|
|
4158
|
-
interface PermissionRequestCardProps {
|
|
4159
|
-
/** Unique request ID matching the runtime permission request */
|
|
4160
|
-
requestId: string;
|
|
4161
|
-
/** Tool name requesting approval (e.g. "Bash", "Write", "Edit") */
|
|
4162
|
-
toolName: string;
|
|
4163
|
-
/** Optional scope descriptor (session, workspace, source, skill, tool-call) */
|
|
4164
|
-
scope?: {
|
|
4165
|
-
type: string;
|
|
4166
|
-
label?: string;
|
|
4167
|
-
};
|
|
4168
|
-
/** Optional input preview (command, file path, MCP payload) */
|
|
4169
|
-
input?: Record<string, unknown>;
|
|
4170
|
-
/** Optional reason text explaining why permission is needed */
|
|
4171
|
-
reason?: string;
|
|
4172
|
-
/** Whether this request is currently active (not yet resolved) */
|
|
4173
|
-
isActive?: boolean;
|
|
4174
|
-
/** Previous resolution if re-shown for context (allowed/denied) */
|
|
4175
|
-
previousResolution?: {
|
|
4176
|
-
allowed: boolean;
|
|
4177
|
-
remember?: boolean;
|
|
4178
|
-
reason?: string;
|
|
4179
|
-
};
|
|
4180
|
-
/** Callback when user approves the request */
|
|
4181
|
-
onAllow?: (requestId: string, remember?: boolean) => void;
|
|
4182
|
-
/** Callback when user denies the request */
|
|
4183
|
-
onDeny?: (requestId: string) => void;
|
|
4184
|
-
/** Additional className */
|
|
4185
|
-
className?: string;
|
|
4186
|
-
}
|
|
4187
|
-
declare function PermissionRequestCard({ requestId, toolName, scope, input, reason, isActive, previousResolution, onAllow, onDeny, className, }: PermissionRequestCardProps): react_jsx_runtime.JSX.Element;
|
|
4188
|
-
|
|
4189
|
-
/**
|
|
4190
|
-
* Standard assistant-turn presentation: a TurnCard with local expand state that
|
|
4191
|
-
* stays open while the turn streams, the detailed display mode, and a click
|
|
4192
|
-
* handler that surfaces a step for inspection. Shared so the web app and the
|
|
4193
|
-
* embeddable chat panel render thinking steps identically.
|
|
4194
|
-
*/
|
|
4195
|
-
declare function AssistantTurnCard({ sessionId, turn, isLast, onInspectActivity, }: {
|
|
4196
|
-
sessionId: string;
|
|
4197
|
-
turn: Extract<Turn, {
|
|
4198
|
-
type: 'assistant';
|
|
4199
|
-
}>;
|
|
4200
|
-
isLast: boolean;
|
|
4201
|
-
onInspectActivity: (activity: ActivityItem) => void;
|
|
4202
|
-
}): react_jsx_runtime.JSX.Element;
|
|
4203
|
-
|
|
4204
|
-
/**
|
|
4205
|
-
* Renders a single activity's input / output / error for inspection. Shared by
|
|
4206
|
-
* the web app's side panel and the embeddable chat panel's detail popup so the
|
|
4207
|
-
* step-detail view stays identical across hosts.
|
|
4208
|
-
*/
|
|
4209
|
-
declare function ActivityInspector({ activity, onClose, }: {
|
|
4210
|
-
activity: ActivityItem | null;
|
|
4211
|
-
onClose?: () => void;
|
|
4212
|
-
}): react_jsx_runtime.JSX.Element;
|
|
4213
|
-
|
|
4214
|
-
/**
|
|
4215
|
-
* Modal popup wrapping ActivityInspector: centered, dismissable via backdrop
|
|
4216
|
-
* click or Escape. Open it from a TurnCard's onOpenActivityDetails callback.
|
|
4217
|
-
*/
|
|
4218
|
-
declare function ActivityDetailsPanel({ activity, onClose, }: {
|
|
4219
|
-
activity: ActivityItem | null;
|
|
4220
|
-
onClose: () => void;
|
|
4221
|
-
}): react_jsx_runtime.JSX.Element | null;
|
|
4222
|
-
|
|
4223
|
-
declare function PermissionModeMenu({ value, onChange, onClose, isOpen, onToggle, }: {
|
|
4224
|
-
value: PermissionMode;
|
|
4225
|
-
onChange: (mode: PermissionMode) => void;
|
|
4226
|
-
onClose?: () => void;
|
|
4227
|
-
isOpen: boolean;
|
|
4228
|
-
onToggle: () => void;
|
|
4229
|
-
}): react_jsx_runtime.JSX.Element;
|
|
4230
|
-
|
|
4231
|
-
interface CodeBlockProps {
|
|
4232
|
-
code: string;
|
|
4233
|
-
language?: string;
|
|
4234
|
-
className?: string;
|
|
4235
|
-
/**
|
|
4236
|
-
* Render mode affects code block styling:
|
|
4237
|
-
* - 'terminal': Minimal, keeps control chars visible
|
|
4238
|
-
* - 'minimal': Clean code, basic styling
|
|
4239
|
-
* - 'full': Rich styling with background, copy button, etc.
|
|
4240
|
-
*/
|
|
4241
|
-
mode?: 'terminal' | 'minimal' | 'full';
|
|
4242
|
-
/**
|
|
4243
|
-
* Force a specific theme. If not provided, detects from document.documentElement.classList
|
|
4244
|
-
*/
|
|
4245
|
-
forcedTheme?: 'light' | 'dark';
|
|
4246
|
-
}
|
|
4247
|
-
/**
|
|
4248
|
-
* CodeBlock - Syntax highlighted code block using Shiki
|
|
4249
|
-
*
|
|
4250
|
-
* Uses VS Code's syntax highlighting engine for accurate highlighting.
|
|
4251
|
-
* Lazy-loads highlighting and caches results for performance.
|
|
4252
|
-
*/
|
|
4253
|
-
declare function CodeBlock({ code, language, className, mode, forcedTheme }: CodeBlockProps): react_jsx_runtime.JSX.Element;
|
|
4254
|
-
/**
|
|
4255
|
-
* InlineCode - Styled inline code span
|
|
4256
|
-
* Features: subtle background (3%), no border, 75% opacity text
|
|
4257
|
-
*/
|
|
4258
|
-
declare function InlineCode({ children, className }: {
|
|
4259
|
-
children: React$1.ReactNode;
|
|
4260
|
-
className?: string;
|
|
4261
|
-
}): react_jsx_runtime.JSX.Element;
|
|
4262
|
-
|
|
4263
|
-
declare function CollapsibleMarkdownProvider({ children, }: {
|
|
4264
|
-
children: React.ReactNode;
|
|
4265
|
-
}): react_jsx_runtime.JSX.Element;
|
|
4266
|
-
|
|
4267
|
-
/**
|
|
4268
|
-
* Render modes for markdown content:
|
|
4269
|
-
*
|
|
4270
|
-
* - 'terminal': Raw output with minimal formatting, control chars visible
|
|
4271
|
-
* Best for: Debug output, raw logs, when you want to see exactly what's there
|
|
4272
|
-
*
|
|
4273
|
-
* - 'minimal': Clean rendering with syntax highlighting but no extra chrome
|
|
4274
|
-
* Best for: Chat messages, inline content, when you want readability without clutter
|
|
4275
|
-
*
|
|
4276
|
-
* - 'full': Rich rendering with beautiful tables, styled code blocks, proper typography
|
|
4277
|
-
* Best for: Documentation, long-form content, when presentation matters
|
|
4278
|
-
*/
|
|
4279
|
-
type RenderMode = 'terminal' | 'minimal' | 'full';
|
|
4280
|
-
interface MarkdownProps {
|
|
4281
|
-
children: string;
|
|
4282
|
-
/**
|
|
4283
|
-
* Render mode controlling formatting level
|
|
4284
|
-
* @default 'minimal'
|
|
4285
|
-
*/
|
|
4286
|
-
mode?: RenderMode;
|
|
4287
|
-
className?: string;
|
|
4288
|
-
/**
|
|
4289
|
-
* Message ID for memoization (optional)
|
|
4290
|
-
* When provided, memoizes parsed blocks to avoid re-parsing during streaming
|
|
4291
|
-
*/
|
|
4292
|
-
id?: string;
|
|
4293
|
-
/**
|
|
4294
|
-
* Callback when a URL is clicked
|
|
4295
|
-
*/
|
|
4296
|
-
onUrlClick?: (url: string) => void;
|
|
4297
|
-
/**
|
|
4298
|
-
* Callback when a file path is clicked
|
|
4299
|
-
*/
|
|
4300
|
-
onFileClick?: (path: string) => void;
|
|
4301
|
-
/**
|
|
4302
|
-
* Enable collapsible headings
|
|
4303
|
-
* Requires wrapping in CollapsibleMarkdownProvider
|
|
4304
|
-
* @default false
|
|
4305
|
-
*/
|
|
4306
|
-
collapsible?: boolean;
|
|
4307
|
-
/**
|
|
4308
|
-
* Hide expand button on first mermaid block (when message starts with mermaid)
|
|
4309
|
-
* Used in chat to avoid overlap with TurnCard's fullscreen button
|
|
4310
|
-
* @default true
|
|
4311
|
-
*/
|
|
4312
|
-
hideFirstMermaidExpand?: boolean;
|
|
4313
|
-
}
|
|
4314
|
-
/**
|
|
4315
|
-
* Markdown - Customizable markdown renderer with multiple render modes
|
|
4316
|
-
*
|
|
4317
|
-
* Features:
|
|
4318
|
-
* - Three render modes: terminal, minimal, full
|
|
4319
|
-
* - Syntax highlighting via Shiki
|
|
4320
|
-
* - GFM support (tables, task lists, strikethrough)
|
|
4321
|
-
* - Clickable links and file paths
|
|
4322
|
-
* - Memoization for streaming performance
|
|
4323
|
-
*/
|
|
4324
|
-
declare function Markdown({ children, mode, className, id, onUrlClick, onFileClick, collapsible, hideFirstMermaidExpand, }: MarkdownProps): react_jsx_runtime.JSX.Element;
|
|
4325
|
-
/**
|
|
4326
|
-
* MemoizedMarkdown - Optimized for streaming scenarios
|
|
4327
|
-
*
|
|
4328
|
-
* Splits content into blocks and memoizes each block separately,
|
|
4329
|
-
* so only new/changed blocks re-render during streaming.
|
|
4330
|
-
*/
|
|
4331
|
-
declare const MemoizedMarkdown: React$1.MemoExoticComponent<typeof Markdown>;
|
|
4332
|
-
|
|
4333
|
-
interface AnchoredSelection {
|
|
4334
|
-
anchorX: number;
|
|
4335
|
-
anchorY: number;
|
|
4336
|
-
start: number;
|
|
4337
|
-
end: number;
|
|
4338
|
-
exact: string;
|
|
4339
|
-
selectedText?: string;
|
|
4340
|
-
prefix?: string;
|
|
4341
|
-
suffix?: string;
|
|
4342
|
-
}
|
|
4343
|
-
|
|
4344
|
-
/**
|
|
4345
|
-
* annotation-core — stub for annotation overlay core utilities.
|
|
4346
|
-
*
|
|
4347
|
-
* Provides type definitions and utility functions for annotation rendering.
|
|
4348
|
-
* Full implementation will be ported from the upstream source project.
|
|
4349
|
-
*/
|
|
4350
|
-
|
|
4351
|
-
interface AnnotationOverlayRect {
|
|
4352
|
-
id: string;
|
|
4353
|
-
left: number;
|
|
4354
|
-
top: number;
|
|
4355
|
-
width: number;
|
|
4356
|
-
height: number;
|
|
4357
|
-
color: string;
|
|
4358
|
-
}
|
|
4359
|
-
type AnnotationOverlayChip = {
|
|
4360
|
-
id: string;
|
|
4361
|
-
index: number;
|
|
4362
|
-
left: number;
|
|
4363
|
-
top: number;
|
|
4364
|
-
sentFollowUp: boolean;
|
|
4365
|
-
};
|
|
4366
|
-
declare function hasExistingTextRangeAnnotation(annotations: AnnotationV1[], start: number, end: number): boolean;
|
|
4367
|
-
declare function createSelectionPreviewAnnotation(messageId: string, sessionIdOrSelection: string | AnchoredSelection, startOrSessionId?: number | string, end?: number, exact?: string): AnnotationV1;
|
|
4368
|
-
declare function createTextSelectionAnnotation(messageId: string, sessionId: string, start: number, end: number, exact: string, note: string): AnnotationV1;
|
|
4369
|
-
interface TextSegment {
|
|
4370
|
-
start: number;
|
|
4371
|
-
end: number;
|
|
4372
|
-
node: Text;
|
|
4373
|
-
}
|
|
4374
|
-
declare function collectTextSegments(_content: string | HTMLElement, _annotations: AnnotationV1[]): TextSegment[];
|
|
4375
|
-
/** Stub — full implementation will compute canonical text from DOM */
|
|
4376
|
-
declare function getCanonicalText(_content: string | HTMLElement): string;
|
|
4377
|
-
/**
|
|
4378
|
-
* Stub — resolves character offset within a DOM node.
|
|
4379
|
-
* Full implementation will walk the DOM tree to compute text offset.
|
|
4380
|
-
*/
|
|
4381
|
-
declare function resolveNodeOffset(_root: string | HTMLElement, _node?: Node, _offset?: number): number | null;
|
|
4382
|
-
|
|
4383
|
-
/**
|
|
4384
|
-
* annotation-overlay-geometry — stub for annotation overlay geometry computation.
|
|
4385
|
-
*/
|
|
4386
|
-
|
|
4387
|
-
interface AnnotationOverlayGeometryResult {
|
|
4388
|
-
rects: AnnotationOverlayRect[];
|
|
4389
|
-
chips: AnnotationOverlayChip[];
|
|
4390
|
-
unresolved: Array<{
|
|
4391
|
-
annotation: AnnotationV1;
|
|
4392
|
-
reason: string;
|
|
4393
|
-
}>;
|
|
4394
|
-
}
|
|
4395
|
-
declare function computeAnnotationOverlayGeometry(_containerOrOpts: HTMLElement | {
|
|
4396
|
-
root: HTMLElement;
|
|
4397
|
-
renderedAnnotations: AnnotationV1[];
|
|
4398
|
-
persistedAnnotations?: AnnotationV1[];
|
|
4399
|
-
}, _annotations?: AnnotationV1[], _content?: string): AnnotationOverlayGeometryResult;
|
|
4400
|
-
|
|
4401
|
-
interface AnnotationOverlayLayerProps {
|
|
4402
|
-
rects: AnnotationOverlayRect[];
|
|
4403
|
-
chips: AnnotationOverlayChip[];
|
|
4404
|
-
annotations?: AnnotationV1[];
|
|
4405
|
-
getTooltipText?: (annotation: AnnotationV1, index: number) => string;
|
|
4406
|
-
/** Whether clicking a chip should open the annotation island/details view. */
|
|
4407
|
-
allowChipOpen?: boolean;
|
|
4408
|
-
onChipOpen: (params: {
|
|
4409
|
-
annotationId: string;
|
|
4410
|
-
index: number;
|
|
4411
|
-
anchorX: number;
|
|
4412
|
-
anchorY: number;
|
|
4413
|
-
mode: 'view' | 'edit';
|
|
4414
|
-
}) => void;
|
|
4415
|
-
}
|
|
4416
|
-
declare function AnnotationOverlayLayer({ rects, chips, annotations, getTooltipText, allowChipOpen, onChipOpen, }: AnnotationOverlayLayerProps): react_jsx_runtime.JSX.Element | null;
|
|
4417
|
-
|
|
4418
|
-
/**
|
|
4419
|
-
* IslandTransitionConfig — type stub for annotation island transition animations.
|
|
4420
|
-
*/
|
|
4421
|
-
interface IslandTransitionConfig {
|
|
4422
|
-
duration?: number;
|
|
4423
|
-
easing?: string;
|
|
4424
|
-
}
|
|
4425
|
-
|
|
4426
|
-
/**
|
|
4427
|
-
* AnnotationIslandMenu — stub for annotation island menu component.
|
|
4428
|
-
* Accepts all props used by TurnCard but renders nothing.
|
|
4429
|
-
*/
|
|
4430
|
-
|
|
4431
|
-
interface AnnotationIslandMenuProps {
|
|
4432
|
-
anchor?: {
|
|
4433
|
-
x: number;
|
|
4434
|
-
y: number;
|
|
4435
|
-
} | null;
|
|
4436
|
-
sourceKey?: string;
|
|
4437
|
-
replayNonce?: number;
|
|
4438
|
-
isVisible?: boolean;
|
|
4439
|
-
activeView?: string | null;
|
|
4440
|
-
mode?: string;
|
|
4441
|
-
draft?: string;
|
|
4442
|
-
onDraftChange?: (draft: string) => void;
|
|
4443
|
-
onOpenFollowUp?: () => void;
|
|
4444
|
-
onCancel?: () => void;
|
|
4445
|
-
onRequestBack?: () => boolean;
|
|
4446
|
-
onRequestEdit?: () => void;
|
|
4447
|
-
onSubmit?: (note: string) => void;
|
|
4448
|
-
onSubmitAndSend?: (...args: any[]) => void;
|
|
4449
|
-
onDelete?: () => void;
|
|
4450
|
-
sendMessageKey?: string;
|
|
4451
|
-
transitionConfig?: Record<string, unknown> | IslandTransitionConfig;
|
|
4452
|
-
onExitComplete?: () => void;
|
|
4453
|
-
usePortal?: boolean;
|
|
4454
|
-
className?: string;
|
|
4455
|
-
}
|
|
4456
|
-
declare function AnnotationIslandMenu(_props: AnnotationIslandMenuProps): React$1.ReactNode;
|
|
4457
|
-
|
|
4458
|
-
/**
|
|
4459
|
-
* island-motion — stub for annotation island motion/animation utilities.
|
|
4460
|
-
*/
|
|
4461
|
-
interface PointerSnapshot {
|
|
4462
|
-
x: number;
|
|
4463
|
-
y: number;
|
|
4464
|
-
timestamp: number;
|
|
4465
|
-
}
|
|
4466
|
-
declare function buildAnnotationChipEntryTransition(_snapshot?: PointerSnapshot | null): Record<string, unknown>;
|
|
4467
|
-
declare function buildSelectionEntryTransition(_primary?: PointerSnapshot | null, _secondary?: PointerSnapshot | null): Record<string, unknown>;
|
|
4468
|
-
|
|
4469
|
-
/**
|
|
4470
|
-
* Event Processor Types
|
|
4471
|
-
*
|
|
4472
|
-
* Defines the state and event types for the centralized event processor.
|
|
4473
|
-
* All agent events flow through a single pure function for consistent state transitions.
|
|
4474
|
-
*/
|
|
4475
|
-
|
|
4476
|
-
/**
|
|
4477
|
-
* Runtime Session type — extends core Session with messages and processing state.
|
|
4478
|
-
* Aliased from ProtocolSession which includes all runtime fields needed by the processor.
|
|
4479
|
-
*/
|
|
4480
|
-
type Session = ProtocolSession;
|
|
4481
|
-
|
|
4482
|
-
/**
|
|
4483
|
-
* Streaming state for a session - replaces streamingTextRef
|
|
4484
|
-
*/
|
|
4485
|
-
interface StreamingState {
|
|
4486
|
-
content: string;
|
|
4487
|
-
turnId?: string;
|
|
4488
|
-
parentToolUseId?: string;
|
|
4489
|
-
}
|
|
4490
|
-
/**
|
|
4491
|
-
* Complete state for a session - combines session + streaming
|
|
4492
|
-
*/
|
|
4493
|
-
interface SessionState {
|
|
4494
|
-
session: Session;
|
|
4495
|
-
streaming: StreamingState | null;
|
|
4496
|
-
}
|
|
4497
|
-
/**
|
|
4498
|
-
* Text delta event - streaming text content
|
|
4499
|
-
*/
|
|
4500
|
-
interface TextDeltaEvent {
|
|
4501
|
-
type: 'text_delta';
|
|
4502
|
-
sessionId: string;
|
|
4503
|
-
delta: string;
|
|
4504
|
-
turnId?: string;
|
|
4505
|
-
/** Timestamp from canonical timeline for stable ordering */
|
|
4506
|
-
timestamp?: number;
|
|
4507
|
-
/** When true, this delta belongs to a reasoning/thinking block (intermediate content). */
|
|
4508
|
-
isIntermediate?: boolean;
|
|
4509
|
-
}
|
|
4510
|
-
/**
|
|
4511
|
-
* Text complete event - finalizes streaming text
|
|
4512
|
-
*/
|
|
4513
|
-
interface TextCompleteEvent {
|
|
4514
|
-
type: 'text_complete';
|
|
4515
|
-
sessionId: string;
|
|
4516
|
-
text: string;
|
|
4517
|
-
turnId?: string;
|
|
4518
|
-
isIntermediate?: boolean;
|
|
4519
|
-
parentToolUseId?: string;
|
|
4520
|
-
/** Timestamp from main process for consistent ordering with session.jsonl */
|
|
4521
|
-
timestamp?: number;
|
|
4522
|
-
/** Authoritative message ID from main process for persistence/branching parity */
|
|
4523
|
-
messageId?: string;
|
|
4524
|
-
}
|
|
4525
|
-
/**
|
|
4526
|
-
* Tool start event - begins tool execution
|
|
4527
|
-
* Field names match SessionEvent from @weft/protocol
|
|
4528
|
-
*/
|
|
4529
|
-
interface ToolStartEvent {
|
|
4530
|
-
type: 'tool_start';
|
|
4531
|
-
sessionId: string;
|
|
4532
|
-
toolUseId: string;
|
|
4533
|
-
toolName: string;
|
|
4534
|
-
toolInput?: Record<string, unknown>;
|
|
4535
|
-
/** Timestamp from main process for consistent ordering */
|
|
4536
|
-
timestamp?: number;
|
|
4537
|
-
turnId?: string;
|
|
4538
|
-
parentToolUseId?: string;
|
|
4539
|
-
toolIntent?: string;
|
|
4540
|
-
toolDisplayName?: string;
|
|
4541
|
-
/** Tool display metadata with base64-encoded icon for viewer compatibility */
|
|
4542
|
-
toolDisplayMeta?: ToolDisplayMeta;
|
|
4543
|
-
}
|
|
4544
|
-
/**
|
|
4545
|
-
* Tool result event - completes tool execution
|
|
4546
|
-
*/
|
|
4547
|
-
interface ToolResultEvent {
|
|
4548
|
-
type: 'tool_result';
|
|
4549
|
-
sessionId: string;
|
|
4550
|
-
toolUseId: string;
|
|
4551
|
-
toolName?: string;
|
|
4552
|
-
result: string;
|
|
4553
|
-
isError?: boolean;
|
|
4554
|
-
turnId?: string;
|
|
4555
|
-
parentToolUseId?: string;
|
|
4556
|
-
/** Timestamp from main process for consistent ordering */
|
|
4557
|
-
timestamp?: number;
|
|
4558
|
-
}
|
|
4559
|
-
/**
|
|
4560
|
-
* Tool delta event - appends streaming output to an executing tool.
|
|
4561
|
-
*/
|
|
4562
|
-
interface ToolDeltaEvent {
|
|
4563
|
-
type: 'tool_delta';
|
|
4564
|
-
sessionId: string;
|
|
4565
|
-
toolUseId: string;
|
|
4566
|
-
delta: string;
|
|
4567
|
-
stream?: string;
|
|
4568
|
-
turnId?: string;
|
|
4569
|
-
/** Timestamp from main process for consistent ordering */
|
|
4570
|
-
timestamp?: number;
|
|
4571
|
-
}
|
|
4572
|
-
/**
|
|
4573
|
-
* Complete event - agent loop finished
|
|
4574
|
-
*/
|
|
4575
|
-
interface CompleteEvent {
|
|
4576
|
-
type: 'complete';
|
|
4577
|
-
sessionId: string;
|
|
4578
|
-
tokenUsage?: Session['tokenUsage'];
|
|
4579
|
-
/** Explicit unread flag - set by main process based on viewing state */
|
|
4580
|
-
hasUnread?: boolean;
|
|
4581
|
-
}
|
|
4582
|
-
/**
|
|
4583
|
-
* Error event - agent error occurred
|
|
4584
|
-
*/
|
|
4585
|
-
interface ErrorEvent {
|
|
4586
|
-
type: 'error';
|
|
4587
|
-
sessionId: string;
|
|
4588
|
-
error: string;
|
|
4589
|
-
code?: string;
|
|
4590
|
-
title?: string;
|
|
4591
|
-
details?: string;
|
|
4592
|
-
original?: string;
|
|
4593
|
-
/** Timestamp from main process for consistent ordering */
|
|
4594
|
-
timestamp?: number;
|
|
4595
|
-
}
|
|
4596
|
-
/**
|
|
4597
|
-
* Permission request event
|
|
4598
|
-
* Matches SessionEvent shape from @weft/protocol
|
|
4599
|
-
*/
|
|
4600
|
-
interface PermissionRequestEvent {
|
|
4601
|
-
type: 'permission_request';
|
|
4602
|
-
sessionId: string;
|
|
4603
|
-
request: PermissionRequest;
|
|
4604
|
-
}
|
|
4605
|
-
/**
|
|
4606
|
-
* Sources changed event
|
|
4607
|
-
*/
|
|
4608
|
-
interface SourcesChangedEvent {
|
|
4609
|
-
type: 'sources_changed';
|
|
4610
|
-
sessionId: string;
|
|
4611
|
-
enabledSourceSlugs: string[];
|
|
4612
|
-
}
|
|
4613
|
-
/**
|
|
4614
|
-
* Labels changed event
|
|
4615
|
-
*/
|
|
4616
|
-
interface LabelsChangedEvent {
|
|
4617
|
-
type: 'labels_changed';
|
|
4618
|
-
sessionId: string;
|
|
4619
|
-
labels: string[];
|
|
4620
|
-
}
|
|
4621
|
-
/**
|
|
4622
|
-
* Todo state changed event (external metadata change or agent tool)
|
|
4623
|
-
*/
|
|
4624
|
-
interface SessionStatusChangedEvent {
|
|
4625
|
-
type: 'session_status_changed';
|
|
4626
|
-
sessionId: string;
|
|
4627
|
-
sessionStatus?: string;
|
|
4628
|
-
}
|
|
4629
|
-
/**
|
|
4630
|
-
* Session flagged/unflagged events (external metadata change)
|
|
4631
|
-
*/
|
|
4632
|
-
interface SessionFlaggedEvent {
|
|
4633
|
-
type: 'session_flagged';
|
|
4634
|
-
sessionId: string;
|
|
4635
|
-
}
|
|
4636
|
-
interface SessionUnflaggedEvent {
|
|
4637
|
-
type: 'session_unflagged';
|
|
4638
|
-
sessionId: string;
|
|
4639
|
-
}
|
|
4640
|
-
/**
|
|
4641
|
-
* Session archived/unarchived events (external metadata change)
|
|
4642
|
-
*/
|
|
4643
|
-
interface SessionArchivedEvent {
|
|
4644
|
-
type: 'session_archived';
|
|
4645
|
-
sessionId: string;
|
|
4646
|
-
}
|
|
4647
|
-
interface SessionUnarchivedEvent {
|
|
4648
|
-
type: 'session_unarchived';
|
|
4649
|
-
sessionId: string;
|
|
4650
|
-
}
|
|
4651
|
-
/**
|
|
4652
|
-
* Session name changed event (external metadata change)
|
|
4653
|
-
*/
|
|
4654
|
-
interface NameChangedEvent {
|
|
4655
|
-
type: 'name_changed';
|
|
4656
|
-
sessionId: string;
|
|
4657
|
-
name?: string;
|
|
4658
|
-
}
|
|
4659
|
-
/**
|
|
4660
|
-
* Plan submitted event
|
|
4661
|
-
*/
|
|
4662
|
-
interface PlanSubmittedEvent {
|
|
4663
|
-
type: 'plan_submitted';
|
|
4664
|
-
sessionId: string;
|
|
4665
|
-
message: Message;
|
|
4666
|
-
}
|
|
4667
|
-
/**
|
|
4668
|
-
* Typed error event
|
|
4669
|
-
*/
|
|
4670
|
-
interface TypedErrorEvent {
|
|
4671
|
-
type: 'typed_error';
|
|
4672
|
-
sessionId: string;
|
|
4673
|
-
error: TypedError;
|
|
4674
|
-
/** Timestamp from main process for consistent ordering */
|
|
4675
|
-
timestamp?: number;
|
|
4676
|
-
}
|
|
4677
|
-
/**
|
|
4678
|
-
* Status event
|
|
4679
|
-
*/
|
|
4680
|
-
interface StatusEvent {
|
|
4681
|
-
type: 'status';
|
|
4682
|
-
sessionId: string;
|
|
4683
|
-
message: string;
|
|
4684
|
-
statusType?: 'compacting';
|
|
4685
|
-
/** Timestamp from main process for consistent ordering */
|
|
4686
|
-
timestamp?: number;
|
|
4687
|
-
}
|
|
4688
|
-
/**
|
|
4689
|
-
* Info event
|
|
4690
|
-
*/
|
|
4691
|
-
interface InfoEvent {
|
|
4692
|
-
type: 'info';
|
|
4693
|
-
sessionId: string;
|
|
4694
|
-
message: string;
|
|
4695
|
-
statusType?: 'compaction_complete';
|
|
4696
|
-
level?: 'info' | 'warning' | 'error' | 'success';
|
|
4697
|
-
/** Timestamp from main process for consistent ordering */
|
|
4698
|
-
timestamp?: number;
|
|
4699
|
-
}
|
|
4700
|
-
/**
|
|
4701
|
-
* Interrupted event
|
|
4702
|
-
*/
|
|
4703
|
-
interface InterruptedEvent {
|
|
4704
|
-
type: 'interrupted';
|
|
4705
|
-
sessionId: string;
|
|
4706
|
-
message?: Message;
|
|
4707
|
-
/** Messages that were queued but not processed — should be restored to input field */
|
|
4708
|
-
queuedMessages?: string[];
|
|
4709
|
-
}
|
|
4710
|
-
/**
|
|
4711
|
-
* Title generated event
|
|
4712
|
-
*/
|
|
4713
|
-
interface TitleGeneratedEvent {
|
|
4714
|
-
type: 'title_generated';
|
|
4715
|
-
sessionId: string;
|
|
4716
|
-
title: string;
|
|
4717
|
-
preview?: string;
|
|
4718
|
-
}
|
|
4719
|
-
/**
|
|
4720
|
-
* Title regenerating event - indicates title regeneration has started/finished
|
|
4721
|
-
* Used to show shimmer effect on title during regeneration
|
|
4722
|
-
* @deprecated Use AsyncOperationEvent instead
|
|
4723
|
-
*/
|
|
4724
|
-
interface TitleRegeneratingEvent {
|
|
4725
|
-
type: 'title_regenerating';
|
|
4726
|
-
sessionId: string;
|
|
4727
|
-
isRegenerating: boolean;
|
|
4728
|
-
}
|
|
4729
|
-
/**
|
|
4730
|
-
* Generic async operation state event
|
|
4731
|
-
* Used to show shimmer effect during any async operation (sharing, updating, revoking, title regeneration)
|
|
4732
|
-
*/
|
|
4733
|
-
interface AsyncOperationEvent {
|
|
4734
|
-
type: 'async_operation';
|
|
4735
|
-
sessionId: string;
|
|
4736
|
-
isOngoing: boolean;
|
|
4737
|
-
}
|
|
4738
|
-
/**
|
|
4739
|
-
* Working directory changed event (user-initiated via UI)
|
|
4740
|
-
*/
|
|
4741
|
-
interface WorkingDirectoryChangedEvent {
|
|
4742
|
-
type: 'working_directory_changed';
|
|
4743
|
-
sessionId: string;
|
|
4744
|
-
workingDirectory: string;
|
|
4745
|
-
}
|
|
4746
|
-
/**
|
|
4747
|
-
* Working directory error event - server rejected the path (cross-platform, not found, etc.)
|
|
4748
|
-
*/
|
|
4749
|
-
interface WorkingDirectoryErrorEvent {
|
|
4750
|
-
type: 'working_directory_error';
|
|
4751
|
-
sessionId: string;
|
|
4752
|
-
error: string;
|
|
4753
|
-
}
|
|
4754
|
-
/**
|
|
4755
|
-
* Permission mode changed event
|
|
4756
|
-
*/
|
|
4757
|
-
interface PermissionModeChangedEvent {
|
|
4758
|
-
type: 'permission_mode_changed';
|
|
4759
|
-
sessionId: string;
|
|
4760
|
-
permissionMode: PermissionMode;
|
|
4761
|
-
previousPermissionMode?: PermissionMode;
|
|
4762
|
-
transitionDisplay?: string;
|
|
4763
|
-
modeVersion?: number;
|
|
4764
|
-
changedAt?: string;
|
|
4765
|
-
changedBy?: 'user' | 'system' | 'restore' | 'automation' | 'unknown';
|
|
4766
|
-
}
|
|
4767
|
-
/**
|
|
4768
|
-
* Session model changed event
|
|
4769
|
-
*/
|
|
4770
|
-
interface SessionModelChangedEvent {
|
|
4771
|
-
type: 'session_model_changed';
|
|
4772
|
-
sessionId: string;
|
|
4773
|
-
model: string | null;
|
|
4774
|
-
}
|
|
4775
|
-
/**
|
|
4776
|
-
* LLM connection changed event - syncs session.llmConnection to renderer
|
|
4777
|
-
*/
|
|
4778
|
-
interface LLMConnectionChangedEvent {
|
|
4779
|
-
type: 'connection_changed';
|
|
4780
|
-
sessionId: string;
|
|
4781
|
-
connectionSlug: string;
|
|
4782
|
-
supportsBranching?: boolean;
|
|
4783
|
-
}
|
|
4784
|
-
/**
|
|
4785
|
-
* Credential request event - prompts user for credentials
|
|
4786
|
-
*/
|
|
4787
|
-
interface CredentialRequestEvent {
|
|
4788
|
-
type: 'credential_request';
|
|
4789
|
-
sessionId: string;
|
|
4790
|
-
request: CredentialRequest;
|
|
4791
|
-
}
|
|
4792
|
-
/**
|
|
4793
|
-
* Task backgrounded event - background agent started
|
|
4794
|
-
*/
|
|
4795
|
-
interface TaskBackgroundedEvent {
|
|
4796
|
-
type: 'task_backgrounded';
|
|
4797
|
-
sessionId: string;
|
|
4798
|
-
toolUseId: string;
|
|
4799
|
-
taskId: string;
|
|
4800
|
-
intent?: string;
|
|
4801
|
-
turnId?: string;
|
|
4802
|
-
}
|
|
4803
|
-
/**
|
|
4804
|
-
* Shell backgrounded event - background bash shell started
|
|
4805
|
-
*/
|
|
4806
|
-
interface ShellBackgroundedEvent {
|
|
4807
|
-
type: 'shell_backgrounded';
|
|
4808
|
-
sessionId: string;
|
|
4809
|
-
toolUseId: string;
|
|
4810
|
-
shellId: string;
|
|
4811
|
-
intent?: string;
|
|
4812
|
-
turnId?: string;
|
|
4813
|
-
}
|
|
4814
|
-
/**
|
|
4815
|
-
* Task progress event - live progress updates for background tasks
|
|
4816
|
-
*/
|
|
4817
|
-
interface TaskProgressEvent {
|
|
4818
|
-
type: 'task_progress';
|
|
4819
|
-
sessionId: string;
|
|
4820
|
-
toolUseId: string;
|
|
4821
|
-
elapsedSeconds: number;
|
|
4822
|
-
turnId?: string;
|
|
4823
|
-
}
|
|
4824
|
-
/**
|
|
4825
|
-
* Task completed event - background task finished execution
|
|
4826
|
-
* Updates the tool message status and result when a background task completes.
|
|
4827
|
-
*/
|
|
4828
|
-
interface TaskCompletedEvent {
|
|
4829
|
-
type: 'task_completed';
|
|
4830
|
-
sessionId: string;
|
|
4831
|
-
taskId: string;
|
|
4832
|
-
status: 'completed' | 'failed' | 'stopped';
|
|
4833
|
-
outputFile?: string;
|
|
4834
|
-
summary?: string;
|
|
4835
|
-
turnId?: string;
|
|
4836
|
-
}
|
|
4837
|
-
/**
|
|
4838
|
-
* User message event - backend confirmation of optimistic user message
|
|
4839
|
-
* Used for optimistic UI: frontend shows message immediately,
|
|
4840
|
-
* backend confirms/updates status via this event
|
|
4841
|
-
*/
|
|
4842
|
-
interface UserMessageEvent {
|
|
4843
|
-
type: 'user_message';
|
|
4844
|
-
sessionId: string;
|
|
4845
|
-
message: Message;
|
|
4846
|
-
status: 'accepted' | 'queued' | 'processing';
|
|
4847
|
-
/** Frontend's optimistic message ID for reliable matching */
|
|
4848
|
-
optimisticMessageId?: string;
|
|
4849
|
-
}
|
|
4850
|
-
/**
|
|
4851
|
-
* Message annotation update event
|
|
4852
|
-
*/
|
|
4853
|
-
interface MessageAnnotationsUpdatedEvent {
|
|
4854
|
-
type: 'message_annotations_updated';
|
|
4855
|
-
sessionId: string;
|
|
4856
|
-
messageId: string;
|
|
4857
|
-
annotations: NonNullable<Message['annotations']>;
|
|
4858
|
-
}
|
|
4859
|
-
/**
|
|
4860
|
-
* Session shared event - session was shared to viewer
|
|
4861
|
-
*/
|
|
4862
|
-
interface SessionSharedEvent {
|
|
4863
|
-
type: 'session_shared';
|
|
4864
|
-
sessionId: string;
|
|
4865
|
-
sharedUrl: string;
|
|
4866
|
-
}
|
|
4867
|
-
/**
|
|
4868
|
-
* Session unshared event - session share was revoked
|
|
4869
|
-
*/
|
|
4870
|
-
interface SessionUnsharedEvent {
|
|
4871
|
-
type: 'session_unshared';
|
|
4872
|
-
sessionId: string;
|
|
4873
|
-
}
|
|
4874
|
-
/**
|
|
4875
|
-
* Auth request event - unified auth flow (credential or OAuth)
|
|
4876
|
-
* Adds auth-request message to session and displays inline auth UI
|
|
4877
|
-
*/
|
|
4878
|
-
interface AuthRequestEvent {
|
|
4879
|
-
type: 'auth_request';
|
|
4880
|
-
sessionId: string;
|
|
4881
|
-
message: Message;
|
|
4882
|
-
request: AuthRequest;
|
|
4883
|
-
}
|
|
4884
|
-
/**
|
|
4885
|
-
* Auth completed event - auth request was completed (success, failure, or cancelled)
|
|
4886
|
-
* Updates the auth-request message status
|
|
4887
|
-
*/
|
|
4888
|
-
interface AuthCompletedEvent {
|
|
4889
|
-
type: 'auth_completed';
|
|
4890
|
-
sessionId: string;
|
|
4891
|
-
requestId: string;
|
|
4892
|
-
success: boolean;
|
|
4893
|
-
cancelled?: boolean;
|
|
4894
|
-
error?: string;
|
|
4895
|
-
}
|
|
4896
|
-
/**
|
|
4897
|
-
* Source activated event - a source was auto-activated mid-turn
|
|
4898
|
-
* Caller should re-send the original message to retry with the now-active source
|
|
4899
|
-
*/
|
|
4900
|
-
interface SourceActivatedEvent {
|
|
4901
|
-
type: 'source_activated';
|
|
4902
|
-
sessionId: string;
|
|
4903
|
-
sourceSlug: string;
|
|
4904
|
-
originalMessage: string;
|
|
4905
|
-
}
|
|
4906
|
-
/**
|
|
4907
|
-
* Usage update event - real-time context usage during processing
|
|
4908
|
-
* Allows UI to show growing context as agent processes, not just on complete
|
|
4909
|
-
*/
|
|
4910
|
-
interface UsageUpdateEvent {
|
|
4911
|
-
type: 'usage_update';
|
|
4912
|
-
sessionId: string;
|
|
4913
|
-
tokenUsage: {
|
|
4914
|
-
inputTokens: number;
|
|
4915
|
-
contextWindow?: number;
|
|
4916
|
-
};
|
|
4917
|
-
}
|
|
4918
|
-
/**
|
|
4919
|
-
* Union of all agent events
|
|
4920
|
-
*/
|
|
4921
|
-
type ChatEvent = TextDeltaEvent | TextCompleteEvent | ToolStartEvent | ToolDeltaEvent | ToolResultEvent | CompleteEvent | ErrorEvent | TypedErrorEvent | PermissionRequestEvent | CredentialRequestEvent | SourcesChangedEvent | LabelsChangedEvent | SessionStatusChangedEvent | SessionFlaggedEvent | SessionUnflaggedEvent | SessionArchivedEvent | SessionUnarchivedEvent | NameChangedEvent | PlanSubmittedEvent | StatusEvent | InfoEvent | InterruptedEvent | TitleGeneratedEvent | TitleRegeneratingEvent | AsyncOperationEvent | WorkingDirectoryChangedEvent | WorkingDirectoryErrorEvent | PermissionModeChangedEvent | SessionModelChangedEvent | LLMConnectionChangedEvent | TaskBackgroundedEvent | ShellBackgroundedEvent | TaskProgressEvent | TaskCompletedEvent | UserMessageEvent | MessageAnnotationsUpdatedEvent | SessionSharedEvent | SessionUnsharedEvent | AuthRequestEvent | AuthCompletedEvent | SourceActivatedEvent | UsageUpdateEvent;
|
|
4922
|
-
/**
|
|
4923
|
-
* Side effects that need to be handled outside the pure processor
|
|
4924
|
-
*/
|
|
4925
|
-
type Effect = {
|
|
4926
|
-
type: 'permission_request';
|
|
4927
|
-
request: PermissionRequest;
|
|
4928
|
-
} | {
|
|
4929
|
-
type: 'credential_request';
|
|
4930
|
-
request: CredentialRequest;
|
|
4931
|
-
} | {
|
|
4932
|
-
type: 'generate_title';
|
|
4933
|
-
sessionId: string;
|
|
4934
|
-
userMessage: string;
|
|
4935
|
-
} | {
|
|
4936
|
-
type: 'permission_mode_changed';
|
|
4937
|
-
sessionId: string;
|
|
4938
|
-
permissionMode: PermissionMode;
|
|
4939
|
-
previousPermissionMode?: PermissionMode;
|
|
4940
|
-
transitionDisplay?: string;
|
|
4941
|
-
modeVersion?: number;
|
|
4942
|
-
changedAt?: string;
|
|
4943
|
-
changedBy?: 'user' | 'system' | 'restore' | 'automation' | 'unknown';
|
|
4944
|
-
} | {
|
|
4945
|
-
type: 'auto_retry';
|
|
4946
|
-
sessionId: string;
|
|
4947
|
-
originalMessage: string;
|
|
4948
|
-
sourceSlug: string;
|
|
4949
|
-
} | {
|
|
4950
|
-
type: 'restore_input';
|
|
4951
|
-
text: string;
|
|
4952
|
-
} | {
|
|
4953
|
-
type: 'toast_error';
|
|
4954
|
-
message: string;
|
|
4955
|
-
};
|
|
4956
|
-
/**
|
|
4957
|
-
* Result of processing an event
|
|
4958
|
-
*/
|
|
4959
|
-
interface ProcessResult {
|
|
4960
|
-
state: SessionState;
|
|
4961
|
-
/** Side effects to execute (permissions, etc.) */
|
|
4962
|
-
effects: Effect[];
|
|
4963
|
-
}
|
|
4964
|
-
|
|
4965
|
-
/**
|
|
4966
|
-
* Event Processor
|
|
4967
|
-
*
|
|
4968
|
-
* Central pure function that processes all agent events.
|
|
4969
|
-
* Guarantees consistent state transitions and always returns new references.
|
|
4970
|
-
*
|
|
4971
|
-
* Benefits:
|
|
4972
|
-
* - Single source of truth for event handling
|
|
4973
|
-
* - Pure functions - easy to test
|
|
4974
|
-
* - No race conditions - single update path
|
|
4975
|
-
* - Always new references - atom sync always works
|
|
4976
|
-
* - Message lookup by ID - never position-based
|
|
4977
|
-
*/
|
|
4978
|
-
|
|
4979
|
-
/**
|
|
4980
|
-
* Process an agent event, returning new state and any side effects
|
|
4981
|
-
*
|
|
4982
|
-
* This is a PURE FUNCTION - no side effects, always returns new state.
|
|
4983
|
-
* Guaranteed to return a new session reference (no referential equality issues).
|
|
4984
|
-
*
|
|
4985
|
-
* @param state - Current session state (session + streaming)
|
|
4986
|
-
* @param event - Agent event to process
|
|
4987
|
-
* @returns New state and any side effects to execute
|
|
4988
|
-
*/
|
|
4989
|
-
declare function processEvent(state: SessionState, event: ChatEvent): ProcessResult;
|
|
4990
|
-
|
|
4991
|
-
/**
|
|
4992
|
-
* Map a core AgentEvent to the processor's session-scoped event format.
|
|
4993
|
-
*
|
|
4994
|
-
* Core AgentEvent is the raw SDK/runtime format. The processor expects
|
|
4995
|
-
* session-scoped events with its own field names. Keeping this as a pure
|
|
4996
|
-
* function makes local-runtime, tests, and React hooks share one mapping.
|
|
4997
|
-
*/
|
|
4998
|
-
declare function mapCoreEventToProcessorEvent(coreEvent: AgentEvent, sessionId: string): ChatEvent;
|
|
4999
|
-
declare function mapTimelineEnvelopeToProcessorEvent(envelope: TimelineEnvelope): ChatEvent;
|
|
5000
|
-
|
|
5001
|
-
/**
|
|
5002
|
-
* Message Operation Helpers
|
|
5003
|
-
*
|
|
5004
|
-
* Pure utility functions for finding and updating messages.
|
|
5005
|
-
* All lookups are by ID (turnId, toolUseId) - NEVER by position.
|
|
5006
|
-
*/
|
|
5007
|
-
|
|
5008
|
-
/**
|
|
5009
|
-
* Generate a unique message ID
|
|
5010
|
-
* Delegates to core's generateMessageId for uniqueness
|
|
5011
|
-
*/
|
|
5012
|
-
declare function generateMessageId(): string;
|
|
5013
|
-
/**
|
|
5014
|
-
* Find streaming assistant message by turnId
|
|
5015
|
-
* Falls back to last streaming assistant if no turnId
|
|
5016
|
-
*/
|
|
5017
|
-
declare function findStreamingMessage(messages: Message[], turnId?: string): number;
|
|
5018
|
-
/**
|
|
5019
|
-
* Find assistant message by turnId (streaming or not)
|
|
5020
|
-
*/
|
|
5021
|
-
declare function findAssistantMessage(messages: Message[], turnId?: string): number;
|
|
5022
|
-
/**
|
|
5023
|
-
* Find tool message by toolUseId
|
|
5024
|
-
*/
|
|
5025
|
-
declare function findToolMessage(messages: Message[], toolUseId: string): number;
|
|
5026
|
-
/**
|
|
5027
|
-
* Update message at index, returning new session
|
|
5028
|
-
* Always creates new references (immutable update)
|
|
5029
|
-
* @param updateTimestamp - If true, also update lastMessageAt
|
|
5030
|
-
*/
|
|
5031
|
-
declare function updateMessageAt(session: Session, index: number, updates: Partial<Message>, updateTimestamp?: boolean): Session;
|
|
5032
|
-
/**
|
|
5033
|
-
* Append message to session, returning new session
|
|
5034
|
-
* @param updateTimestamp - If false, don't update lastMessageAt (for intermediate/tool messages)
|
|
5035
|
-
*/
|
|
5036
|
-
declare function appendMessage(session: Session, message: Message, updateTimestamp?: boolean): Session;
|
|
5037
|
-
|
|
5038
|
-
/**
|
|
5039
|
-
* Event Source Interface
|
|
5040
|
-
*
|
|
5041
|
-
* Generic abstraction for receiving SessionEvent streams.
|
|
5042
|
-
* Replaces Electron IPC (window.electronAPI.onSessionEvent) with
|
|
5043
|
-
* a provider-agnostic interface that works in any runtime:
|
|
5044
|
-
* - WebSocket (browser/server)
|
|
5045
|
-
* - HTTP SSE (server)
|
|
5046
|
-
* - stdin/stdout (CLI)
|
|
5047
|
-
* - In-process (testing)
|
|
5048
|
-
*/
|
|
5049
|
-
|
|
5050
|
-
/**
|
|
5051
|
-
* Event source callback — receives events from the source.
|
|
5052
|
-
*/
|
|
5053
|
-
type EventSourceCallback = (event: AgentEvent) => void;
|
|
5054
|
-
/**
|
|
5055
|
-
* Error callback — receives errors from the source.
|
|
5056
|
-
*/
|
|
5057
|
-
type EventSourceErrorCallback = (error: Error) => void;
|
|
5058
|
-
/**
|
|
5059
|
-
* Close callback — called when the source is disconnected.
|
|
5060
|
-
*/
|
|
5061
|
-
type EventSourceCloseCallback = () => void;
|
|
5062
|
-
/**
|
|
5063
|
-
* Generic event source interface.
|
|
5064
|
-
* Implementations provide events from different transports.
|
|
5065
|
-
*/
|
|
5066
|
-
interface EventSource {
|
|
5067
|
-
/**
|
|
5068
|
-
* Start receiving events.
|
|
5069
|
-
* @param onEvent - Callback for each AgentEvent
|
|
5070
|
-
* @param onError - Callback for transport errors
|
|
5071
|
-
* @param onClose - Callback when source disconnects
|
|
5072
|
-
*/
|
|
5073
|
-
connect(onEvent: EventSourceCallback, onError?: EventSourceErrorCallback, onClose?: EventSourceCloseCallback): void;
|
|
5074
|
-
/**
|
|
5075
|
-
* Stop receiving events and clean up resources.
|
|
5076
|
-
*/
|
|
5077
|
-
disconnect(): void;
|
|
5078
|
-
/**
|
|
5079
|
-
* Check if the source is currently connected.
|
|
5080
|
-
*/
|
|
5081
|
-
isConnected(): boolean;
|
|
5082
|
-
}
|
|
5083
|
-
/**
|
|
5084
|
-
* WebSocket-based EventSource implementation.
|
|
5085
|
-
* Receives SessionEvent messages over a WebSocket connection.
|
|
5086
|
-
*/
|
|
5087
|
-
declare class WebSocketEventSource implements EventSource {
|
|
5088
|
-
private ws;
|
|
5089
|
-
private connected;
|
|
5090
|
-
private url;
|
|
5091
|
-
private protocols?;
|
|
5092
|
-
constructor(url: string, protocols?: string | string[]);
|
|
5093
|
-
connect(onEvent: EventSourceCallback, onError?: EventSourceErrorCallback, onClose?: EventSourceCloseCallback): void;
|
|
5094
|
-
disconnect(): void;
|
|
5095
|
-
isConnected(): boolean;
|
|
5096
|
-
}
|
|
5097
|
-
/**
|
|
5098
|
-
* SSE (Server-Sent Events) EventSource implementation.
|
|
5099
|
-
* Receives SessionEvent messages over an HTTP SSE connection.
|
|
5100
|
-
*/
|
|
5101
|
-
declare class SSEEventSource implements EventSource {
|
|
5102
|
-
private source;
|
|
5103
|
-
private connected;
|
|
5104
|
-
private url;
|
|
5105
|
-
constructor(url: string);
|
|
5106
|
-
connect(onEvent: EventSourceCallback, onError?: EventSourceErrorCallback, onClose?: EventSourceCloseCallback): void;
|
|
5107
|
-
disconnect(): void;
|
|
5108
|
-
isConnected(): boolean;
|
|
5109
|
-
}
|
|
5110
|
-
/**
|
|
5111
|
-
* In-process EventSource for testing.
|
|
5112
|
-
* Events are pushed directly via enqueue().
|
|
5113
|
-
*/
|
|
5114
|
-
declare class InProcessEventSource implements EventSource {
|
|
5115
|
-
private listeners;
|
|
5116
|
-
private connected;
|
|
5117
|
-
connect(onEvent: EventSourceCallback, onError?: EventSourceErrorCallback, onClose?: EventSourceCloseCallback): void;
|
|
5118
|
-
disconnect(): void;
|
|
5119
|
-
isConnected(): boolean;
|
|
5120
|
-
/**
|
|
5121
|
-
* Push an event directly to the connected listener.
|
|
5122
|
-
* Useful for testing and in-process scenarios.
|
|
5123
|
-
*/
|
|
5124
|
-
enqueue(event: AgentEvent): void;
|
|
5125
|
-
/**
|
|
5126
|
-
* Simulate an error.
|
|
5127
|
-
*/
|
|
5128
|
-
simulateError(error: Error): void;
|
|
5129
|
-
/**
|
|
5130
|
-
* Simulate a disconnect.
|
|
5131
|
-
*/
|
|
5132
|
-
simulateClose(): void;
|
|
5133
|
-
}
|
|
5134
|
-
|
|
5135
|
-
/**
|
|
5136
|
-
* Event Processor Hook
|
|
5137
|
-
*
|
|
5138
|
-
* Provides the event processor for use in React apps.
|
|
5139
|
-
* Manages streaming state per session and returns processed events.
|
|
5140
|
-
*
|
|
5141
|
-
* Accepts an EventSource (WebSocket, SSE, in-process) instead of
|
|
5142
|
-
* Electron IPC (window.electronAPI). Uses React useState/useRef
|
|
5143
|
-
* instead of Jotai atoms for state management.
|
|
5144
|
-
*/
|
|
5145
|
-
|
|
5146
|
-
interface UseEventProcessorOptions {
|
|
5147
|
-
/** EventSource to receive agent events from */
|
|
5148
|
-
eventSource: EventSource;
|
|
5149
|
-
/** Session ID to associate with incoming events */
|
|
5150
|
-
sessionId: string;
|
|
5151
|
-
/** Workspace ID for creating new sessions */
|
|
5152
|
-
workspaceId: string;
|
|
5153
|
-
/** Workspace name for creating new sessions */
|
|
5154
|
-
workspaceName?: string;
|
|
5155
|
-
/** Callback for side effects (permissions, toasts, etc.) */
|
|
5156
|
-
onEffect?: (effect: Effect) => void;
|
|
5157
|
-
/** Callback for errors from the event source */
|
|
5158
|
-
onError?: (error: Error) => void;
|
|
5159
|
-
/** Callback when event source disconnects */
|
|
5160
|
-
onClose?: () => void;
|
|
5161
|
-
}
|
|
5162
|
-
interface UseEventProcessorResult {
|
|
5163
|
-
/** Current session state (messages, processing status, etc.) */
|
|
5164
|
-
session: Session | null;
|
|
5165
|
-
/** Current streaming state for the session */
|
|
5166
|
-
streamingState: StreamingState | null;
|
|
5167
|
-
/**
|
|
5168
|
-
* Process an agent event and return the updated session + any side effects
|
|
5169
|
-
*
|
|
5170
|
-
* @param event - The core AgentEvent to process
|
|
5171
|
-
* @returns Updated session and any side effects to execute
|
|
5172
|
-
*/
|
|
5173
|
-
processAgentEvent: (event: AgentEvent) => {
|
|
5174
|
-
session: Session;
|
|
5175
|
-
effects: Effect[];
|
|
5176
|
-
};
|
|
5177
|
-
/**
|
|
5178
|
-
* Clear streaming state for the session (e.g., on error or complete)
|
|
5179
|
-
*/
|
|
5180
|
-
clearStreamingState: () => void;
|
|
5181
|
-
/**
|
|
5182
|
-
* Get current streaming state (for debugging/testing)
|
|
5183
|
-
*/
|
|
5184
|
-
getStreamingState: () => StreamingState | null;
|
|
5185
|
-
/**
|
|
5186
|
-
* Whether the event source is currently connected
|
|
5187
|
-
*/
|
|
5188
|
-
isConnected: boolean;
|
|
5189
|
-
}
|
|
5190
|
-
/**
|
|
5191
|
-
* Hook that provides the event processor connected to an EventSource.
|
|
5192
|
-
*
|
|
5193
|
-
* Manages streaming state per session using React useRef (not Jotai atoms).
|
|
5194
|
-
* All event processing goes through pure functions.
|
|
5195
|
-
*
|
|
5196
|
-
* Connects to the EventSource on mount and disconnects on unmount.
|
|
5197
|
-
*/
|
|
5198
|
-
declare function useEventProcessor(options: UseEventProcessorOptions): UseEventProcessorResult;
|
|
5199
|
-
|
|
5200
|
-
export { ActivityDetailsPanel, ActivityInspector, type ActivityItem, type ActivityStatus, AnnotationIslandMenu, type AnnotationIslandMenuProps, type AnnotationOverlayChip, type AnnotationOverlayGeometryResult, AnnotationOverlayLayer, type AnnotationOverlayLayerProps, type AnnotationOverlayRect, type AssistantTurn, AssistantTurnCard, type AuthRequestTurn, type ChatEvent, ChatTranscript, type ChatTranscriptProps, CodeBlock, CollapsibleMarkdownProvider, type Effect, type EventSource, type EventSourceCallback, type EventSourceCloseCallback, type EventSourceErrorCallback, InProcessEventSource, type InlineActivityItem, InlineCode, InlineExecution, type InlineExecutionProps, type InlineExecutionStatus, type IslandTransitionConfig, Markdown, type MarkdownProps, MemoizedMarkdown, PendingIndicator, type PendingIndicatorProps, PermissionModeMenu, PermissionRequestCard, type PermissionRequestCardProps, type PlatformActions, PlatformProvider, type PointerSnapshot, type ProcessResult, type RenderMode, ResponseCard, type ResponseCardProps, type ResponseContent, SIZE_CONFIG, SSEEventSource, type Session, type SessionState, SessionViewer, type SessionViewerMode, type SessionViewerProps, type StreamingState, SystemMessage, type SystemMessageProps, type SystemMessageType, type SystemTurn, type TextSegment, type TodoItem, type Turn, TurnCard, type TurnCardProps, UserMessageBubble, type UserMessageBubbleProps, type UserTurn, WebSocketEventSource, appendMessage, buildAnnotationChipEntryTransition, buildSelectionEntryTransition, collectTextSegments, computeAnnotationOverlayGeometry, createSelectionPreviewAnnotation, createTextSelectionAnnotation, findAssistantMessage, findStreamingMessage, findToolMessage, generateMessageId, getAssistantTurnUiKey, getCanonicalText, groupMessagesByTurn, hasExistingTextRangeAnnotation, mapCoreEventToProcessorEvent, mapTimelineEnvelopeToProcessorEvent, processEvent, resolveNodeOffset, shouldShowStreamingContent, updateMessageAt, useEventProcessor };
|
|
5201
|
-
|
|
5202
|
-
// -- @weft/ui/lib/en-fallback.d.ts --
|
|
5203
|
-
/**
|
|
5204
|
-
* English fallback translations for UI components.
|
|
5205
|
-
*
|
|
5206
|
-
* Used by:
|
|
5207
|
-
* - `TurnCard.tsx` `t()` wrapper — when i18next is uninitialized or has no resource for a key
|
|
5208
|
-
* - `apps/demo/src/i18n-init.ts` — as the primary `en` resource bundle
|
|
5209
|
-
*
|
|
5210
|
-
* Single source of truth — add new keys here, both consumers stay synchronized.
|
|
5211
|
-
*/
|
|
5212
|
-
declare const EN_FALLBACK: Record<string, string>;
|
|
5213
|
-
|
|
5214
|
-
export { EN_FALLBACK };
|
|
5215
|
-
|
|
5216
|
-
// ── inlined from @weft/local-chat ──
|
|
5217
|
-
// -- @weft/local-chat/index.d.ts --
|
|
5218
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
5219
|
-
|
|
5220
|
-
interface LocalChatAuthDetection {
|
|
5221
|
-
provider: string;
|
|
5222
|
-
configured: boolean;
|
|
5223
|
-
source?: string;
|
|
5224
|
-
error?: string;
|
|
5225
|
-
}
|
|
5226
|
-
interface LocalChatRuntimeState {
|
|
5227
|
-
status: 'idle' | 'preflighting' | 'running' | 'ready' | 'failed' | string;
|
|
5228
|
-
}
|
|
5229
|
-
interface LocalChatEventSource {
|
|
5230
|
-
connect(onEvent: (event: AgentEvent) => void, onError?: (error: Error) => void, onClose?: () => void): void;
|
|
5231
|
-
disconnect(): void;
|
|
5232
|
-
isConnected(): boolean;
|
|
5233
|
-
}
|
|
5234
|
-
interface LocalChatCommandSink {
|
|
5235
|
-
sendMessage(message: string): Promise<void>;
|
|
5236
|
-
abort(reason?: string): Promise<void>;
|
|
5237
|
-
respondToPermission(requestId: string, allowed: boolean, remember?: boolean): Promise<void>;
|
|
5238
|
-
}
|
|
5239
|
-
interface LocalChatSessionRuntime {
|
|
5240
|
-
sessionId: string;
|
|
5241
|
-
provider: string;
|
|
5242
|
-
events: LocalChatEventSource;
|
|
5243
|
-
commands: LocalChatCommandSink;
|
|
5244
|
-
preflight(): Promise<LocalChatAuthDetection>;
|
|
5245
|
-
getState(): LocalChatRuntimeState;
|
|
5246
|
-
}
|
|
5247
|
-
interface AgentChatSessionModel {
|
|
5248
|
-
session: Session | null;
|
|
5249
|
-
turns: Turn[];
|
|
5250
|
-
isRunning: boolean;
|
|
5251
|
-
auth: LocalChatAuthDetection | null;
|
|
5252
|
-
error: Error | null;
|
|
5253
|
-
sendMessage(message: string): Promise<void>;
|
|
5254
|
-
abort(): Promise<void>;
|
|
5255
|
-
respondToPermission(requestId: string, allowed: boolean, remember?: boolean): Promise<void>;
|
|
5256
|
-
}
|
|
5257
|
-
interface UseAgentChatSessionOptions {
|
|
5258
|
-
runtime: LocalChatSessionRuntime;
|
|
5259
|
-
workspaceId?: string;
|
|
5260
|
-
workspaceName?: string;
|
|
5261
|
-
}
|
|
5262
|
-
interface TimelineChatPanelModel {
|
|
5263
|
-
session: Session;
|
|
5264
|
-
turns: Turn[];
|
|
5265
|
-
}
|
|
5266
|
-
type TimelineDetailKind = 'permission' | 'runtime' | 'source' | 'skill' | 'automation' | 'host' | 'tool';
|
|
5267
|
-
interface TimelineDetailItem {
|
|
5268
|
-
id: string;
|
|
5269
|
-
kind: TimelineDetailKind;
|
|
5270
|
-
title: string;
|
|
5271
|
-
summary?: string;
|
|
5272
|
-
status?: string;
|
|
5273
|
-
timestamp: number;
|
|
5274
|
-
detail: unknown;
|
|
5275
|
-
envelope: TimelineEnvelope;
|
|
5276
|
-
}
|
|
5277
|
-
interface TimelineAgentChatSessionModel extends TimelineChatPanelModel {
|
|
5278
|
-
timeline: TimelineEnvelope[];
|
|
5279
|
-
isRunning: boolean;
|
|
5280
|
-
isConnected: boolean;
|
|
5281
|
-
isReconnecting: boolean;
|
|
5282
|
-
hasGap: boolean;
|
|
5283
|
-
capabilityReport: RuntimeCapabilityReport | null;
|
|
5284
|
-
error: Error | null;
|
|
5285
|
-
sendMessage(message: string, options?: SendMessageOptions): Promise<void>;
|
|
5286
|
-
abort(): Promise<void>;
|
|
5287
|
-
respondToPermission(requestId: string, allowed: boolean, remember?: boolean): Promise<void>;
|
|
5288
|
-
}
|
|
5289
|
-
interface UseTimelineAgentChatSessionOptions {
|
|
5290
|
-
runtime: AgentRuntime;
|
|
5291
|
-
workspaceId?: string;
|
|
5292
|
-
workspaceName?: string;
|
|
5293
|
-
}
|
|
5294
|
-
declare function createAgentChatPanelModel(args: {
|
|
5295
|
-
session: Session | null;
|
|
5296
|
-
runtime: LocalChatSessionRuntime;
|
|
5297
|
-
auth?: LocalChatAuthDetection | null;
|
|
5298
|
-
error?: Error | null;
|
|
5299
|
-
}): Pick<AgentChatSessionModel, 'turns' | 'isRunning' | 'auth' | 'error'>;
|
|
5300
|
-
declare function createAgentChatPanelModelFromTimeline(args: {
|
|
5301
|
-
timeline: TimelineEnvelope[];
|
|
5302
|
-
sessionId: string;
|
|
5303
|
-
workspaceId: string;
|
|
5304
|
-
workspaceName?: string;
|
|
5305
|
-
}): TimelineChatPanelModel;
|
|
5306
|
-
declare function createTimelineAgentChatPanelModel(args: {
|
|
5307
|
-
timeline: TimelineEnvelope[];
|
|
5308
|
-
sessionId: string;
|
|
5309
|
-
workspaceId: string;
|
|
5310
|
-
workspaceName?: string;
|
|
5311
|
-
runtimeState: AgentRuntimeState;
|
|
5312
|
-
capabilityReport: RuntimeCapabilityReport | null;
|
|
5313
|
-
error: Error | null;
|
|
5314
|
-
}): Pick<TimelineAgentChatSessionModel, 'session' | 'turns' | 'isRunning' | 'capabilityReport' | 'error'>;
|
|
5315
|
-
declare function createTimelineDetailItems(timeline: TimelineEnvelope[]): TimelineDetailItem[];
|
|
5316
|
-
declare function useAgentChatSession(options: UseAgentChatSessionOptions): AgentChatSessionModel;
|
|
5317
|
-
declare function useTimelineAgentChatSession(options: UseTimelineAgentChatSessionOptions): TimelineAgentChatSessionModel;
|
|
5318
|
-
|
|
5319
|
-
interface AgentChatPanelProps {
|
|
5320
|
-
runtime: LocalChatSessionRuntime;
|
|
5321
|
-
workspaceId?: string;
|
|
5322
|
-
workspaceName?: string;
|
|
5323
|
-
platformActions?: PlatformActions;
|
|
5324
|
-
placeholder?: string;
|
|
5325
|
-
className?: string;
|
|
5326
|
-
}
|
|
5327
|
-
declare function AgentChatPanel({ runtime, workspaceId, workspaceName, platformActions, placeholder, className, }: AgentChatPanelProps): react_jsx_runtime.JSX.Element;
|
|
5328
|
-
|
|
5329
|
-
interface TimelineAgentChatPanelProps {
|
|
5330
|
-
/** Agent runtime instance from runtime-core */
|
|
5331
|
-
runtime: AgentRuntime;
|
|
5332
|
-
/** Workspace identifier */
|
|
5333
|
-
workspaceId?: string;
|
|
5334
|
-
/** Workspace display name */
|
|
5335
|
-
workspaceName?: string;
|
|
5336
|
-
/** Platform actions for file/URL handling */
|
|
5337
|
-
platformActions?: PlatformActions;
|
|
5338
|
-
/** Placeholder text for the input area */
|
|
5339
|
-
placeholder?: string;
|
|
5340
|
-
/** Whether to show the runtime status bar */
|
|
5341
|
-
showStatusBar?: boolean;
|
|
5342
|
-
/** Whether to show the runtime detail sidebar panel */
|
|
5343
|
-
showDetailPanel?: boolean;
|
|
5344
|
-
/** Additional className */
|
|
5345
|
-
className?: string;
|
|
5346
|
-
}
|
|
5347
|
-
declare function TimelineAgentChatPanel({ runtime, workspaceId, workspaceName, platformActions, placeholder, showStatusBar, showDetailPanel, className, }: TimelineAgentChatPanelProps): react_jsx_runtime.JSX.Element;
|
|
5348
|
-
|
|
5349
|
-
/**
|
|
5350
|
-
* Find the active (unresolved) permission request from timeline envelopes.
|
|
5351
|
-
*
|
|
5352
|
-
* Walks the timeline backwards to find the most recent permission_requested
|
|
5353
|
-
* envelope that has not been resolved by a matching permission_resolved.
|
|
5354
|
-
*/
|
|
5355
|
-
declare function findActivePermissionRequest(timeline: TimelineEnvelope[]): {
|
|
5356
|
-
requestId: string;
|
|
5357
|
-
toolName: string;
|
|
5358
|
-
input?: Record<string, unknown>;
|
|
5359
|
-
reason?: string;
|
|
5360
|
-
scope?: {
|
|
5361
|
-
type: string;
|
|
5362
|
-
label?: string;
|
|
5363
|
-
};
|
|
5364
|
-
} | null;
|
|
5365
|
-
|
|
5366
|
-
/**
|
|
5367
|
-
* Convert a processor Session (returned by useAgentChatSession) into a
|
|
5368
|
-
* StoredSession that SessionViewer can render.
|
|
5369
|
-
*
|
|
5370
|
-
* Consumers embedding AgentChatPanel don't need this — it's called internally.
|
|
5371
|
-
* This utility is exported for consumers who use useAgentChatSession directly
|
|
5372
|
-
* and build their own panel around SessionViewer.
|
|
5373
|
-
*/
|
|
5374
|
-
declare function toStoredSession(session: Session, fallbackWorkspaceId?: string): StoredSession;
|
|
5375
|
-
/**
|
|
5376
|
-
* Build an empty StoredSession placeholder for the initial state
|
|
5377
|
-
* before the event processor has received any events.
|
|
5378
|
-
*/
|
|
5379
|
-
declare function createEmptyStoredSession(sessionId: string, workspaceId?: string, workspaceName?: string): StoredSession;
|
|
5380
|
-
|
|
5381
|
-
export { AgentChatPanel, type AgentChatPanelProps, type AgentChatSessionModel, type LocalChatAuthDetection, type LocalChatCommandSink, type LocalChatEventSource, type LocalChatRuntimeState, type LocalChatSessionRuntime, TimelineAgentChatPanel, type TimelineAgentChatPanelProps, type TimelineAgentChatSessionModel, type TimelineChatPanelModel, type TimelineDetailItem, type TimelineDetailKind, type UseAgentChatSessionOptions, type UseTimelineAgentChatSessionOptions, createAgentChatPanelModel, createAgentChatPanelModelFromTimeline, createEmptyStoredSession, createTimelineAgentChatPanelModel, createTimelineDetailItems, findActivePermissionRequest, toStoredSession, useAgentChatSession, useTimelineAgentChatSession };
|