@akiojin/gwt 4.12.0 → 4.12.2
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/bin/gwt.js +35 -9
- package/dist/claude.d.ts.map +1 -1
- package/dist/claude.js +67 -14
- package/dist/claude.js.map +1 -1
- package/dist/cli/ui/App.solid.d.ts.map +1 -1
- package/dist/cli/ui/App.solid.js +40 -8
- package/dist/cli/ui/App.solid.js.map +1 -1
- package/dist/cli/ui/components/solid/WizardController.d.ts.map +1 -1
- package/dist/cli/ui/components/solid/WizardController.js +48 -2
- package/dist/cli/ui/components/solid/WizardController.js.map +1 -1
- package/dist/cli/ui/components/solid/WizardSteps.d.ts +5 -0
- package/dist/cli/ui/components/solid/WizardSteps.d.ts.map +1 -1
- package/dist/cli/ui/components/solid/WizardSteps.js +29 -6
- package/dist/cli/ui/components/solid/WizardSteps.js.map +1 -1
- package/dist/cli/ui/utils/installedVersionCache.d.ts +33 -0
- package/dist/cli/ui/utils/installedVersionCache.d.ts.map +1 -0
- package/dist/cli/ui/utils/installedVersionCache.js +59 -0
- package/dist/cli/ui/utils/installedVersionCache.js.map +1 -0
- package/dist/cli/ui/utils/modelOptions.d.ts.map +1 -1
- package/dist/cli/ui/utils/modelOptions.js +16 -0
- package/dist/cli/ui/utils/modelOptions.js.map +1 -1
- package/dist/codex.d.ts.map +1 -1
- package/dist/codex.js +63 -22
- package/dist/codex.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/logging/reader.d.ts +2 -1
- package/dist/logging/reader.d.ts.map +1 -1
- package/dist/logging/reader.js +37 -1
- package/dist/logging/reader.js.map +1 -1
- package/dist/opentui/index.solid.js +298 -264
- package/dist/services/codingAgentResolver.d.ts.map +1 -1
- package/dist/services/codingAgentResolver.js +8 -6
- package/dist/services/codingAgentResolver.js.map +1 -1
- package/dist/shared/codingAgentConstants.d.ts +3 -0
- package/dist/shared/codingAgentConstants.d.ts.map +1 -1
- package/dist/shared/codingAgentConstants.js +66 -0
- package/dist/shared/codingAgentConstants.js.map +1 -1
- package/dist/utils/bun-runtime.d.ts +12 -0
- package/dist/utils/bun-runtime.d.ts.map +1 -0
- package/dist/utils/bun-runtime.js +13 -0
- package/dist/utils/bun-runtime.js.map +1 -0
- package/dist/utils/session/parsers/codex.d.ts.map +1 -1
- package/dist/utils/session/parsers/codex.js +0 -1
- package/dist/utils/session/parsers/codex.js.map +1 -1
- package/package.json +1 -1
- package/src/claude.ts +79 -15
- package/src/cli/ui/App.solid.tsx +55 -6
- package/src/cli/ui/__tests__/solid/AppSolid.cleanup.test.tsx +91 -0
- package/src/cli/ui/__tests__/solid/components/WizardController.test.tsx +63 -0
- package/src/cli/ui/__tests__/solid/components/WizardSteps.test.tsx +91 -1
- package/src/cli/ui/components/solid/WizardController.tsx +65 -1
- package/src/cli/ui/components/solid/WizardSteps.tsx +55 -10
- package/src/cli/ui/utils/__tests__/installedVersionCache.test.ts +46 -0
- package/src/cli/ui/utils/installedVersionCache.ts +84 -0
- package/src/cli/ui/utils/modelOptions.test.ts +6 -0
- package/src/cli/ui/utils/modelOptions.ts +16 -0
- package/src/codex.ts +78 -22
- package/src/index.ts +5 -0
- package/src/logging/reader.ts +48 -1
- package/src/services/codingAgentResolver.ts +12 -5
- package/src/shared/codingAgentConstants.ts +73 -0
- package/src/utils/bun-runtime.ts +29 -0
- package/src/utils/session/parsers/codex.ts +0 -1
|
@@ -42884,7 +42884,6 @@ var UNOWNED = {
|
|
|
42884
42884
|
context: null,
|
|
42885
42885
|
owner: null
|
|
42886
42886
|
};
|
|
42887
|
-
var NO_INIT = {};
|
|
42888
42887
|
var Owner = null;
|
|
42889
42888
|
var Transition = null;
|
|
42890
42889
|
var Scheduler = null;
|
|
@@ -42928,13 +42927,6 @@ function createSignal(value, options) {
|
|
|
42928
42927
|
};
|
|
42929
42928
|
return [readSignal.bind(s), setter];
|
|
42930
42929
|
}
|
|
42931
|
-
function createComputed(fn, value, options) {
|
|
42932
|
-
const c = createComputation(fn, value, true, STALE);
|
|
42933
|
-
if (Scheduler && Transition && Transition.running)
|
|
42934
|
-
Updates.push(c);
|
|
42935
|
-
else
|
|
42936
|
-
updateComputation(c);
|
|
42937
|
-
}
|
|
42938
42930
|
function createRenderEffect(fn, value, options) {
|
|
42939
42931
|
const c = createComputation(fn, value, false, STALE);
|
|
42940
42932
|
if (Scheduler && Transition && Transition.running)
|
|
@@ -42964,164 +42956,6 @@ function createMemo(fn, value, options) {
|
|
|
42964
42956
|
updateComputation(c);
|
|
42965
42957
|
return readSignal.bind(c);
|
|
42966
42958
|
}
|
|
42967
|
-
function isPromise(v) {
|
|
42968
|
-
return v && typeof v === "object" && "then" in v;
|
|
42969
|
-
}
|
|
42970
|
-
function createResource(pSource, pFetcher, pOptions) {
|
|
42971
|
-
let source;
|
|
42972
|
-
let fetcher;
|
|
42973
|
-
let options;
|
|
42974
|
-
if (typeof pFetcher === "function") {
|
|
42975
|
-
source = pSource;
|
|
42976
|
-
fetcher = pFetcher;
|
|
42977
|
-
options = pOptions || {};
|
|
42978
|
-
} else {
|
|
42979
|
-
source = true;
|
|
42980
|
-
fetcher = pSource;
|
|
42981
|
-
options = pFetcher || {};
|
|
42982
|
-
}
|
|
42983
|
-
let pr = null, initP = NO_INIT, id = null, loadedUnderTransition = false, scheduled = false, resolved = "initialValue" in options, dynamic = typeof source === "function" && createMemo(source);
|
|
42984
|
-
const contexts = new Set, [value, setValue] = (options.storage || createSignal)(options.initialValue), [error, setError] = createSignal(undefined), [track, trigger] = createSignal(undefined, {
|
|
42985
|
-
equals: false
|
|
42986
|
-
}), [state, setState] = createSignal(resolved ? "ready" : "unresolved");
|
|
42987
|
-
if (sharedConfig.context) {
|
|
42988
|
-
id = sharedConfig.getNextContextId();
|
|
42989
|
-
if (options.ssrLoadFrom === "initial")
|
|
42990
|
-
initP = options.initialValue;
|
|
42991
|
-
else if (sharedConfig.load && sharedConfig.has(id))
|
|
42992
|
-
initP = sharedConfig.load(id);
|
|
42993
|
-
}
|
|
42994
|
-
function loadEnd(p, v, error2, key) {
|
|
42995
|
-
if (pr === p) {
|
|
42996
|
-
pr = null;
|
|
42997
|
-
key !== undefined && (resolved = true);
|
|
42998
|
-
if ((p === initP || v === initP) && options.onHydrated)
|
|
42999
|
-
queueMicrotask(() => options.onHydrated(key, {
|
|
43000
|
-
value: v
|
|
43001
|
-
}));
|
|
43002
|
-
initP = NO_INIT;
|
|
43003
|
-
if (Transition && p && loadedUnderTransition) {
|
|
43004
|
-
Transition.promises.delete(p);
|
|
43005
|
-
loadedUnderTransition = false;
|
|
43006
|
-
runUpdates(() => {
|
|
43007
|
-
Transition.running = true;
|
|
43008
|
-
completeLoad(v, error2);
|
|
43009
|
-
}, false);
|
|
43010
|
-
} else
|
|
43011
|
-
completeLoad(v, error2);
|
|
43012
|
-
}
|
|
43013
|
-
return v;
|
|
43014
|
-
}
|
|
43015
|
-
function completeLoad(v, err) {
|
|
43016
|
-
runUpdates(() => {
|
|
43017
|
-
if (err === undefined)
|
|
43018
|
-
setValue(() => v);
|
|
43019
|
-
setState(err !== undefined ? "errored" : resolved ? "ready" : "unresolved");
|
|
43020
|
-
setError(err);
|
|
43021
|
-
for (const c of contexts.keys())
|
|
43022
|
-
c.decrement();
|
|
43023
|
-
contexts.clear();
|
|
43024
|
-
}, false);
|
|
43025
|
-
}
|
|
43026
|
-
function read() {
|
|
43027
|
-
const c = SuspenseContext && useContext(SuspenseContext), v = value(), err = error();
|
|
43028
|
-
if (err !== undefined && !pr)
|
|
43029
|
-
throw err;
|
|
43030
|
-
if (Listener && !Listener.user && c) {
|
|
43031
|
-
createComputed(() => {
|
|
43032
|
-
track();
|
|
43033
|
-
if (pr) {
|
|
43034
|
-
if (c.resolved && Transition && loadedUnderTransition)
|
|
43035
|
-
Transition.promises.add(pr);
|
|
43036
|
-
else if (!contexts.has(c)) {
|
|
43037
|
-
c.increment();
|
|
43038
|
-
contexts.add(c);
|
|
43039
|
-
}
|
|
43040
|
-
}
|
|
43041
|
-
});
|
|
43042
|
-
}
|
|
43043
|
-
return v;
|
|
43044
|
-
}
|
|
43045
|
-
function load(refetching = true) {
|
|
43046
|
-
if (refetching !== false && scheduled)
|
|
43047
|
-
return;
|
|
43048
|
-
scheduled = false;
|
|
43049
|
-
const lookup = dynamic ? dynamic() : source;
|
|
43050
|
-
loadedUnderTransition = Transition && Transition.running;
|
|
43051
|
-
if (lookup == null || lookup === false) {
|
|
43052
|
-
loadEnd(pr, untrack(value));
|
|
43053
|
-
return;
|
|
43054
|
-
}
|
|
43055
|
-
if (Transition && pr)
|
|
43056
|
-
Transition.promises.delete(pr);
|
|
43057
|
-
let error2;
|
|
43058
|
-
const p = initP !== NO_INIT ? initP : untrack(() => {
|
|
43059
|
-
try {
|
|
43060
|
-
return fetcher(lookup, {
|
|
43061
|
-
value: value(),
|
|
43062
|
-
refetching
|
|
43063
|
-
});
|
|
43064
|
-
} catch (fetcherError) {
|
|
43065
|
-
error2 = fetcherError;
|
|
43066
|
-
}
|
|
43067
|
-
});
|
|
43068
|
-
if (error2 !== undefined) {
|
|
43069
|
-
loadEnd(pr, undefined, castError(error2), lookup);
|
|
43070
|
-
return;
|
|
43071
|
-
} else if (!isPromise(p)) {
|
|
43072
|
-
loadEnd(pr, p, undefined, lookup);
|
|
43073
|
-
return p;
|
|
43074
|
-
}
|
|
43075
|
-
pr = p;
|
|
43076
|
-
if ("v" in p) {
|
|
43077
|
-
if (p.s === 1)
|
|
43078
|
-
loadEnd(pr, p.v, undefined, lookup);
|
|
43079
|
-
else
|
|
43080
|
-
loadEnd(pr, undefined, castError(p.v), lookup);
|
|
43081
|
-
return p;
|
|
43082
|
-
}
|
|
43083
|
-
scheduled = true;
|
|
43084
|
-
queueMicrotask(() => scheduled = false);
|
|
43085
|
-
runUpdates(() => {
|
|
43086
|
-
setState(resolved ? "refreshing" : "pending");
|
|
43087
|
-
trigger();
|
|
43088
|
-
}, false);
|
|
43089
|
-
return p.then((v) => loadEnd(p, v, undefined, lookup), (e) => loadEnd(p, undefined, castError(e), lookup));
|
|
43090
|
-
}
|
|
43091
|
-
Object.defineProperties(read, {
|
|
43092
|
-
state: {
|
|
43093
|
-
get: () => state()
|
|
43094
|
-
},
|
|
43095
|
-
error: {
|
|
43096
|
-
get: () => error()
|
|
43097
|
-
},
|
|
43098
|
-
loading: {
|
|
43099
|
-
get() {
|
|
43100
|
-
const s = state();
|
|
43101
|
-
return s === "pending" || s === "refreshing";
|
|
43102
|
-
}
|
|
43103
|
-
},
|
|
43104
|
-
latest: {
|
|
43105
|
-
get() {
|
|
43106
|
-
if (!resolved)
|
|
43107
|
-
return read();
|
|
43108
|
-
const err = error();
|
|
43109
|
-
if (err && !pr)
|
|
43110
|
-
throw err;
|
|
43111
|
-
return value();
|
|
43112
|
-
}
|
|
43113
|
-
}
|
|
43114
|
-
});
|
|
43115
|
-
let owner = Owner;
|
|
43116
|
-
if (dynamic)
|
|
43117
|
-
createComputed(() => (owner = Owner, load(false)));
|
|
43118
|
-
else
|
|
43119
|
-
load(false);
|
|
43120
|
-
return [read, {
|
|
43121
|
-
refetch: (info) => runWithOwner(owner, () => load(info)),
|
|
43122
|
-
mutate: setValue
|
|
43123
|
-
}];
|
|
43124
|
-
}
|
|
43125
42959
|
function batch(fn) {
|
|
43126
42960
|
return runUpdates(fn, false);
|
|
43127
42961
|
}
|
|
@@ -43171,20 +43005,6 @@ function onCleanup(fn) {
|
|
|
43171
43005
|
Owner.cleanups.push(fn);
|
|
43172
43006
|
return fn;
|
|
43173
43007
|
}
|
|
43174
|
-
function runWithOwner(o, fn) {
|
|
43175
|
-
const prev = Owner;
|
|
43176
|
-
const prevListener = Listener;
|
|
43177
|
-
Owner = o;
|
|
43178
|
-
Listener = null;
|
|
43179
|
-
try {
|
|
43180
|
-
return runUpdates(fn, true);
|
|
43181
|
-
} catch (err) {
|
|
43182
|
-
handleError(err);
|
|
43183
|
-
} finally {
|
|
43184
|
-
Owner = prev;
|
|
43185
|
-
Listener = prevListener;
|
|
43186
|
-
}
|
|
43187
|
-
}
|
|
43188
43008
|
function startTransition(fn) {
|
|
43189
43009
|
if (Transition && Transition.running) {
|
|
43190
43010
|
fn();
|
|
@@ -46891,6 +46711,19 @@ var MODEL_OPTIONS = {
|
|
|
46891
46711
|
label: "Flash-Lite (gemini-2.5-flash-lite)",
|
|
46892
46712
|
description: "Fastest for simple tasks"
|
|
46893
46713
|
}
|
|
46714
|
+
],
|
|
46715
|
+
opencode: [
|
|
46716
|
+
{
|
|
46717
|
+
id: "",
|
|
46718
|
+
label: "Default (Auto)",
|
|
46719
|
+
description: "Use OpenCode default model",
|
|
46720
|
+
isDefault: true
|
|
46721
|
+
},
|
|
46722
|
+
{
|
|
46723
|
+
id: "__custom__",
|
|
46724
|
+
label: "Custom (provider/model)",
|
|
46725
|
+
description: "Enter a provider/model identifier"
|
|
46726
|
+
}
|
|
46894
46727
|
]
|
|
46895
46728
|
};
|
|
46896
46729
|
function getModelOptions(tool) {
|
|
@@ -46920,6 +46753,9 @@ function normalizeModelId(tool, model) {
|
|
|
46920
46753
|
const trimmed = model.trim();
|
|
46921
46754
|
if (!trimmed)
|
|
46922
46755
|
return null;
|
|
46756
|
+
if (tool === "opencode" && trimmed === "__custom__") {
|
|
46757
|
+
return null;
|
|
46758
|
+
}
|
|
46923
46759
|
if (tool === "claude-code") {
|
|
46924
46760
|
const lower = trimmed.toLowerCase();
|
|
46925
46761
|
if (lower === "opuss")
|
|
@@ -46955,6 +46791,33 @@ async function prefetchAgentVersions(agentIds, fetchFn) {
|
|
|
46955
46791
|
|
|
46956
46792
|
// src/cli/ui/components/solid/WizardSteps.tsx
|
|
46957
46793
|
init_versionFetcher();
|
|
46794
|
+
|
|
46795
|
+
// src/cli/ui/utils/installedVersionCache.ts
|
|
46796
|
+
init_versionFetcher();
|
|
46797
|
+
var installedVersionCache = new Map;
|
|
46798
|
+
function getInstalledVersionCache(agentId) {
|
|
46799
|
+
const cached = installedVersionCache.get(agentId);
|
|
46800
|
+
return cached ?? null;
|
|
46801
|
+
}
|
|
46802
|
+
function setInstalledVersionCache(agentId, installed) {
|
|
46803
|
+
installedVersionCache.set(agentId, installed);
|
|
46804
|
+
}
|
|
46805
|
+
async function prefetchInstalledVersions(agentIds, fetchFn) {
|
|
46806
|
+
const fetcher = fetchFn ?? (async (agentId) => fetchInstalledVersionForAgent(agentId));
|
|
46807
|
+
const results = await Promise.allSettled(agentIds.map(async (agentId) => {
|
|
46808
|
+
try {
|
|
46809
|
+
const installed = await fetcher(agentId);
|
|
46810
|
+
setInstalledVersionCache(agentId, installed);
|
|
46811
|
+
} catch {
|
|
46812
|
+
setInstalledVersionCache(agentId, null);
|
|
46813
|
+
}
|
|
46814
|
+
}));
|
|
46815
|
+
for (const result of results) {
|
|
46816
|
+
if (result.status === "rejected") {}
|
|
46817
|
+
}
|
|
46818
|
+
}
|
|
46819
|
+
|
|
46820
|
+
// src/cli/ui/components/solid/WizardSteps.tsx
|
|
46958
46821
|
var useEnsureSelectionVisible = (options) => {
|
|
46959
46822
|
const scroll = useWizardScroll();
|
|
46960
46823
|
const ensureIndexVisible = (index) => {
|
|
@@ -47376,6 +47239,61 @@ function ModelSelectStep(props) {
|
|
|
47376
47239
|
return _el$43;
|
|
47377
47240
|
})();
|
|
47378
47241
|
}
|
|
47242
|
+
function ModelInputStep(props) {
|
|
47243
|
+
const [value, setValue] = createSignal("");
|
|
47244
|
+
const scroll = useWizardScroll();
|
|
47245
|
+
const placeholder = props.agentId === "opencode" ? "provider/model" : "model";
|
|
47246
|
+
createEffect(() => {
|
|
47247
|
+
if (props.focused === false) {
|
|
47248
|
+
return;
|
|
47249
|
+
}
|
|
47250
|
+
if (!scroll) {
|
|
47251
|
+
return;
|
|
47252
|
+
}
|
|
47253
|
+
scroll.ensureLineVisible(2);
|
|
47254
|
+
});
|
|
47255
|
+
const handleSubmit = (next) => {
|
|
47256
|
+
const trimmed = next.trim();
|
|
47257
|
+
if (!trimmed) {
|
|
47258
|
+
return;
|
|
47259
|
+
}
|
|
47260
|
+
props.onSubmit(trimmed);
|
|
47261
|
+
};
|
|
47262
|
+
return (() => {
|
|
47263
|
+
var _el$52 = createElement("box"), _el$53 = createElement("text"), _el$55 = createElement("text"), _el$57 = createElement("text"), _el$59 = createElement("text");
|
|
47264
|
+
insertNode(_el$52, _el$53);
|
|
47265
|
+
insertNode(_el$52, _el$55);
|
|
47266
|
+
insertNode(_el$52, _el$57);
|
|
47267
|
+
insertNode(_el$52, _el$59);
|
|
47268
|
+
setProp(_el$52, "flexDirection", "column");
|
|
47269
|
+
insertNode(_el$53, createTextNode(`Enter custom model:`));
|
|
47270
|
+
setProp(_el$53, "fg", "cyan");
|
|
47271
|
+
insertNode(_el$55, createTextNode(` `));
|
|
47272
|
+
insert(_el$52, createComponent2(TextInput, {
|
|
47273
|
+
get value() {
|
|
47274
|
+
return value();
|
|
47275
|
+
},
|
|
47276
|
+
onChange: setValue,
|
|
47277
|
+
onSubmit: handleSubmit,
|
|
47278
|
+
placeholder,
|
|
47279
|
+
get focused() {
|
|
47280
|
+
return props.focused ?? true;
|
|
47281
|
+
}
|
|
47282
|
+
}), _el$57);
|
|
47283
|
+
insertNode(_el$57, createTextNode(` `));
|
|
47284
|
+
insertNode(_el$59, createTextNode(`[Enter] Submit [Esc] Back`));
|
|
47285
|
+
effect((_p$) => {
|
|
47286
|
+
var _v$11 = TextAttributes.BOLD, _v$12 = TextAttributes.DIM;
|
|
47287
|
+
_v$11 !== _p$.e && (_p$.e = setProp(_el$53, "attributes", _v$11, _p$.e));
|
|
47288
|
+
_v$12 !== _p$.t && (_p$.t = setProp(_el$59, "attributes", _v$12, _p$.t));
|
|
47289
|
+
return _p$;
|
|
47290
|
+
}, {
|
|
47291
|
+
e: undefined,
|
|
47292
|
+
t: undefined
|
|
47293
|
+
});
|
|
47294
|
+
return _el$52;
|
|
47295
|
+
})();
|
|
47296
|
+
}
|
|
47379
47297
|
var REASONING_LEVELS = [{
|
|
47380
47298
|
label: "low",
|
|
47381
47299
|
value: "low",
|
|
@@ -47413,16 +47331,16 @@ function ReasoningLevelStep(props) {
|
|
|
47413
47331
|
}
|
|
47414
47332
|
};
|
|
47415
47333
|
return (() => {
|
|
47416
|
-
var _el$
|
|
47417
|
-
insertNode(_el$
|
|
47418
|
-
insertNode(_el$
|
|
47419
|
-
insertNode(_el$
|
|
47420
|
-
insertNode(_el$
|
|
47421
|
-
setProp(_el$
|
|
47422
|
-
insertNode(_el$
|
|
47423
|
-
setProp(_el$
|
|
47424
|
-
insertNode(_el$
|
|
47425
|
-
insert(_el$
|
|
47334
|
+
var _el$61 = createElement("box"), _el$62 = createElement("text"), _el$64 = createElement("text"), _el$66 = createElement("text"), _el$68 = createElement("text");
|
|
47335
|
+
insertNode(_el$61, _el$62);
|
|
47336
|
+
insertNode(_el$61, _el$64);
|
|
47337
|
+
insertNode(_el$61, _el$66);
|
|
47338
|
+
insertNode(_el$61, _el$68);
|
|
47339
|
+
setProp(_el$61, "flexDirection", "column");
|
|
47340
|
+
insertNode(_el$62, createTextNode(`Select reasoning level:`));
|
|
47341
|
+
setProp(_el$62, "fg", "cyan");
|
|
47342
|
+
insertNode(_el$64, createTextNode(` `));
|
|
47343
|
+
insert(_el$61, createComponent2(SelectInput, {
|
|
47426
47344
|
items: REASONING_LEVELS,
|
|
47427
47345
|
onSelect: (item) => props.onSelect(item.value),
|
|
47428
47346
|
onChange: handleChange,
|
|
@@ -47430,19 +47348,19 @@ function ReasoningLevelStep(props) {
|
|
|
47430
47348
|
return props.focused ?? true;
|
|
47431
47349
|
},
|
|
47432
47350
|
selectRef: setSelectRef
|
|
47433
|
-
}), _el$
|
|
47434
|
-
insertNode(_el$
|
|
47435
|
-
insertNode(_el$
|
|
47351
|
+
}), _el$66);
|
|
47352
|
+
insertNode(_el$66, createTextNode(` `));
|
|
47353
|
+
insertNode(_el$68, createTextNode(`[Enter] Select [Esc] Back`));
|
|
47436
47354
|
effect((_p$) => {
|
|
47437
|
-
var _v$
|
|
47438
|
-
_v$
|
|
47439
|
-
_v$
|
|
47355
|
+
var _v$13 = TextAttributes.BOLD, _v$14 = TextAttributes.DIM;
|
|
47356
|
+
_v$13 !== _p$.e && (_p$.e = setProp(_el$62, "attributes", _v$13, _p$.e));
|
|
47357
|
+
_v$14 !== _p$.t && (_p$.t = setProp(_el$68, "attributes", _v$14, _p$.t));
|
|
47440
47358
|
return _p$;
|
|
47441
47359
|
}, {
|
|
47442
47360
|
e: undefined,
|
|
47443
47361
|
t: undefined
|
|
47444
47362
|
});
|
|
47445
|
-
return _el$
|
|
47363
|
+
return _el$61;
|
|
47446
47364
|
})();
|
|
47447
47365
|
}
|
|
47448
47366
|
var EXECUTION_MODES = [{
|
|
@@ -47478,16 +47396,16 @@ function ExecutionModeStep(props) {
|
|
|
47478
47396
|
}
|
|
47479
47397
|
};
|
|
47480
47398
|
return (() => {
|
|
47481
|
-
var _el$
|
|
47482
|
-
insertNode(_el$
|
|
47483
|
-
insertNode(_el$
|
|
47484
|
-
insertNode(_el$
|
|
47485
|
-
insertNode(_el$
|
|
47486
|
-
setProp(_el$
|
|
47487
|
-
insertNode(_el$
|
|
47488
|
-
setProp(_el$
|
|
47489
|
-
insertNode(_el$
|
|
47490
|
-
insert(_el$
|
|
47399
|
+
var _el$70 = createElement("box"), _el$71 = createElement("text"), _el$73 = createElement("text"), _el$75 = createElement("text"), _el$77 = createElement("text");
|
|
47400
|
+
insertNode(_el$70, _el$71);
|
|
47401
|
+
insertNode(_el$70, _el$73);
|
|
47402
|
+
insertNode(_el$70, _el$75);
|
|
47403
|
+
insertNode(_el$70, _el$77);
|
|
47404
|
+
setProp(_el$70, "flexDirection", "column");
|
|
47405
|
+
insertNode(_el$71, createTextNode(`Select execution mode:`));
|
|
47406
|
+
setProp(_el$71, "fg", "cyan");
|
|
47407
|
+
insertNode(_el$73, createTextNode(` `));
|
|
47408
|
+
insert(_el$70, createComponent2(SelectInput, {
|
|
47491
47409
|
items: EXECUTION_MODES,
|
|
47492
47410
|
onSelect: (item) => props.onSelect(item.value),
|
|
47493
47411
|
onChange: handleChange,
|
|
@@ -47495,19 +47413,19 @@ function ExecutionModeStep(props) {
|
|
|
47495
47413
|
return props.focused ?? true;
|
|
47496
47414
|
},
|
|
47497
47415
|
selectRef: setSelectRef
|
|
47498
|
-
}), _el$
|
|
47499
|
-
insertNode(_el$
|
|
47500
|
-
insertNode(_el$
|
|
47416
|
+
}), _el$75);
|
|
47417
|
+
insertNode(_el$75, createTextNode(` `));
|
|
47418
|
+
insertNode(_el$77, createTextNode(`[Enter] Select [Esc] Back`));
|
|
47501
47419
|
effect((_p$) => {
|
|
47502
|
-
var _v$
|
|
47503
|
-
_v$
|
|
47504
|
-
_v$
|
|
47420
|
+
var _v$15 = TextAttributes.BOLD, _v$16 = TextAttributes.DIM;
|
|
47421
|
+
_v$15 !== _p$.e && (_p$.e = setProp(_el$71, "attributes", _v$15, _p$.e));
|
|
47422
|
+
_v$16 !== _p$.t && (_p$.t = setProp(_el$77, "attributes", _v$16, _p$.t));
|
|
47505
47423
|
return _p$;
|
|
47506
47424
|
}, {
|
|
47507
47425
|
e: undefined,
|
|
47508
47426
|
t: undefined
|
|
47509
47427
|
});
|
|
47510
|
-
return _el$
|
|
47428
|
+
return _el$70;
|
|
47511
47429
|
})();
|
|
47512
47430
|
}
|
|
47513
47431
|
var SKIP_OPTIONS = [{
|
|
@@ -47539,16 +47457,16 @@ function SkipPermissionsStep(props) {
|
|
|
47539
47457
|
}
|
|
47540
47458
|
};
|
|
47541
47459
|
return (() => {
|
|
47542
|
-
var _el$
|
|
47543
|
-
insertNode(_el$
|
|
47544
|
-
insertNode(_el$
|
|
47545
|
-
insertNode(_el$
|
|
47546
|
-
insertNode(_el$
|
|
47547
|
-
setProp(_el$
|
|
47548
|
-
insertNode(_el$
|
|
47549
|
-
setProp(_el$
|
|
47550
|
-
insertNode(_el$
|
|
47551
|
-
insert(_el$
|
|
47460
|
+
var _el$79 = createElement("box"), _el$80 = createElement("text"), _el$82 = createElement("text"), _el$84 = createElement("text"), _el$86 = createElement("text");
|
|
47461
|
+
insertNode(_el$79, _el$80);
|
|
47462
|
+
insertNode(_el$79, _el$82);
|
|
47463
|
+
insertNode(_el$79, _el$84);
|
|
47464
|
+
insertNode(_el$79, _el$86);
|
|
47465
|
+
setProp(_el$79, "flexDirection", "column");
|
|
47466
|
+
insertNode(_el$80, createTextNode(`Skip permission prompts?`));
|
|
47467
|
+
setProp(_el$80, "fg", "cyan");
|
|
47468
|
+
insertNode(_el$82, createTextNode(` `));
|
|
47469
|
+
insert(_el$79, createComponent2(SelectInput, {
|
|
47552
47470
|
items: SKIP_OPTIONS,
|
|
47553
47471
|
onSelect: (item) => props.onSelect(item.value === "true"),
|
|
47554
47472
|
onChange: handleChange,
|
|
@@ -47556,19 +47474,19 @@ function SkipPermissionsStep(props) {
|
|
|
47556
47474
|
return props.focused ?? true;
|
|
47557
47475
|
},
|
|
47558
47476
|
selectRef: setSelectRef
|
|
47559
|
-
}), _el$
|
|
47560
|
-
insertNode(_el$
|
|
47561
|
-
insertNode(_el$
|
|
47477
|
+
}), _el$84);
|
|
47478
|
+
insertNode(_el$84, createTextNode(` `));
|
|
47479
|
+
insertNode(_el$86, createTextNode(`[Enter] Select [Esc] Back`));
|
|
47562
47480
|
effect((_p$) => {
|
|
47563
|
-
var _v$
|
|
47564
|
-
_v$
|
|
47565
|
-
_v$
|
|
47481
|
+
var _v$17 = TextAttributes.BOLD, _v$18 = TextAttributes.DIM;
|
|
47482
|
+
_v$17 !== _p$.e && (_p$.e = setProp(_el$80, "attributes", _v$17, _p$.e));
|
|
47483
|
+
_v$18 !== _p$.t && (_p$.t = setProp(_el$86, "attributes", _v$18, _p$.t));
|
|
47566
47484
|
return _p$;
|
|
47567
47485
|
}, {
|
|
47568
47486
|
e: undefined,
|
|
47569
47487
|
t: undefined
|
|
47570
47488
|
});
|
|
47571
|
-
return _el$
|
|
47489
|
+
return _el$79;
|
|
47572
47490
|
})();
|
|
47573
47491
|
}
|
|
47574
47492
|
var LATEST_OPTION = {
|
|
@@ -47586,10 +47504,10 @@ function VersionSelectStep(props) {
|
|
|
47586
47504
|
}
|
|
47587
47505
|
return cached.map(versionInfoToSelectItem);
|
|
47588
47506
|
};
|
|
47589
|
-
const
|
|
47590
|
-
const installed =
|
|
47507
|
+
const installedOption = () => {
|
|
47508
|
+
const installed = getInstalledVersionCache(props.agentId);
|
|
47591
47509
|
return installed ? createInstalledOption(installed) : null;
|
|
47592
|
-
}
|
|
47510
|
+
};
|
|
47593
47511
|
const allOptions = () => {
|
|
47594
47512
|
const options = [];
|
|
47595
47513
|
const installed = installedOption();
|
|
@@ -47636,25 +47554,25 @@ function VersionSelectStep(props) {
|
|
|
47636
47554
|
return null;
|
|
47637
47555
|
};
|
|
47638
47556
|
return (() => {
|
|
47639
|
-
var _el$
|
|
47640
|
-
insertNode(_el$
|
|
47641
|
-
insertNode(_el$
|
|
47642
|
-
insertNode(_el$
|
|
47643
|
-
insertNode(_el$
|
|
47644
|
-
setProp(_el$
|
|
47645
|
-
insertNode(_el$
|
|
47646
|
-
setProp(_el$
|
|
47647
|
-
insert(_el$
|
|
47557
|
+
var _el$88 = createElement("box"), _el$89 = createElement("text"), _el$91 = createElement("text"), _el$93 = createElement("text"), _el$95 = createElement("text");
|
|
47558
|
+
insertNode(_el$88, _el$89);
|
|
47559
|
+
insertNode(_el$88, _el$91);
|
|
47560
|
+
insertNode(_el$88, _el$93);
|
|
47561
|
+
insertNode(_el$88, _el$95);
|
|
47562
|
+
setProp(_el$88, "flexDirection", "column");
|
|
47563
|
+
insertNode(_el$89, createTextNode(`Select version:`));
|
|
47564
|
+
setProp(_el$89, "fg", "cyan");
|
|
47565
|
+
insert(_el$88, (() => {
|
|
47648
47566
|
var _c$ = memo2(() => !!statusText());
|
|
47649
47567
|
return () => _c$() && (() => {
|
|
47650
|
-
var _el$
|
|
47651
|
-
insert(_el$
|
|
47652
|
-
effect((_$p) => setProp(_el$
|
|
47653
|
-
return _el$
|
|
47568
|
+
var _el$97 = createElement("text");
|
|
47569
|
+
insert(_el$97, statusText);
|
|
47570
|
+
effect((_$p) => setProp(_el$97, "attributes", TextAttributes.DIM, _$p));
|
|
47571
|
+
return _el$97;
|
|
47654
47572
|
})();
|
|
47655
|
-
})(), _el$
|
|
47656
|
-
insertNode(_el$
|
|
47657
|
-
insert(_el$
|
|
47573
|
+
})(), _el$91);
|
|
47574
|
+
insertNode(_el$91, createTextNode(` `));
|
|
47575
|
+
insert(_el$88, createComponent2(SelectInput, {
|
|
47658
47576
|
get items() {
|
|
47659
47577
|
return allOptions();
|
|
47660
47578
|
},
|
|
@@ -47664,19 +47582,19 @@ function VersionSelectStep(props) {
|
|
|
47664
47582
|
return props.focused ?? true;
|
|
47665
47583
|
},
|
|
47666
47584
|
selectRef: setSelectRef
|
|
47667
|
-
}), _el$
|
|
47668
|
-
insertNode(_el$
|
|
47669
|
-
insertNode(_el$
|
|
47585
|
+
}), _el$93);
|
|
47586
|
+
insertNode(_el$93, createTextNode(` `));
|
|
47587
|
+
insertNode(_el$95, createTextNode(`[Enter] Select [Esc] Back`));
|
|
47670
47588
|
effect((_p$) => {
|
|
47671
|
-
var _v$
|
|
47672
|
-
_v$
|
|
47673
|
-
_v$
|
|
47589
|
+
var _v$19 = TextAttributes.BOLD, _v$20 = TextAttributes.DIM;
|
|
47590
|
+
_v$19 !== _p$.e && (_p$.e = setProp(_el$89, "attributes", _v$19, _p$.e));
|
|
47591
|
+
_v$20 !== _p$.t && (_p$.t = setProp(_el$95, "attributes", _v$20, _p$.t));
|
|
47674
47592
|
return _p$;
|
|
47675
47593
|
}, {
|
|
47676
47594
|
e: undefined,
|
|
47677
47595
|
t: undefined
|
|
47678
47596
|
});
|
|
47679
|
-
return _el$
|
|
47597
|
+
return _el$88;
|
|
47680
47598
|
})();
|
|
47681
47599
|
}
|
|
47682
47600
|
|
|
@@ -47692,7 +47610,9 @@ function WizardController(props) {
|
|
|
47692
47610
|
const [selectedModel, setSelectedModel] = createSignal("");
|
|
47693
47611
|
const [reasoningLevel, setReasoningLevel] = createSignal(undefined);
|
|
47694
47612
|
const [executionMode, setExecutionMode] = createSignal("normal");
|
|
47613
|
+
const [versionSelectionReady, setVersionSelectionReady] = createSignal(false);
|
|
47695
47614
|
const [isTransitioning, setIsTransitioning] = createSignal(true);
|
|
47615
|
+
let versionSelectionTimer = null;
|
|
47696
47616
|
function getInitialStep() {
|
|
47697
47617
|
if (props.history.length > 0) {
|
|
47698
47618
|
return "quick-start";
|
|
@@ -47750,6 +47670,26 @@ function WizardController(props) {
|
|
|
47750
47670
|
setStep(previousStep);
|
|
47751
47671
|
startTransition2();
|
|
47752
47672
|
};
|
|
47673
|
+
createEffect(() => {
|
|
47674
|
+
const currentStep = step();
|
|
47675
|
+
if (versionSelectionTimer) {
|
|
47676
|
+
clearTimeout(versionSelectionTimer);
|
|
47677
|
+
versionSelectionTimer = null;
|
|
47678
|
+
}
|
|
47679
|
+
if (currentStep === "version-select") {
|
|
47680
|
+
setVersionSelectionReady(false);
|
|
47681
|
+
versionSelectionTimer = setTimeout(() => {
|
|
47682
|
+
setVersionSelectionReady(true);
|
|
47683
|
+
}, 50);
|
|
47684
|
+
return;
|
|
47685
|
+
}
|
|
47686
|
+
setVersionSelectionReady(false);
|
|
47687
|
+
});
|
|
47688
|
+
onCleanup(() => {
|
|
47689
|
+
if (versionSelectionTimer) {
|
|
47690
|
+
clearTimeout(versionSelectionTimer);
|
|
47691
|
+
}
|
|
47692
|
+
});
|
|
47753
47693
|
const needsReasoningLevel = createMemo(() => {
|
|
47754
47694
|
return selectedAgent() === "codex-cli";
|
|
47755
47695
|
});
|
|
@@ -47784,10 +47724,18 @@ function WizardController(props) {
|
|
|
47784
47724
|
goToStep("version-select");
|
|
47785
47725
|
};
|
|
47786
47726
|
const handleVersionSelect = (version) => {
|
|
47727
|
+
if (!versionSelectionReady() || step() !== "version-select") {
|
|
47728
|
+
return;
|
|
47729
|
+
}
|
|
47787
47730
|
setSelectedVersion(version);
|
|
47788
47731
|
goToStep("model-select");
|
|
47789
47732
|
};
|
|
47790
47733
|
const handleModelSelect = (model) => {
|
|
47734
|
+
const agent = selectedAgent();
|
|
47735
|
+
if (agent === "opencode" && model === "__custom__") {
|
|
47736
|
+
goToStep("model-input");
|
|
47737
|
+
return;
|
|
47738
|
+
}
|
|
47791
47739
|
setSelectedModel(model);
|
|
47792
47740
|
if (needsReasoningLevel()) {
|
|
47793
47741
|
goToStep("reasoning-level");
|
|
@@ -47795,6 +47743,18 @@ function WizardController(props) {
|
|
|
47795
47743
|
goToStep("execution-mode");
|
|
47796
47744
|
}
|
|
47797
47745
|
};
|
|
47746
|
+
const handleModelInputSubmit = (value) => {
|
|
47747
|
+
const trimmed = value.trim();
|
|
47748
|
+
if (!trimmed) {
|
|
47749
|
+
return;
|
|
47750
|
+
}
|
|
47751
|
+
setSelectedModel(trimmed);
|
|
47752
|
+
if (needsReasoningLevel()) {
|
|
47753
|
+
goToStep("reasoning-level");
|
|
47754
|
+
} else {
|
|
47755
|
+
goToStep("execution-mode");
|
|
47756
|
+
}
|
|
47757
|
+
};
|
|
47798
47758
|
const handleReasoningLevelSelect = (level) => {
|
|
47799
47759
|
setReasoningLevel(level);
|
|
47800
47760
|
goToStep("execution-mode");
|
|
@@ -47898,6 +47858,16 @@ function WizardController(props) {
|
|
|
47898
47858
|
focused
|
|
47899
47859
|
});
|
|
47900
47860
|
}
|
|
47861
|
+
if (currentStep === "model-input") {
|
|
47862
|
+
return createComponent2(ModelInputStep, {
|
|
47863
|
+
get agentId() {
|
|
47864
|
+
return selectedAgent() ?? "claude-code";
|
|
47865
|
+
},
|
|
47866
|
+
onSubmit: handleModelInputSubmit,
|
|
47867
|
+
onBack: goBack,
|
|
47868
|
+
focused
|
|
47869
|
+
});
|
|
47870
|
+
}
|
|
47901
47871
|
if (currentStep === "reasoning-level") {
|
|
47902
47872
|
return createComponent2(ReasoningLevelStep, {
|
|
47903
47873
|
onSelect: handleReasoningLevelSelect,
|
|
@@ -51825,7 +51795,7 @@ async function listLogFiles(logDir) {
|
|
|
51825
51795
|
files.push({ date, path: fullPath, mtimeMs: stat3.mtimeMs });
|
|
51826
51796
|
} catch {}
|
|
51827
51797
|
}
|
|
51828
|
-
return files.sort((a2, b) => b.
|
|
51798
|
+
return files.sort((a2, b) => b.mtimeMs - a2.mtimeMs);
|
|
51829
51799
|
} catch (error) {
|
|
51830
51800
|
const err = error;
|
|
51831
51801
|
if (err.code === "ENOENT") {
|
|
@@ -51834,6 +51804,41 @@ async function listLogFiles(logDir) {
|
|
|
51834
51804
|
throw error;
|
|
51835
51805
|
}
|
|
51836
51806
|
}
|
|
51807
|
+
var getLatestLogMtimeWithContent = async (logDir) => {
|
|
51808
|
+
const files = await listLogFiles(logDir);
|
|
51809
|
+
for (const file of files) {
|
|
51810
|
+
const lines = await readLogFileLines(file.path);
|
|
51811
|
+
if (lines.length > 0) {
|
|
51812
|
+
return file.mtimeMs;
|
|
51813
|
+
}
|
|
51814
|
+
}
|
|
51815
|
+
return null;
|
|
51816
|
+
};
|
|
51817
|
+
async function selectLogTargetByRecency(primary, fallback) {
|
|
51818
|
+
if (!primary.logDir || !primary.sourcePath) {
|
|
51819
|
+
return primary;
|
|
51820
|
+
}
|
|
51821
|
+
if (!fallback.logDir || !fallback.sourcePath) {
|
|
51822
|
+
return primary;
|
|
51823
|
+
}
|
|
51824
|
+
if (primary.logDir === fallback.logDir) {
|
|
51825
|
+
return primary;
|
|
51826
|
+
}
|
|
51827
|
+
if (primary.reason !== "worktree") {
|
|
51828
|
+
return primary;
|
|
51829
|
+
}
|
|
51830
|
+
const [primaryMtime, fallbackMtime] = await Promise.all([
|
|
51831
|
+
getLatestLogMtimeWithContent(primary.logDir),
|
|
51832
|
+
getLatestLogMtimeWithContent(fallback.logDir)
|
|
51833
|
+
]);
|
|
51834
|
+
if (fallbackMtime !== null && (primaryMtime === null || fallbackMtime > primaryMtime)) {
|
|
51835
|
+
return {
|
|
51836
|
+
...fallback,
|
|
51837
|
+
reason: "working-directory-fallback"
|
|
51838
|
+
};
|
|
51839
|
+
}
|
|
51840
|
+
return primary;
|
|
51841
|
+
}
|
|
51837
51842
|
async function clearLogFiles(logDir) {
|
|
51838
51843
|
const files = await listLogFiles(logDir);
|
|
51839
51844
|
let cleared = 0;
|
|
@@ -52020,6 +52025,7 @@ var logger4 = createLogger({
|
|
|
52020
52025
|
category: "app"
|
|
52021
52026
|
});
|
|
52022
52027
|
var UNSAFE_SELECTION_MESSAGE = "Unsafe branch selected. Select anyway?";
|
|
52028
|
+
var SAFETY_PENDING_MESSAGE = "Safety check in progress. Select anyway?";
|
|
52023
52029
|
var DEFAULT_SCREEN = "branch-list";
|
|
52024
52030
|
var buildStats = (branches) => calculateStatistics(branches);
|
|
52025
52031
|
var applyCleanupStatus = (items, statusByBranch) => items.map((branch) => {
|
|
@@ -52119,6 +52125,7 @@ function AppSolid(props) {
|
|
|
52119
52125
|
const [unsafeSelectionConfirmVisible, setUnsafeSelectionConfirmVisible] = createSignal(false);
|
|
52120
52126
|
const [unsafeConfirmInputLocked, setUnsafeConfirmInputLocked] = createSignal(false);
|
|
52121
52127
|
const [unsafeSelectionTarget, setUnsafeSelectionTarget] = createSignal(null);
|
|
52128
|
+
const [unsafeSelectionMessage, setUnsafeSelectionMessage] = createSignal(UNSAFE_SELECTION_MESSAGE);
|
|
52122
52129
|
const [branchFooterMessage, setBranchFooterMessage] = createSignal(null);
|
|
52123
52130
|
const [branchInputLocked, setBranchInputLocked] = createSignal(false);
|
|
52124
52131
|
const [cleanupIndicators, setCleanupIndicators] = createSignal({});
|
|
@@ -52200,21 +52207,31 @@ function AppSolid(props) {
|
|
|
52200
52207
|
const [profileInputSuppressKey, setProfileInputSuppressKey] = createSignal(null);
|
|
52201
52208
|
const [profileEnvKey, setProfileEnvKey] = createSignal(null);
|
|
52202
52209
|
const [profileConfirmMode, setProfileConfirmMode] = createSignal("delete-profile");
|
|
52203
|
-
const
|
|
52210
|
+
const [logEffectiveTarget, setLogEffectiveTarget] = createSignal(null);
|
|
52211
|
+
const logPrimaryTarget = createMemo(() => resolveLogTarget(logTargetBranch(), workingDirectory()));
|
|
52212
|
+
const logFallbackTarget = createMemo(() => resolveLogTarget(null, workingDirectory()));
|
|
52213
|
+
const logActiveTarget = createMemo(() => logEffectiveTarget() ?? logPrimaryTarget());
|
|
52204
52214
|
const logBranchLabel = createMemo(() => logTargetBranch()?.label ?? null);
|
|
52205
52215
|
const logSourceLabel = createMemo(() => {
|
|
52206
|
-
const target =
|
|
52216
|
+
const target = logActiveTarget();
|
|
52207
52217
|
if (!target.sourcePath) {
|
|
52208
52218
|
return "(none)";
|
|
52209
52219
|
}
|
|
52210
52220
|
if (target.reason === "current-working-directory" || target.reason === "working-directory") {
|
|
52211
52221
|
return `${target.sourcePath} (cwd)`;
|
|
52212
52222
|
}
|
|
52223
|
+
if (target.reason === "working-directory-fallback") {
|
|
52224
|
+
return `${target.sourcePath} (cwd fallback)`;
|
|
52225
|
+
}
|
|
52213
52226
|
if (target.reason === "worktree-inaccessible") {
|
|
52214
52227
|
return `${target.sourcePath} (inaccessible)`;
|
|
52215
52228
|
}
|
|
52216
52229
|
return target.sourcePath;
|
|
52217
52230
|
});
|
|
52231
|
+
createEffect(() => {
|
|
52232
|
+
logPrimaryTarget();
|
|
52233
|
+
setLogEffectiveTarget(null);
|
|
52234
|
+
});
|
|
52218
52235
|
const selectedProfileConfig = createMemo(() => {
|
|
52219
52236
|
const name = selectedProfileName();
|
|
52220
52237
|
const config = profilesConfig();
|
|
@@ -52366,7 +52383,10 @@ function AppSolid(props) {
|
|
|
52366
52383
|
setLogLoading(true);
|
|
52367
52384
|
setLogError(null);
|
|
52368
52385
|
try {
|
|
52369
|
-
const
|
|
52386
|
+
const primaryTarget = logPrimaryTarget();
|
|
52387
|
+
const fallbackTarget = logFallbackTarget();
|
|
52388
|
+
const target = await selectLogTargetByRecency(primaryTarget, fallbackTarget);
|
|
52389
|
+
setLogEffectiveTarget(target);
|
|
52370
52390
|
if (!target.logDir) {
|
|
52371
52391
|
setLogEntries([]);
|
|
52372
52392
|
setLogSelectedDate(targetDate);
|
|
@@ -52400,7 +52420,7 @@ function AppSolid(props) {
|
|
|
52400
52420
|
setLogTailEnabled((prev) => !prev);
|
|
52401
52421
|
};
|
|
52402
52422
|
const resetLogFiles = async () => {
|
|
52403
|
-
const target =
|
|
52423
|
+
const target = logActiveTarget();
|
|
52404
52424
|
if (!target.logDir) {
|
|
52405
52425
|
showLogNotification("No logs available.", "error");
|
|
52406
52426
|
return;
|
|
@@ -52443,6 +52463,9 @@ function AppSolid(props) {
|
|
|
52443
52463
|
setStats(buildStats(initialItems));
|
|
52444
52464
|
refreshCleanupSafety();
|
|
52445
52465
|
(async () => {
|
|
52466
|
+
await withTimeout(fetchAllRemotes({
|
|
52467
|
+
cwd: repoRoot
|
|
52468
|
+
}), BRANCH_FULL_LOAD_TIMEOUT_MS).catch(() => {});
|
|
52446
52469
|
const [branches, latestWorktrees] = await Promise.all([withTimeout(getAllBranches(repoRoot), BRANCH_FULL_LOAD_TIMEOUT_MS).catch(() => localBranches), withTimeout(listAdditionalWorktrees(), BRANCH_FULL_LOAD_TIMEOUT_MS).catch(() => worktrees)]);
|
|
52447
52470
|
const full = buildBranchList(branches, latestWorktrees, lastToolUsageMap);
|
|
52448
52471
|
const fullItems = applyCleanupStatus(full.items, cleanupStatusByBranch());
|
|
@@ -52526,10 +52549,11 @@ function AppSolid(props) {
|
|
|
52526
52549
|
onMount(() => {
|
|
52527
52550
|
const bunxAgentIds = getBunxAgentIds();
|
|
52528
52551
|
prefetchAgentVersions(bunxAgentIds).catch(() => {});
|
|
52552
|
+
prefetchInstalledVersions(bunxAgentIds).catch(() => {});
|
|
52529
52553
|
});
|
|
52530
52554
|
createEffect(() => {
|
|
52531
52555
|
if (currentScreen() === "log-list") {
|
|
52532
|
-
|
|
52556
|
+
logPrimaryTarget();
|
|
52533
52557
|
loadLogEntries(logSelectedDate());
|
|
52534
52558
|
}
|
|
52535
52559
|
});
|
|
@@ -53078,8 +53102,15 @@ function AppSolid(props) {
|
|
|
53078
53102
|
const safeToCleanup = branch?.safeToCleanup === true;
|
|
53079
53103
|
const isRemoteBranch = branch?.type === "remote";
|
|
53080
53104
|
const isUnsafe = Boolean(branch) && !isRemoteBranch && !hasSafetyPending && (hasUncommitted || hasUnpushed || isUnmerged || !safeToCleanup);
|
|
53105
|
+
if (branch && hasSafetyPending) {
|
|
53106
|
+
setUnsafeSelectionTarget(branch.name);
|
|
53107
|
+
setUnsafeSelectionMessage(SAFETY_PENDING_MESSAGE);
|
|
53108
|
+
setUnsafeSelectionConfirmVisible(true);
|
|
53109
|
+
return;
|
|
53110
|
+
}
|
|
53081
53111
|
if (branch && isUnsafe) {
|
|
53082
53112
|
setUnsafeSelectionTarget(branch.name);
|
|
53113
|
+
setUnsafeSelectionMessage(UNSAFE_SELECTION_MESSAGE);
|
|
53083
53114
|
setUnsafeSelectionConfirmVisible(true);
|
|
53084
53115
|
return;
|
|
53085
53116
|
}
|
|
@@ -53091,6 +53122,7 @@ function AppSolid(props) {
|
|
|
53091
53122
|
const target = unsafeSelectionTarget();
|
|
53092
53123
|
setUnsafeSelectionConfirmVisible(false);
|
|
53093
53124
|
setUnsafeSelectionTarget(null);
|
|
53125
|
+
setUnsafeSelectionMessage(UNSAFE_SELECTION_MESSAGE);
|
|
53094
53126
|
if (!confirmed || !target) {
|
|
53095
53127
|
return;
|
|
53096
53128
|
}
|
|
@@ -53571,7 +53603,9 @@ function AppSolid(props) {
|
|
|
53571
53603
|
setProp(_el$, "backgroundColor", "black");
|
|
53572
53604
|
setProp(_el$, "padding", 1);
|
|
53573
53605
|
insert(_el$, createComponent2(ConfirmScreen, {
|
|
53574
|
-
message
|
|
53606
|
+
get message() {
|
|
53607
|
+
return unsafeSelectionMessage();
|
|
53608
|
+
},
|
|
53575
53609
|
onConfirm: confirmUnsafeSelection,
|
|
53576
53610
|
yesLabel: "OK",
|
|
53577
53611
|
noLabel: "Cancel",
|