@p4code/cli 0.3.2 → 0.3.4
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/bin.mjs +169 -11
- package/dist/client/assets/{DiffPanel-BMTtF8NC.js → DiffPanel-DNoj1YDl.js} +2 -2
- package/dist/client/assets/{FilePreviewPanel-BwzVVwGS.js → FilePreviewPanel-2ZSQBSYP.js} +2 -2
- package/dist/client/assets/{PreviewPanel-CMLJZEui.js → PreviewPanel-DbC9BErW.js} +2 -2
- package/dist/client/assets/{PullRequestCodeTab-D6EgENOP.js → PullRequestCodeTab-C45Kk_od.js} +2 -2
- package/dist/client/assets/{fileCommentAnnotations-CJd5rbxy.js → fileCommentAnnotations-CSGRRsJZ.js} +2 -2
- package/dist/client/assets/{index-D2TcVMCN.js → index-CjQCIGh-.js} +14 -6
- package/dist/client/assets/{renderFileChildren-BsGaQq86.js → renderFileChildren-DpaHsJLu.js} +2 -2
- package/dist/client/assets/{toggle-group-Bf-S3hMD.js → toggle-group-DavJTyyo.js} +2 -2
- package/dist/client/index.html +1 -1
- package/package.json +1 -1
package/dist/bin.mjs
CHANGED
|
@@ -238,7 +238,7 @@ const make$91 = () => {
|
|
|
238
238
|
const layer$82 = Layer.sync(NetService, make$91);
|
|
239
239
|
//#endregion
|
|
240
240
|
//#region package.json
|
|
241
|
-
var version = "0.3.
|
|
241
|
+
var version = "0.3.4";
|
|
242
242
|
//#endregion
|
|
243
243
|
//#region src/config.ts
|
|
244
244
|
/**
|
|
@@ -24143,6 +24143,11 @@ const ReadFromSequenceRequestSchema = Schema$1.Struct({
|
|
|
24143
24143
|
sequenceExclusive: NonNegativeInt,
|
|
24144
24144
|
limit: Schema$1.Number
|
|
24145
24145
|
});
|
|
24146
|
+
const ReadFromSequenceOfTypesRequestSchema = Schema$1.Struct({
|
|
24147
|
+
sequenceExclusive: NonNegativeInt,
|
|
24148
|
+
limit: Schema$1.Number,
|
|
24149
|
+
eventTypes: Schema$1.Array(OrchestrationEventType)
|
|
24150
|
+
});
|
|
24146
24151
|
const ReadByCommandIdRequestSchema = Schema$1.Struct({ commandId: CommandId });
|
|
24147
24152
|
const DEFAULT_READ_FROM_SEQUENCE_LIMIT = 1e3;
|
|
24148
24153
|
const READ_PAGE_SIZE = 500;
|
|
@@ -24234,6 +24239,29 @@ const makeEventStore = Effect.gen(function* () {
|
|
|
24234
24239
|
WHERE sequence > ${request.sequenceExclusive}
|
|
24235
24240
|
ORDER BY sequence ASC
|
|
24236
24241
|
LIMIT ${request.limit}
|
|
24242
|
+
`
|
|
24243
|
+
});
|
|
24244
|
+
const readEventRowsFromSequenceOfTypes = SqlSchema.findAll({
|
|
24245
|
+
Request: ReadFromSequenceOfTypesRequestSchema,
|
|
24246
|
+
Result: OrchestrationEventPersistedRowSchema,
|
|
24247
|
+
execute: (request) => sql`
|
|
24248
|
+
SELECT
|
|
24249
|
+
sequence,
|
|
24250
|
+
event_id AS "eventId",
|
|
24251
|
+
event_type AS "type",
|
|
24252
|
+
aggregate_kind AS "aggregateKind",
|
|
24253
|
+
stream_id AS "aggregateId",
|
|
24254
|
+
occurred_at AS "occurredAt",
|
|
24255
|
+
command_id AS "commandId",
|
|
24256
|
+
causation_event_id AS "causationEventId",
|
|
24257
|
+
correlation_id AS "correlationId",
|
|
24258
|
+
payload_json AS "payload",
|
|
24259
|
+
metadata_json AS "metadata"
|
|
24260
|
+
FROM orchestration_events
|
|
24261
|
+
WHERE sequence > ${request.sequenceExclusive}
|
|
24262
|
+
AND ${sql.in("event_type", request.eventTypes)}
|
|
24263
|
+
ORDER BY sequence ASC
|
|
24264
|
+
LIMIT ${request.limit}
|
|
24237
24265
|
`
|
|
24238
24266
|
});
|
|
24239
24267
|
const readEventRowsByCommandId = SqlSchema.findAll({
|
|
@@ -24270,10 +24298,16 @@ const makeEventStore = Effect.gen(function* () {
|
|
|
24270
24298
|
payloadJson: event.payload,
|
|
24271
24299
|
metadataJson: event.metadata
|
|
24272
24300
|
}).pipe(Effect.mapError(toPersistenceSqlOrDecodeError$4("OrchestrationEventStore.append:insert", "OrchestrationEventStore.append:decodeRow")), Effect.flatMap((row) => decodeEvent(row).pipe(Effect.mapError(toPersistenceDecodeError("OrchestrationEventStore.append:rowToEvent")))));
|
|
24273
|
-
const readFromSequence = (sequenceExclusive, limit = DEFAULT_READ_FROM_SEQUENCE_LIMIT) => {
|
|
24301
|
+
const readFromSequence = (sequenceExclusive, limit = DEFAULT_READ_FROM_SEQUENCE_LIMIT, options) => {
|
|
24274
24302
|
const normalizedLimit = Math.max(0, Math.floor(limit));
|
|
24275
24303
|
if (normalizedLimit === 0) return Stream.empty;
|
|
24276
|
-
const
|
|
24304
|
+
const eventTypes = options?.eventTypes;
|
|
24305
|
+
if (eventTypes !== void 0 && eventTypes.length === 0) return Stream.empty;
|
|
24306
|
+
const readRows = (request) => eventTypes === void 0 ? readEventRowsFromSequence(request) : readEventRowsFromSequenceOfTypes({
|
|
24307
|
+
...request,
|
|
24308
|
+
eventTypes
|
|
24309
|
+
});
|
|
24310
|
+
const readPage = (cursor, remaining) => Stream.fromEffect(readRows({
|
|
24277
24311
|
sequenceExclusive: cursor,
|
|
24278
24312
|
limit: Math.min(remaining, READ_PAGE_SIZE)
|
|
24279
24313
|
}).pipe(Effect.mapError(toPersistenceSqlOrDecodeError$4("OrchestrationEventStore.readFromSequence:query", "OrchestrationEventStore.readFromSequence:decodeRows")), Effect.flatMap((rows) => Effect.forEach(rows, (row) => decodeEvent(row).pipe(Effect.mapError(toPersistenceDecodeError("OrchestrationEventStore.readFromSequence:rowToEvent"))))))).pipe(Stream.flatMap((events) => {
|
|
@@ -26525,7 +26559,7 @@ const makeOrchestrationEngine = Effect.gen(function* () {
|
|
|
26525
26559
|
const worker = Effect.forever(Queue.take(commandQueue).pipe(Effect.flatMap(processEnvelope)));
|
|
26526
26560
|
yield* Effect.forkScoped(worker);
|
|
26527
26561
|
yield* Effect.logDebug("orchestration engine started").pipe(Effect.annotateLogs({ sequence: commandReadModel.snapshotSequence }));
|
|
26528
|
-
const readEvents = (fromSequenceExclusive, limit) => eventStore.readFromSequence(fromSequenceExclusive, limit);
|
|
26562
|
+
const readEvents = (fromSequenceExclusive, limit, options) => eventStore.readFromSequence(fromSequenceExclusive, limit, options);
|
|
26529
26563
|
const dispatch = (command) => Effect.gen(function* () {
|
|
26530
26564
|
const result = yield* Deferred.make();
|
|
26531
26565
|
yield* Queue.offer(commandQueue, {
|
|
@@ -54646,7 +54680,7 @@ const make$28 = Effect.gen(function* () {
|
|
|
54646
54680
|
});
|
|
54647
54681
|
const record = (input) => recordRaw(input).pipe(mapLifecycleError);
|
|
54648
54682
|
const cleanupRaw = Effect.fn("threadWorkspaceLifecycle.cleanup")(function* (threadId) {
|
|
54649
|
-
const snapshot = yield* snapshots.
|
|
54683
|
+
const snapshot = yield* snapshots.getCommandReadModel();
|
|
54650
54684
|
const threadIds = activePairThreadIds(threadId, snapshot.threadPairs ?? []);
|
|
54651
54685
|
const threads = threadIds.flatMap((id) => {
|
|
54652
54686
|
const thread = snapshot.threads.find((candidate) => candidate.id === id);
|
|
@@ -90357,7 +90391,7 @@ function toCanonicalItemType(raw) {
|
|
|
90357
90391
|
if (type.includes("file change") || type.includes("patch") || type.includes("edit")) return "file_change";
|
|
90358
90392
|
if (type.includes("mcp")) return "mcp_tool_call";
|
|
90359
90393
|
if (type.includes("dynamic tool")) return "dynamic_tool_call";
|
|
90360
|
-
if (type.includes("collab")) return "collab_agent_tool_call";
|
|
90394
|
+
if (type.includes("collab") || type.includes("sub agent")) return "collab_agent_tool_call";
|
|
90361
90395
|
if (type.includes("web search")) return "web_search";
|
|
90362
90396
|
if (type.includes("image")) return "image_view";
|
|
90363
90397
|
if (type.includes("review entered")) return "review_entered";
|
|
@@ -90366,8 +90400,113 @@ function toCanonicalItemType(raw) {
|
|
|
90366
90400
|
if (type.includes("error")) return "error";
|
|
90367
90401
|
return "unknown";
|
|
90368
90402
|
}
|
|
90403
|
+
const COLLAB_TOOL_TITLES = {
|
|
90404
|
+
spawnAgent: "Spawned agent",
|
|
90405
|
+
sendInput: "Sent input to agent",
|
|
90406
|
+
resumeAgent: "Resumed agent",
|
|
90407
|
+
wait: "Waiting for agent",
|
|
90408
|
+
closeAgent: "Closed agent"
|
|
90409
|
+
};
|
|
90410
|
+
const SUB_AGENT_ACTIVITY_TITLES = {
|
|
90411
|
+
started: "Agent started",
|
|
90412
|
+
interacted: "Agent worked",
|
|
90413
|
+
interrupted: "Agent interrupted"
|
|
90414
|
+
};
|
|
90415
|
+
function agentNameFromPath(agentPath) {
|
|
90416
|
+
return trimText$1(agentPath.split("/").pop()?.replace(/\.[^.]+$/, ""));
|
|
90417
|
+
}
|
|
90418
|
+
const COLLAB_TERMINAL_STATUSES = {
|
|
90419
|
+
completed: "completed",
|
|
90420
|
+
errored: "failed",
|
|
90421
|
+
interrupted: "stopped",
|
|
90422
|
+
shutdown: "stopped",
|
|
90423
|
+
notFound: "stopped"
|
|
90424
|
+
};
|
|
90425
|
+
function collabTaskEvents(event, canonicalThreadId, item) {
|
|
90426
|
+
const base = runtimeEventBase(event, canonicalThreadId);
|
|
90427
|
+
if (item.type === "subAgentActivity") {
|
|
90428
|
+
const taskId = RuntimeTaskId.make(item.agentThreadId);
|
|
90429
|
+
const name = agentNameFromPath(item.agentPath);
|
|
90430
|
+
if (item.kind === "started") return [{
|
|
90431
|
+
...base,
|
|
90432
|
+
type: "task.started",
|
|
90433
|
+
payload: {
|
|
90434
|
+
taskId,
|
|
90435
|
+
...name ? {
|
|
90436
|
+
description: name,
|
|
90437
|
+
subagentType: name
|
|
90438
|
+
} : {}
|
|
90439
|
+
}
|
|
90440
|
+
}];
|
|
90441
|
+
if (item.kind === "interrupted") return [{
|
|
90442
|
+
...base,
|
|
90443
|
+
type: "task.completed",
|
|
90444
|
+
payload: {
|
|
90445
|
+
taskId,
|
|
90446
|
+
status: "stopped"
|
|
90447
|
+
}
|
|
90448
|
+
}];
|
|
90449
|
+
return [{
|
|
90450
|
+
...base,
|
|
90451
|
+
type: "task.progress",
|
|
90452
|
+
payload: {
|
|
90453
|
+
taskId,
|
|
90454
|
+
description: name ?? "Agent worked"
|
|
90455
|
+
}
|
|
90456
|
+
}];
|
|
90457
|
+
}
|
|
90458
|
+
if (item.type !== "collabAgentToolCall") return [];
|
|
90459
|
+
const events = [];
|
|
90460
|
+
const prompt = trimText$1(item.prompt);
|
|
90461
|
+
const model = trimText$1(item.model);
|
|
90462
|
+
if (item.tool === "spawnAgent") for (const receiverThreadId of item.receiverThreadIds) events.push({
|
|
90463
|
+
...base,
|
|
90464
|
+
type: "task.started",
|
|
90465
|
+
payload: {
|
|
90466
|
+
taskId: RuntimeTaskId.make(receiverThreadId),
|
|
90467
|
+
...prompt ? { description: prompt } : {},
|
|
90468
|
+
...model ? { subagentType: model } : {}
|
|
90469
|
+
}
|
|
90470
|
+
});
|
|
90471
|
+
for (const [agentThreadId, state] of Object.entries(item.agentsStates)) {
|
|
90472
|
+
const taskId = RuntimeTaskId.make(agentThreadId);
|
|
90473
|
+
const message = trimText$1(state.message);
|
|
90474
|
+
const terminalStatus = COLLAB_TERMINAL_STATUSES[state.status];
|
|
90475
|
+
if (terminalStatus) {
|
|
90476
|
+
events.push({
|
|
90477
|
+
...base,
|
|
90478
|
+
type: "task.completed",
|
|
90479
|
+
payload: {
|
|
90480
|
+
taskId,
|
|
90481
|
+
status: terminalStatus,
|
|
90482
|
+
...message ? { summary: message } : {}
|
|
90483
|
+
}
|
|
90484
|
+
});
|
|
90485
|
+
continue;
|
|
90486
|
+
}
|
|
90487
|
+
events.push({
|
|
90488
|
+
...base,
|
|
90489
|
+
type: "task.progress",
|
|
90490
|
+
payload: {
|
|
90491
|
+
taskId,
|
|
90492
|
+
description: message ?? COLLAB_TOOL_TITLES[item.tool] ?? "Agent running"
|
|
90493
|
+
}
|
|
90494
|
+
});
|
|
90495
|
+
}
|
|
90496
|
+
return events;
|
|
90497
|
+
}
|
|
90369
90498
|
function itemTitle(itemType, item) {
|
|
90370
90499
|
if (itemType === "mcp_tool_call" && item?.type === "mcpToolCall") return `${item.server} · ${item.tool}`;
|
|
90500
|
+
if (item?.type === "collabAgentToolCall") {
|
|
90501
|
+
const title = COLLAB_TOOL_TITLES[item.tool] ?? "Agent tool call";
|
|
90502
|
+
const model = trimText$1(item.model);
|
|
90503
|
+
return model ? `${title} · ${model}` : title;
|
|
90504
|
+
}
|
|
90505
|
+
if (item?.type === "subAgentActivity") {
|
|
90506
|
+
const title = SUB_AGENT_ACTIVITY_TITLES[item.kind] ?? "Agent activity";
|
|
90507
|
+
const name = agentNameFromPath(item.agentPath);
|
|
90508
|
+
return name ? `${title} · ${name}` : title;
|
|
90509
|
+
}
|
|
90371
90510
|
switch (itemType) {
|
|
90372
90511
|
case "assistant_message": return "Assistant message";
|
|
90373
90512
|
case "user_message": return "User message";
|
|
@@ -90377,6 +90516,7 @@ function itemTitle(itemType, item) {
|
|
|
90377
90516
|
case "file_change": return "File change";
|
|
90378
90517
|
case "mcp_tool_call": return "MCP tool call";
|
|
90379
90518
|
case "dynamic_tool_call": return "Tool call";
|
|
90519
|
+
case "collab_agent_tool_call": return "Agent tool call";
|
|
90380
90520
|
case "web_search": return "Web search";
|
|
90381
90521
|
case "image_view": return "Image view";
|
|
90382
90522
|
case "error": return "Error";
|
|
@@ -90722,7 +90862,9 @@ function mapToRuntimeEvents(event, canonicalThreadId) {
|
|
|
90722
90862
|
}
|
|
90723
90863
|
if (event.method === "item/started") {
|
|
90724
90864
|
const started = mapItemLifecycle(event, canonicalThreadId, "item.started");
|
|
90725
|
-
|
|
90865
|
+
const item = readPayload(V2ItemStartedNotification, event.payload)?.item;
|
|
90866
|
+
const taskEvents = item ? collabTaskEvents(event, canonicalThreadId, item) : [];
|
|
90867
|
+
return started ? [started, ...taskEvents] : taskEvents;
|
|
90726
90868
|
}
|
|
90727
90869
|
if (event.method === "item/completed") {
|
|
90728
90870
|
const item = readPayload(V2ItemCompletedNotification, event.payload)?.item;
|
|
@@ -90738,7 +90880,8 @@ function mapToRuntimeEvents(event, canonicalThreadId) {
|
|
|
90738
90880
|
}];
|
|
90739
90881
|
}
|
|
90740
90882
|
const completed = mapItemLifecycle(event, canonicalThreadId, "item.completed");
|
|
90741
|
-
|
|
90883
|
+
const taskEvents = collabTaskEvents(event, canonicalThreadId, item);
|
|
90884
|
+
return completed ? [completed, ...taskEvents] : taskEvents;
|
|
90742
90885
|
}
|
|
90743
90886
|
if (event.method === "item/reasoning/summaryPartAdded" || event.method === "item/commandExecution/terminalInteraction") return [{
|
|
90744
90887
|
...runtimeEventBase(event, canonicalThreadId),
|
|
@@ -106394,7 +106537,7 @@ const make$3 = Effect.gen(function* () {
|
|
|
106394
106537
|
});
|
|
106395
106538
|
const flushQueuedWorkspaceCleanup = Effect.fnUntraced(function* (threadId) {
|
|
106396
106539
|
if (!takeQueuedThreadWorkspaceCleanup(threadId)) return;
|
|
106397
|
-
const cleanupThreadIds = yield* projectionSnapshotQuery.
|
|
106540
|
+
const cleanupThreadIds = yield* projectionSnapshotQuery.getCommandReadModel().pipe(Effect.map((snapshot) => {
|
|
106398
106541
|
const pair = (snapshot.threadPairs ?? []).find((candidate) => candidate.detachedAt === null && (candidate.implementerThreadId === threadId || candidate.watcherThreadId === threadId));
|
|
106399
106542
|
return pair === void 0 ? [threadId] : [pair.implementerThreadId, pair.watcherThreadId];
|
|
106400
106543
|
}), Effect.orElseSucceed(() => [threadId]));
|
|
@@ -106404,7 +106547,7 @@ const make$3 = Effect.gen(function* () {
|
|
|
106404
106547
|
})))));
|
|
106405
106548
|
});
|
|
106406
106549
|
const restorePendingWorkspaceCleanups = Effect.fnUntraced(function* () {
|
|
106407
|
-
const snapshot = yield* projectionSnapshotQuery.
|
|
106550
|
+
const snapshot = yield* projectionSnapshotQuery.getCommandReadModel();
|
|
106408
106551
|
const groups = resolvePendingWorkspaceCleanupGroups({
|
|
106409
106552
|
threads: snapshot.threads,
|
|
106410
106553
|
pairs: snapshot.threadPairs ?? []
|
|
@@ -108112,6 +108255,21 @@ const make$1 = Effect.gen(function* () {
|
|
|
108112
108255
|
"thread-pair.gate-advanced",
|
|
108113
108256
|
"thread-pair.gate-resolved"
|
|
108114
108257
|
]);
|
|
108258
|
+
/**
|
|
108259
|
+
* The event types worth reading back on startup. Every other handler returns
|
|
108260
|
+
* immediately for anything at or below `liveEventsAfterSequence`, so replaying
|
|
108261
|
+
* those types decodes the entire event log only to drop it - on a long-lived
|
|
108262
|
+
* install that is gigabytes of payload JSON and an out-of-memory crash before
|
|
108263
|
+
* the server finishes booting.
|
|
108264
|
+
*/
|
|
108265
|
+
const FUSION_REPLAY_EVENT_TYPES = [
|
|
108266
|
+
"thread.turn-completed",
|
|
108267
|
+
"thread-pair.created",
|
|
108268
|
+
"thread-pair.detached",
|
|
108269
|
+
"thread-pair.gate-opened",
|
|
108270
|
+
"thread-pair.gate-advanced",
|
|
108271
|
+
"thread-pair.gate-resolved"
|
|
108272
|
+
];
|
|
108115
108273
|
const processEvent = Effect.fn("FusionWatcherReactor.processEvent")(function* (event) {
|
|
108116
108274
|
switch (event.type) {
|
|
108117
108275
|
case "thread.turn-completed": return yield* processCompletion(event);
|
|
@@ -108163,7 +108321,7 @@ const make$1 = Effect.gen(function* () {
|
|
|
108163
108321
|
yield* Effect.forkScoped(sweepGateTimeouts.pipe(Effect.catchCause((cause) => Effect.logWarning("fusion gate timeout sweep failed", { cause: Cause.pretty(cause) })), Effect.repeat(Schedule.spaced(GATE_TIMEOUT_SWEEP_INTERVAL))));
|
|
108164
108322
|
const headSequence = yield* orchestrationEngine.latestSequence;
|
|
108165
108323
|
liveEventsAfterSequence = headSequence;
|
|
108166
|
-
yield* Stream.runForEach(orchestrationEngine.readEvents(0, Math.max(1, headSequence)), enqueueEvent).pipe(Effect.catchCause((cause) => Effect.logWarning("fusion watcher reactor failed historical replay", { cause: Cause.pretty(cause) })));
|
|
108324
|
+
yield* Stream.runForEach(orchestrationEngine.readEvents(0, Math.max(1, headSequence), { eventTypes: FUSION_REPLAY_EVENT_TYPES }), enqueueEvent).pipe(Effect.catchCause((cause) => Effect.logWarning("fusion watcher reactor failed historical replay", { cause: Cause.pretty(cause) })));
|
|
108167
108325
|
}),
|
|
108168
108326
|
drain: worker.drain,
|
|
108169
108327
|
sweepGates: sweepGateTimeouts.pipe(Effect.catchCause((cause) => Effect.logWarning("fusion gate timeout sweep failed", { cause: Cause.pretty(cause) })))
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{n as t,r as n,t as r}from"./compiler-runtime-CLAvuQ-D.js";import{$c as i,Dl as a,Dr as o,Ea as s,Et as c,Fa as l,Ll as ee,Ma as te,Ml as ne,Na as u,Nr as re,Pa as d,Qc as ie,Sr as f,Ta as p,Xc as m,Zc as h,_n as g,gl as _,gt as v,h as y,ht as b,ja as x,ot as S,ou as C,va as w,vt as T,x as ae,xa as E,xl as D,xn as O}from"./previewAssetResource-B-oypkGA.js";import{t as oe}from"./arrow-right-DpPFsWQs.js";import{a as k,i as A,n as j,o as M,r as N,s as se,t as ce}from"./toggle-group-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{n as t,r as n,t as r}from"./compiler-runtime-CLAvuQ-D.js";import{$c as i,Dl as a,Dr as o,Ea as s,Et as c,Fa as l,Ll as ee,Ma as te,Ml as ne,Na as u,Nr as re,Pa as d,Qc as ie,Sr as f,Ta as p,Xc as m,Zc as h,_n as g,gl as _,gt as v,h as y,ht as b,ja as x,ot as S,ou as C,va as w,vt as T,x as ae,xa as E,xl as D,xn as O}from"./previewAssetResource-B-oypkGA.js";import{t as oe}from"./arrow-right-DpPFsWQs.js";import{a as k,i as A,n as j,o as M,r as N,s as se,t as ce}from"./toggle-group-DavJTyyo.js";import{F as le,Fr as ue,I as de,J as fe,L as pe,Lr as me,Mr as he,Nr as ge,R as P,Sr as _e,Y as ve,_ as ye,at as be,cr as xe,ct as Se,dr as Ce,fr as we,gr as Te,h as Ee,it as De,jr as Oe,lr as ke,lt as Ae,mr as je,oi as Me,or as Ne,ot as Pe,pr as Fe,rt as Ie,si as Le,sr as Re,st as ze,ur as Be,zr as Ve}from"./index-CjQCIGh-.js";import{a as He,n as Ue}from"./fileCommentAnnotations-CSGRRsJZ.js";var We=i(`pilcrow`,[[`path`,{d:`M13 4v16`,key:`8vvj80`}],[`path`,{d:`M17 4v16`,key:`7dpous`}],[`path`,{d:`M19 4H9.5a4.5 4.5 0 0 0 0 9H13`,key:`sh4n9v`}]]),F=e(n(),1);function Ge({threadRef:e,filePath:t,activeCwd:n,openInEditor:r,openFileSurface:i}){if(e){if(i){i(t);return}S.getState().openFile(e,t);return}r(n?y(t,n):t)}var I=r();function Ke(e,t){let n=(0,I.c)(4),r=Te(e,t),i;return n[0]!==r.data||n[1]!==r.error||n[2]!==r.isPending?(i={data:r.data,error:r.error,isPending:r.isPending},n[0]=r.data,n[1]=r.error,n[2]=r.isPending,n[3]=i):i=n[3],i}var L=t(),qe=[];function Je(e){return(e.endSide??e.side)===`deletions`?`deletions`:`additions`}function R(e,t,n){let r=Je(t),i=e.findIndex(e=>e.side===r&&e.lineNumber===t.end);return i<0?[...e,{side:r,lineNumber:t.end,metadata:{entries:[n]}}]:e.map((e,t)=>t===i?{...e,metadata:{entries:[...e.metadata.entries,n]}}:e)}function Ye(e){let t=(0,I.c)(50),{files:n,sectionId:r,sectionTitle:i,composerDraftTarget:a,options:s,viewerRef:c,className:l,renderHeaderPrefix:ee}=e,te=f(Qe),ne=f(B),u;t[0]===a?u=t[1]:(u=e=>e.getComposerDraft(a)?.reviewComments??qe,t[0]=a,t[1]=u);let d=f(u),[ie,p]=(0,F.useState)(null),[m,h]=(0,F.useState)(null),g;t[2]===n?g=t[3]:(g=new Map(n.map(Ze)),t[2]=n,t[3]=g);let _=g,v;if(t[4]!==m||t[5]!==n||t[6]!==d||t[7]!==r){let e;t[9]!==m||t[10]!==d||t[11]!==r?(e=e=>{let{fileDiff:t,filePath:n,fileKey:i,collapsed:a}=e,o=d.filter(e=>e.sectionId===r&&e.filePath===n&&(e.fenceLanguage??`diff`)===`diff`).reduce((e,n)=>{let r=re(t,n);return r?R(e,r,{id:n.id,kind:`comment`,range:r,rangeLabel:n.rangeLabel,text:n.text}):e},[]),s=m?.fileKey===i?[...o,m.annotation]:o;return{id:i,type:`diff`,fileDiff:t,annotations:s,collapsed:a,version:De(`${a?`1`:`0`}:${s.flatMap(z).join(`:`)}`)}},t[9]=m,t[10]=d,t[11]=r,t[12]=e):e=t[12],v=n.map(e),t[4]=m,t[5]=n,t[6]=d,t[7]=r,t[8]=v}else v=t[8];let y=v,b;t[13]!==a||t[14]!==m?.annotation||t[15]!==ne?(b=e=>{p(null),m?.annotation.metadata.entries.some(t=>t.id===e)?h(null):ne(a,e)},t[13]=a,t[14]=m?.annotation,t[15]=ne,t[16]=b):b=t[16];let x=b,S;t[17]!==te||t[18]!==a||t[19]!==m||t[20]!==_||t[21]!==r||t[22]!==i?(S=(e,t)=>{let n=m?.annotation.metadata.entries.find(t=>t.id===e),s=m?_.get(m.fileKey):void 0;if(!n||!s)return;let c=o({id:n.id,sectionId:r,sectionTitle:i,filePath:s.filePath,fileDiff:s.fileDiff,range:n.range,text:t});c&&te(a,c),p(null),h(null)},t[17]=te,t[18]=a,t[19]=m,t[20]=_,t[21]=r,t[22]=i,t[23]=S):S=t[23];let C=S,w;t[24]!==_||t[25]!==r||t[26]!==i?(w=(e,t)=>{if(!e)return;let n=t.item;if(n.type!==`diff`)return;let a=_.get(n.id);if(!a)return;let s=Ue(),c=o({id:s,sectionId:r,sectionTitle:i,filePath:a.filePath,fileDiff:a.fileDiff,range:e,text:``});c&&h({fileKey:n.id,annotation:{side:Je(e),lineNumber:e.end,metadata:{entries:[{id:s,kind:`draft`,range:e,rangeLabel:c.rangeLabel,text:``}]}}})},t[24]=_,t[25]=r,t[26]=i,t[27]=w):w=t[27];let T=w,ae=m!==null,E;t[28]===c?E=t[29]:(E=c?{ref:c}:{},t[28]=c,t[29]=E);let D;t[30]===l?D=t[31]:(D=l?{className:l}:{},t[30]=l,t[31]=D);let O=!ae,oe=!ae,A;t[32]!==T||t[33]!==s||t[34]!==oe||t[35]!==O?(A={...s,enableGutterUtility:O,enableLineSelection:oe,onLineSelectionEnd:T},t[32]=T,t[33]=s,t[34]=oe,t[35]=O,t[36]=A):A=t[36];let j;t[37]===ee?j=t[38]:(j=e=>e.type===`diff`?ee(e.fileDiff,e.id,e.collapsed===!0):null,t[37]=ee,t[38]=j);let M;t[39]!==x||t[40]!==C?(M=e=>(0,L.jsx)(`div`,{className:`py-1`,children:e.metadata.entries.map(e=>(0,L.jsx)(He,{kind:e.kind,rangeLabel:e.rangeLabel,text:e.text,onCancel:()=>x(e.id),onComment:t=>C(e.id,t),onDelete:()=>x(e.id)},e.id))}),t[39]=x,t[40]=C,t[41]=M):M=t[41];let N;return t[42]!==y||t[43]!==ie||t[44]!==A||t[45]!==j||t[46]!==M||t[47]!==E||t[48]!==D?(N=(0,L.jsx)(k,{...E,...D,items:y,selectedLines:ie,onSelectedLinesChange:p,options:A,renderHeaderPrefix:j,renderAnnotation:M}),t[42]=y,t[43]=ie,t[44]=A,t[45]=j,t[46]=M,t[47]=E,t[48]=D,t[49]=N):N=t[49],N}function z(e){return e.metadata.entries.map(Xe)}function Xe(e){return`${e.id}:${e.rangeLabel}:${e.text}`}function Ze(e){return[e.fileKey,e]}function B(e){return e.removeReviewComment}function Qe(e){return e.addReviewComment}function $e(e){return{diffPreview:D(e,{label:`environment-data:review:diff-preview`,tag:C.reviewGetDiffPreview,staleTimeMs:5e3})}}var et=$e(O);function V(e){return e.remoteName&&e.name.startsWith(`${e.remoteName}/`)?e.name.slice(e.remoteName.length+1):e.name}function tt(e,t){let n=new Set(t),r=e.map(e=>{let r=t.filter(t=>n.has(t)&&V(t)===e.name),i=r.find(e=>e.remoteName===`origin`)??r[0]??null;return i&&n.delete(i),{id:`local:${e.name}`,label:e.name,local:e,remote:i}}),i=t.filter(e=>n.has(e)).map(e=>({id:`remote:${e.name}`,label:e.name,local:null,remote:e}));return[...r,...i]}function nt(e,t){let n=t.trim().toLocaleLowerCase();return n.length===0?e:e.filter(e=>e.label.toLocaleLowerCase().includes(n)||e.local?.name.toLocaleLowerCase().includes(n)===!0||e.remote?.name.toLocaleLowerCase().includes(n)===!0)}var H=`__automatic_base_ref__`,rt=new Set,it=`
|
|
2
2
|
[data-diffs-header],
|
|
3
3
|
[data-diff],
|
|
4
4
|
[data-file],
|
|
@@ -95,4 +95,4 @@ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{n as t,r as n,t as r}f
|
|
|
95
95
|
text-decoration-color: currentColor;
|
|
96
96
|
}
|
|
97
97
|
`;function U({mode:e=`inline`,composerDraftTarget:t,initialGitScope:n,threadRef:r}){let{resolvedTheme:i}=ae(),o=ue(),[re]=(0,F.useState)(n),[f,y]=(0,F.useState)(`stacked`),[S,C]=(0,F.useState)(o.wordWrap),[D,O]=(0,F.useState)(o.diffIgnoreWhitespace),[k,ye]=(0,F.useState)(``),[Te,De]=(0,F.useState)(()=>({scopeKey:null,fileKeys:rt})),He=(0,F.useRef)(null),Ue=r.threadId,I=ge(r),qe=I?.projectId??null,Je=he(I&&qe?{environmentId:I.environmentId,projectId:qe}:null),R=I?.worktreePath??Je?.workspaceRoot,z=_(g.configValueAtom(I?.environmentId??null)),Xe=je(I?.environmentId??null,z?.availableEditors??[]),Ze=c(I!=null&&R!=null?Oe.status({environmentId:I.environmentId,input:{cwd:R}}):null),B=P(e=>pe(e.byThreadKey,r,re===`unstaged`)),Qe=Ze.data?.isRepo??!0,{turnDiffSummaries:$e,inferredCheckpointTurnCountByTurnId:V}=de(I),U=(0,F.useMemo)(()=>[...$e].toSorted((e,t)=>{let n=e.checkpointTurnCount??V[e.turnId]??0,r=t.checkpointTurnCount??V[t.turnId]??0;return n===r?t.completedAt.localeCompare(e.completedAt):r-n}),[V,$e]);(0,F.useEffect)(()=>{B.kind===`turn`&&P.getState().reconcileTurnSelection(r,U.map(e=>e.turnId))},[B,U,r]);let W=B.kind===`turn`?B.turnId:null,G=B.kind===`unstaged`?`unstaged`:`branch`,K=B.kind===`branch`?B.baseRef:null,at=B.kind===`turn`?B.filePath:null,ot=B.kind===`turn`?B.revealRequestId:0,q=W===null?void 0:U.find(e=>e.turnId===W)??U[0],J=q&&(q.checkpointTurnCount??V[q.turnId]),st=U[0],ct=W===null?G===`unstaged`?`Working tree`:`Branch changes`:q?.turnId===st?.turnId?`Latest turn`:`Turn ${J??`?`}`,lt=q?`turn:${q.turnId}`:G,Y=`${r.environmentId}:${r.threadId}:${lt}`,ut=Te.scopeKey===Y?Te.fileKeys:rt,dt=q?`Turn ${J??`?`}`:G===`unstaged`?`Working tree`:`Branch changes`,ft=(0,F.useMemo)(()=>typeof J==`number`?{fromTurnCount:Math.max(0,J-1),toTurnCount:J}:null,[J]),pt=Ke({environmentId:I?.environmentId??null,threadId:Ue,fromTurnCount:ft?.fromTurnCount??null,toTurnCount:ft?.toTurnCount??null,ignoreWhitespace:D,cacheScope:q?`turn:${q.turnId}`:null},{enabled:Qe&&q!==void 0}),mt=c(W===null&&I&&R?et.diffPreview({environmentId:I.environmentId,input:{cwd:R,...K?{baseRef:K}:{},ignoreWhitespace:D}}):null),ht=W===null&&mt.error?.includes(`configured workspace root`)===!0&&z?.cwd!==void 0&&z.cwd!==R,gt=c(ht&&I&&z?et.diffPreview({environmentId:I.environmentId,input:{cwd:z.cwd,...K?{baseRef:K}:{},ignoreWhitespace:D}}):null),X=ht?gt:mt,Z=X.data?.sources.find(e=>e.kind===(G===`unstaged`?`working-tree`:`branch-range`)),_t=c(W===null&&G===`branch`&&I&&X.data?.cwd?Oe.listRefs({environmentId:I.environmentId,input:{cwd:X.data.cwd,includeMatchingRemoteRefs:!0,refKind:`local`,...k.trim().length>0?{query:k.trim()}:{},limit:100}}):null),vt=c(W===null&&G===`branch`&&I&&X.data?.cwd?Oe.listRefs({environmentId:I.environmentId,input:{cwd:X.data.cwd,includeMatchingRemoteRefs:!0,refKind:`remote`,...k.trim().length>0?{query:k.trim()}:{},limit:100}}):null),yt=tt(_t.data?.refs.filter(e=>e.name!==Z?.headRef)??[],vt.data?.refs??[]),bt=nt(yt,k),xt=e=>K&&K===e.remote?.name?K:e.local?.name??e.remote?.name??e.id,St=[H,...yt.map(xt)],Ct=[...k.trim().length===0?[H]:[],...bt.map(xt)],wt=Z?.diff,Tt=q?pt.data?.diff:wt,Et=!q&&Z?.truncated===!0,Dt=q?pt.isPending:X.isPending,Ot=q?pt.error:X.error,kt=typeof Tt==`string`&&Tt.trim().length===0,Q=(0,F.useMemo)(()=>ze(Tt,`diff-panel:${i}`,{compactPartialHunkOffsets:W===null}),[i,Tt,W]),At=(0,F.useMemo)(()=>!Q||Q.kind!==`files`?[]:Q.files.toSorted((e,t)=>Ae(e).localeCompare(Ae(t),void 0,{numeric:!0,sensitivity:`base`})),[Q]),$=(0,F.useMemo)(()=>At.map(e=>{let t=Ie(e);return{fileDiff:e,filePath:Ae(e),fileKey:t,collapsed:ut.has(t)}}),[ut,At]),jt=(0,F.useMemo)(()=>$.map(e=>e.fileKey),[$]),Mt=N(jt,ut),Nt=(0,F.useMemo)(()=>Pe(At),[At]);(0,F.useEffect)(()=>{if(!at)return;let e=$.find(e=>e.filePath===at);e&&He.current?.scrollTo({type:`item`,id:e.fileKey,align:`start`})},[$,at,ot]);let Pt=le({threadRef:r,workspaceRoot:R??null}),Ft=(0,F.useCallback)(e=>{Ge({threadRef:r,filePath:e,activeCwd:R,openFileSurface:Pt,openInEditor:e=>{(async()=>{let t=await Xe(e);t._tag===`Failure`&&!a(t)&&console.warn(`Failed to open diff file in editor.`,{operation:`open-diff-file`,environmentId:r.environmentId,threadId:r.threadId,...ee(ne(t))})})()}})},[R,Pt,Xe,r]),It=(0,F.useCallback)(e=>{De(t=>{let n=new Set(t.scopeKey===Y?t.fileKeys:[]);return n.has(e)?n.delete(e):n.add(e),{scopeKey:Y,fileKeys:n}})},[Y]),Lt=(0,F.useCallback)(()=>{De(e=>{let t=e.scopeKey===Y?e.fileKeys:rt;return{scopeKey:Y,fileKeys:A(jt,t)}})},[Y,jt]),Rt=e=>{P.getState().selectTurn(r,e)},zt=e=>{P.getState().selectGitScope(r,e)},Bt=e=>{P.getState().selectBranchBaseRef(r,e)};return(0,L.jsx)(ve,{mode:e,header:(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-3 [-webkit-app-region:no-drag]`,children:[(0,L.jsxs)(E,{children:[(0,L.jsxs)(d,{className:`inline-flex h-6 max-w-full items-center gap-1 rounded-md bg-muted/70 px-2 text-xs font-medium text-foreground outline-none transition-colors hover:bg-muted focus-visible:ring-2 focus-visible:ring-ring`,"aria-label":`Diff scope: ${ct}`,children:[(0,L.jsx)(`span`,{className:`truncate`,children:ct}),(0,L.jsx)(h,{className:`size-3.5 shrink-0 text-muted-foreground`})]}),(0,L.jsxs)(s,{align:`start`,className:`w-60`,children:[(0,L.jsx)(p,{className:W===null&&G===`unstaged`?`bg-foreground/[0.08]`:void 0,onClick:()=>zt(`unstaged`),children:(0,L.jsx)(`span`,{children:`Working tree`})}),(0,L.jsx)(p,{className:W===null&&G===`branch`?`bg-foreground/[0.08]`:void 0,onClick:()=>zt(`branch`),children:(0,L.jsx)(`span`,{children:`Branch changes`})}),(0,L.jsx)(p,{className:W!==null&&q?.turnId===st?.turnId?`bg-foreground/[0.08]`:void 0,onClick:()=>{st&&Rt(st.turnId)},children:(0,L.jsx)(`span`,{children:`Latest turn`})}),(0,L.jsxs)(x,{children:[(0,L.jsx)(u,{children:`Turn`}),(0,L.jsx)(te,{className:`w-64`,children:U.map(e=>{let t=e.checkpointTurnCount??V[e.turnId]??`?`;return(0,L.jsxs)(p,{className:e.turnId===q?.turnId?`bg-foreground/[0.08]`:void 0,onClick:()=>Rt(e.turnId),children:[(0,L.jsxs)(`span`,{children:[`Turn `,t]}),(0,L.jsx)(`span`,{className:`ml-auto text-xs tabular-nums text-muted-foreground`,children:_e(e.completedAt,o.timestampFormat)})]},e.turnId)})})]})]})]}),W===null&&G===`branch`&&Z?.baseRef&&(0,L.jsxs)(`div`,{className:`flex min-w-0 max-w-full items-center gap-2 overflow-hidden text-xs text-muted-foreground`,title:`${Z.headRef??`HEAD`} → ${Z.baseRef}`,"aria-label":`Comparing ${Z.headRef??`HEAD`} against ${Z.baseRef}`,children:[(0,L.jsx)(`span`,{className:`min-w-0 max-w-48 truncate`,children:Z.headRef??`HEAD`}),(0,L.jsx)(oe,{className:`size-3.5 shrink-0 opacity-70`}),(0,L.jsxs)(Re,{items:St,filteredItems:Ct,value:K??H,onOpenChange:e=>{e||ye(``)},onValueChange:e=>{e&&Bt(e===H?null:e)},children:[(0,L.jsxs)(Fe,{className:`inline-flex min-w-0 max-w-48 items-center gap-1 overflow-hidden rounded-md px-1.5 py-1 outline-none transition-colors hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring`,"aria-label":`Change comparison target. Currently ${Z.baseRef}`,children:[(0,L.jsx)(`span`,{className:`min-w-0 truncate`,children:Z.baseRef}),(0,L.jsx)(h,{className:`size-3.5 shrink-0 opacity-70`})]}),(0,L.jsxs)(we,{align:`start`,className:`w-72 min-w-0 max-w-[calc(100vw-1rem)] overflow-hidden [&>[data-slot=combobox-popup]]:min-w-0 [&>[data-slot=combobox-popup]]:overflow-hidden`,children:[(0,L.jsx)(`div`,{className:`min-w-0 shrink-0 px-3 pt-2.5`,children:(0,L.jsxs)(`div`,{className:`relative -translate-y-px border-b border-border/70 pb-1.5 transition-colors focus-within:border-ring`,children:[(0,L.jsx)(Ve,{"aria-hidden":`true`,className:`pointer-events-none absolute top-1.5 left-0 size-4 shrink-0 text-muted-foreground/55`}),(0,L.jsx)(ke,{className:`[&_input]:h-6.5 [&_input]:ps-5 [&_input]:font-sans [&_input]:leading-6.5`,inputClassName:`rounded-none bg-transparent text-sm`,placeholder:`Search refs...`,showTrigger:!1,size:`sm`,unstyled:!0,value:k,onChange:e=>ye(e.target.value)})]})}),(0,L.jsxs)(`div`,{className:`grid shrink-0 grid-cols-[1rem_minmax(0,1fr)] items-center gap-2 border-b border-border/70 ps-3 pe-6.5 pt-2 pb-1.5 font-medium text-[10px] text-muted-foreground uppercase tracking-wide`,children:[(0,L.jsx)(`span`,{"aria-hidden":`true`}),(0,L.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[minmax(0,1fr)_2rem] items-center`,children:[(0,L.jsx)(`span`,{children:`Branch`}),(0,L.jsx)(`span`,{className:`text-right`,children:`Remote`})]})]}),(0,L.jsx)(xe,{children:`No matching refs.`}),(0,L.jsxs)(Ce,{className:`max-h-64 min-w-0 overflow-x-hidden`,children:[(0,L.jsx)(Be,{className:`h-8 w-full min-w-0 grid-cols-[1rem_minmax(0,1fr)] py-0`,contentClassName:`w-full min-w-0 overflow-hidden`,value:H,children:(0,L.jsx)(`span`,{className:`block min-w-0 truncate`,children:`Automatic`})}),yt.map(e=>{let t=xt(e),n=e.local!==null&&e.remote!==null,r=e.remote?.name===t;return(0,L.jsx)(Be,{className:`h-8 w-full min-w-0 grid-cols-[1rem_minmax(0,1fr)] py-0`,contentClassName:`w-full min-w-0 overflow-hidden`,value:t,children:(0,L.jsxs)(`div`,{className:`grid w-full min-w-0 grid-cols-[minmax(0,1fr)_2rem] items-center overflow-hidden`,children:[(0,L.jsx)(`span`,{className:`block min-w-0 truncate pe-2`,children:e.label}),n?(0,L.jsx)(`div`,{className:`flex justify-end`,onClick:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),children:(0,L.jsx)(Ne,{"aria-label":`Use remote version of ${e.label}`,checked:r,className:`[--thumb-size:--spacing(3)]`,onCheckedChange:t=>{let n=t?e.remote?.name:e.local?.name;n&&Bt(n)}})}):e.remote?(0,L.jsx)(`span`,{className:`flex justify-end text-muted-foreground`,title:`Remote only`,children:(0,L.jsx)(ie,{"aria-hidden":`true`,className:`size-3`})}):null]})},e.id)})]})]})]})]})]}),(0,L.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 [-webkit-app-region:no-drag]`,children:[$.length>0&&(0,L.jsx)(Ee,{additions:Nt.additions,deletions:Nt.deletions,className:`mr-1 text-[11px]`,layout:`inline`}),$.length>0&&(0,L.jsxs)(b,{children:[(0,L.jsx)(T,{render:(0,L.jsx)(w,{type:`button`,size:`icon-xs`,variant:`outline`,"aria-label":Mt?`Expand all files`:`Collapse all files`,onClick:Lt}),children:Mt?(0,L.jsx)(Me,{className:`size-3`}):(0,L.jsx)(Le,{className:`size-3`})}),(0,L.jsx)(v,{side:`top`,children:Mt?`Expand all files`:`Collapse all files`})]}),(0,L.jsxs)(j,{className:`shrink-0`,variant:`outline`,size:`xs`,value:[f],onValueChange:e=>{let t=e[0];(t===`stacked`||t===`split`)&&y(t)},children:[(0,L.jsx)(ce,{"aria-label":`Stacked diff view`,value:`stacked`,children:(0,L.jsx)(M,{className:`size-3`})}),(0,L.jsx)(ce,{"aria-label":`Split diff view`,value:`split`,children:(0,L.jsx)(se,{className:`size-3`})})]}),(0,L.jsxs)(b,{children:[(0,L.jsx)(T,{render:(0,L.jsx)(ce,{"aria-label":S?`Disable diff line wrapping`:`Enable diff line wrapping`,variant:`outline`,size:`xs`,pressed:S,onPressedChange:e=>{C(!!e)}}),children:(0,L.jsx)(me,{className:`size-3`})}),(0,L.jsx)(v,{side:`top`,children:S?`Disable line wrapping`:`Enable line wrapping`})]}),(0,L.jsxs)(b,{children:[(0,L.jsx)(T,{render:(0,L.jsx)(ce,{"aria-label":D?`Show whitespace changes`:`Hide whitespace changes`,variant:`outline`,size:`xs`,pressed:D,onPressedChange:e=>{O(!!e)}}),children:(0,L.jsx)(We,{className:`size-3`})}),(0,L.jsx)(v,{side:`top`,children:D?`Show whitespace changes`:`Hide whitespace changes`})]})]})]}),children:I?Qe?W!==null&&U.length===0?(0,L.jsx)(`div`,{className:`flex flex-1 items-center justify-center px-5 text-center text-xs text-muted-foreground/70`,children:`No completed turns yet.`}):(0,L.jsx)(L.Fragment,{children:(0,L.jsxs)(`div`,{className:`diff-panel-viewport flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:[Et&&(0,L.jsx)(`p`,{className:`shrink-0 border-b border-border/70 bg-muted/40 px-3 py-1.5 text-[11px] text-muted-foreground`,children:`This diff was truncated because it exceeded the preview limit. The changes shown are incomplete.`}),Ot&&!Q&&(0,L.jsx)(`div`,{className:`px-3`,children:(0,L.jsx)(`p`,{className:`mb-2 text-[11px] text-red-500/80`,children:Ot})}),Q?Q.kind===`files`?(0,L.jsx)(`div`,{className:`min-h-0 flex-1`,onClickCapture:e=>{let t=(e.nativeEvent.composedPath?.()??[]).find(e=>e instanceof HTMLElement&&e.hasAttribute(`data-title`))?.textContent?.trim();t&&Ft(t)},children:(0,L.jsx)(Ye,{viewerRef:He,className:`diff-render-surface h-full min-h-0 overflow-auto`,files:$,sectionId:lt,sectionTitle:dt,composerDraftTarget:t,renderHeaderPrefix:(e,t,n)=>{let r=Ae(e);return(0,L.jsxs)(b,{children:[(0,L.jsx)(T,{render:(0,L.jsx)(`button`,{type:`button`,className:l(`inline-flex size-5 shrink-0 cursor-pointer items-center justify-center rounded-sm border-0 bg-transparent p-0 transition-colors hover:bg-foreground/10 focus-visible:outline-hidden`,be(e)),"aria-label":n?`Expand ${r}`:`Collapse ${r}`,"aria-expanded":!n,onClick:e=>{e.stopPropagation(),It(t)}}),children:n?(0,L.jsx)(m,{className:`size-4`}):(0,L.jsx)(h,{className:`size-4`})}),(0,L.jsx)(v,{side:`top`,children:n?`Expand diff`:`Collapse diff`})]})},options:{diffStyle:f===`split`?`split`:`unified`,lineDiffType:`none`,overflow:S?`wrap`:`scroll`,theme:Se(i),themeType:i,unsafeCSS:it,stickyHeaders:!0,itemMetrics:{diffHeaderHeight:33},layout:{paddingTop:0,paddingBottom:8,gap:8}}},Y??lt)}):(0,L.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto p-2`,children:(0,L.jsxs)(`div`,{className:`space-y-2`,children:[(0,L.jsx)(`p`,{className:`text-[11px] text-muted-foreground/75`,children:Q.reason}),(0,L.jsx)(`pre`,{className:l(`max-h-[72vh] rounded-md border border-border/70 bg-background/70 p-3 font-mono text-[11px] leading-relaxed text-muted-foreground/90`,S?`overflow-auto whitespace-pre-wrap wrap-break-word`:`overflow-auto`),children:Q.text})]})}):Dt?(0,L.jsx)(fe,{label:q?`Loading checkpoint diff...`:G===`unstaged`?`Loading working tree diff...`:`Loading branch diff...`}):(0,L.jsx)(`div`,{className:`flex h-full items-center justify-center px-3 py-2 text-xs text-muted-foreground/70`,children:(0,L.jsx)(`p`,{children:kt?`No net changes in this selection.`:`No patch available for this selection.`})})]})}):(0,L.jsx)(`div`,{className:`flex flex-1 items-center justify-center px-5 text-center text-xs text-muted-foreground/70`,children:`Turn diffs are unavailable because this project is not a git repository.`}):(0,L.jsx)(`div`,{className:`flex flex-1 items-center justify-center px-5 text-center text-xs text-muted-foreground/70`,children:`Select a thread to inspect turn diffs.`})})}export{ye as DiffWorkerPoolProvider,U as default};
|
|
98
|
-
//# sourceMappingURL=DiffPanel-
|
|
98
|
+
//# sourceMappingURL=DiffPanel-DNoj1YDl.js.map
|