@p4code/cli 0.5.7 → 0.5.8
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 +143 -42
- package/dist/client/assets/{DiffPanel-BS0biQw-.js → DiffPanel-BGxwZkSi.js} +2 -2
- package/dist/client/assets/{FilePreviewPanel-Dn9DSGk3.js → FilePreviewPanel-D2jZ-0Y4.js} +2 -2
- package/dist/client/assets/{PreviewPanel-DWNwzOqs.js → PreviewPanel-DOJOIB5y.js} +2 -2
- package/dist/client/assets/{PullRequestCodeTab-fnd5EeZp.js → PullRequestCodeTab-NFRLrDvd.js} +2 -2
- package/dist/client/assets/{fileCommentAnnotations-BDibf4o7.js → fileCommentAnnotations-mzzk_EEa.js} +2 -2
- package/dist/client/assets/{index-Cj8u-oxt.js → index-CcbNZJJK.js} +13 -8
- package/dist/client/assets/{previewAssetResource-FVg-QUYZ.js → previewAssetResource-CpgS-JIg.js} +2 -2
- package/dist/client/assets/{renderFileChildren-BnxsBYhc.js → renderFileChildren-DsXE_Hp5.js} +2 -2
- package/dist/client/assets/{toggle-group-B7_HMe_x.js → toggle-group-Hm3zQLEm.js} +2 -2
- package/dist/client/index.html +2 -2
- package/package.json +1 -1
package/dist/bin.mjs
CHANGED
|
@@ -265,7 +265,7 @@ const make$116 = () => {
|
|
|
265
265
|
const layer$119 = Layer.sync(NetService, make$116);
|
|
266
266
|
//#endregion
|
|
267
267
|
//#region package.json
|
|
268
|
-
var version$1 = "0.5.
|
|
268
|
+
var version$1 = "0.5.8";
|
|
269
269
|
//#endregion
|
|
270
270
|
//#region src/config.ts
|
|
271
271
|
/**
|
|
@@ -7272,6 +7272,8 @@ Schema$1.Struct({
|
|
|
7272
7272
|
message: Schema$1.optional(TrimmedNonEmptyString),
|
|
7273
7273
|
turnId: Schema$1.optional(TurnId),
|
|
7274
7274
|
itemId: Schema$1.optional(ProviderItemId),
|
|
7275
|
+
/** Provider child conversation whose events belong to a subagent run. */
|
|
7276
|
+
taskId: Schema$1.optional(TrimmedNonEmptyString),
|
|
7275
7277
|
requestId: Schema$1.optional(ApprovalRequestId),
|
|
7276
7278
|
requestKind: Schema$1.optional(ProviderRequestKind),
|
|
7277
7279
|
textDelta: Schema$1.optional(Schema$1.String),
|
|
@@ -65116,9 +65118,9 @@ const FUSION_WATCHER_TOOL_INSTRUCTIONS = `Supervisor tools belong to the p4-code
|
|
|
65116
65118
|
## Recommendation
|
|
65117
65119
|
State the decision or correction in one sentence. For a phase review, say whether the phase is approved or needs changes.
|
|
65118
65120
|
## Reason
|
|
65119
|
-
Give concise evidence, relevant file/line references, and any unresolved risk. Distinguish observed facts from assumptions; do not claim checks you did not run.
|
|
65121
|
+
Give concise evidence, relevant file/line references, and any unresolved risk. Distinguish observed facts from assumptions; do not claim checks you did not run. Before prescribing a blocking product fix, identify the violated requirement and evidence of product ownership. If ownership is uncertain, state the hypothesis and request the smallest discriminating check, such as comparing the unchanged baseline or another app, rather than prescribing a speculative fix. Do not block a product fix on an artifact reproduced outside the product unless evidence still ties it to an unmet task requirement.
|
|
65120
65122
|
## Next step
|
|
65121
|
-
Give ordered, concrete actions for the builder, including the next phase and its completion condition. Preserve user requirements, constraints, and delivery authorization. Keep each section short; omit empty bullets and repeated status. Formatting does not authorize an otherwise unnecessary advice turn or replace an exact protocol response.`;
|
|
65123
|
+
Give ordered, concrete actions for the builder, including the next phase and its completion condition. Preserve user requirements, constraints, and delivery authorization. Before repeating an objection, compare the builder's response and intervening changes with the prior finding; cite new evidence and explain why the builder's response does not resolve it. Without new evidence and an actionable next step, do not resend the objection or repeat passed checks; report the unresolved state in your own thread and end. A supported unresolved blocker remains unapproved; avoiding repetition never justifies approval. For an open gate, follow its response and escalation protocol. Keep each section short; omit empty bullets and repeated status. Formatting does not authorize an otherwise unnecessary advice turn or replace an exact protocol response.`;
|
|
65122
65124
|
const FUSION_WATCHER_INSTRUCTIONS = `You are Fusion Supervisor (watcher) in an already-created native server pair. Follow the current turn's [fusion-review-policy] block when present; it overrides phase scheduling. Server owns pairing and coordination and wakes you with ${FUSION_REVIEW_PROMPT_PREFIX} or ${FUSION_GATE_PROMPT_PREFIX} prompts at builder turn boundaries. A plain message outside such a wake may arrive after your conversational memory of the pair is gone; its [fusion-pair] metadata block is authoritative: the builder thread exists and is the counterpart thread id. Never report that no builder thread exists. For a new pair, the initial user request is yours, and its first turn is research, not relay. Research it: when the request names a ticket, read that ticket AND its comments, including replies and inline comments, and treat a later comment as newer intent than the description; read the code, docs, project instructions, and current state the request touches. Analyse what you found: root cause or the concrete design constraint, scope, what the user actually wants delivered, and which delivery steps they authorized. Only then direct the first actionable phase to the idle builder through thread_advise, stating the findings that make the direction actionable alongside the original requirements, constraints, and authorized delivery scope. Never echo the request back as its own direction, never hand over a plan you did not ground in evidence, and never send ${FUSION_NO_OBJECTION_TEXT} before the builder has received its first phase and produced a turn to review. The builder has not received the initial prompt and must not start before your direction. Missing builder turn evidence is expected before that first direction; do not wait for it or implement the work yourself. Ask the user only when needed to resolve a blocking requirement. ${FUSION_WATCHER_TOOL_INSTRUCTIONS} To resume supervision, read builder evidence with thread_watch_review from lastReviewedImplementerSequence, capture its throughSequence on the first page and reuse that fixed bound while paging with nextAfterSequence until hasMore is false (including empty pages). Apply message append/replace operations by identity; recover truncated evidence through targeted raw thread_watch_events source ranges. Retain reviewed requirements and evidence for final review; recover missing context with targeted history reads rather than mandatory raw replay from zero, derive phase from artifacts (git log/status, PR, builder events, including its turn.plan.updated phase list), steer with thread_advise, and answer an open gate with thread_gate_respond. When a review or gate wake prompt specifies an explicit event range, that range wins over this metadata. Never poll or wait for the builder; deliver review or advice, then end the turn. Every thread_advise starts a builder turn whose completion wakes you again, so never advise a builder that is idle on an external wait or has nothing actionable; report the state in your own thread and end without advising. ${FUSION_PAIR_COMMUNICATION_INSTRUCTIONS}`;
|
|
65123
65125
|
/**
|
|
65124
65126
|
* The one-line stand-in for the full block on a message whose session already
|
|
@@ -87433,6 +87435,52 @@ const makeCodexTextGeneration = Effect.fn("makeCodexTextGeneration")(function* (
|
|
|
87433
87435
|
};
|
|
87434
87436
|
});
|
|
87435
87437
|
//#endregion
|
|
87438
|
+
//#region src/provider/Layers/codexSubagentModel.ts
|
|
87439
|
+
const CodexSubagentModel = Schema$1.Struct({
|
|
87440
|
+
model: Schema$1.NonEmptyString,
|
|
87441
|
+
reasoningEffort: Schema$1.optionalKey(Schema$1.NonEmptyString)
|
|
87442
|
+
});
|
|
87443
|
+
const decodeTurnContext = Schema$1.decodeUnknownOption(Schema$1.fromJsonString(Schema$1.Struct({
|
|
87444
|
+
type: Schema$1.Literal("turn_context"),
|
|
87445
|
+
payload: Schema$1.Struct({
|
|
87446
|
+
turn_id: Schema$1.String,
|
|
87447
|
+
model: Schema$1.NonEmptyString,
|
|
87448
|
+
effort: Schema$1.optionalKey(Schema$1.NullOr(Schema$1.String))
|
|
87449
|
+
})
|
|
87450
|
+
})));
|
|
87451
|
+
/** Match the child turn exactly: forked rollouts also contain parent model records. */
|
|
87452
|
+
const readCodexSubagentModel = Effect.fn("readCodexSubagentModel")(function* (path, turnId) {
|
|
87453
|
+
return yield* (yield* FileSystem.FileSystem).stream(path).pipe(Stream.decodeText(), Stream.splitLines, Stream.filterMap((line) => Option.match(decodeTurnContext(line).pipe(Option.filter((record) => record.payload.turn_id === turnId), Option.map(({ payload }) => ({
|
|
87454
|
+
model: payload.model,
|
|
87455
|
+
...payload.effort?.trim() ? { reasoningEffort: payload.effort.trim() } : {}
|
|
87456
|
+
}))), {
|
|
87457
|
+
onNone: () => Result$1.failVoid,
|
|
87458
|
+
onSome: Result$1.succeed
|
|
87459
|
+
})), Stream.runHead);
|
|
87460
|
+
});
|
|
87461
|
+
/**
|
|
87462
|
+
* Reports each Codex subagent's model once per subagent. A subagent keeps its
|
|
87463
|
+
* model across follow-up turns, so reporting per turn would re-read the rollout
|
|
87464
|
+
* on every child notification. A read that finds nothing is not remembered, so
|
|
87465
|
+
* the next turn of that subagent tries again.
|
|
87466
|
+
*/
|
|
87467
|
+
const makeCodexSubagentModelReporter = (options) => {
|
|
87468
|
+
const reported = /* @__PURE__ */ new Set();
|
|
87469
|
+
return Effect.fn("reportCodexSubagentModel")(function* (taskId, childTurnId, context) {
|
|
87470
|
+
if (reported.has(taskId)) return;
|
|
87471
|
+
const path = yield* options.resolveThreadPath(taskId);
|
|
87472
|
+
if (!path) return;
|
|
87473
|
+
const metadata = yield* readCodexSubagentModel(path, childTurnId);
|
|
87474
|
+
if (Option.isNone(metadata)) return;
|
|
87475
|
+
yield* options.emit({
|
|
87476
|
+
taskId,
|
|
87477
|
+
context,
|
|
87478
|
+
model: metadata.value
|
|
87479
|
+
});
|
|
87480
|
+
reported.add(taskId);
|
|
87481
|
+
});
|
|
87482
|
+
};
|
|
87483
|
+
//#endregion
|
|
87436
87484
|
//#region src/provider/Layers/codexMcpArgs.ts
|
|
87437
87485
|
/** Codex's own name for the token variable of p4code's built-in server. */
|
|
87438
87486
|
const CODEX_P4CODE_BEARER_TOKEN_ENV_VAR = "P4_MCP_BEARER_TOKEN";
|
|
@@ -87956,11 +88004,20 @@ function readRouteFields(notification) {
|
|
|
87956
88004
|
};
|
|
87957
88005
|
}
|
|
87958
88006
|
}
|
|
87959
|
-
function
|
|
87960
|
-
|
|
87961
|
-
|
|
87962
|
-
|
|
87963
|
-
|
|
88007
|
+
function routeCodexSubagentNotification(collabReceiverTurns, notification) {
|
|
88008
|
+
const providerThreadId = readNotificationThreadId(notification);
|
|
88009
|
+
const childParentTurnId = providerThreadId ? collabReceiverTurns.get(providerThreadId) : void 0;
|
|
88010
|
+
const childRoute = providerThreadId && childParentTurnId ? {
|
|
88011
|
+
taskId: providerThreadId,
|
|
88012
|
+
turnId: childParentTurnId
|
|
88013
|
+
} : void 0;
|
|
88014
|
+
const parentTurnId = childParentTurnId ?? readRouteFields(notification).turnId;
|
|
88015
|
+
if (!parentTurnId) return childRoute;
|
|
88016
|
+
if (notification.method !== "item/started" && notification.method !== "item/completed") return childRoute;
|
|
88017
|
+
const item = notification.params.item;
|
|
88018
|
+
if (item.type === "subAgentActivity") collabReceiverTurns.set(item.agentThreadId, parentTurnId);
|
|
88019
|
+
else if (item.type === "collabAgentToolCall") for (const receiverThreadId of item.receiverThreadIds) collabReceiverTurns.set(receiverThreadId, parentTurnId);
|
|
88020
|
+
return childRoute;
|
|
87964
88021
|
}
|
|
87965
88022
|
function shouldSuppressChildConversationNotification(method) {
|
|
87966
88023
|
return method === "thread/started" || method === "thread/status/changed" || method === "thread/archived" || method === "thread/unarchived" || method === "thread/closed" || method === "thread/compacted" || method === "thread/name/updated" || method === "thread/tokenUsage/updated" || method === "turn/started" || method === "turn/completed" || method === "turn/plan/updated" || method === "item/plan/delta";
|
|
@@ -88083,50 +88140,35 @@ const makeCodexSessionRuntime = (options) => Effect.gen(function* () {
|
|
|
88083
88140
|
const settlePendingApprovals = (decision) => Ref.get(pendingApprovalsRef).pipe(Effect.flatMap((pendingApprovals) => Effect.forEach(Array.from(pendingApprovals.values()), (pendingApproval) => Deferred.succeed(pendingApproval.decision, decision).pipe(Effect.ignore), { discard: true })));
|
|
88084
88141
|
const settlePendingUserInputs = (answers) => Ref.get(pendingUserInputsRef).pipe(Effect.flatMap((pendingUserInputs) => Effect.forEach(Array.from(pendingUserInputs.values()), (pendingUserInput) => Deferred.succeed(pendingUserInput.answers, answers).pipe(Effect.ignore), { discard: true })));
|
|
88085
88142
|
const usageBinding = makeCodexUsageBinding(options.onUsageLimits);
|
|
88143
|
+
const reportChildModel = Effect.fn("CodexSessionRuntime.reportChildModel")(makeCodexSubagentModelReporter({
|
|
88144
|
+
resolveThreadPath: (taskId) => client.request("thread/read", {
|
|
88145
|
+
threadId: taskId,
|
|
88146
|
+
includeTurns: false
|
|
88147
|
+
}).pipe(Effect.map((response) => response.thread.path)),
|
|
88148
|
+
emit: ({ taskId, context, model }) => emitEvent({
|
|
88149
|
+
kind: "notification",
|
|
88150
|
+
threadId: options.threadId,
|
|
88151
|
+
turnId: context,
|
|
88152
|
+
taskId,
|
|
88153
|
+
method: "subagent/model",
|
|
88154
|
+
payload: model
|
|
88155
|
+
})
|
|
88156
|
+
}), Effect.catch((error) => Effect.logDebug("Could not read Codex subagent model", { error })));
|
|
88086
88157
|
const handleRawNotification = (notification) => Effect.gen(function* () {
|
|
88087
88158
|
if (notification.method === "account/updated") yield* usageBinding.invalidate;
|
|
88088
88159
|
if (notification.method === "account/rateLimits/updated") yield* usageBinding.update(notification.params.rateLimits);
|
|
88089
88160
|
const payload = notification.params;
|
|
88090
88161
|
const route = readRouteFields(notification);
|
|
88091
88162
|
const collabReceiverTurns = yield* Ref.get(collabReceiverTurnsRef);
|
|
88092
|
-
const
|
|
88093
|
-
|
|
88094
|
-
|
|
88095
|
-
})();
|
|
88096
|
-
rememberCollabReceiverTurns(collabReceiverTurns, notification, route.turnId);
|
|
88097
|
-
if (childParentTurnId && notification.method === "turn/completed" && notification.params.turn.status !== "inProgress") {
|
|
88098
|
-
const childThreadId = notification.params.threadId;
|
|
88099
|
-
const childStatus = notification.params.turn.status === "failed" ? "errored" : notification.params.turn.status === "interrupted" ? "interrupted" : "completed";
|
|
88100
|
-
yield* emitEvent({
|
|
88101
|
-
kind: "notification",
|
|
88102
|
-
threadId: options.threadId,
|
|
88103
|
-
method: "item/completed",
|
|
88104
|
-
turnId: childParentTurnId,
|
|
88105
|
-
itemId: ProviderItemId.make(`subagent-${notification.params.turn.id}`),
|
|
88106
|
-
payload: {
|
|
88107
|
-
completedAtMs: DateTime.toEpochMillis(yield* DateTime.now),
|
|
88108
|
-
threadId: childThreadId,
|
|
88109
|
-
turnId: childParentTurnId,
|
|
88110
|
-
item: {
|
|
88111
|
-
type: "collabAgentToolCall",
|
|
88112
|
-
id: `subagent-${notification.params.turn.id}`,
|
|
88113
|
-
tool: "wait",
|
|
88114
|
-
status: childStatus === "errored" ? "failed" : "completed",
|
|
88115
|
-
senderThreadId: childThreadId,
|
|
88116
|
-
receiverThreadIds: [childThreadId],
|
|
88117
|
-
agentsStates: { [childThreadId]: { status: childStatus } }
|
|
88118
|
-
}
|
|
88119
|
-
}
|
|
88120
|
-
});
|
|
88121
|
-
collabReceiverTurns.delete(childThreadId);
|
|
88122
|
-
}
|
|
88123
|
-
if (childParentTurnId && shouldSuppressChildConversationNotification(notification.method)) {
|
|
88163
|
+
const childRoute = routeCodexSubagentNotification(collabReceiverTurns, notification);
|
|
88164
|
+
if (childRoute && (notification.method === "turn/started" || notification.method === "turn/completed")) yield* reportChildModel(childRoute.taskId, notification.params.turn.id, childRoute.turnId);
|
|
88165
|
+
if (childRoute && notification.method !== "turn/completed" && shouldSuppressChildConversationNotification(notification.method)) {
|
|
88124
88166
|
yield* Ref.set(collabReceiverTurnsRef, collabReceiverTurns);
|
|
88125
88167
|
return;
|
|
88126
88168
|
}
|
|
88127
88169
|
let requestId;
|
|
88128
88170
|
let requestKind;
|
|
88129
|
-
let turnId =
|
|
88171
|
+
let turnId = childRoute?.turnId ?? route.turnId;
|
|
88130
88172
|
let itemId = route.itemId;
|
|
88131
88173
|
if (notification.method === "serverRequest/resolved") {
|
|
88132
88174
|
const rawRequestId = typeof notification.params.requestId === "string" ? notification.params.requestId : String(notification.params.requestId);
|
|
@@ -88148,6 +88190,7 @@ const makeCodexSessionRuntime = (options) => Effect.gen(function* () {
|
|
|
88148
88190
|
kind: "notification",
|
|
88149
88191
|
threadId: options.threadId,
|
|
88150
88192
|
method: notification.method,
|
|
88193
|
+
...childRoute ? { taskId: childRoute.taskId } : {},
|
|
88151
88194
|
...turnId ? { turnId } : {},
|
|
88152
88195
|
...itemId ? { itemId } : {},
|
|
88153
88196
|
...requestId ? { requestId } : {},
|
|
@@ -88908,7 +88951,64 @@ function rememberAgentName(item, collabDefaults) {
|
|
|
88908
88951
|
const name = agentNameFromPath(item.agentPath);
|
|
88909
88952
|
if (name) collabDefaults.agentNames.set(item.agentThreadId, name);
|
|
88910
88953
|
}
|
|
88954
|
+
function childTaskEvents(event, canonicalThreadId, defaults) {
|
|
88955
|
+
if (!event.taskId) return [];
|
|
88956
|
+
const taskId = RuntimeTaskId.make(event.taskId);
|
|
88957
|
+
const base = runtimeEventBase(event, canonicalThreadId);
|
|
88958
|
+
if (event.method === "subagent/model") {
|
|
88959
|
+
const metadata = readPayload$1(CodexSubagentModel, event.payload);
|
|
88960
|
+
return metadata ? [{
|
|
88961
|
+
...collabTaskEventBase(base, taskId, "started"),
|
|
88962
|
+
type: "task.started",
|
|
88963
|
+
payload: {
|
|
88964
|
+
taskId,
|
|
88965
|
+
...metadata
|
|
88966
|
+
}
|
|
88967
|
+
}] : [];
|
|
88968
|
+
}
|
|
88969
|
+
if (event.method === "turn/completed") {
|
|
88970
|
+
const payload = readPayload$1(V2TurnCompletedNotification, event.payload);
|
|
88971
|
+
if (!payload || payload.turn.status === "inProgress") return [];
|
|
88972
|
+
const result = payload.turn.items.findLast((item) => item.type === "agentMessage");
|
|
88973
|
+
const summary = (result?.type === "agentMessage" ? trimText$1(result.text) : void 0) ?? defaults?.agentResults.get(payload.turn.id);
|
|
88974
|
+
defaults?.agentResults.delete(payload.turn.id);
|
|
88975
|
+
return [{
|
|
88976
|
+
...collabTaskEventBase(base, taskId, "completed"),
|
|
88977
|
+
type: "task.completed",
|
|
88978
|
+
payload: {
|
|
88979
|
+
taskId,
|
|
88980
|
+
status: payload.turn.status === "failed" ? "failed" : payload.turn.status === "interrupted" ? "stopped" : "completed",
|
|
88981
|
+
...summary ? { summary } : {}
|
|
88982
|
+
}
|
|
88983
|
+
}];
|
|
88984
|
+
}
|
|
88985
|
+
if (event.method !== "item/completed") return [];
|
|
88986
|
+
const payload = readPayload$1(V2ItemCompletedNotification, event.payload);
|
|
88987
|
+
if (!payload) return [];
|
|
88988
|
+
const item = payload.item;
|
|
88989
|
+
if (item.type === "subAgentActivity" || item.type === "collabAgentToolCall") {
|
|
88990
|
+
rememberAgentName(item, defaults);
|
|
88991
|
+
return collabTaskEvents(event, canonicalThreadId, item, defaults);
|
|
88992
|
+
}
|
|
88993
|
+
const itemType = toCanonicalItemType(item.type);
|
|
88994
|
+
if (itemType === "reasoning") return [];
|
|
88995
|
+
const detail = itemDetail(itemType, item);
|
|
88996
|
+
const title = itemTitle(itemType, item);
|
|
88997
|
+
const description = detail ?? title;
|
|
88998
|
+
if (!description) return [];
|
|
88999
|
+
if (item.type === "agentMessage" && detail) defaults?.agentResults.set(payload.turnId, detail);
|
|
89000
|
+
return [{
|
|
89001
|
+
...collabTaskEventBase(base, taskId, "progress"),
|
|
89002
|
+
type: "task.progress",
|
|
89003
|
+
payload: {
|
|
89004
|
+
taskId,
|
|
89005
|
+
description,
|
|
89006
|
+
...itemType !== "assistant_message" && itemType !== "user_message" && title ? { lastToolName: title } : {}
|
|
89007
|
+
}
|
|
89008
|
+
}];
|
|
89009
|
+
}
|
|
88911
89010
|
function mapToRuntimeEvents(event, canonicalThreadId, collabDefaults) {
|
|
89011
|
+
if (event.taskId && event.kind === "notification") return childTaskEvents(event, canonicalThreadId, collabDefaults);
|
|
88912
89012
|
if (event.kind === "error") {
|
|
88913
89013
|
if (!event.message) return [];
|
|
88914
89014
|
return [{
|
|
@@ -89499,7 +89599,7 @@ const makeCodexAdapter = Effect.fn("makeCodexAdapter")(function* (codexConfig, o
|
|
|
89499
89599
|
const sessionScope = yield* Scope.make("sequential");
|
|
89500
89600
|
let sessionScopeTransferred = false;
|
|
89501
89601
|
yield* Effect.addFinalizer(() => sessionScopeTransferred ? Effect.void : Scope.close(sessionScope, Exit.void));
|
|
89502
|
-
const runtime = yield* (options?.makeRuntime ?? makeCodexSessionRuntime)(runtimeInput).pipe(Effect.provideService(Scope.Scope, sessionScope), Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, childProcessSpawner), Effect.provideService(Crypto.Crypto, crypto), Effect.mapError((cause) => new ProviderAdapterProcessError({
|
|
89602
|
+
const runtime = yield* (options?.makeRuntime ?? makeCodexSessionRuntime)(runtimeInput).pipe(Effect.provideService(Scope.Scope, sessionScope), Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, childProcessSpawner), Effect.provideService(Crypto.Crypto, crypto), Effect.provideService(FileSystem.FileSystem, fileSystem), Effect.mapError((cause) => new ProviderAdapterProcessError({
|
|
89503
89603
|
provider: PROVIDER$4,
|
|
89504
89604
|
threadId: input.threadId,
|
|
89505
89605
|
detail: cause.message,
|
|
@@ -89507,6 +89607,7 @@ const makeCodexAdapter = Effect.fn("makeCodexAdapter")(function* (codexConfig, o
|
|
|
89507
89607
|
})));
|
|
89508
89608
|
const collabDefaults = {
|
|
89509
89609
|
agentNames: /* @__PURE__ */ new Map(),
|
|
89610
|
+
agentResults: /* @__PURE__ */ new Map(),
|
|
89510
89611
|
model: input.modelSelection?.instanceId === boundInstanceId ? input.modelSelection.model : void 0,
|
|
89511
89612
|
reasoningEffort: input.modelSelection?.instanceId === boundInstanceId ? getModelSelectionStringOptionValue(input.modelSelection, "reasoningEffort") : void 0
|
|
89512
89613
|
};
|
|
@@ -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{$l as i,Ba as a,Et as o,Fa as s,Ga as c,Il as l,Ja as ee,Ka as te,Ma as u,Rr as d,Ur as ne,Uu as f,Ya as p,Yr as re,_n as m,au as h,b as ie,dl as g,fl as _,gt as v,gu as ae,h as y,ht as b,ml as x,pl as oe,qa as S,st as C,uu as se,vt as w,xn as T,za as E}from"./previewAssetResource-
|
|
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{$l as i,Ba as a,Et as o,Fa as s,Ga as c,Il as l,Ja as ee,Ka as te,Ma as u,Rr as d,Ur as ne,Uu as f,Ya as p,Yr as re,_n as m,au as h,b as ie,dl as g,fl as _,gt as v,gu as ae,h as y,ht as b,ml as x,pl as oe,qa as S,st as C,uu as se,vt as w,xn as T,za as E}from"./previewAssetResource-CpgS-JIg.js";import{a as D,c as O,i as k,n as A,o as j,r as M,s as ce,t as N}from"./toggle-group-Hm3zQLEm.js";import{A as le,Fr as ue,J as de,Lr as fe,M as P,Mr as pe,Nr as me,Rr as he,Y as ge,_ as _e,_r as ve,at as ye,cr as be,ct as xe,dr as Se,fr as Ce,h as we,hr as Te,it as Ee,j as De,jr as Oe,k as ke,lr as Ae,lt 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,yr as Ve}from"./index-CcbNZJJK.js";import{a as He,n as Ue}from"./fileCommentAnnotations-mzzk_EEa.js";var We=x(`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}C.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:o,viewerRef:s,className:c,renderHeaderPrefix:l}=e,ee=d(Qe),te=d(B),u;t[0]===a?u=t[1]:(u=e=>e.getComposerDraft(a)?.reviewComments??qe,t[0]=a,t[1]=u);let f=d(u),[p,m]=(0,F.useState)(null),[h,ie]=(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]!==h||t[5]!==n||t[6]!==f||t[7]!==r){let e;t[9]!==h||t[10]!==f||t[11]!==r?(e=e=>{let{fileDiff:t,filePath:n,fileKey:i,collapsed:a}=e,o=f.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=h?.fileKey===i?[...o,h.annotation]:o;return{id:i,type:`diff`,fileDiff:t,annotations:s,collapsed:a,version:Ee(`${a?`1`:`0`}:${s.flatMap(z).join(`:`)}`)}},t[9]=h,t[10]=f,t[11]=r,t[12]=e):e=t[12],v=n.map(e),t[4]=h,t[5]=n,t[6]=f,t[7]=r,t[8]=v}else v=t[8];let ae=v,y;t[13]!==a||t[14]!==h?.annotation||t[15]!==te?(y=e=>{m(null),h?.annotation.metadata.entries.some(t=>t.id===e)?ie(null):te(a,e)},t[13]=a,t[14]=h?.annotation,t[15]=te,t[16]=y):y=t[16];let b=y,x;t[17]!==ee||t[18]!==a||t[19]!==h||t[20]!==_||t[21]!==r||t[22]!==i?(x=(e,t)=>{let n=h?.annotation.metadata.entries.find(t=>t.id===e),o=h?_.get(h.fileKey):void 0;if(!n||!o)return;let s=ne({id:n.id,sectionId:r,sectionTitle:i,filePath:o.filePath,fileDiff:o.fileDiff,range:n.range,text:t});s&&ee(a,s),m(null),ie(null)},t[17]=ee,t[18]=a,t[19]=h,t[20]=_,t[21]=r,t[22]=i,t[23]=x):x=t[23];let oe=x,S;t[24]!==_||t[25]!==r||t[26]!==i?(S=(e,t)=>{if(!e)return;let n=t.item;if(n.type!==`diff`)return;let a=_.get(n.id);if(!a)return;let o=Ue(),s=ne({id:o,sectionId:r,sectionTitle:i,filePath:a.filePath,fileDiff:a.fileDiff,range:e,text:``});s&&ie({fileKey:n.id,annotation:{side:Je(e),lineNumber:e.end,metadata:{entries:[{id:o,kind:`draft`,range:e,rangeLabel:s.rangeLabel,text:``}]}}})},t[24]=_,t[25]=r,t[26]=i,t[27]=S):S=t[27];let C=S,se=h!==null,w;t[28]===s?w=t[29]:(w=s?{ref:s}:{},t[28]=s,t[29]=w);let T;t[30]===c?T=t[31]:(T=c?{className:c}:{},t[30]=c,t[31]=T);let E=!se,O=!se,k;t[32]!==C||t[33]!==o||t[34]!==O||t[35]!==E?(k={...o,enableGutterUtility:E,enableLineSelection:O,onLineSelectionEnd:C},t[32]=C,t[33]=o,t[34]=O,t[35]=E,t[36]=k):k=t[36];let A;t[37]===l?A=t[38]:(A=e=>e.type===`diff`?l(e.fileDiff,e.id,e.collapsed===!0):null,t[37]=l,t[38]=A);let j;t[39]!==b||t[40]!==oe?(j=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:()=>b(e.id),onComment:t=>oe(e.id,t),onDelete:()=>b(e.id)},e.id))}),t[39]=b,t[40]=oe,t[41]=j):j=t[41];let M;return t[42]!==ae||t[43]!==p||t[44]!==k||t[45]!==A||t[46]!==j||t[47]!==w||t[48]!==T?(M=(0,L.jsx)(D,{...w,...T,items:ae,selectedLines:p,onSelectedLinesChange:m,options:k,renderHeaderPrefix:A,renderAnnotation:j}),t[42]=ae,t[43]=p,t[44]=k,t[45]=A,t[46]=j,t[47]=w,t[48]=T,t[49]=M):M=t[49],M}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:i(e,{label:`environment-data:review:diff-preview`,tag:f.reviewGetDiffPreview,staleTimeMs:5e3})}}var et=$e(T);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}=ie(),d=ue(),[ne]=(0,F.useState)(n),[f,re]=(0,F.useState)(`stacked`),[y,x]=(0,F.useState)(d.wordWrap),[C,T]=(0,F.useState)(d.diffIgnoreWhitespace),[D,_e]=(0,F.useState)(``),[Te,Ee]=(0,F.useState)(()=>({scopeKey:null,fileKeys:rt})),He=(0,F.useRef)(null),Ue=r.threadId,I=me(r),qe=I?.projectId??null,Je=pe(I&&qe?{environmentId:I.environmentId,projectId:qe}:null),R=I?.worktreePath??Je?.workspaceRoot,z=l(m.configValueAtom(I?.environmentId??null)),Xe=ve(I?.environmentId??null,z?.availableEditors??[]),Ze=o(I!=null&&R!=null?Oe.status({environmentId:I.environmentId,input:{cwd:R}}):null),B=P(e=>De(e.byThreadKey,r,ne===`unstaged`)),Qe=Ze.data?.isRepo??!0,{turnDiffSummaries:$e,inferredCheckpointTurnCountByTurnId:V}=le(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:C,cacheScope:q?`turn:${q.turnId}`:null},{enabled:Qe&&q!==void 0}),mt=o(W===null&&I&&R?et.diffPreview({environmentId:I.environmentId,input:{cwd:R,...K?{baseRef:K}:{},ignoreWhitespace:C}}):null),ht=W===null&&mt.error?.includes(`configured workspace root`)===!0&&z?.cwd!==void 0&&z.cwd!==R,gt=o(ht&&I&&z?et.diffPreview({environmentId:I.environmentId,input:{cwd:z.cwd,...K?{baseRef:K}:{},ignoreWhitespace:C}}):null),X=ht?gt:mt,Z=X.data?.sources.find(e=>e.kind===(G===`unstaged`?`working-tree`:`branch-range`)),_t=o(W===null&&G===`branch`&&I&&X.data?.cwd?Oe.listRefs({environmentId:I.environmentId,input:{cwd:X.data.cwd,includeMatchingRemoteRefs:!0,refKind:`local`,...D.trim().length>0?{query:D.trim()}:{},limit:100}}):null),vt=o(W===null&&G===`branch`&&I&&X.data?.cwd?Oe.listRefs({environmentId:I.environmentId,input:{cwd:X.data.cwd,includeMatchingRemoteRefs:!0,refKind:`remote`,...D.trim().length>0?{query:D.trim()}:{},limit:100}}):null),yt=tt(_t.data?.refs.filter(e=>e.name!==Z?.headRef)??[],vt.data?.refs??[]),bt=nt(yt,D),xt=e=>K&&K===e.remote?.name?K:e.local?.name??e.remote?.name??e.id,St=[H,...yt.map(xt)],Ct=[...D.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)=>je(e).localeCompare(je(t),void 0,{numeric:!0,sensitivity:`base`})),[Q]),$=(0,F.useMemo)(()=>At.map(e=>{let t=Ie(e);return{fileDiff:e,filePath:je(e),fileKey:t,collapsed:ut.has(t)}}),[ut,At]),jt=(0,F.useMemo)(()=>$.map(e=>e.fileKey),[$]),Mt=M(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=ke({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`&&!h(t)&&console.warn(`Failed to open diff file in editor.`,{operation:`open-diff-file`,environmentId:r.environmentId,threadId:r.threadId,...ae(se(t))})})()}})},[R,Pt,Xe,r]),It=(0,F.useCallback)(e=>{Ee(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)(()=>{Ee(e=>{let t=e.scopeKey===Y?e.fileKeys:rt;return{scopeKey:Y,fileKeys:k(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)(ge,{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)(s,{children:[(0,L.jsxs)(ee,{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)(_,{className:`size-3.5 shrink-0 text-muted-foreground`})]}),(0,L.jsxs)(a,{align:`start`,className:`w-60`,children:[(0,L.jsx)(E,{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)(E,{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)(E,{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)(c,{children:[(0,L.jsx)(S,{children:`Turn`}),(0,L.jsx)(te,{className:`w-64`,children:U.map(e=>{let t=e.checkpointTurnCount??V[e.turnId]??`?`;return(0,L.jsxs)(E,{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:Ve(e.completedAt,d.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)(Le,{className:`size-3.5 shrink-0 opacity-70`}),(0,L.jsxs)(Ne,{items:St,filteredItems:Ct,value:K??H,onOpenChange:e=>{e||_e(``)},onValueChange:e=>{e&&Bt(e===H?null:e)},children:[(0,L.jsxs)(Ce,{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)(_,{className:`size-3.5 shrink-0 opacity-70`})]}),(0,L.jsxs)(Se,{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)(he,{"aria-hidden":`true`,className:`pointer-events-none absolute top-1.5 left-0 size-4 shrink-0 text-muted-foreground/55`}),(0,L.jsx)(be,{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:D,onChange:e=>_e(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)(Re,{children:`No matching refs.`}),(0,L.jsxs)(Be,{className:`max-h-64 min-w-0 overflow-x-hidden`,children:[(0,L.jsx)(Ae,{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)(Ae,{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)(Fe,{"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)(oe,{"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)(we,{additions:Nt.additions,deletions:Nt.deletions,className:`mr-1 text-[11px]`,layout:`inline`}),$.length>0&&(0,L.jsxs)(b,{children:[(0,L.jsx)(w,{render:(0,L.jsx)(u,{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)(O,{className:`size-3`})}),(0,L.jsx)(v,{side:`top`,children:Mt?`Expand all files`:`Collapse all files`})]}),(0,L.jsxs)(A,{className:`shrink-0`,variant:`outline`,size:`xs`,value:[f],onValueChange:e=>{let t=e[0];(t===`stacked`||t===`split`)&&re(t)},children:[(0,L.jsx)(N,{"aria-label":`Stacked diff view`,value:`stacked`,children:(0,L.jsx)(j,{className:`size-3`})}),(0,L.jsx)(N,{"aria-label":`Split diff view`,value:`split`,children:(0,L.jsx)(ce,{className:`size-3`})})]}),(0,L.jsxs)(b,{children:[(0,L.jsx)(w,{render:(0,L.jsx)(N,{"aria-label":y?`Disable diff line wrapping`:`Enable diff line wrapping`,variant:`outline`,size:`xs`,pressed:y,onPressedChange:e=>{x(!!e)}}),children:(0,L.jsx)(fe,{className:`size-3`})}),(0,L.jsx)(v,{side:`top`,children:y?`Disable line wrapping`:`Enable line wrapping`})]}),(0,L.jsxs)(b,{children:[(0,L.jsx)(w,{render:(0,L.jsx)(N,{"aria-label":C?`Show whitespace changes`:`Hide whitespace changes`,variant:`outline`,size:`xs`,pressed:C,onPressedChange:e=>{T(!!e)}}),children:(0,L.jsx)(We,{className:`size-3`})}),(0,L.jsx)(v,{side:`top`,children:C?`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=je(e);return(0,L.jsxs)(b,{children:[(0,L.jsx)(w,{render:(0,L.jsx)(`button`,{type:`button`,className:p(`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`,ye(e)),"aria-label":n?`Expand ${r}`:`Collapse ${r}`,"aria-expanded":!n,onClick:e=>{e.stopPropagation(),It(t)}}),children:n?(0,L.jsx)(g,{className:`size-4`}):(0,L.jsx)(_,{className:`size-4`})}),(0,L.jsx)(v,{side:`top`,children:n?`Expand diff`:`Collapse diff`})]})},options:{diffStyle:f===`split`?`split`:`unified`,lineDiffType:`none`,overflow:y?`wrap`:`scroll`,theme:xe(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:p(`max-h-[72vh] rounded-md border border-border/70 bg-background/70 p-3 font-mono text-[11px] leading-relaxed text-muted-foreground/90`,y?`overflow-auto whitespace-pre-wrap wrap-break-word`:`overflow-auto`),children:Q.text})]})}):Dt?(0,L.jsx)(de,{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{_e as DiffWorkerPoolProvider,U as default};
|
|
98
|
-
//# sourceMappingURL=DiffPanel-
|
|
98
|
+
//# sourceMappingURL=DiffPanel-BGxwZkSi.js.map
|