ahp-inspector 1.3.0 → 1.3.1
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/index.js +128 -54
- package/package.json +1 -1
- package/ui-dist/assets/index-BAvWUkL4.css +1 -0
- package/ui-dist/assets/{index-CvtKhF77.js → index-CJtScnuN.js} +72 -5
- package/ui-dist/assets/index-CJtScnuN.js.map +1 -0
- package/ui-dist/index.html +2 -2
- package/ui-dist/assets/index-CW0QHwfy.css +0 -1
- package/ui-dist/assets/index-CvtKhF77.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -2760,7 +2760,7 @@ var IS_CLIENT_DISPATCHABLE = {
|
|
|
2760
2760
|
["root/configChanged" /* RootConfigChanged */]: true,
|
|
2761
2761
|
["session/ready" /* SessionReady */]: false,
|
|
2762
2762
|
["session/creationFailed" /* SessionCreationFailed */]: false,
|
|
2763
|
-
["session/turnStarted" /* SessionTurnStarted */]:
|
|
2763
|
+
["session/turnStarted" /* SessionTurnStarted */]: false,
|
|
2764
2764
|
["session/delta" /* SessionDelta */]: false,
|
|
2765
2765
|
["session/responsePart" /* SessionResponsePart */]: false,
|
|
2766
2766
|
["session/toolCallStart" /* SessionToolCallStart */]: false,
|
|
@@ -2788,13 +2788,19 @@ var IS_CLIENT_DISPATCHABLE = {
|
|
|
2788
2788
|
["session/inputCompleted" /* SessionInputCompleted */]: true,
|
|
2789
2789
|
["session/customizationsChanged" /* SessionCustomizationsChanged */]: false,
|
|
2790
2790
|
["session/customizationToggled" /* SessionCustomizationToggled */]: true,
|
|
2791
|
+
["session/customizationUpdated" /* SessionCustomizationUpdated */]: false,
|
|
2791
2792
|
["session/truncated" /* SessionTruncated */]: true,
|
|
2792
2793
|
["session/isReadChanged" /* SessionIsReadChanged */]: true,
|
|
2793
2794
|
["session/isArchivedChanged" /* SessionIsArchivedChanged */]: true,
|
|
2794
2795
|
["session/activityChanged" /* SessionActivityChanged */]: false,
|
|
2795
|
-
["session/
|
|
2796
|
+
["session/changesetsChanged" /* SessionChangesetsChanged */]: false,
|
|
2796
2797
|
["session/configChanged" /* SessionConfigChanged */]: true,
|
|
2797
2798
|
["session/metaChanged" /* SessionMetaChanged */]: false,
|
|
2799
|
+
["changeset/statusChanged" /* ChangesetStatusChanged */]: false,
|
|
2800
|
+
["changeset/fileSet" /* ChangesetFileSet */]: false,
|
|
2801
|
+
["changeset/fileRemoved" /* ChangesetFileRemoved */]: false,
|
|
2802
|
+
["changeset/operationsChanged" /* ChangesetOperationsChanged */]: false,
|
|
2803
|
+
["changeset/cleared" /* ChangesetCleared */]: false,
|
|
2798
2804
|
["terminal/data" /* TerminalData */]: false,
|
|
2799
2805
|
["terminal/input" /* TerminalInput */]: true,
|
|
2800
2806
|
["terminal/resized" /* TerminalResized */]: true,
|
|
@@ -2808,11 +2814,39 @@ var IS_CLIENT_DISPATCHABLE = {
|
|
|
2808
2814
|
["terminal/commandFinished" /* TerminalCommandFinished */]: false
|
|
2809
2815
|
};
|
|
2810
2816
|
|
|
2811
|
-
// ../protocol/src/
|
|
2817
|
+
// ../protocol/src/common/reducer-helpers.ts
|
|
2812
2818
|
function softAssertNever(value, log) {
|
|
2813
2819
|
const msg = `Unhandled action type: ${JSON.stringify(value)}`;
|
|
2814
2820
|
(log ?? console.warn)(msg);
|
|
2815
2821
|
}
|
|
2822
|
+
|
|
2823
|
+
// ../protocol/src/channels-root/reducer.ts
|
|
2824
|
+
function rootReducer(state, action, log) {
|
|
2825
|
+
switch (action.type) {
|
|
2826
|
+
case "root/agentsChanged" /* RootAgentsChanged */:
|
|
2827
|
+
return { ...state, agents: action.agents };
|
|
2828
|
+
case "root/activeSessionsChanged" /* RootActiveSessionsChanged */:
|
|
2829
|
+
return { ...state, activeSessions: action.activeSessions };
|
|
2830
|
+
case "root/terminalsChanged" /* RootTerminalsChanged */:
|
|
2831
|
+
return { ...state, terminals: action.terminals };
|
|
2832
|
+
case "root/configChanged" /* RootConfigChanged */:
|
|
2833
|
+
if (!state.config) {
|
|
2834
|
+
return state;
|
|
2835
|
+
}
|
|
2836
|
+
return {
|
|
2837
|
+
...state,
|
|
2838
|
+
config: {
|
|
2839
|
+
...state.config,
|
|
2840
|
+
values: action.replace ? { ...action.config } : { ...state.config.values, ...action.config }
|
|
2841
|
+
}
|
|
2842
|
+
};
|
|
2843
|
+
default:
|
|
2844
|
+
softAssertNever(action, log);
|
|
2845
|
+
return state;
|
|
2846
|
+
}
|
|
2847
|
+
}
|
|
2848
|
+
|
|
2849
|
+
// ../protocol/src/channels-session/reducer.ts
|
|
2816
2850
|
function tcBase(tc) {
|
|
2817
2851
|
return {
|
|
2818
2852
|
toolCallId: tc.toolCallId,
|
|
@@ -2973,30 +3007,6 @@ function updateResponsePart(state, turnId, partId, updater) {
|
|
|
2973
3007
|
activeTurn: { ...activeTurn, responseParts }
|
|
2974
3008
|
};
|
|
2975
3009
|
}
|
|
2976
|
-
function rootReducer(state, action, log) {
|
|
2977
|
-
switch (action.type) {
|
|
2978
|
-
case "root/agentsChanged" /* RootAgentsChanged */:
|
|
2979
|
-
return { ...state, agents: action.agents };
|
|
2980
|
-
case "root/activeSessionsChanged" /* RootActiveSessionsChanged */:
|
|
2981
|
-
return { ...state, activeSessions: action.activeSessions };
|
|
2982
|
-
case "root/terminalsChanged" /* RootTerminalsChanged */:
|
|
2983
|
-
return { ...state, terminals: action.terminals };
|
|
2984
|
-
case "root/configChanged" /* RootConfigChanged */:
|
|
2985
|
-
if (!state.config) {
|
|
2986
|
-
return state;
|
|
2987
|
-
}
|
|
2988
|
-
return {
|
|
2989
|
-
...state,
|
|
2990
|
-
config: {
|
|
2991
|
-
...state.config,
|
|
2992
|
-
values: action.replace ? { ...action.config } : { ...state.config.values, ...action.config }
|
|
2993
|
-
}
|
|
2994
|
-
};
|
|
2995
|
-
default:
|
|
2996
|
-
softAssertNever(action, log);
|
|
2997
|
-
return state;
|
|
2998
|
-
}
|
|
2999
|
-
}
|
|
3000
3010
|
function sessionReducer(state, action, log) {
|
|
3001
3011
|
switch (action.type) {
|
|
3002
3012
|
// ── Lifecycle ──────────────────────────────────────────────────────────
|
|
@@ -3280,26 +3290,46 @@ function sessionReducer(state, action, log) {
|
|
|
3280
3290
|
...state,
|
|
3281
3291
|
summary: { ...state.summary, activity: action.activity }
|
|
3282
3292
|
};
|
|
3283
|
-
case "session/
|
|
3284
|
-
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
|
|
3288
|
-
case "session/configChanged" /* SessionConfigChanged */:
|
|
3293
|
+
case "session/changesetsChanged" /* SessionChangesetsChanged */: {
|
|
3294
|
+
const { changesets: _omit, ...summaryWithoutChangesets } = state.summary;
|
|
3295
|
+
const newSummary = action.changesets ? { ...summaryWithoutChangesets, changesets: action.changesets } : summaryWithoutChangesets;
|
|
3296
|
+
return { ...state, summary: newSummary };
|
|
3297
|
+
}
|
|
3298
|
+
case "session/configChanged" /* SessionConfigChanged */: {
|
|
3289
3299
|
if (!state.config) {
|
|
3300
|
+
if (!action.schema) {
|
|
3301
|
+
return state;
|
|
3302
|
+
}
|
|
3303
|
+
return {
|
|
3304
|
+
...state,
|
|
3305
|
+
config: {
|
|
3306
|
+
schema: action.schema,
|
|
3307
|
+
values: action.config ? { ...action.config } : {}
|
|
3308
|
+
},
|
|
3309
|
+
summary: {
|
|
3310
|
+
...state.summary,
|
|
3311
|
+
modifiedAt: Date.now()
|
|
3312
|
+
}
|
|
3313
|
+
};
|
|
3314
|
+
}
|
|
3315
|
+
const values = action.config !== void 0 ? action.replace ? { ...action.config } : { ...state.config.values, ...action.config } : state.config.values;
|
|
3316
|
+
const schema = action.schema ?? state.config.schema;
|
|
3317
|
+
if (values === state.config.values && schema === state.config.schema) {
|
|
3290
3318
|
return state;
|
|
3291
3319
|
}
|
|
3292
3320
|
return {
|
|
3293
3321
|
...state,
|
|
3294
3322
|
config: {
|
|
3295
3323
|
...state.config,
|
|
3296
|
-
|
|
3324
|
+
schema,
|
|
3325
|
+
values
|
|
3297
3326
|
},
|
|
3298
3327
|
summary: {
|
|
3299
3328
|
...state.summary,
|
|
3300
3329
|
modifiedAt: Date.now()
|
|
3301
3330
|
}
|
|
3302
3331
|
};
|
|
3332
|
+
}
|
|
3303
3333
|
case "session/metaChanged" /* SessionMetaChanged */:
|
|
3304
3334
|
return { ...state, _meta: action._meta };
|
|
3305
3335
|
case "session/serverToolsChanged" /* SessionServerToolsChanged */:
|
|
@@ -3333,6 +3363,36 @@ function sessionReducer(state, action, log) {
|
|
|
3333
3363
|
updated[idx] = { ...list[idx], enabled: action.enabled };
|
|
3334
3364
|
return { ...state, customizations: updated };
|
|
3335
3365
|
}
|
|
3366
|
+
case "session/customizationUpdated" /* SessionCustomizationUpdated */: {
|
|
3367
|
+
const list = state.customizations ?? [];
|
|
3368
|
+
const idx = list.findIndex((c) => c.customization.uri === action.customization.uri);
|
|
3369
|
+
if (idx < 0) {
|
|
3370
|
+
const inserted = {
|
|
3371
|
+
customization: action.customization,
|
|
3372
|
+
enabled: action.enabled ?? false
|
|
3373
|
+
};
|
|
3374
|
+
if (action.status !== void 0) {
|
|
3375
|
+
inserted.status = action.status;
|
|
3376
|
+
}
|
|
3377
|
+
if (action.statusMessage !== void 0) {
|
|
3378
|
+
inserted.statusMessage = action.statusMessage;
|
|
3379
|
+
}
|
|
3380
|
+
return { ...state, customizations: [...list, inserted] };
|
|
3381
|
+
}
|
|
3382
|
+
const updated = [...list];
|
|
3383
|
+
const next = { ...list[idx], customization: action.customization };
|
|
3384
|
+
if (action.enabled !== void 0) {
|
|
3385
|
+
next.enabled = action.enabled;
|
|
3386
|
+
}
|
|
3387
|
+
if (action.status !== void 0) {
|
|
3388
|
+
next.status = action.status;
|
|
3389
|
+
}
|
|
3390
|
+
if (action.statusMessage !== void 0) {
|
|
3391
|
+
next.statusMessage = action.statusMessage;
|
|
3392
|
+
}
|
|
3393
|
+
updated[idx] = next;
|
|
3394
|
+
return { ...state, customizations: updated };
|
|
3395
|
+
}
|
|
3336
3396
|
// ── Truncation ────────────────────────────────────────────────────────
|
|
3337
3397
|
case "session/truncated" /* SessionTruncated */: {
|
|
3338
3398
|
let turns;
|
|
@@ -3458,6 +3518,8 @@ function sessionReducer(state, action, log) {
|
|
|
3458
3518
|
return state;
|
|
3459
3519
|
}
|
|
3460
3520
|
}
|
|
3521
|
+
|
|
3522
|
+
// ../protocol/src/channels-terminal/reducer.ts
|
|
3461
3523
|
function terminalReducer(state, action, log) {
|
|
3462
3524
|
switch (action.type) {
|
|
3463
3525
|
case "terminal/data" /* TerminalData */: {
|
|
@@ -3562,13 +3624,19 @@ var ACTION_INTRODUCED_IN = {
|
|
|
3562
3624
|
["session/inputCompleted" /* SessionInputCompleted */]: "0.1.0",
|
|
3563
3625
|
["session/customizationsChanged" /* SessionCustomizationsChanged */]: "0.1.0",
|
|
3564
3626
|
["session/customizationToggled" /* SessionCustomizationToggled */]: "0.1.0",
|
|
3627
|
+
["session/customizationUpdated" /* SessionCustomizationUpdated */]: "0.1.0",
|
|
3565
3628
|
["session/truncated" /* SessionTruncated */]: "0.1.0",
|
|
3566
3629
|
["session/isReadChanged" /* SessionIsReadChanged */]: "0.1.0",
|
|
3567
3630
|
["session/isArchivedChanged" /* SessionIsArchivedChanged */]: "0.1.0",
|
|
3568
3631
|
["session/activityChanged" /* SessionActivityChanged */]: "0.1.0",
|
|
3569
|
-
["session/
|
|
3632
|
+
["session/changesetsChanged" /* SessionChangesetsChanged */]: "0.2.0",
|
|
3570
3633
|
["session/configChanged" /* SessionConfigChanged */]: "0.1.0",
|
|
3571
3634
|
["session/metaChanged" /* SessionMetaChanged */]: "0.1.0",
|
|
3635
|
+
["changeset/statusChanged" /* ChangesetStatusChanged */]: "0.2.0",
|
|
3636
|
+
["changeset/fileSet" /* ChangesetFileSet */]: "0.2.0",
|
|
3637
|
+
["changeset/fileRemoved" /* ChangesetFileRemoved */]: "0.2.0",
|
|
3638
|
+
["changeset/operationsChanged" /* ChangesetOperationsChanged */]: "0.2.0",
|
|
3639
|
+
["changeset/cleared" /* ChangesetCleared */]: "0.2.0",
|
|
3572
3640
|
["root/terminalsChanged" /* RootTerminalsChanged */]: "0.1.0",
|
|
3573
3641
|
["root/configChanged" /* RootConfigChanged */]: "0.1.0",
|
|
3574
3642
|
["terminal/data" /* TerminalData */]: "0.1.0",
|
|
@@ -3583,12 +3651,6 @@ var ACTION_INTRODUCED_IN = {
|
|
|
3583
3651
|
["terminal/commandExecuted" /* TerminalCommandExecuted */]: "0.1.0",
|
|
3584
3652
|
["terminal/commandFinished" /* TerminalCommandFinished */]: "0.1.0"
|
|
3585
3653
|
};
|
|
3586
|
-
var NOTIFICATION_INTRODUCED_IN = {
|
|
3587
|
-
["notify/sessionAdded" /* SessionAdded */]: "0.1.0",
|
|
3588
|
-
["notify/sessionRemoved" /* SessionRemoved */]: "0.1.0",
|
|
3589
|
-
["notify/sessionSummaryChanged" /* SessionSummaryChanged */]: "0.1.0",
|
|
3590
|
-
["notify/authRequired" /* AuthRequired */]: "0.1.0"
|
|
3591
|
-
};
|
|
3592
3654
|
|
|
3593
3655
|
// ../core/src/replay.ts
|
|
3594
3656
|
var ROOT_RESOURCE = "agenthost:/root";
|
|
@@ -3768,7 +3830,7 @@ function installSnapshot(ctx, value, eventIdx) {
|
|
|
3768
3830
|
});
|
|
3769
3831
|
}
|
|
3770
3832
|
function applyEnvelope(ctx, envelope, eventIdx, eventTs) {
|
|
3771
|
-
const target = inferActionTarget(envelope.action);
|
|
3833
|
+
const target = inferActionTarget(envelope.action, envelope.channel);
|
|
3772
3834
|
if (!target) {
|
|
3773
3835
|
addDiagnostic(ctx, {
|
|
3774
3836
|
code: "unknown-action",
|
|
@@ -3859,7 +3921,8 @@ function recordClientIntent(ctx, event, eventIdx) {
|
|
|
3859
3921
|
const action = isRecord(params) && isRecord(params.action) ? params.action : null;
|
|
3860
3922
|
const clientSeq = isRecord(params) && typeof params.clientSeq === "number" ? params.clientSeq : null;
|
|
3861
3923
|
const actionType = actionTypeOf(action);
|
|
3862
|
-
const
|
|
3924
|
+
const channel = isRecord(params) && typeof params.channel === "string" ? params.channel : void 0;
|
|
3925
|
+
const resource = action ? inferActionTarget(action, channel) : null;
|
|
3863
3926
|
const intent = {
|
|
3864
3927
|
eventIdx,
|
|
3865
3928
|
ts: event.ts,
|
|
@@ -3917,7 +3980,7 @@ function readSnapshot(value) {
|
|
|
3917
3980
|
};
|
|
3918
3981
|
}
|
|
3919
3982
|
function readActionEnvelope(value) {
|
|
3920
|
-
if (!isRecord(value) || typeof value.serverSeq !== "number" || !isRecord(value.action)) {
|
|
3983
|
+
if (!isRecord(value) || typeof value.channel !== "string" || typeof value.serverSeq !== "number" || !isRecord(value.action)) {
|
|
3921
3984
|
return null;
|
|
3922
3985
|
}
|
|
3923
3986
|
if (typeof value.action.type !== "string") {
|
|
@@ -3925,6 +3988,7 @@ function readActionEnvelope(value) {
|
|
|
3925
3988
|
}
|
|
3926
3989
|
const origin = isRecord(value.origin) && typeof value.origin.clientId === "string" && typeof value.origin.clientSeq === "number" ? { clientId: value.origin.clientId, clientSeq: value.origin.clientSeq } : void 0;
|
|
3927
3990
|
return {
|
|
3991
|
+
channel: value.channel,
|
|
3928
3992
|
action: value.action,
|
|
3929
3993
|
serverSeq: value.serverSeq,
|
|
3930
3994
|
origin,
|
|
@@ -3946,20 +4010,20 @@ function inferSnapshotKind(snapshot) {
|
|
|
3946
4010
|
}
|
|
3947
4011
|
return "unknown";
|
|
3948
4012
|
}
|
|
3949
|
-
function inferActionTarget(action) {
|
|
4013
|
+
function inferActionTarget(action, channel) {
|
|
3950
4014
|
const type = actionTypeOf(action);
|
|
3951
4015
|
if (!type) {
|
|
3952
4016
|
return null;
|
|
3953
4017
|
}
|
|
3954
4018
|
if (type.startsWith("root/")) {
|
|
3955
|
-
return { kind: "root", uri: ROOT_RESOURCE };
|
|
4019
|
+
return { kind: "root", uri: channel ?? ROOT_RESOURCE };
|
|
3956
4020
|
}
|
|
3957
4021
|
if (type.startsWith("session/")) {
|
|
3958
|
-
const session = isRecord(action) && typeof action.session === "string" ? action.session : null;
|
|
4022
|
+
const session = channel ?? (isRecord(action) && typeof action.session === "string" ? action.session : null);
|
|
3959
4023
|
return session ? { kind: "session", uri: session } : null;
|
|
3960
4024
|
}
|
|
3961
4025
|
if (type.startsWith("terminal/")) {
|
|
3962
|
-
const terminal = isRecord(action) && typeof action.terminal === "string" ? action.terminal : null;
|
|
4026
|
+
const terminal = channel ?? (isRecord(action) && typeof action.terminal === "string" ? action.terminal : null);
|
|
3963
4027
|
return terminal ? { kind: "terminal", uri: terminal } : null;
|
|
3964
4028
|
}
|
|
3965
4029
|
return null;
|
|
@@ -4124,12 +4188,14 @@ function readKnownAction(value) {
|
|
|
4124
4188
|
}
|
|
4125
4189
|
function readActionEnvelope2(value) {
|
|
4126
4190
|
if (!isRecord2(value)) return null;
|
|
4191
|
+
if (typeof value.channel !== "string") return null;
|
|
4127
4192
|
if (typeof value.serverSeq !== "number") return null;
|
|
4128
4193
|
const action = asRecord(value.action);
|
|
4129
4194
|
if (!action || typeof action.type !== "string") return null;
|
|
4130
4195
|
const origin = isRecord2(value.origin) && typeof value.origin.clientId === "string" && typeof value.origin.clientSeq === "number" ? { clientId: value.origin.clientId, clientSeq: value.origin.clientSeq } : void 0;
|
|
4131
4196
|
const known = readKnownAction(action);
|
|
4132
4197
|
return {
|
|
4198
|
+
channel: value.channel,
|
|
4133
4199
|
action: known ?? action,
|
|
4134
4200
|
serverSeq: value.serverSeq,
|
|
4135
4201
|
origin,
|
|
@@ -4215,7 +4281,7 @@ function summarizeResponse(view) {
|
|
|
4215
4281
|
}
|
|
4216
4282
|
function summarizeAction(view) {
|
|
4217
4283
|
if (isKnownAction(view.action)) {
|
|
4218
|
-
return summarizeKnownAction(view.action);
|
|
4284
|
+
return summarizeKnownAction(view.action, view.envelope?.channel ?? null);
|
|
4219
4285
|
}
|
|
4220
4286
|
return summarizeUnknownAction(view.action);
|
|
4221
4287
|
}
|
|
@@ -4228,7 +4294,7 @@ function summarizeProtocolNotification(view) {
|
|
|
4228
4294
|
function summarizeLog(view) {
|
|
4229
4295
|
return `log ${clip(view.message ?? "details unavailable")}`;
|
|
4230
4296
|
}
|
|
4231
|
-
function summarizeKnownAction(action) {
|
|
4297
|
+
function summarizeKnownAction(action, channel) {
|
|
4232
4298
|
switch (action.type) {
|
|
4233
4299
|
case "session/delta" /* SessionDelta */:
|
|
4234
4300
|
return `delta "${clip(action.content)}"`;
|
|
@@ -4237,13 +4303,13 @@ function summarizeKnownAction(action) {
|
|
|
4237
4303
|
case "session/toolCallStart" /* SessionToolCallStart */:
|
|
4238
4304
|
return `tool start ${action.toolName}${action.displayName ? ` (${clip(action.displayName, 32)})` : ""}`;
|
|
4239
4305
|
case "session/toolCallDelta" /* SessionToolCallDelta */:
|
|
4240
|
-
return
|
|
4306
|
+
return summarizeToolCallDelta(action);
|
|
4241
4307
|
case "session/toolCallReady" /* SessionToolCallReady */:
|
|
4242
4308
|
return `tool ready ${action.toolCallId} ${stringOrMd(action.invocationMessage, 48)}`;
|
|
4243
4309
|
case "session/toolCallComplete" /* SessionToolCallComplete */:
|
|
4244
4310
|
return `tool result ${action.toolCallId} success=${action.result.success}`;
|
|
4245
4311
|
case "session/toolCallContentChanged" /* SessionToolCallContentChanged */:
|
|
4246
|
-
return
|
|
4312
|
+
return summarizeToolCallContentChanged(action);
|
|
4247
4313
|
case "session/turnStarted" /* SessionTurnStarted */:
|
|
4248
4314
|
return `turn start ${shortId(action.turnId)}`;
|
|
4249
4315
|
case "session/turnComplete" /* SessionTurnComplete */:
|
|
@@ -4261,15 +4327,23 @@ function summarizeKnownAction(action) {
|
|
|
4261
4327
|
case "session/reasoning" /* SessionReasoning */:
|
|
4262
4328
|
return `reasoning "${clip(action.content, 60)}"`;
|
|
4263
4329
|
case "session/ready" /* SessionReady */:
|
|
4264
|
-
return `session ready ${shortId(
|
|
4330
|
+
return channel ? `session ready ${shortId(channel)}` : "session ready";
|
|
4265
4331
|
case "terminal/data" /* TerminalData */:
|
|
4266
|
-
return `terminal data ${shortId(action.
|
|
4332
|
+
return channel ? `terminal data ${shortId(channel)} +${action.data.length}b` : `terminal data +${action.data.length}b`;
|
|
4267
4333
|
case "terminal/commandFinished" /* TerminalCommandFinished */:
|
|
4268
4334
|
return `terminal cmd done exit=${action.exitCode ?? "?"}`;
|
|
4269
4335
|
default:
|
|
4270
4336
|
return innerActionTypeAndDetail(toUnknownPayload(action));
|
|
4271
4337
|
}
|
|
4272
4338
|
}
|
|
4339
|
+
function summarizeToolCallDelta(action) {
|
|
4340
|
+
const content = typeof action.content === "string" ? action.content : null;
|
|
4341
|
+
return content === null ? `tool delta ${action.toolCallId}` : `tool delta ${action.toolCallId} +${content.length}b`;
|
|
4342
|
+
}
|
|
4343
|
+
function summarizeToolCallContentChanged(action) {
|
|
4344
|
+
const content = Array.isArray(action.content) ? action.content : null;
|
|
4345
|
+
return content === null ? `tool content ${action.toolCallId}` : `tool content ${action.toolCallId} (${content.length} parts)`;
|
|
4346
|
+
}
|
|
4273
4347
|
function summarizeUnknownAction(action) {
|
|
4274
4348
|
if (!action.type) return "action details unavailable";
|
|
4275
4349
|
const t = action.type;
|
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._GzYRV{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;line-height:1.2}._3eOF8{margin-right:5px;font-weight:700}._3eOF8+._3eOF8{margin-left:-5px}._1MFti{cursor:pointer}._f10Tu{-webkit-user-select:none;user-select:none;margin-right:5px;font-size:1.2em}._1UmXx:after{content:"▸"}._1LId0:after{content:"▾"}._1pNG9{margin-right:5px}._1pNG9:after{content:"...";font-size:.8em}._2IvMF{background:#eee}._2bkNM{margin:0;padding:0 10px}._1BXBN{margin:0;padding:0}._1MGIk{color:#000;margin-right:5px;font-weight:600}._3uHL6{color:#000}._2T6PJ,._1Gho6{color:#df113a}._vGjyY{color:#2a3f3c}._1bQdo{color:#0b75f5}._3zQKs{color:#469038}._1xvuR{color:#43413d}._oLqym,._2AXVT,._2KJWg{color:#000}._11RoI{background:#002b36}._17H2C,._3QHg2,._3fDAz{color:#fdf6e3}._2bSDX{color:#fdf6e3;margin-right:5px;font-weight:bolder}._gsbQL{color:#fdf6e3}._LaAZe,._GTKgm{color:#81b5ac}._Chy1W{color:#cb4b16}._2bveF{color:#d33682}._2vRm-{color:#ae81ff}._1prJR{color:#268bd2}:root,[data-theme=dark]{--color-scheme:dark;--space-0:0;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-8:48px;--row-height:28px;--font-sans:"Inter Variable", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:"JetBrains Mono Variable", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--text-row-size:13px;--text-row-line:20px;--text-ui-size:13px;--text-ui-muted-size:12px;--text-heading-size:16px;--text-body-size:14px;--weight-regular:400;--weight-semibold:600;--color-bg:#0e1116;--color-surface:#161a21;--color-surface-raised:#1c2129;--color-border:#262c36;--color-border-strong:#39414e;--color-accent:#7aa2f7;--color-accent-foreground:#0e1116;--color-text:#e6e9ef;--color-text-muted:#a4adbe;--color-text-subtle:#6b7385;--color-text-disabled:#4b5263;--color-success:#7dcfa4;--color-warning:#e0af68;--color-destructive:#f7768e;--color-info:#7dcfff;--dir-c2s:#7aa2f7;--dir-s2c:#bb9af7;--dir-internal:#a4adbe;--kind-request:#7aa2f7;--kind-response:#7dcfa4;--kind-notification:#e0af68;--kind-action:#bb9af7;--kind-error:#f7768e;--kind-parse-error:#f7768e;--action-text:#7dcfa4;--action-tool-call:#7aa2f7;--action-tool-result:#9ece6a;--action-status:#a4adbe;--action-unknown:#6b7385;--latency-fast:#3a4a3f;--latency-normal:#3a4252;--latency-slow:#5a4a2e;--latency-critical:#5a2e36;--color-search-match-bg:#3a3520;--color-search-match-fg:#e6e9ef;--color-chip-bg:var(--color-surface-raised);--color-chip-bg-active:var(--color-border);--color-chip-border:var(--color-border-strong);--color-chip-fg:var(--color-text);--color-chip-fg-muted:var(--color-text-muted);--color-chip-dismiss:var(--color-text-muted);--color-group-header-bg:#1a1f27;--color-group-header-fg:var(--color-text);--color-group-header-meta:var(--color-text-muted);--color-gap-banner-bg:color-mix(in srgb, var(--color-warning) 14%, var(--color-bg));--color-gap-banner-fg:var(--color-warning);--color-auth-fail-rail:var(--color-destructive);--color-auth-fail-banner-bg:color-mix(in srgb, var(--color-destructive) 14%, var(--color-bg));--color-json-bg:var(--color-surface);--color-json-key:var(--color-accent);--color-json-string:var(--color-success);--color-json-number:var(--color-warning);--color-json-boolean:var(--color-info);--color-json-null:var(--color-text-subtle);--color-json-punctuation:var(--color-text-muted);--row-group-header-height:24px;--row-banner-height:20px;--filter-bar-height:40px;--filter-chips-height:32px;--candidate-row-height:36px;--color-confidence-high:var(--color-success);--color-confidence-medium:var(--color-warning);--color-confidence-low:var(--color-text-subtle);--color-status-paused-fg:var(--color-accent);--color-status-paused-bg:color-mix(in srgb, var(--color-accent) 15%, var(--color-surface));--color-pill-bg:var(--color-surface-raised);--color-pill-fg:var(--color-text);--color-pill-border:var(--color-border-strong);--color-banner-rotation-bg:color-mix(in srgb, var(--color-warning) 12%, var(--color-bg));--color-banner-rotation-fg:var(--color-warning);--color-banner-watch-error-bg:color-mix(in srgb, var(--color-destructive) 12%, var(--color-bg));--color-banner-watch-error-fg:var(--color-destructive);--shadow-menu:0 8px 24px color-mix(in srgb, var(--color-bg) 70%, transparent);--shadow-panel:-12px 0 28px color-mix(in srgb, var(--color-bg) 28%, transparent);--shadow-drawer:-18px 0 42px color-mix(in srgb, var(--color-bg) 56%, transparent);--focus-ring:var(--color-accent);--row-selected-bg:color-mix(in srgb, var(--color-accent) 16%, var(--color-bg));--row-hover-bg:color-mix(in srgb, var(--color-accent) 8%, var(--color-bg));--overlay-backdrop:color-mix(in srgb, var(--color-bg) 68%, transparent);--drawer-border:1px solid var(--color-border-strong);--effect-scanline-opacity:0;--effect-grid-opacity:0;--effect-noise-opacity:0;--effect-glow:none;--effect-glow-strong:none;--effect-crt-glass-opacity:0;--effect-crt-frame-opacity:0;--effect-crt-fringe-opacity:0;--effect-crt-fringe-spread:0;--effect-crt-vignette-stop:100%;--effect-crt-signal-jitter:0;--effect-crt-glitch-boost:1;--selection-bg:color-mix(in srgb, var(--color-accent) 34%, var(--color-bg));--selection-fg:var(--color-text)}[data-theme=light]{--color-scheme:light;--space-0:0;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-8:48px;--row-height:28px;--font-sans:"Inter Variable", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:"JetBrains Mono Variable", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--text-row-size:13px;--text-row-line:20px;--text-ui-size:13px;--text-ui-muted-size:12px;--text-heading-size:16px;--text-body-size:14px;--weight-regular:400;--weight-semibold:600;--color-bg:#f7f8fb;--color-surface:#fff;--color-surface-raised:#f0f3f8;--color-border:#d6dbe5;--color-border-strong:#aeb7c6;--color-accent:#245fc7;--color-accent-foreground:#fff;--color-text:#18202c;--color-text-muted:#5b6575;--color-text-subtle:#7a8494;--color-text-disabled:#a8b0bd;--color-success:#16734a;--color-warning:#9a5b00;--color-destructive:#c11f3d;--color-info:#006d9c;--dir-c2s:#245fc7;--dir-s2c:#7852b8;--dir-internal:#5b6575;--kind-request:#245fc7;--kind-response:#16734a;--kind-notification:#9a5b00;--kind-action:#7852b8;--kind-error:#c11f3d;--kind-parse-error:#c11f3d;--action-text:#16734a;--action-tool-call:#245fc7;--action-tool-result:#4f7d10;--action-status:#5b6575;--action-unknown:#7a8494;--latency-fast:#dff1e7;--latency-normal:#e3eaf5;--latency-slow:#f8ebd5;--latency-critical:#f7dce3;--color-search-match-bg:#fff0a8;--color-search-match-fg:#18202c;--color-chip-bg:var(--color-surface-raised);--color-chip-bg-active:#dfe8f8;--color-chip-border:var(--color-border-strong);--color-chip-fg:var(--color-text);--color-chip-fg-muted:var(--color-text-muted);--color-chip-dismiss:var(--color-text-muted);--color-group-header-bg:#edf1f7;--color-group-header-fg:var(--color-text);--color-group-header-meta:var(--color-text-muted);--color-gap-banner-bg:color-mix(in srgb, var(--color-warning) 12%, var(--color-bg));--color-gap-banner-fg:var(--color-warning);--color-auth-fail-rail:var(--color-destructive);--color-auth-fail-banner-bg:color-mix(in srgb, var(--color-destructive) 10%, var(--color-bg));--color-json-bg:var(--color-surface);--color-json-key:var(--color-accent);--color-json-string:var(--color-success);--color-json-number:var(--color-warning);--color-json-boolean:var(--color-info);--color-json-null:var(--color-text-subtle);--color-json-punctuation:var(--color-text-muted);--row-group-header-height:24px;--row-banner-height:20px;--filter-bar-height:40px;--filter-chips-height:32px;--color-confidence-high:var(--color-success);--color-confidence-medium:var(--color-warning);--color-confidence-low:var(--color-text-subtle);--color-status-paused-fg:var(--color-accent);--color-status-paused-bg:color-mix(in srgb, var(--color-accent) 12%, var(--color-surface));--color-pill-bg:var(--color-surface-raised);--color-pill-fg:var(--color-text);--color-pill-border:var(--color-border-strong);--color-banner-rotation-bg:color-mix(in srgb, var(--color-warning) 10%, var(--color-bg));--color-banner-rotation-fg:var(--color-warning);--color-banner-watch-error-bg:color-mix(in srgb, var(--color-destructive) 10%, var(--color-bg));--color-banner-watch-error-fg:var(--color-destructive);--shadow-menu:0 8px 24px color-mix(in srgb, var(--color-border-strong) 34%, transparent);--shadow-panel:-10px 0 26px color-mix(in srgb, var(--color-border-strong) 18%, transparent);--shadow-drawer:-18px 0 42px color-mix(in srgb, var(--color-border-strong) 32%, transparent);--focus-ring:var(--color-accent);--row-selected-bg:color-mix(in srgb, var(--color-accent) 12%, var(--color-bg));--row-hover-bg:color-mix(in srgb, var(--color-accent) 6%, var(--color-bg));--overlay-backdrop:color-mix(in srgb, var(--color-text) 28%, transparent);--drawer-border:1px solid var(--color-border-strong);--effect-scanline-opacity:0;--effect-grid-opacity:0;--effect-noise-opacity:0;--effect-glow:none;--effect-glow-strong:none;--effect-crt-glass-opacity:0;--effect-crt-frame-opacity:0;--effect-crt-fringe-opacity:0;--effect-crt-fringe-spread:0;--effect-crt-vignette-stop:100%;--effect-crt-signal-jitter:0;--effect-crt-glitch-boost:1;--selection-bg:color-mix(in srgb, var(--color-accent) 26%, var(--color-bg));--selection-fg:var(--color-text)}[data-theme=hacker]{--color-scheme:dark;--space-0:0;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-8:48px;--row-height:28px;--font-sans:"Inter Variable", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:"JetBrains Mono Variable", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--text-row-size:13px;--text-row-line:20px;--text-ui-size:13px;--text-ui-muted-size:12px;--text-heading-size:16px;--text-body-size:14px;--weight-regular:400;--weight-semibold:600;--color-bg:#020704;--color-surface:#06120a;--color-surface-raised:#0a1b10;--color-border:#12351d;--color-border-strong:#1f6b34;--color-accent:#39ff88;--color-accent-foreground:#020704;--color-text:#d6ffe2;--color-text-muted:#79d994;--color-text-subtle:#3c8f55;--color-text-disabled:#245633;--color-success:#39ff88;--color-warning:#d7ff57;--color-destructive:#ff4f7b;--color-info:#54f7ff;--dir-c2s:#39ff88;--dir-s2c:#54f7ff;--dir-internal:#79d994;--kind-request:#39ff88;--kind-response:#54f7ff;--kind-notification:#d7ff57;--kind-action:#b86cff;--kind-error:#ff4f7b;--kind-parse-error:#ff4f7b;--action-text:#39ff88;--action-tool-call:#54f7ff;--action-tool-result:#d7ff57;--action-status:#79d994;--action-unknown:#3c8f55;--latency-fast:#0c2414;--latency-normal:#102833;--latency-slow:#2f3210;--latency-critical:#3a1220;--color-search-match-bg:#254512;--color-search-match-fg:#d6ffe2;--color-chip-bg:var(--color-surface-raised);--color-chip-bg-active:#12351d;--color-chip-border:var(--color-border-strong);--color-chip-fg:var(--color-text);--color-chip-fg-muted:var(--color-text-muted);--color-chip-dismiss:var(--color-text-muted);--color-group-header-bg:#07160c;--color-group-header-fg:var(--color-text);--color-group-header-meta:var(--color-text-muted);--color-gap-banner-bg:color-mix(in srgb, var(--color-warning) 14%, var(--color-bg));--color-gap-banner-fg:var(--color-warning);--color-auth-fail-rail:var(--color-destructive);--color-auth-fail-banner-bg:color-mix(in srgb, var(--color-destructive) 14%, var(--color-bg));--color-json-bg:var(--color-surface);--color-json-key:var(--color-accent);--color-json-string:#d7ff57;--color-json-number:#54f7ff;--color-json-boolean:#b86cff;--color-json-null:var(--color-text-subtle);--color-json-punctuation:var(--color-text-muted);--row-group-header-height:24px;--row-banner-height:20px;--filter-bar-height:40px;--filter-chips-height:32px;--color-confidence-high:var(--color-success);--color-confidence-medium:var(--color-warning);--color-confidence-low:var(--color-text-subtle);--color-status-paused-fg:var(--color-accent);--color-status-paused-bg:color-mix(in srgb, var(--color-accent) 18%, var(--color-surface));--color-pill-bg:var(--color-surface-raised);--color-pill-fg:var(--color-text);--color-pill-border:var(--color-border-strong);--color-banner-rotation-bg:color-mix(in srgb, var(--color-warning) 14%, var(--color-bg));--color-banner-rotation-fg:var(--color-warning);--color-banner-watch-error-bg:color-mix(in srgb, var(--color-destructive) 14%, var(--color-bg));--color-banner-watch-error-fg:var(--color-destructive);--shadow-menu:0 0 22px color-mix(in srgb, var(--color-accent) 28%, transparent);--shadow-panel:-10px 0 30px color-mix(in srgb, var(--color-accent) 12%, transparent);--shadow-drawer:-18px 0 48px color-mix(in srgb, var(--color-accent) 24%, transparent);--focus-ring:var(--color-accent);--row-selected-bg:color-mix(in srgb, var(--color-accent) 18%, var(--color-bg));--row-hover-bg:color-mix(in srgb, var(--color-accent) 9%, var(--color-bg));--overlay-backdrop:color-mix(in srgb, var(--color-bg) 76%, transparent);--drawer-border:1px solid var(--color-border-strong);--effect-scanline-opacity:.22;--effect-grid-opacity:.12;--effect-noise-opacity:.085;--effect-glow:0 0 10px color-mix(in srgb, var(--color-accent) 34%, transparent);--effect-glow-strong:0 0 18px color-mix(in srgb, var(--color-accent) 48%, transparent);--effect-crt-glass-opacity:.72;--effect-crt-frame-opacity:.94;--effect-crt-fringe-opacity:.34;--effect-crt-fringe-spread:18px;--effect-crt-vignette-stop:64%;--effect-crt-signal-jitter:1.5px;--effect-crt-glitch-boost:1.08;--selection-bg:color-mix(in srgb, var(--color-accent) 38%, var(--color-bg));--selection-fg:var(--color-text)}@font-face{font-family:Inter Variable;src:url(/fonts/inter/InterVariable.woff2)format("woff2-variations");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono Variable;src:url(/fonts/jetbrains-mono/JetBrainsMono-Variable.woff2)format("woff2-variations");font-weight:100 800;font-style:normal;font-display:swap}html,body,#root{height:100%;margin:0}body{background:var(--color-bg);color:var(--color-text);font-family:var(--font-sans);font-size:var(--text-ui-size);line-height:20px;font-weight:var(--weight-regular);-webkit-font-smoothing:antialiased;color-scheme:var(--color-scheme)}.mono,.ts,.latency,.id,.method,.preview{font-family:var(--font-mono)}.ts,.latency,.id,.method,.preview{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.ts,.latency{font-variant-numeric:tabular-nums}:focus{outline:none}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}@keyframes spin{to{transform:rotate(360deg)}}.spin{animation:1s linear infinite spin}@media (prefers-reduced-motion:reduce){.spin{animation:none}}.detail-rail{width:320px}@media (max-width:1023.98px){.detail-rail{display:none}}.ahp-json-container{color:var(--color-text)}.ahp-json-child{margin-left:var(--space-4)}.ahp-json-label,.ahp-json-clickable-label{color:var(--color-json-key)}.ahp-json-clickable-label{cursor:pointer}.ahp-json-string{color:var(--color-json-string)}.ahp-json-number{color:var(--color-json-number)}.ahp-json-boolean{color:var(--color-json-boolean)}.ahp-json-null,.ahp-json-other{color:var(--color-json-null)}.ahp-json-punctuation,.ahp-json-expander,.ahp-json-collapsed{color:var(--color-json-punctuation)}.ahp-json-expander{cursor:pointer;-webkit-user-select:none;user-select:none;width:1.5ch;display:inline-block}.ahp-json-expander:before{content:"+"}.ahp-json-expander[aria-expanded=true]:before{content:"-"}.ahp-json-collapsed{cursor:pointer}.ahp-json-collapsed:before{content:"..."}.state-inspector{border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border);padding:var(--space-3);background:color-mix(in srgb, var(--color-surface-raised) 54%, var(--color-surface));color:var(--color-text);font-family:var(--font-sans);font-size:var(--text-ui-size)}.state-inspector-header{justify-content:space-between;align-items:center;gap:var(--space-3);display:flex}.state-inspector h3,.state-inspector p{margin:0}.state-inspector h3{font-size:var(--text-ui-size);font-weight:var(--weight-semibold)}.state-inspector-header p,.state-summary-warning,.state-resource-meta,.state-section-label{color:var(--color-text-muted);font-size:var(--text-ui-muted-size)}.state-inspector-body{gap:var(--space-3);margin-top:var(--space-3);display:grid}.state-action-button,.state-secondary-button,.state-tab,.state-resource-option{font-family:var(--font-sans);font-size:var(--text-ui-size)}.state-action-button,.state-secondary-button{border:1px solid var(--color-border-strong);background:var(--color-surface-raised);color:var(--color-text);cursor:pointer;border-radius:6px}.state-action-button{padding:var(--space-2) var(--space-3);flex:none}.state-secondary-button{padding:var(--space-1) var(--space-2)}.state-inline-status{align-items:center;gap:var(--space-2);color:var(--color-text-muted);display:flex}.state-error,.state-empty{border:1px solid var(--color-border);padding:var(--space-2) var(--space-3);background:var(--color-surface);border-radius:8px}.state-error p{margin:0 0 var(--space-2);color:var(--color-destructive)}.state-metadata-summary dl,.state-summary-grid{gap:var(--space-1) var(--space-3);grid-template-columns:max-content minmax(0,1fr);margin:0;display:grid}.state-metadata-summary dt,.state-summary-grid dt{color:var(--color-text-muted)}.state-metadata-summary dd,.state-summary-grid dd{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:0;overflow:hidden}.state-confidence{align-items:center;gap:var(--space-2);min-width:0;display:flex}.state-confidence-label{color:var(--color-text-muted);font-size:var(--text-ui-muted-size)}.state-confidence-pill{padding:0 var(--space-2);font-weight:var(--weight-semibold);border:1px solid;border-radius:999px}.state-confidence-caution{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--color-text-muted);font-size:var(--text-ui-muted-size);overflow:hidden}.state-resource-selector{gap:var(--space-1);border:0;min-width:0;margin:0;padding:0;display:grid}.state-section-label{text-transform:uppercase;letter-spacing:.06em}.state-resource-list{gap:var(--space-1);display:grid}.state-resource-option{gap:var(--space-2);width:100%;min-width:0;padding:var(--space-2);border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);text-align:left;border-radius:8px;grid-template-columns:minmax(0,1fr) max-content;align-items:center;display:grid}.state-resource-option[aria-pressed=true]{border-color:var(--color-accent);background:color-mix(in srgb, var(--color-accent) 12%, var(--color-surface))}.state-resource-option:not(.state-resource-option-disabled){cursor:pointer}.state-resource-option-disabled{opacity:.72}.state-resource-main{gap:var(--space-2);align-items:baseline;min-width:0;display:flex}.state-resource-kind{color:var(--color-accent);font-weight:var(--weight-semibold);text-transform:uppercase;flex:none}.state-resource-uri{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--font-mono);overflow:hidden}.state-resource-meta{gap:var(--space-2);white-space:nowrap;flex:none;display:flex}.state-resource-unavailable{color:var(--color-text-subtle);font-size:var(--text-ui-muted-size)}[data-confidence=complete]{color:var(--color-success)}[data-confidence=partial]{color:var(--color-warning)}[data-confidence=unknown]{color:var(--color-text-subtle)}.state-view-shell{border:1px solid var(--color-border);background:var(--color-surface);border-radius:8px;flex-direction:column;min-height:240px;max-height:480px;display:flex;overflow:hidden}.state-view-header{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-border);flex:none;display:flex}.state-tabs{border-bottom:1px solid var(--color-border);flex:none;display:flex}.state-tab{border:0;border-right:1px solid var(--color-border);color:var(--color-text-muted);cursor:pointer;padding:var(--space-2) var(--space-3);background:0 0}.state-tab[aria-selected=true]{color:var(--color-text);background:color-mix(in srgb, var(--color-accent) 10%, var(--color-surface));box-shadow:inset 0 -2px 0 var(--color-accent)}.state-copy-menu{flex:none;position:relative}.state-view-actions{align-items:center;gap:var(--space-2);flex:none;display:flex}.state-copy-button{align-items:center;gap:var(--space-1);border:1px solid var(--color-border-strong);background:var(--color-surface-raised);color:var(--color-text);cursor:pointer;font-family:var(--font-sans);font-size:var(--text-ui-muted-size);padding:var(--space-1) var(--space-2);border-radius:4px;display:flex}.state-copy-menu-list{top:calc(100% + var(--space-1));z-index:70;border:1px solid var(--color-border-strong);background:var(--color-surface-raised);min-width:210px;box-shadow:var(--shadow-menu);border-radius:4px;position:absolute;right:0;overflow:hidden}.state-copy-menu-item{width:100%;color:var(--color-text);cursor:pointer;font-family:var(--font-sans);font-size:var(--text-ui-muted-size);padding:var(--space-2) var(--space-3);text-align:left;background:0 0;border:0;display:block}.state-copy-menu-item:hover,.state-copy-menu-item:focus-visible{background:var(--row-hover-bg)}.state-tabpanel{flex:1;min-height:0;display:flex;overflow:auto}.state-summary-view{align-content:start;gap:var(--space-3);width:100%;padding:var(--space-3);display:grid}.state-shape-details{gap:var(--space-1);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.state-shape-details li{border:1px solid var(--color-border);padding:0 var(--space-2);background:var(--color-surface-raised);color:var(--color-text-muted);font-family:var(--font-mono);font-size:var(--text-ui-muted-size);border-radius:999px}.state-diagnostics{gap:var(--space-2);border:1px solid var(--color-border);padding:var(--space-2) var(--space-3);background:var(--color-surface);border-radius:8px;display:grid}.state-diagnostics-header{gap:var(--space-2);flex-wrap:wrap;align-items:baseline;display:flex}.state-diagnostics-header h4,.state-diagnostic-group h5{color:var(--color-text);font-size:var(--text-ui-size);margin:0}.state-diagnostics-header span,.state-diagnostics-empty{color:var(--color-text-muted);font-size:var(--text-ui-muted-size)}.state-diagnostics-empty{margin:0}.state-diagnostics-groups{gap:var(--space-2);display:grid}.state-diagnostic-group{gap:var(--space-1);display:grid}.state-diagnostic-group ul{gap:var(--space-1);padding:0;padding-right:var(--space-1);max-height:240px;margin:0;list-style:none;display:grid;overflow-y:auto}.state-diagnostic-group li{gap:var(--space-1);border-left:2px solid var(--color-border-strong);padding-left:var(--space-2);overflow-wrap:anywhere;word-break:break-word;display:grid}.state-diagnostic-meta{gap:var(--space-2);color:var(--color-text-muted);font-family:var(--font-mono);font-size:var(--text-ui-muted-size);flex-wrap:wrap;display:flex}.state-diagnostic-message{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--color-text)}.pinned-state-panel{gap:var(--space-2);border:1px solid var(--color-border);padding:var(--space-2) var(--space-3);background:var(--color-surface);border-radius:8px;display:grid}.pinned-state-header{justify-content:space-between;align-items:flex-start;gap:var(--space-3);display:flex}.pinned-state-header h4{color:var(--color-text);font-size:var(--text-ui-size);margin:0}.pinned-state-header p,.pinned-state-empty{color:var(--color-text-muted);font-size:var(--text-ui-muted-size);margin:0}.pinned-state-list{gap:var(--space-2);margin:0;padding:0;list-style:none;display:grid}.pinned-state-card{gap:var(--space-2);border:1px solid var(--color-border-strong);padding:var(--space-2);background:var(--color-surface-raised);box-shadow:var(--shadow-menu);border-radius:8px;display:grid}.pinned-state-meta{gap:var(--space-2);min-width:0;color:var(--color-text-muted);font-size:var(--text-ui-muted-size);flex-wrap:wrap;display:flex}.pinned-state-actions{justify-content:flex-end;display:flex}.state-comparison{gap:var(--space-2);border:1px solid var(--color-border);padding:var(--space-2);background:var(--color-surface-raised);color:var(--color-text);font-family:var(--font-sans);border-radius:8px;display:grid}.state-comparison-header{justify-content:space-between;align-items:flex-start;gap:var(--space-3);display:flex}.state-comparison-header h4{color:var(--color-text);font-size:var(--text-ui-size);margin:0}.state-comparison-points{gap:var(--space-2);display:grid}.state-comparison-points>div{gap:var(--space-1);border:1px solid var(--color-border);min-width:0;padding:var(--space-2);background:var(--color-surface);border-radius:6px;display:grid}.state-comparison-paths{gap:var(--space-1);display:grid}.state-comparison-paths ul{gap:var(--space-1);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.state-comparison-paths li{border:1px solid var(--color-border);padding:0 var(--space-2);background:var(--color-surface);color:var(--color-accent);font-family:var(--font-mono);font-size:var(--text-ui-muted-size);border-radius:999px}.state-comparison-paths p,.state-comparison-warning,.state-comparison-empty{font-size:var(--text-ui-muted-size);margin:0}.state-comparison-warning{color:var(--color-warning)}.state-comparison-empty{color:var(--color-text-muted)}[data-severity=info]{color:var(--color-info)}[data-severity=warning]{color:var(--color-warning)}[data-severity=error]{color:var(--color-destructive)}.app-shell{min-width:0;overflow:hidden}.crt-display-surface{height:100%}[data-theme=hacker] .crt-filter-defs,.crt-filter-defs{pointer-events:none;width:0;height:0;position:absolute;overflow:hidden}[data-theme=hacker] .crt-display-surface{filter:saturate(1.08)contrast(1.06);box-shadow:inset 0 0 0 2px color-mix(in srgb, var(--color-accent) 26%, transparent), inset 0 18px 36px color-mix(in srgb, var(--color-accent) 16%, transparent), inset 0 -24px 44px color-mix(in srgb, var(--color-bg) 98%, transparent), inset 22px 0 46px color-mix(in srgb, var(--color-bg) 92%, transparent), inset -22px 0 46px color-mix(in srgb, var(--color-bg) 92%, transparent), inset 0 0 140px color-mix(in srgb, var(--color-bg) 96%, transparent), 0 0 0 18px color-mix(in srgb, var(--color-bg) 92%, transparent), 0 0 60px color-mix(in srgb, var(--color-accent) 12%, transparent);border-radius:36px;animation:11s ease-in-out infinite ahp-crt-surface-drift;position:relative;overflow:visible}.app-main,.timeline-pane,.timeline-list-shell{min-width:0}.crt-display-surface>.app-shell{z-index:1;position:relative}[data-theme=hacker] .crt-display-surface>.app-shell{isolation:isolate;text-shadow:0 0 1px color-mix(in srgb, var(--color-text) 64%, transparent), 0 0 7px color-mix(in srgb, var(--color-accent) 30%, transparent), .6px 0 0 color-mix(in srgb, var(--color-info) 28%, transparent), -.6px 0 0 color-mix(in srgb, var(--color-destructive) 20%, transparent);animation:4.8s step-end infinite ahp-crt-phosphor-shift}[data-theme=hacker] .crt-display-surface>.app-shell:before,[data-theme=hacker] .crt-display-surface>.app-shell:after{content:"";pointer-events:none;position:absolute;inset:0}[data-theme=hacker] .crt-display-surface>.app-shell:before{z-index:1300;background:linear-gradient(to bottom, transparent 0, color-mix(in srgb, var(--color-bg) 34%, transparent) 52%, transparent 100%), linear-gradient(to bottom, transparent 0 21%, color-mix(in srgb, var(--color-bg) 32%, transparent) 24%, transparent 31% 68%, color-mix(in srgb, var(--color-bg) 26%, transparent) 72%, transparent 78% 100%), linear-gradient(90deg, color-mix(in srgb, var(--color-info) 22%, transparent), color-mix(in srgb, var(--color-accent) 8%, transparent), color-mix(in srgb, var(--kind-action) 18%, transparent));mix-blend-mode:normal;opacity:.27;background-size:100% 3px,100% 29px,4px 100%;animation:8s linear infinite ahp-crt-foreground-grid}[data-theme=hacker] .crt-display-surface>.app-shell:after{z-index:1301;background:linear-gradient(180deg, transparent 0 36%, color-mix(in srgb, var(--color-info) 7%, transparent) 43%, color-mix(in srgb, var(--color-accent) 18%, transparent) 49%, color-mix(in srgb, var(--color-bg) 28%, transparent) 52%, transparent 61% 100%), repeating-linear-gradient(118deg, transparent 0 13px, color-mix(in srgb, var(--color-accent) 10%, transparent) 13px 14px, transparent 14px 31px);mix-blend-mode:screen;opacity:var(--effect-noise-opacity);background-position:0 -260px,0 0;background-size:100% 220px,180px 180px;animation:5.6s linear infinite ahp-crt-foreground-sweep,.19s step-end infinite ahp-crt-flicker}.crt-curvature-canvas{display:none}[data-theme=hacker] .crt-curvature-canvas{z-index:3;border-radius:inherit;mix-blend-mode:screen;opacity:.92;pointer-events:none;width:100%;height:100%;display:block;position:absolute;inset:0}.detail-rail{box-shadow:var(--shadow-panel)}.detail-drawer-backdrop{z-index:2000;background:var(--overlay-backdrop);justify-content:flex-end;display:flex;position:fixed;inset:0}.detail-drawer{background:var(--color-surface);border-left:var(--drawer-border);width:min(88vw,720px);height:100%;box-shadow:var(--shadow-drawer);flex-direction:column;display:flex;position:relative}.detail-drawer>[data-testid=detail-panel]{flex:1}.detail-drawer-close{top:var(--space-2);right:var(--space-2);z-index:2;min-width:44px;min-height:44px;padding:0 var(--space-3);background:var(--color-chip-bg-active);border:1px solid var(--color-chip-border);color:var(--color-chip-fg);cursor:pointer;font-family:var(--font-sans);font-weight:var(--weight-semibold);border-radius:6px;position:absolute}.filter-bar{align-content:center}.timeline-list-shell [role=row]{min-width:max-content}@media (min-width:1400px){.detail-drawer-backdrop{display:none}}@media (max-width:1399.98px){.app-main .detail-rail{display:none}}@media (max-width:767.98px){.detail-drawer{width:100vw}.filter-bar{flex-wrap:nowrap;overflow-x:auto}}@media (min-width:768px) and (max-width:1199.98px){.filter-bar{height:auto}}@media (min-width:1200px){.filter-bar{flex-wrap:nowrap}}::selection{background:var(--selection-bg);color:var(--selection-fg)}.timeline-list-shell [role=row]:hover{background:var(--row-hover-bg)}[data-theme=hacker] body:before,[data-theme=hacker] body:after{content:"";z-index:0;pointer-events:none;position:fixed;inset:0}[data-theme=hacker] body:before{background:repeating-linear-gradient(to bottom, color-mix(in srgb, var(--color-accent) 100%, transparent) 0, color-mix(in srgb, var(--color-accent) 100%, transparent) 1px, transparent 1px, transparent 3px);opacity:var(--effect-scanline-opacity);animation:12s linear infinite ahp-scanline-drift}[data-theme=hacker] body:after{background:linear-gradient(color-mix(in srgb, var(--color-accent) 100%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--color-accent) 100%, transparent) 1px, transparent 1px), radial-gradient(circle at 50% 50%, transparent var(--effect-crt-vignette-stop), color-mix(in srgb, var(--color-bg) 96%, transparent) 100%), repeating-radial-gradient(circle at 18% 28%, color-mix(in srgb, var(--color-accent) 18%, transparent) 0 1px, transparent 1px 4px);opacity:var(--effect-grid-opacity);background-size:32px 32px,32px 32px,100% 100%,6px 6px;animation:7.2s step-end infinite ahp-crt-signal-beat}[data-theme=hacker] .crt-display-surface:before,[data-theme=hacker] .crt-display-surface:after{content:"";border-radius:inherit;pointer-events:none;position:absolute;inset:0}[data-theme=hacker] .crt-display-surface:before{background:radial-gradient(ellipse at 50% -16%, color-mix(in srgb, var(--color-accent) 30%, transparent) 0, color-mix(in srgb, var(--color-accent) 10%, transparent) 18%, transparent 46%), radial-gradient(ellipse at 50% 116%, color-mix(in srgb, var(--color-bg) 96%, transparent) 0, transparent 44%), radial-gradient(circle at 50% 45%, color-mix(in srgb, var(--color-accent) 8%, transparent) 0, transparent var(--effect-crt-vignette-stop), color-mix(in srgb, var(--color-bg) 98%, transparent) 100%), linear-gradient(180deg, color-mix(in srgb, var(--color-accent) 10%, transparent), transparent 24%, transparent 76%, color-mix(in srgb, var(--color-bg) 92%, transparent));opacity:calc(var(--effect-crt-frame-opacity) * var(--effect-crt-glass-opacity))}[data-theme=hacker] .crt-display-surface:after{background:radial-gradient(ellipse at -8% 50%, color-mix(in srgb, var(--color-info) 52%, transparent) 0, transparent 32%), radial-gradient(ellipse at 108% 50%, color-mix(in srgb, var(--kind-action) 48%, transparent) 0, transparent 32%), radial-gradient(ellipse at left center, color-mix(in srgb, var(--color-info) 78%, transparent) 0, transparent var(--effect-crt-fringe-spread)), radial-gradient(ellipse at right center, color-mix(in srgb, var(--kind-action) 68%, transparent) 0, transparent var(--effect-crt-fringe-spread)), linear-gradient(90deg, color-mix(in srgb, var(--color-info) 38%, transparent), transparent 18%, transparent 82%, color-mix(in srgb, var(--kind-action) 38%, transparent));mix-blend-mode:screen;opacity:var(--effect-crt-fringe-opacity);animation:9s steps(2,end) infinite ahp-crt-fringe-jitter}[data-theme=hacker] #root{z-index:1;box-shadow:inset 0 0 120px color-mix(in srgb, var(--color-accent) 10%, transparent);position:relative}[data-theme=hacker] header,[data-theme=hacker] .detail-rail,[data-theme=hacker] .detail-drawer,[data-theme=hacker] [data-testid=filter-bar]{box-shadow:var(--effect-glow)}[data-theme=hacker] [data-selected=true]{box-shadow:inset 0 0 0 1px var(--color-border-strong), var(--effect-glow)}@keyframes ahp-scanline-drift{0%{background-position-y:0}to{background-position-y:32px}}@keyframes ahp-crt-surface-drift{0%,to{opacity:1}50%{opacity:.985}}@keyframes ahp-crt-signal-beat{0%,42%,44%,to{filter:brightness();transform:translate(0)scaleY(1)}43%{transform:translateX(var(--effect-crt-signal-jitter)) scaleY(var(--effect-crt-glitch-boost));filter:brightness(var(--effect-crt-glitch-boost))}}@keyframes ahp-crt-fringe-jitter{0%,to{transform:translate(0)}52%{transform:translateX(calc(var(--effect-crt-signal-jitter) * -1))}}@keyframes ahp-crt-phosphor-shift{0%,76%,to{text-shadow:0 0 1px color-mix(in srgb, var(--color-text) 64%, transparent), 0 0 7px color-mix(in srgb, var(--color-accent) 30%, transparent), .6px 0 0 color-mix(in srgb, var(--color-info) 28%, transparent), -.6px 0 0 color-mix(in srgb, var(--color-destructive) 20%, transparent)}77%{text-shadow:0 0 2px color-mix(in srgb, var(--color-text) 72%, transparent), 0 0 11px color-mix(in srgb, var(--color-accent) 40%, transparent), 1.25px 0 0 color-mix(in srgb, var(--color-info) 34%, transparent), -1px 0 0 color-mix(in srgb, var(--color-destructive) 28%, transparent)}78%{text-shadow:0 0 1px color-mix(in srgb, var(--color-text) 58%, transparent), 0 0 5px color-mix(in srgb, var(--color-accent) 24%, transparent), .35px 0 0 color-mix(in srgb, var(--color-info) 24%, transparent), -.35px 0 0 color-mix(in srgb, var(--color-destructive) 16%, transparent)}}@keyframes ahp-crt-foreground-grid{0%{background-position:0 0,0 0,0 0}to{background-position:0 24px,0 -37px,4px 0}}@keyframes ahp-crt-foreground-sweep{0%{background-position:0 -260px,0 0}to{background-position:0 calc(100% + 260px),180px 0}}@keyframes ahp-crt-flicker{0%,to{opacity:calc(var(--effect-noise-opacity) * .84)}22%{opacity:calc(var(--effect-noise-opacity) * 1.12)}58%{opacity:calc(var(--effect-noise-opacity) * .72)}79%{opacity:calc(var(--effect-noise-opacity) * 1.26)}}@media (prefers-reduced-motion:reduce){[data-theme=hacker] body:before,[data-theme=hacker] body:after,[data-theme=hacker] .crt-display-surface,[data-theme=hacker] .crt-display-surface:before,[data-theme=hacker] .crt-display-surface:after,[data-theme=hacker] .crt-display-surface>.app-shell,[data-theme=hacker] .crt-display-surface>.app-shell:before,[data-theme=hacker] .crt-display-surface>.app-shell:after,[data-theme=hacker] #root,[data-theme=hacker] [data-selected=true]{transition:none;animation:none}[data-theme=hacker] .crt-curvature-canvas{opacity:.78}}
|