@tanstack/ai-devtools-core 0.5.10 → 0.5.11
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/Shell/{2X67PB7B.js → DCUFLPG6.js} +382 -77
- package/dist/{production/Shell/BJP2PZMD.js → Shell/JT2B6WKX.js} +591 -161
- package/dist/Shell/{YJTEAPIF.js → YBXRSRRK.js} +591 -161
- package/dist/dev.js +1 -1
- package/dist/index.js +1 -1
- package/dist/production/Shell/{2X67PB7B.js → DCUFLPG6.js} +382 -77
- package/dist/{Shell/BJP2PZMD.js → production/Shell/JT2B6WKX.js} +591 -161
- package/dist/production/Shell/{YJTEAPIF.js → YBXRSRRK.js} +591 -161
- package/dist/production/dev.js +1 -1
- package/dist/production/index.js +1 -1
- package/dist/production/server.js +1 -1
- package/dist/server.js +1 -1
- package/package.json +3 -3
- package/src/components/conversation/IterationCard.tsx +11 -5
- package/src/components/hooks/CompactionPanel.tsx +223 -0
- package/src/components/hooks/HookDashboard.tsx +3 -2
- package/src/components/hooks/HookDetails.tsx +22 -3
- package/src/components/hooks/index.ts +1 -0
- package/src/store/ai-context.tsx +113 -7
- package/src/store/compaction-registry.ts +121 -0
- package/src/styles/use-styles.ts +1 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createComponent, ssr, ssrAttribute, escape, ssrStyleProperty, ssrElement, mergeProps, Portal } from 'solid-js/web';
|
|
1
|
+
import { createComponent, ssr, ssrAttribute, escape, ssrStyleProperty, ssrElement, mergeProps, Portal, ssrStyle } from 'solid-js/web';
|
|
2
2
|
import { createContext, createSignal, onMount, onCleanup, createEffect, createMemo, Show, For, useContext, batch, Index, Switch, Match } from 'solid-js';
|
|
3
3
|
import { ThemeContextProvider, MainPanel, Header, HeaderLogo, useTheme, JsonTree } from '@tanstack/devtools-ui';
|
|
4
4
|
import { emitAIDevtoolsEvent, createAIDevtoolsEventEnvelope, aiEventClient } from '@tanstack/ai-event-client';
|
|
@@ -3951,6 +3951,7 @@ var stylesFactory = (theme) => {
|
|
|
3951
3951
|
grid-template-columns: repeat(2, minmax(320px, 1fr));
|
|
3952
3952
|
gap: ${size[3]};
|
|
3953
3953
|
align-items: start;
|
|
3954
|
+
padding-left: ${size[3]};
|
|
3954
3955
|
padding-right: ${size[3]};
|
|
3955
3956
|
@media (max-width: 760px) {
|
|
3956
3957
|
grid-template-columns: 1fr;
|
|
@@ -4344,12 +4345,6 @@ function applyHookEvent(state, eventName, event) {
|
|
|
4344
4345
|
markHookViewed(state, state.activeHookId);
|
|
4345
4346
|
}
|
|
4346
4347
|
}
|
|
4347
|
-
function setActiveHook(state, hookId) {
|
|
4348
|
-
state.activeHookId = hookId;
|
|
4349
|
-
if (hookId) {
|
|
4350
|
-
markHookViewed(state, hookId);
|
|
4351
|
-
}
|
|
4352
|
-
}
|
|
4353
4348
|
function clearHookRegistry(state) {
|
|
4354
4349
|
state.hooks = {};
|
|
4355
4350
|
state.runs = {};
|
|
@@ -4480,8 +4475,8 @@ function removeHookRecord(state, hookId) {
|
|
|
4480
4475
|
delete state.runs[runId];
|
|
4481
4476
|
}
|
|
4482
4477
|
}
|
|
4483
|
-
for (const
|
|
4484
|
-
delete state.events[
|
|
4478
|
+
for (const eventId3 of hookEventIds) {
|
|
4479
|
+
delete state.events[eventId3];
|
|
4485
4480
|
}
|
|
4486
4481
|
delete state.hooks[hookId];
|
|
4487
4482
|
delete state.seenHookActivityCounts[hookId];
|
|
@@ -4489,7 +4484,7 @@ function removeHookRecord(state, hookId) {
|
|
|
4489
4484
|
state.activeHookId = null;
|
|
4490
4485
|
}
|
|
4491
4486
|
}
|
|
4492
|
-
function upsertRun(state, event,
|
|
4487
|
+
function upsertRun(state, event, eventId3) {
|
|
4493
4488
|
const existing = state.runs[event.runId];
|
|
4494
4489
|
if (!existing) {
|
|
4495
4490
|
state.runs[event.runId] = {
|
|
@@ -4503,7 +4498,7 @@ function upsertRun(state, event, eventId2) {
|
|
|
4503
4498
|
updatedAt: event.timestamp,
|
|
4504
4499
|
...isTerminalRunStatus(event.status) ? { completedAt: event.timestamp } : {},
|
|
4505
4500
|
...event.error ? { error: event.error } : {},
|
|
4506
|
-
eventIds: [
|
|
4501
|
+
eventIds: [eventId3]
|
|
4507
4502
|
};
|
|
4508
4503
|
return;
|
|
4509
4504
|
}
|
|
@@ -4519,8 +4514,8 @@ function upsertRun(state, event, eventId2) {
|
|
|
4519
4514
|
if (event.error) {
|
|
4520
4515
|
existing.error = event.error;
|
|
4521
4516
|
}
|
|
4522
|
-
if (!existing.eventIds.includes(
|
|
4523
|
-
existing.eventIds.push(
|
|
4517
|
+
if (!existing.eventIds.includes(eventId3)) {
|
|
4518
|
+
existing.eventIds.push(eventId3);
|
|
4524
4519
|
}
|
|
4525
4520
|
}
|
|
4526
4521
|
function attachRunToHook(state, hookId, runId) {
|
|
@@ -4528,7 +4523,7 @@ function attachRunToHook(state, hookId, runId) {
|
|
|
4528
4523
|
if (!hook || hook.runIds.includes(runId)) return;
|
|
4529
4524
|
hook.runIds.push(runId);
|
|
4530
4525
|
}
|
|
4531
|
-
function syncRunsFromSnapshot(state, snapshot,
|
|
4526
|
+
function syncRunsFromSnapshot(state, snapshot, eventId3) {
|
|
4532
4527
|
const rawRuns = snapshot.state.runs;
|
|
4533
4528
|
if (!Array.isArray(rawRuns)) return;
|
|
4534
4529
|
for (const candidate of rawRuns) {
|
|
@@ -4551,7 +4546,7 @@ function syncRunsFromSnapshot(state, snapshot, eventId2) {
|
|
|
4551
4546
|
updatedAt,
|
|
4552
4547
|
...typeof run.completedAt === "number" ? { completedAt: run.completedAt } : isTerminalRunStatus(status) ? { completedAt: updatedAt } : {},
|
|
4553
4548
|
...typeof run.error === "string" ? { error: run.error } : {},
|
|
4554
|
-
eventIds: [
|
|
4549
|
+
eventIds: [eventId3]
|
|
4555
4550
|
};
|
|
4556
4551
|
} else {
|
|
4557
4552
|
existing.hookId = snapshot.hookId;
|
|
@@ -4563,8 +4558,8 @@ function syncRunsFromSnapshot(state, snapshot, eventId2) {
|
|
|
4563
4558
|
existing.completedAt = updatedAt;
|
|
4564
4559
|
}
|
|
4565
4560
|
if (typeof run.error === "string") existing.error = run.error;
|
|
4566
|
-
if (!existing.eventIds.includes(
|
|
4567
|
-
existing.eventIds.push(
|
|
4561
|
+
if (!existing.eventIds.includes(eventId3)) {
|
|
4562
|
+
existing.eventIds.push(eventId3);
|
|
4568
4563
|
}
|
|
4569
4564
|
}
|
|
4570
4565
|
attachRunToHook(state, snapshot.hookId, run.id);
|
|
@@ -4594,11 +4589,11 @@ function attachActivityRunToHook(state, hookId, runId) {
|
|
|
4594
4589
|
if (!hook || hook.activityRunIds.includes(runId)) return;
|
|
4595
4590
|
hook.activityRunIds.push(runId);
|
|
4596
4591
|
}
|
|
4597
|
-
function attachEventToHook(state, hookId,
|
|
4592
|
+
function attachEventToHook(state, hookId, eventId3) {
|
|
4598
4593
|
if (!hookId) return;
|
|
4599
4594
|
const hook = state.hooks[hookId];
|
|
4600
|
-
if (!hook || hook.eventIds.includes(
|
|
4601
|
-
hook.eventIds.push(
|
|
4595
|
+
if (!hook || hook.eventIds.includes(eventId3)) return;
|
|
4596
|
+
hook.eventIds.push(eventId3);
|
|
4602
4597
|
}
|
|
4603
4598
|
function inferLifecycleFromSnapshot(state) {
|
|
4604
4599
|
if (state.status === "error" || state.error) {
|
|
@@ -4741,6 +4736,62 @@ function clearMemoryRegistry(state) {
|
|
|
4741
4736
|
state.scopes = {};
|
|
4742
4737
|
}
|
|
4743
4738
|
|
|
4739
|
+
// src/store/compaction-registry.ts
|
|
4740
|
+
var MAX_EVENTS = 50;
|
|
4741
|
+
function createCompactionRegistryState() {
|
|
4742
|
+
return { events: [] };
|
|
4743
|
+
}
|
|
4744
|
+
function eventId2(kind, event) {
|
|
4745
|
+
return [
|
|
4746
|
+
"cmp",
|
|
4747
|
+
kind,
|
|
4748
|
+
String(event.timestamp),
|
|
4749
|
+
event.hookId ?? event.clientId ?? event.threadId ?? "unknown",
|
|
4750
|
+
String(event.before ?? event.after ?? "")
|
|
4751
|
+
].join("-");
|
|
4752
|
+
}
|
|
4753
|
+
function applyCompactionEvent(state, kind, event) {
|
|
4754
|
+
state.events.push({
|
|
4755
|
+
id: event.eventId ?? eventId2(kind, event),
|
|
4756
|
+
kind,
|
|
4757
|
+
timestamp: event.timestamp,
|
|
4758
|
+
hookId: event.hookId,
|
|
4759
|
+
clientId: event.clientId,
|
|
4760
|
+
threadId: event.threadId,
|
|
4761
|
+
runId: event.runId,
|
|
4762
|
+
before: event.before,
|
|
4763
|
+
after: event.after,
|
|
4764
|
+
messagesBefore: event.messagesBefore,
|
|
4765
|
+
messagesAfter: event.messagesAfter,
|
|
4766
|
+
reusedCheckpoint: event.reusedCheckpoint,
|
|
4767
|
+
maxTokens: event.maxTokens,
|
|
4768
|
+
strategyKey: event.strategyKey,
|
|
4769
|
+
durationMs: event.durationMs,
|
|
4770
|
+
dropped: event.dropped,
|
|
4771
|
+
result: event.result
|
|
4772
|
+
});
|
|
4773
|
+
if (state.events.length > MAX_EVENTS) {
|
|
4774
|
+
state.events.splice(0, state.events.length - MAX_EVENTS);
|
|
4775
|
+
}
|
|
4776
|
+
}
|
|
4777
|
+
function clearCompactionRegistry(state) {
|
|
4778
|
+
state.events = [];
|
|
4779
|
+
}
|
|
4780
|
+
function compactionEventsForHook(state, hook) {
|
|
4781
|
+
const matched = state.events.filter((event) => {
|
|
4782
|
+
if (event.hookId && event.hookId === hook.id) return true;
|
|
4783
|
+
if (event.clientId && hook.clientId && event.clientId === hook.clientId) {
|
|
4784
|
+
return true;
|
|
4785
|
+
}
|
|
4786
|
+
if (event.threadId && hook.threadId && event.threadId === hook.threadId) {
|
|
4787
|
+
return true;
|
|
4788
|
+
}
|
|
4789
|
+
return false;
|
|
4790
|
+
});
|
|
4791
|
+
if (matched.length > 0) return matched;
|
|
4792
|
+
return state.events;
|
|
4793
|
+
}
|
|
4794
|
+
|
|
4744
4795
|
// src/store/skills-registry.ts
|
|
4745
4796
|
function createSkillsRegistryState() {
|
|
4746
4797
|
return { snapshots: {} };
|
|
@@ -4774,6 +4825,7 @@ var AIProvider = (props) => {
|
|
|
4774
4825
|
activeConversationId: null,
|
|
4775
4826
|
hooks: createHookRegistryState(),
|
|
4776
4827
|
memory: createMemoryRegistryState(),
|
|
4828
|
+
compaction: createCompactionRegistryState(),
|
|
4777
4829
|
skills: createSkillsRegistryState()
|
|
4778
4830
|
});
|
|
4779
4831
|
const streamToConversation = /* @__PURE__ */ new Map();
|
|
@@ -5031,15 +5083,23 @@ var AIProvider = (props) => {
|
|
|
5031
5083
|
clearMemoryRegistry(memory);
|
|
5032
5084
|
}));
|
|
5033
5085
|
}
|
|
5086
|
+
function clearCompaction() {
|
|
5087
|
+
setState("compaction", produce((compaction) => {
|
|
5088
|
+
clearCompactionRegistry(compaction);
|
|
5089
|
+
}));
|
|
5090
|
+
}
|
|
5034
5091
|
function clearSkills() {
|
|
5035
5092
|
setState("skills", produce((skills) => {
|
|
5036
5093
|
clearSkillsRegistry(skills);
|
|
5037
5094
|
}));
|
|
5038
5095
|
}
|
|
5039
5096
|
function selectHook(id) {
|
|
5040
|
-
setState("hooks",
|
|
5041
|
-
|
|
5042
|
-
|
|
5097
|
+
setState("hooks", "activeHookId", id);
|
|
5098
|
+
if (id) {
|
|
5099
|
+
setState("hooks", produce((hooks) => {
|
|
5100
|
+
markHookViewed(hooks, id);
|
|
5101
|
+
}));
|
|
5102
|
+
}
|
|
5043
5103
|
}
|
|
5044
5104
|
function saveToolFixture(fixture) {
|
|
5045
5105
|
const fixtures = mergeFixtures(fixture, state.hooks.fixtures);
|
|
@@ -6547,6 +6607,48 @@ var AIProvider = (props) => {
|
|
|
6547
6607
|
arr.push(mwEvent);
|
|
6548
6608
|
}));
|
|
6549
6609
|
}));
|
|
6610
|
+
const recordCompactionLifecycle = (kind, hookName, payload) => {
|
|
6611
|
+
setState("compaction", produce((compaction) => {
|
|
6612
|
+
applyCompactionEvent(compaction, kind, payload);
|
|
6613
|
+
}));
|
|
6614
|
+
const {
|
|
6615
|
+
requestId,
|
|
6616
|
+
streamId,
|
|
6617
|
+
clientId
|
|
6618
|
+
} = payload;
|
|
6619
|
+
const conversationId = (clientId && state.conversations[clientId] ? clientId : void 0) || (streamId ? streamToConversation.get(streamId) : void 0) || (requestId ? requestToConversation.get(requestId) : void 0);
|
|
6620
|
+
if (!conversationId || !state.conversations[conversationId]) return;
|
|
6621
|
+
const conv = state.conversations[conversationId];
|
|
6622
|
+
const iterIndex = findLatestIterationIndex(conv, requestId);
|
|
6623
|
+
if (iterIndex < 0) return;
|
|
6624
|
+
const mwEvent = {
|
|
6625
|
+
id: `mw-cmp-${kind}-${Date.now()}-${Math.random()}`,
|
|
6626
|
+
middlewareName: "compaction",
|
|
6627
|
+
hookName,
|
|
6628
|
+
timestamp: payload.timestamp,
|
|
6629
|
+
hasTransform: kind === "state",
|
|
6630
|
+
configChanges: {
|
|
6631
|
+
before: payload.before,
|
|
6632
|
+
after: payload.after,
|
|
6633
|
+
messagesBefore: payload.messagesBefore,
|
|
6634
|
+
messagesAfter: payload.messagesAfter,
|
|
6635
|
+
reusedCheckpoint: payload.reusedCheckpoint,
|
|
6636
|
+
maxTokens: payload.maxTokens,
|
|
6637
|
+
strategyKey: payload.strategyKey,
|
|
6638
|
+
durationMs: payload.durationMs
|
|
6639
|
+
}
|
|
6640
|
+
};
|
|
6641
|
+
setState("conversations", conversationId, "iterations", iterIndex, "middlewareEvents", produce((arr) => {
|
|
6642
|
+
arr.push(mwEvent);
|
|
6643
|
+
}));
|
|
6644
|
+
};
|
|
6645
|
+
cleanupFns.push(aiEventClient.on("compaction:started", (e) => {
|
|
6646
|
+
recordCompactionLifecycle("started", "onCompactStart", e.payload);
|
|
6647
|
+
}), aiEventClient.on("compaction:state", (e) => {
|
|
6648
|
+
recordCompactionLifecycle("state", "onCompact", e.payload);
|
|
6649
|
+
}), aiEventClient.on("compaction:ended", (e) => {
|
|
6650
|
+
recordCompactionLifecycle("ended", "onCompactEnd", e.payload);
|
|
6651
|
+
}));
|
|
6550
6652
|
cleanupFns.push(aiEventClient.on("summarize:request:started", (e) => {
|
|
6551
6653
|
const {
|
|
6552
6654
|
requestId,
|
|
@@ -6940,6 +7042,7 @@ var AIProvider = (props) => {
|
|
|
6940
7042
|
selectConversation,
|
|
6941
7043
|
clearHooks,
|
|
6942
7044
|
clearMemory,
|
|
7045
|
+
clearCompaction,
|
|
6943
7046
|
clearSkills,
|
|
6944
7047
|
selectHook,
|
|
6945
7048
|
saveToolFixture,
|
|
@@ -7209,7 +7312,7 @@ var formatDuration = (ms) => {
|
|
|
7209
7312
|
};
|
|
7210
7313
|
var _tmpl$10 = ["<span", ">", "ms</span>"];
|
|
7211
7314
|
var _tmpl$22 = ["<span", ">", "</span>"];
|
|
7212
|
-
var _tmpl$32 = ["<div", '><span class="', '">Middleware</span><span class="', '">', "</span><span", ">", "</span>", "", "", "</div>"];
|
|
7315
|
+
var _tmpl$32 = ["<div", ' style="', '"><span class="', '">Middleware</span><span class="', '">', "</span><span", ">", "</span>", "", "", "</div>"];
|
|
7213
7316
|
var _tmpl$42 = ["<div", ">", "</div>"];
|
|
7214
7317
|
var _tmpl$52 = ['<span class="', '">Thinking</span>'];
|
|
7215
7318
|
var _tmpl$62 = ['<span class="', '">Structured</span>'];
|
|
@@ -7337,6 +7440,9 @@ var MiddlewareStep = (props) => {
|
|
|
7337
7440
|
if (ev().wasDropped) return "DROP";
|
|
7338
7441
|
if (ev().hookName === "onChunk" && ev().hasTransform) return "TRANSFORM";
|
|
7339
7442
|
if (ev().hookName === "onConfig" && ev().hasTransform) return "TRANSFORM";
|
|
7443
|
+
if (ev().hookName === "onCompactStart") return "START";
|
|
7444
|
+
if (ev().hookName === "onCompact") return "COMPACT";
|
|
7445
|
+
if (ev().hookName === "onCompactEnd") return "END";
|
|
7340
7446
|
if (ev().hookName === "onBeforeToolCall" && ev().hasTransform) return "DECISION";
|
|
7341
7447
|
return null;
|
|
7342
7448
|
};
|
|
@@ -7344,7 +7450,9 @@ var MiddlewareStep = (props) => {
|
|
|
7344
7450
|
const changes = ev().configChanges;
|
|
7345
7451
|
return changes && Object.keys(changes).length > 0;
|
|
7346
7452
|
};
|
|
7347
|
-
return [ssr(_tmpl$32, ssrAttribute("class", escape(s().step, true), false),
|
|
7453
|
+
return [ssr(_tmpl$32, ssrAttribute("class", escape(s().step, true), false), ssrStyle(hasChanges() ? {
|
|
7454
|
+
cursor: "pointer"
|
|
7455
|
+
} : void 0), `${escape(s().stepPrefix, true)} ${escape(s().stepPrefixMiddleware, true)}`, `${escape(s().mwBadge, true)} ${escape(badgeClass(), true)}`, escape(ev().middlewareName), ssrAttribute("class", escape(s().mwHook, true), false), escape(ev().hookName), escape(createComponent(Show, {
|
|
7348
7456
|
get when() {
|
|
7349
7457
|
return ev().duration !== void 0;
|
|
7350
7458
|
},
|
|
@@ -9418,13 +9526,191 @@ var MemoryPanel = () => {
|
|
|
9418
9526
|
})))]
|
|
9419
9527
|
})));
|
|
9420
9528
|
};
|
|
9421
|
-
var _tmpl$41 = ["<
|
|
9422
|
-
var _tmpl$214 = ["<div", "
|
|
9423
|
-
var _tmpl$312 = ["<div",
|
|
9424
|
-
var _tmpl$47 = ["<
|
|
9425
|
-
var _tmpl$57 = ["<
|
|
9426
|
-
var _tmpl$67 = ["<span", ">
|
|
9427
|
-
var _tmpl$77 = ["<
|
|
9529
|
+
var _tmpl$41 = ["<div", "><div", ">", "", "</div><div", ">", "</div></div>"];
|
|
9530
|
+
var _tmpl$214 = ["<div", ">", "</div>"];
|
|
9531
|
+
var _tmpl$312 = ["<div", "><div", ">", " (", ")</div>", "</div>"];
|
|
9532
|
+
var _tmpl$47 = ["<span", ">", " \u2192 ", " tok</span>"];
|
|
9533
|
+
var _tmpl$57 = ["<span", ">", "ms</span>"];
|
|
9534
|
+
var _tmpl$67 = ["<span", ">checkpoint</span>"];
|
|
9535
|
+
var _tmpl$77 = ["<div", ' data-testid="ai-devtools-compaction-event"', ' style="', '"><span class="', '">', '</span><span class="', '">', "</span><span", ">", "</span>", "", "", "<span", ">", '</span><span class="', '">\u25B6</span></div>'];
|
|
9536
|
+
var _tmpl$87 = ["<div", ">", "", "</div>"];
|
|
9537
|
+
var _tmpl$97 = ["<div", "><span", ">", " event", '</span><button type="button"', ">Clear</button></div>"];
|
|
9538
|
+
var _tmpl$06 = ["<div", ' data-testid="ai-devtools-compaction-panel">', "</div>"];
|
|
9539
|
+
var _tmpl$116 = ["<div", ">No compaction yet. When the transcript passes maxTokens, each compact appears here.</div>"];
|
|
9540
|
+
function formatTime3(value) {
|
|
9541
|
+
const date = new Date(value);
|
|
9542
|
+
if (Number.isNaN(date.getTime())) return "";
|
|
9543
|
+
return date.toLocaleTimeString();
|
|
9544
|
+
}
|
|
9545
|
+
function shortStrategy(event) {
|
|
9546
|
+
const key = event.strategyKey;
|
|
9547
|
+
if (!key) return event.reusedCheckpoint ? "checkpoint" : "compaction";
|
|
9548
|
+
const cut = key.indexOf(":maxTokens=");
|
|
9549
|
+
return cut === -1 ? key : key.slice(0, cut);
|
|
9550
|
+
}
|
|
9551
|
+
var PreviewMessage = (props) => {
|
|
9552
|
+
const styles = useStyles();
|
|
9553
|
+
return ssr(_tmpl$41, ssrAttribute("class", escape(styles().hookDetails.message, true), false), ssrAttribute("class", escape(styles().hookDetails.messageRole, true), false), escape(props.preview.role), escape(createComponent(Show, {
|
|
9554
|
+
get when() {
|
|
9555
|
+
return props.preview.tokens > 0;
|
|
9556
|
+
},
|
|
9557
|
+
get children() {
|
|
9558
|
+
return ` \xB7 ${props.preview.tokens} tok`;
|
|
9559
|
+
}
|
|
9560
|
+
})), ssrAttribute("class", escape(styles().hookDetails.messageContent, true), false), escape(props.preview.text));
|
|
9561
|
+
};
|
|
9562
|
+
var PreviewColumn = (props) => {
|
|
9563
|
+
const styles = useStyles();
|
|
9564
|
+
const s = () => styles().iterationTimeline;
|
|
9565
|
+
return ssr(_tmpl$312, ssrAttribute("class", escape(s().stepJsonItem, true), false), ssrAttribute("class", escape(s().stepJsonItemLabel, true), false), escape(props.title), escape(props.previews.length), escape(createComponent(Show, {
|
|
9566
|
+
get when() {
|
|
9567
|
+
return props.previews.length > 0;
|
|
9568
|
+
},
|
|
9569
|
+
get fallback() {
|
|
9570
|
+
return ssr(_tmpl$214, ssrAttribute("class", escape(styles().hookDetails.emptySmall, true), false), escape(props.empty));
|
|
9571
|
+
},
|
|
9572
|
+
get children() {
|
|
9573
|
+
return ssr(_tmpl$214, ssrAttribute("class", escape(styles().memoryPanel.list, true), false), escape(createComponent(For, {
|
|
9574
|
+
get each() {
|
|
9575
|
+
return props.previews;
|
|
9576
|
+
},
|
|
9577
|
+
children: (preview) => createComponent(PreviewMessage, {
|
|
9578
|
+
preview
|
|
9579
|
+
})
|
|
9580
|
+
})));
|
|
9581
|
+
}
|
|
9582
|
+
})));
|
|
9583
|
+
};
|
|
9584
|
+
function kindLabel(kind) {
|
|
9585
|
+
if (kind === "started") return "Started";
|
|
9586
|
+
if (kind === "ended") return "Ended";
|
|
9587
|
+
return "State";
|
|
9588
|
+
}
|
|
9589
|
+
var CompactEvent = (props) => {
|
|
9590
|
+
const styles = useStyles();
|
|
9591
|
+
const s = () => styles().iterationTimeline;
|
|
9592
|
+
const [expanded, setExpanded] = createSignal(props.defaultOpen === true);
|
|
9593
|
+
const event = () => props.event;
|
|
9594
|
+
const isState = () => event().kind === "state";
|
|
9595
|
+
const stats = () => ({
|
|
9596
|
+
kind: event().kind,
|
|
9597
|
+
before: event().before,
|
|
9598
|
+
after: event().after,
|
|
9599
|
+
messagesBefore: event().messagesBefore,
|
|
9600
|
+
messagesAfter: event().messagesAfter,
|
|
9601
|
+
maxTokens: event().maxTokens,
|
|
9602
|
+
strategyKey: event().strategyKey,
|
|
9603
|
+
reusedCheckpoint: event().reusedCheckpoint,
|
|
9604
|
+
durationMs: event().durationMs
|
|
9605
|
+
});
|
|
9606
|
+
const countLabel = () => {
|
|
9607
|
+
if (event().kind === "started") {
|
|
9608
|
+
return `${event().messagesBefore ?? 0} msgs \xB7 ${event().before ?? 0} tok`;
|
|
9609
|
+
}
|
|
9610
|
+
if (event().kind === "ended") {
|
|
9611
|
+
return `${event().messagesAfter ?? 0} msgs \xB7 ${event().after ?? 0} tok`;
|
|
9612
|
+
}
|
|
9613
|
+
return `${event().messagesBefore ?? 0} \u2192 ${event().messagesAfter ?? 0} msgs`;
|
|
9614
|
+
};
|
|
9615
|
+
return [ssr(_tmpl$77, ssrAttribute("class", escape(s().step, true), false), ssrAttribute("data-kind", escape(event().kind, true), false), ssrStyleProperty("cursor:", "pointer"), `${escape(s().stepPrefix, true)} ${escape(s().stepPrefixMiddleware, true)}`, escape(kindLabel(event().kind)), `${escape(s().mwBadge, true)} ${escape(s().mwBadgeTransform, true)}`, escape(shortStrategy(event())), ssrAttribute("class", escape(s().mwHook, true), false), escape(countLabel()), escape(createComponent(Show, {
|
|
9616
|
+
get when() {
|
|
9617
|
+
return event().kind === "state";
|
|
9618
|
+
},
|
|
9619
|
+
get children() {
|
|
9620
|
+
return ssr(_tmpl$47, ssrAttribute("class", escape(s().stepDuration, true), false), escape(event().before), escape(event().after));
|
|
9621
|
+
}
|
|
9622
|
+
})), escape(createComponent(Show, {
|
|
9623
|
+
get when() {
|
|
9624
|
+
return event().durationMs !== void 0;
|
|
9625
|
+
},
|
|
9626
|
+
get children() {
|
|
9627
|
+
return ssr(_tmpl$57, ssrAttribute("class", escape(s().stepDuration, true), false), escape(event().durationMs));
|
|
9628
|
+
}
|
|
9629
|
+
})), escape(createComponent(Show, {
|
|
9630
|
+
get when() {
|
|
9631
|
+
return event().reusedCheckpoint;
|
|
9632
|
+
},
|
|
9633
|
+
get children() {
|
|
9634
|
+
return ssr(_tmpl$67, ssrAttribute("class", escape(s().mwSuffix, true), false));
|
|
9635
|
+
}
|
|
9636
|
+
})), ssrAttribute("class", escape(s().stepDuration, true), false), escape(formatTime3(event().timestamp)), `${escape(s().chevron, true)} ${expanded() ? escape(s().chevronOpen, true) : ""}`), createComponent(Show, {
|
|
9637
|
+
get when() {
|
|
9638
|
+
return expanded();
|
|
9639
|
+
},
|
|
9640
|
+
get children() {
|
|
9641
|
+
return [ssr(_tmpl$214, ssrAttribute("class", escape(s().mwChangesContainer, true), false), escape(createComponent(JsonTree, {
|
|
9642
|
+
get value() {
|
|
9643
|
+
return stats();
|
|
9644
|
+
},
|
|
9645
|
+
defaultExpansionDepth: 1,
|
|
9646
|
+
copyable: true
|
|
9647
|
+
}))), createComponent(Show, {
|
|
9648
|
+
get when() {
|
|
9649
|
+
return isState();
|
|
9650
|
+
},
|
|
9651
|
+
get children() {
|
|
9652
|
+
return ssr(_tmpl$87, ssrAttribute("class", escape(s().stepJsonItemsCompare, true), false), escape(createComponent(PreviewColumn, {
|
|
9653
|
+
title: "Dropped",
|
|
9654
|
+
get previews() {
|
|
9655
|
+
return event().dropped ?? [];
|
|
9656
|
+
},
|
|
9657
|
+
empty: "Nothing was dropped."
|
|
9658
|
+
})), escape(createComponent(PreviewColumn, {
|
|
9659
|
+
title: "Sent to model",
|
|
9660
|
+
get previews() {
|
|
9661
|
+
return event().result ?? [];
|
|
9662
|
+
},
|
|
9663
|
+
empty: "No compacted transcript on this event."
|
|
9664
|
+
})));
|
|
9665
|
+
}
|
|
9666
|
+
})];
|
|
9667
|
+
}
|
|
9668
|
+
})];
|
|
9669
|
+
};
|
|
9670
|
+
var CompactionPanel = (props) => {
|
|
9671
|
+
const {
|
|
9672
|
+
state,
|
|
9673
|
+
clearCompaction
|
|
9674
|
+
} = useAIStore();
|
|
9675
|
+
const styles = useStyles();
|
|
9676
|
+
const s = () => styles().iterationTimeline;
|
|
9677
|
+
const events = createMemo(() => compactionEventsForHook(state.compaction, props.hook));
|
|
9678
|
+
const lastStateIndex = createMemo(() => {
|
|
9679
|
+
const list = events();
|
|
9680
|
+
for (let i = list.length - 1; i >= 0; i--) {
|
|
9681
|
+
if (list[i]?.kind === "state") return i;
|
|
9682
|
+
}
|
|
9683
|
+
return -1;
|
|
9684
|
+
});
|
|
9685
|
+
return ssr(_tmpl$06, ssrAttribute("class", escape(styles().memoryPanel.container, true), false), escape(createComponent(Show, {
|
|
9686
|
+
get when() {
|
|
9687
|
+
return events().length > 0;
|
|
9688
|
+
},
|
|
9689
|
+
get fallback() {
|
|
9690
|
+
return ssr(_tmpl$116, ssrAttribute("class", escape(styles().hookDetails.emptySmall, true), false));
|
|
9691
|
+
},
|
|
9692
|
+
get children() {
|
|
9693
|
+
return [ssr(_tmpl$97, ssrAttribute("class", escape(styles().memoryPanel.toolbar, true), false), ssrAttribute("class", escape(styles().memoryPanel.badge, true), false), escape(events().length), events().length === 1 ? "" : "s", ssrAttribute("class", escape(styles().memoryPanel.clearButton, true), false)), ssr(_tmpl$214, ssrAttribute("class", escape(s().iterCard, true), false), escape(createComponent(For, {
|
|
9694
|
+
get each() {
|
|
9695
|
+
return events();
|
|
9696
|
+
},
|
|
9697
|
+
children: (event, index) => createComponent(CompactEvent, {
|
|
9698
|
+
event,
|
|
9699
|
+
get defaultOpen() {
|
|
9700
|
+
return event.kind === "state" && index() === lastStateIndex();
|
|
9701
|
+
}
|
|
9702
|
+
})
|
|
9703
|
+
})))];
|
|
9704
|
+
}
|
|
9705
|
+
})));
|
|
9706
|
+
};
|
|
9707
|
+
var _tmpl$48 = ["<ul", ">", "</ul>"];
|
|
9708
|
+
var _tmpl$215 = ["<div", "><div", ">Catalog</div>", "</div>"];
|
|
9709
|
+
var _tmpl$313 = ["<div", ' data-testid="ai-devtools-skills-panel">', "</div>"];
|
|
9710
|
+
var _tmpl$49 = ["<div", ">No skills on this run. Add `withSkills(...)` to `chat()` and the catalog will appear here. A skill lights up when the model calls `load_skill`.</div>"];
|
|
9711
|
+
var _tmpl$58 = ["<div", ">Loaded via `load_skill`, but the catalog snapshot has not arrived yet.</div>"];
|
|
9712
|
+
var _tmpl$68 = ["<span", ">loaded</span>"];
|
|
9713
|
+
var _tmpl$78 = ["<li", "><span", ">", "</span>", "<span", ">", "</span></li>"];
|
|
9428
9714
|
function parseSkillName(argumentsJson) {
|
|
9429
9715
|
if (!argumentsJson) return void 0;
|
|
9430
9716
|
try {
|
|
@@ -9481,34 +9767,34 @@ var SkillsPanel = () => {
|
|
|
9481
9767
|
return fromSnap;
|
|
9482
9768
|
});
|
|
9483
9769
|
const catalog = createMemo(() => snapshot()?.catalog ?? []);
|
|
9484
|
-
return ssr(_tmpl$
|
|
9770
|
+
return ssr(_tmpl$313, ssrAttribute("class", escape(styles().memoryPanel.container, true), false), escape(createComponent(Show, {
|
|
9485
9771
|
get when() {
|
|
9486
9772
|
return catalog().length > 0 || loaded().size > 0;
|
|
9487
9773
|
},
|
|
9488
9774
|
get fallback() {
|
|
9489
|
-
return ssr(_tmpl$
|
|
9775
|
+
return ssr(_tmpl$49, ssrAttribute("class", escape(styles().memoryPanel.empty, true), false));
|
|
9490
9776
|
},
|
|
9491
9777
|
get children() {
|
|
9492
|
-
return ssr(_tmpl$
|
|
9778
|
+
return ssr(_tmpl$215, ssrAttribute("class", escape(styles().memoryPanel.section, true), false), ssrAttribute("class", escape(styles().memoryPanel.sectionTitle, true), false), escape(createComponent(Show, {
|
|
9493
9779
|
get when() {
|
|
9494
9780
|
return catalog().length > 0;
|
|
9495
9781
|
},
|
|
9496
9782
|
get fallback() {
|
|
9497
|
-
return ssr(_tmpl$
|
|
9783
|
+
return ssr(_tmpl$58, ssrAttribute("class", escape(styles().memoryPanel.sectionEmpty, true), false));
|
|
9498
9784
|
},
|
|
9499
9785
|
get children() {
|
|
9500
|
-
return ssr(_tmpl$
|
|
9786
|
+
return ssr(_tmpl$48, ssrAttribute("class", escape(styles().memoryPanel.list, true), false), escape(createComponent(For, {
|
|
9501
9787
|
get each() {
|
|
9502
9788
|
return catalog();
|
|
9503
9789
|
},
|
|
9504
9790
|
children: (skill) => {
|
|
9505
9791
|
const isLoaded = () => loaded().has(skill.name);
|
|
9506
|
-
return ssr(_tmpl$
|
|
9792
|
+
return ssr(_tmpl$78, ssrAttribute("class", escape(styles().memoryPanel.row, true), false), ssrAttribute("class", escape(styles().memoryPanel.badge, true), false), escape(skill.name), escape(createComponent(Show, {
|
|
9507
9793
|
get when() {
|
|
9508
9794
|
return isLoaded();
|
|
9509
9795
|
},
|
|
9510
9796
|
get children() {
|
|
9511
|
-
return ssr(_tmpl$
|
|
9797
|
+
return ssr(_tmpl$68, ssrAttribute("class", escape(styles().memoryPanel.badge, true), false));
|
|
9512
9798
|
}
|
|
9513
9799
|
})), ssrAttribute("class", escape(styles().memoryPanel.sectionEmpty, true), false), escape(skill.description));
|
|
9514
9800
|
}
|
|
@@ -9520,19 +9806,19 @@ var SkillsPanel = () => {
|
|
|
9520
9806
|
};
|
|
9521
9807
|
|
|
9522
9808
|
// src/components/hooks/HookDetails.tsx
|
|
9523
|
-
var _tmpl$
|
|
9524
|
-
var _tmpl$
|
|
9525
|
-
var _tmpl$
|
|
9526
|
-
var _tmpl$
|
|
9527
|
-
var _tmpl$
|
|
9528
|
-
var _tmpl$
|
|
9529
|
-
var _tmpl$
|
|
9530
|
-
var _tmpl$
|
|
9531
|
-
var _tmpl$
|
|
9532
|
-
var _tmpl$
|
|
9533
|
-
var _tmpl$
|
|
9809
|
+
var _tmpl$50 = ["<aside", ' data-testid="ai-devtools-preview-pane"><div', ">", "</div>", "</aside>"];
|
|
9810
|
+
var _tmpl$216 = ["<div", ' data-testid="ai-devtools-hook-detail">', "<nav", ' data-testid="ai-devtools-hook-tabs">', "", "", "", '</nav><div class="', '"><main', ' data-testid="ai-devtools-primary-pane">', "", "", "", "", "", "</main>", "</div></div>"];
|
|
9811
|
+
var _tmpl$314 = ["<div", ' data-testid="ai-devtools-dashboard-overview"><header', "><div><div", ">Hooks Dashboard</div><div", ">Select a hook from the left or open one of the active hooks below.</div></div></header><div", ">", "", "", "", "", "", "", "", "</div><div", ">", "</div></div>"];
|
|
9812
|
+
var _tmpl$410 = ["<div", ">Open a page with TanStack AI hooks to inspect live state.</div>"];
|
|
9813
|
+
var _tmpl$59 = ["<section", ' data-testid="ai-devtools-overview-category"', "><div", "><span>", "</span><span>", "</span></div>", "</section>"];
|
|
9814
|
+
var _tmpl$69 = ["<span", ">running</span>"];
|
|
9815
|
+
var _tmpl$79 = ["<span", ">", " new</span>"];
|
|
9816
|
+
var _tmpl$88 = ['<button type="button" data-testid="ai-devtools-overview-hook"', "><div", "><span", ">", "</span><span", ">", "</span></div><div", "><span", ">", "</span>", "", "</div></button>"];
|
|
9817
|
+
var _tmpl$98 = ["<div", "><span", ">", "</span><span", ">", "</span></div>"];
|
|
9818
|
+
var _tmpl$07 = ["<span", ">", "</span>"];
|
|
9819
|
+
var _tmpl$117 = ['<span data-testid="ai-devtools-hook-technical-name">', "</span>"];
|
|
9534
9820
|
var _tmpl$106 = ['<span data-testid="ai-devtools-hook-registry-id">id ', "</span>"];
|
|
9535
|
-
var _tmpl$
|
|
9821
|
+
var _tmpl$118 = ["<span>", "</span>"];
|
|
9536
9822
|
var _tmpl$125 = ["<header", ' data-testid="ai-devtools-hook-header"', "><div", "><div", "><span", ' data-testid="ai-devtools-hook-title">', "</span><span", ">", "</span>", "</div><div", ">", '<span data-testid="ai-devtools-hook-identity">', "</span>", "", "</div></div><div", ">", "", "</div></header>"];
|
|
9537
9823
|
var _tmpl$135 = ['<button type="button" data-testid="ai-devtools-hook-tab"', ' class="', '">', "</button>"];
|
|
9538
9824
|
var _tmpl$144 = ["<div", "><section", "><div", ">Current State</div>", "</section></div>"];
|
|
@@ -9542,7 +9828,7 @@ var _tmpl$174 = ["<div", ">", "</div>"];
|
|
|
9542
9828
|
var _tmpl$183 = ["<div", '><button type="button"', ' data-testid="ai-devtools-preview-save-tool-call">Save</button><button type="button"', ' data-testid="ai-devtools-preview-replay-tool-call">Replay</button></div>'];
|
|
9543
9829
|
var _tmpl$193 = ['<div class="', '">', "</div>"];
|
|
9544
9830
|
var _tmpl$202 = ["<div", "><span", ">", "</span><div", ">", "</div></div>"];
|
|
9545
|
-
var _tmpl$
|
|
9831
|
+
var _tmpl$217 = ["<div", ">No messages yet. Start a conversation to see messages here.</div>"];
|
|
9546
9832
|
var _tmpl$223 = ["<div", ' data-testid="ai-devtools-tools"><div', ">", "</div><div", ">", "</div></div>"];
|
|
9547
9833
|
var _tmpl$232 = ["<div", ">No tools.</div>"];
|
|
9548
9834
|
var _tmpl$242 = ["<span", ">approval</span>"];
|
|
@@ -9582,7 +9868,7 @@ var HookDetails = () => {
|
|
|
9582
9868
|
return Boolean(outputKind && outputKind !== "chat" && outputKind !== "structured");
|
|
9583
9869
|
});
|
|
9584
9870
|
createEffect(() => {
|
|
9585
|
-
if (isGenerationHook() && (activeTab() === "tools" || activeTab() === "memory" || activeTab() === "skills")) {
|
|
9871
|
+
if (isGenerationHook() && (activeTab() === "tools" || activeTab() === "memory" || activeTab() === "compaction" || activeTab() === "skills")) {
|
|
9586
9872
|
setActiveTab("conversation");
|
|
9587
9873
|
}
|
|
9588
9874
|
});
|
|
@@ -9615,13 +9901,14 @@ var HookDetails = () => {
|
|
|
9615
9901
|
return createComponent(HookOverview, {
|
|
9616
9902
|
onSelectHook: (selectedHook) => {
|
|
9617
9903
|
selectHook(selectedHook.id);
|
|
9618
|
-
|
|
9619
|
-
|
|
9904
|
+
const conversationId = selectedHook.id || selectedHook.clientId || selectedHook.threadId;
|
|
9905
|
+
if (conversationId && state.conversations[conversationId]) {
|
|
9906
|
+
selectConversation(conversationId);
|
|
9620
9907
|
}
|
|
9621
9908
|
}
|
|
9622
9909
|
});
|
|
9623
9910
|
},
|
|
9624
|
-
children: (activeHook) => ssr(_tmpl$
|
|
9911
|
+
children: (activeHook) => ssr(_tmpl$216, ssrAttribute("class", escape(styles().hookDetails.container, true), false), escape(createComponent(HookHeader, {
|
|
9625
9912
|
get hook() {
|
|
9626
9913
|
return activeHook();
|
|
9627
9914
|
},
|
|
@@ -9679,6 +9966,13 @@ var HookDetails = () => {
|
|
|
9679
9966
|
return activeTab();
|
|
9680
9967
|
},
|
|
9681
9968
|
onSelect: setActiveTab
|
|
9969
|
+
}), createComponent(TabButton, {
|
|
9970
|
+
label: "Compaction",
|
|
9971
|
+
tab: "compaction",
|
|
9972
|
+
get activeTab() {
|
|
9973
|
+
return activeTab();
|
|
9974
|
+
},
|
|
9975
|
+
onSelect: setActiveTab
|
|
9682
9976
|
}), createComponent(TabButton, {
|
|
9683
9977
|
label: "Skills",
|
|
9684
9978
|
tab: "skills",
|
|
@@ -9755,6 +10049,17 @@ var HookDetails = () => {
|
|
|
9755
10049
|
get children() {
|
|
9756
10050
|
return createComponent(MemoryPanel, {});
|
|
9757
10051
|
}
|
|
10052
|
+
})), escape(createComponent(Show, {
|
|
10053
|
+
get when() {
|
|
10054
|
+
return activeTab() === "compaction";
|
|
10055
|
+
},
|
|
10056
|
+
get children() {
|
|
10057
|
+
return createComponent(CompactionPanel, {
|
|
10058
|
+
get hook() {
|
|
10059
|
+
return activeHook();
|
|
10060
|
+
}
|
|
10061
|
+
});
|
|
10062
|
+
}
|
|
9758
10063
|
})), escape(createComponent(Show, {
|
|
9759
10064
|
get when() {
|
|
9760
10065
|
return activeTab() === "skills";
|
|
@@ -9767,7 +10072,7 @@ var HookDetails = () => {
|
|
|
9767
10072
|
return showSecondaryPane();
|
|
9768
10073
|
},
|
|
9769
10074
|
get children() {
|
|
9770
|
-
return ssr(_tmpl$
|
|
10075
|
+
return ssr(_tmpl$50, ssrAttribute("class", escape(styles().hookDetails.previewPane, true), false), ssrAttribute("class", escape(styles().hookDetails.previewHeader, true), false), isGenerationHook() ? "Generated Output" : "User View", escape(createComponent(Show, {
|
|
9771
10076
|
get when() {
|
|
9772
10077
|
return isGenerationHook();
|
|
9773
10078
|
},
|
|
@@ -9815,10 +10120,10 @@ var HookOverview = (props) => {
|
|
|
9815
10120
|
return hooks().length > 0;
|
|
9816
10121
|
},
|
|
9817
10122
|
get fallback() {
|
|
9818
|
-
return ssr(_tmpl$
|
|
10123
|
+
return ssr(_tmpl$410, ssrAttribute("class", escape(styles().hookDetails.empty, true), false));
|
|
9819
10124
|
},
|
|
9820
10125
|
get children() {
|
|
9821
|
-
return ssr(_tmpl$
|
|
10126
|
+
return ssr(_tmpl$314, ssrAttribute("class", escape(styles().hookDetails.overview, true), false), ssrAttribute("class", escape(styles().hookDetails.overviewHeader, true), false), ssrAttribute("class", escape(styles().hookDetails.overviewTitle, true), false), ssrAttribute("class", escape(styles().hookDetails.overviewSubtitle, true), false), ssrAttribute("class", escape(styles().hookDetails.overviewMetricGrid, true), false), escape(createComponent(OverviewMetric, {
|
|
9822
10127
|
label: "active hooks",
|
|
9823
10128
|
get value() {
|
|
9824
10129
|
return summary().active;
|
|
@@ -9862,26 +10167,26 @@ var HookOverview = (props) => {
|
|
|
9862
10167
|
get each() {
|
|
9863
10168
|
return groups();
|
|
9864
10169
|
},
|
|
9865
|
-
children: (group) => ssr(_tmpl$
|
|
10170
|
+
children: (group) => ssr(_tmpl$59, ssrAttribute("class", escape(styles().hookDetails.overviewGroupCard, true), false), ssrAttribute("data-category", escape(group.id, true), false), ssrAttribute("class", escape(styles().hookDetails.overviewGroupHeader, true), false), escape(group.label), escape(group.hooks.length), escape(createComponent(For, {
|
|
9866
10171
|
get each() {
|
|
9867
10172
|
return group.hooks;
|
|
9868
10173
|
},
|
|
9869
10174
|
children: (hook) => {
|
|
9870
10175
|
const running = createMemo(() => isHookRunning(hook, state.hooks.runs));
|
|
9871
10176
|
const unseenCount = createMemo(() => getHookUnseenEventCount(state.hooks, hook.id));
|
|
9872
|
-
return ssr(_tmpl$
|
|
10177
|
+
return ssr(_tmpl$88, ssrAttribute("data-hook-id", escape(hook.id, true), false) + ssrAttribute("data-hook-name", escape(hook.hookName, true), false) + ssrAttribute("data-display-name", escape(getHookDisplayName(hook), true), false) + ssrAttribute("class", escape(styles().hookDetails.overviewHookButton, true), false), ssrAttribute("class", escape(styles().hookDetails.overviewHookMain, true), false), ssrAttribute("class", escape(styles().hookDetails.overviewHookTitle, true), false), escape(getHookDisplayName(hook)), ssrAttribute("class", escape(styles().hookDetails.overviewHookId, true), false), escape(getHookIdentitySubtitle(hook)), ssrAttribute("class", escape(styles().hookDetails.overviewHookMeta, true), false), ssrAttribute("class", escape(styles().hookDetails.kind, true), false), escape(hook.outputKind) ?? "hook", escape(createComponent(Show, {
|
|
9873
10178
|
get when() {
|
|
9874
10179
|
return running();
|
|
9875
10180
|
},
|
|
9876
10181
|
get children() {
|
|
9877
|
-
return ssr(_tmpl$
|
|
10182
|
+
return ssr(_tmpl$69, ssrAttribute("class", escape(styles().hookDetails.lifecycle, true), false));
|
|
9878
10183
|
}
|
|
9879
10184
|
})), escape(createComponent(Show, {
|
|
9880
10185
|
get when() {
|
|
9881
10186
|
return unseenCount() > 0;
|
|
9882
10187
|
},
|
|
9883
10188
|
get children() {
|
|
9884
|
-
return ssr(_tmpl$
|
|
10189
|
+
return ssr(_tmpl$79, ssrAttribute("class", escape(styles().hookDetails.kind, true), false), escape(unseenCount()));
|
|
9885
10190
|
}
|
|
9886
10191
|
})));
|
|
9887
10192
|
}
|
|
@@ -9892,7 +10197,7 @@ var HookOverview = (props) => {
|
|
|
9892
10197
|
};
|
|
9893
10198
|
var OverviewMetric = (props) => {
|
|
9894
10199
|
const styles = useStyles();
|
|
9895
|
-
return ssr(_tmpl$
|
|
10200
|
+
return ssr(_tmpl$98, ssrAttribute("class", escape(styles().hookDetails.overviewMetricCard, true), false), ssrAttribute("class", escape(styles().hookDetails.metricValue, true), false), escape(props.value), ssrAttribute("class", escape(styles().hookDetails.metricLabel, true), false), escape(props.label));
|
|
9896
10201
|
};
|
|
9897
10202
|
var HookHeader = (props) => {
|
|
9898
10203
|
const styles = useStyles();
|
|
@@ -9901,14 +10206,14 @@ var HookHeader = (props) => {
|
|
|
9901
10206
|
return props.hook.outputKind;
|
|
9902
10207
|
},
|
|
9903
10208
|
get children() {
|
|
9904
|
-
return ssr(_tmpl$
|
|
10209
|
+
return ssr(_tmpl$07, ssrAttribute("class", escape(styles().hookDetails.kind, true), false), escape(props.hook.outputKind));
|
|
9905
10210
|
}
|
|
9906
10211
|
})), ssrAttribute("class", escape(styles().hookDetails.identity, true), false), escape(createComponent(Show, {
|
|
9907
10212
|
get when() {
|
|
9908
10213
|
return props.hook.displayName;
|
|
9909
10214
|
},
|
|
9910
10215
|
get children() {
|
|
9911
|
-
return ssr(_tmpl$
|
|
10216
|
+
return ssr(_tmpl$117, escape(props.hook.hookName));
|
|
9912
10217
|
}
|
|
9913
10218
|
})), props.hook.threadId ? `thread ${escape(props.hook.threadId)}` : escape(getHookIdentityLabel(props.hook)), escape(createComponent(Show, {
|
|
9914
10219
|
get when() {
|
|
@@ -9922,7 +10227,7 @@ var HookHeader = (props) => {
|
|
|
9922
10227
|
return props.hook.framework;
|
|
9923
10228
|
},
|
|
9924
10229
|
get children() {
|
|
9925
|
-
return ssr(_tmpl$
|
|
10230
|
+
return ssr(_tmpl$118, escape(props.hook.framework));
|
|
9926
10231
|
}
|
|
9927
10232
|
})), ssrAttribute("class", escape(styles().hookDetails.metrics, true), false), escape(createComponent(Metric, {
|
|
9928
10233
|
label: "runs",
|
|
@@ -9959,7 +10264,7 @@ var HookHeader = (props) => {
|
|
|
9959
10264
|
};
|
|
9960
10265
|
var Metric = (props) => {
|
|
9961
10266
|
const styles = useStyles();
|
|
9962
|
-
return ssr(_tmpl$
|
|
10267
|
+
return ssr(_tmpl$98, ssrAttribute("class", escape(styles().hookDetails.metric, true), false) + ssrAttribute("data-testid", props.testId ? `ai-devtools-hook-metric-${escape(props.testId, true)}` : escape(void 0, true), false), ssrAttribute("class", escape(styles().hookDetails.metricValue, true), false), escape(props.value), ssrAttribute("class", escape(styles().hookDetails.metricLabel, true), false), escape(props.label));
|
|
9963
10268
|
};
|
|
9964
10269
|
function formatMetricValue(value) {
|
|
9965
10270
|
return Intl.NumberFormat(void 0, {
|
|
@@ -10129,7 +10434,7 @@ var MessagesPreview = (props) => {
|
|
|
10129
10434
|
get ["data-part-kind"]() {
|
|
10130
10435
|
return part.kind;
|
|
10131
10436
|
}
|
|
10132
|
-
}), [ssr(_tmpl$
|
|
10437
|
+
}), [ssr(_tmpl$07, ssrAttribute("class", escape(styles().hookDetails.previewPartLabel, true), false), escape(part.label)), escape(createComponent(Show, {
|
|
10133
10438
|
get when() {
|
|
10134
10439
|
return part.fixture;
|
|
10135
10440
|
},
|
|
@@ -10141,7 +10446,7 @@ var MessagesPreview = (props) => {
|
|
|
10141
10446
|
return part.jsonItems?.length;
|
|
10142
10447
|
},
|
|
10143
10448
|
get fallback() {
|
|
10144
|
-
return ssr(_tmpl$
|
|
10449
|
+
return ssr(_tmpl$07, ssrAttribute("class", escape(styles().hookDetails.previewPartContent, true), false), escape(part.content));
|
|
10145
10450
|
},
|
|
10146
10451
|
get children() {
|
|
10147
10452
|
return ssr(_tmpl$193, `${escape(styles().hookDetails.previewJsonItems, true)} ${part.kind === "structured-output" ? escape(styles().hookDetails.previewJsonItemsCompare, true) : ""}`, escape(createComponent(For, {
|
|
@@ -10171,7 +10476,7 @@ var HookMessageTimeline = (props) => {
|
|
|
10171
10476
|
return props.messages.length > 0;
|
|
10172
10477
|
},
|
|
10173
10478
|
get fallback() {
|
|
10174
|
-
return ssr(_tmpl$
|
|
10479
|
+
return ssr(_tmpl$217, ssrAttribute("class", escape(styles().hookDetails.emptySmall, true), false));
|
|
10175
10480
|
},
|
|
10176
10481
|
get children() {
|
|
10177
10482
|
return ssr(_tmpl$174, ssrAttribute("class", escape(styles().hookDetails.messageTimeline, true), false), escape(createComponent(For, {
|
|
@@ -10216,12 +10521,12 @@ var HookMessageTimeline = (props) => {
|
|
|
10216
10521
|
get ["data-part-kind"]() {
|
|
10217
10522
|
return part.kind;
|
|
10218
10523
|
}
|
|
10219
|
-
}), [ssr(_tmpl$
|
|
10524
|
+
}), [ssr(_tmpl$07, ssrAttribute("class", escape(styles().hookDetails.previewPartLabel, true), false), escape(part.label)), escape(createComponent(Show, {
|
|
10220
10525
|
get when() {
|
|
10221
10526
|
return part.jsonItems?.length;
|
|
10222
10527
|
},
|
|
10223
10528
|
get fallback() {
|
|
10224
|
-
return ssr(_tmpl$
|
|
10529
|
+
return ssr(_tmpl$07, ssrAttribute("class", escape(styles().hookDetails.previewPartContent, true), false), escape(part.content));
|
|
10225
10530
|
},
|
|
10226
10531
|
get children() {
|
|
10227
10532
|
return ssr(_tmpl$193, `${escape(styles().hookDetails.previewJsonItems, true)} ${part.kind === "structured-output" ? escape(styles().hookDetails.previewJsonItemsCompare, true) : ""}`, escape(createComponent(For, {
|
|
@@ -10302,7 +10607,7 @@ var ToolsView = (props) => {
|
|
|
10302
10607
|
get each() {
|
|
10303
10608
|
return savedFixtures();
|
|
10304
10609
|
},
|
|
10305
|
-
children: (fixture) => ssr(_tmpl$292, ssrAttribute("class", escape(styles().hookDetails.fixtureRow, true), false), ssrAttribute("data-fixture-name", escape(fixture.name, true) ?? escape(fixture.toolName, true), false) + ssrAttribute("data-tool-name", escape(fixture.toolName, true), false), ssrAttribute("class", escape(styles().hookDetails.fixtureInfo, true), false), ssrAttribute("class", escape(styles().hookDetails.fixtureName, true), false), escape(fixture.name) ?? escape(fixture.toolName), ssrAttribute("class", escape(styles().hookDetails.fixtureMeta, true), false), escape(fixture.toolName), escape(
|
|
10610
|
+
children: (fixture) => ssr(_tmpl$292, ssrAttribute("class", escape(styles().hookDetails.fixtureRow, true), false), ssrAttribute("data-fixture-name", escape(fixture.name, true) ?? escape(fixture.toolName, true), false) + ssrAttribute("data-tool-name", escape(fixture.toolName, true), false), ssrAttribute("class", escape(styles().hookDetails.fixtureInfo, true), false), ssrAttribute("class", escape(styles().hookDetails.fixtureName, true), false), escape(fixture.name) ?? escape(fixture.toolName), ssrAttribute("class", escape(styles().hookDetails.fixtureMeta, true), false), escape(fixture.toolName), escape(formatTime4(fixture.createdAt)), ssrAttribute("class", escape(styles().hookDetails.fixtureRowActions, true), false), ssrAttribute("class", escape(styles().hookDetails.fixtureRowButton, true), false), `${escape(styles().hookDetails.fixtureRowButton, true)} ${escape(styles().hookDetails.fixtureDangerButton, true)}`)
|
|
10306
10611
|
})));
|
|
10307
10612
|
}
|
|
10308
10613
|
})]
|
|
@@ -10649,12 +10954,12 @@ function jsonSafeValue(value) {
|
|
|
10649
10954
|
return `[ai-devtools] unserializable value: ${error instanceof Error ? error.message : String(error)}`;
|
|
10650
10955
|
}
|
|
10651
10956
|
}
|
|
10652
|
-
function
|
|
10957
|
+
function formatTime4(timestamp) {
|
|
10653
10958
|
return new Date(timestamp).toLocaleTimeString();
|
|
10654
10959
|
}
|
|
10655
10960
|
|
|
10656
10961
|
// src/components/Shell.tsx
|
|
10657
|
-
var _tmpl$
|
|
10962
|
+
var _tmpl$51 = ["<div", ' data-testid="ai-devtools-panel">', "<div", "><div", ' data-testid="ai-devtools-left-panel" style="', '"><div', ">AI Hooks</div>", '</div><div class="', '"></div><div', ' data-testid="ai-devtools-right-panel" style="', '">', "</div></div></div>"];
|
|
10658
10963
|
function Devtools(props) {
|
|
10659
10964
|
return createComponent(ThemeContextProvider, {
|
|
10660
10965
|
get theme() {
|
|
@@ -10727,7 +11032,7 @@ function DevtoolsContent() {
|
|
|
10727
11032
|
});
|
|
10728
11033
|
return createComponent(MainPanel, {
|
|
10729
11034
|
get children() {
|
|
10730
|
-
return ssr(_tmpl$
|
|
11035
|
+
return ssr(_tmpl$51, ssrAttribute("class", escape(styles().shellRoot, true), false), escape(createComponent(Header, {
|
|
10731
11036
|
get children() {
|
|
10732
11037
|
return createComponent(HeaderLogo, {
|
|
10733
11038
|
flavor: {
|