offsite 0.0.95 → 0.0.96
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/apps/client/dist/assets/{XIcon-Tc8nkaoT.js → XIcon-sNE7wlGT.js} +1 -1
- package/apps/client/dist/assets/{diff-panel-DTqI0r9W.js → diff-panel-D9sGyf1Y.js} +1 -1
- package/apps/client/dist/assets/{editor-dialog-Se2DP1E5.js → editor-dialog-De_ijtFY.js} +35 -35
- package/apps/client/dist/assets/{image-viewer-qKLCNUVK.js → image-viewer-DuyADV75.js} +1 -1
- package/apps/client/dist/assets/index-9ox1jth4.js +72 -0
- package/apps/client/dist/assets/index-dtN3QMc8.css +2 -0
- package/apps/client/dist/assets/{panel-close-button-ByrJIu34.js → panel-close-button-yIEA8ujQ.js} +1 -1
- package/apps/client/dist/assets/{preview-dialog-CnvAwgMU.js → preview-dialog-CPV2cjGd.js} +1 -1
- package/apps/client/dist/assets/{use-editor-shortcut-CGHT7fnL.js → use-editor-shortcut-BoixVvhO.js} +6 -6
- package/apps/client/dist/assets/{video-viewer-Ctc_XHXE.js → video-viewer-DbYvGHLh.js} +1 -1
- package/apps/client/dist/index.html +6 -6
- package/apps/client/dist/sw.js +1 -1
- package/apps/server/dist/main.mjs +71 -18
- package/apps/server/dist/main.mjs.map +1 -1
- package/apps/server/drizzle/20261108212949_last_efforts/migration.sql +6 -0
- package/apps/server/drizzle/20261108212949_last_efforts/snapshot.json +495 -0
- package/package.json +1 -1
- package/apps/client/dist/assets/index-B6yjBLio.js +0 -72
- package/apps/client/dist/assets/index-BFkBeASv.css +0 -2
|
@@ -22,7 +22,7 @@ import { sumBy } from "es-toolkit";
|
|
|
22
22
|
import { DatabaseSync } from "node:sqlite";
|
|
23
23
|
import { drizzle } from "drizzle-orm/node-sqlite";
|
|
24
24
|
import { migrate } from "drizzle-orm/node-sqlite/migrator";
|
|
25
|
-
import { integer, real, snakeCase, text } from "drizzle-orm/sqlite-core";
|
|
25
|
+
import { integer, primaryKey, real, snakeCase, text } from "drizzle-orm/sqlite-core";
|
|
26
26
|
import sharp from "sharp";
|
|
27
27
|
import webPush from "web-push";
|
|
28
28
|
import dns from "node:dns";
|
|
@@ -1165,10 +1165,7 @@ function record$1(value) {
|
|
|
1165
1165
|
return isRecord(value) ? value : { value };
|
|
1166
1166
|
}
|
|
1167
1167
|
// src/storage/config.ts
|
|
1168
|
-
const modelSetting = z.strictObject({
|
|
1169
|
-
hidden: z.boolean(),
|
|
1170
|
-
effort: z.string().nullable()
|
|
1171
|
-
});
|
|
1168
|
+
const modelSetting = z.strictObject({ hidden: z.boolean() });
|
|
1172
1169
|
const generationModel = z.strictObject({
|
|
1173
1170
|
provider: z.enum([
|
|
1174
1171
|
"claude",
|
|
@@ -1274,7 +1271,7 @@ function configInfo() {
|
|
|
1274
1271
|
defaultClaudeBaseDir: path.join(os.homedir(), ".claude"),
|
|
1275
1272
|
homeDir: os.homedir(),
|
|
1276
1273
|
scratchAvailable,
|
|
1277
|
-
version: "v0.0.
|
|
1274
|
+
version: "v0.0.96"
|
|
1278
1275
|
};
|
|
1279
1276
|
}
|
|
1280
1277
|
function readConfig() {
|
|
@@ -3160,6 +3157,15 @@ const lastUsedModels = snakeCase.table("last_used_models", {
|
|
|
3160
3157
|
model: text().notNull(),
|
|
3161
3158
|
usedAt: integer().notNull()
|
|
3162
3159
|
});
|
|
3160
|
+
const lastEfforts = snakeCase.table("last_efforts", {
|
|
3161
|
+
provider: text({ enum: [
|
|
3162
|
+
"claude",
|
|
3163
|
+
"codex",
|
|
3164
|
+
"opencode"
|
|
3165
|
+
] }).notNull(),
|
|
3166
|
+
model: text().notNull(),
|
|
3167
|
+
effort: text()
|
|
3168
|
+
}, (table) => [primaryKey({ columns: [table.provider, table.model] })]);
|
|
3163
3169
|
// src/storage/auth.ts
|
|
3164
3170
|
const CODE_LIFETIME = 3e5;
|
|
3165
3171
|
const DEVICE_LIFETIME = 2592e6;
|
|
@@ -4897,17 +4903,14 @@ async function capabilities(provider, accountId, cwd) {
|
|
|
4897
4903
|
defaultModel: defaultModels[provider],
|
|
4898
4904
|
models: result.models.map((model) => {
|
|
4899
4905
|
const deprecated = deprecatedModels[provider].includes(model.value);
|
|
4900
|
-
const setting = settings[model.value] ?? {
|
|
4901
|
-
hidden: deprecated,
|
|
4902
|
-
effort: null
|
|
4903
|
-
};
|
|
4906
|
+
const setting = settings[model.value] ?? { hidden: deprecated };
|
|
4904
4907
|
const preferred = defaultEfforts[provider];
|
|
4905
4908
|
const effort = preferred === null ? null : model.efforts.includes(preferred) ? preferred : model.efforts.at(-1) ?? null;
|
|
4906
4909
|
return {
|
|
4907
4910
|
...model,
|
|
4908
4911
|
deprecated,
|
|
4909
4912
|
hidden: setting.hidden,
|
|
4910
|
-
effort
|
|
4913
|
+
effort
|
|
4911
4914
|
};
|
|
4912
4915
|
})
|
|
4913
4916
|
};
|
|
@@ -6764,6 +6767,13 @@ function sessionHistory(sessionId, cwd) {
|
|
|
6764
6767
|
case "opencode": return openCodeHistory(sessionId, cwd);
|
|
6765
6768
|
}
|
|
6766
6769
|
}
|
|
6770
|
+
function agentHistory(sessionId, cwd, agentId, parent) {
|
|
6771
|
+
switch (providerOf(sessionId)) {
|
|
6772
|
+
case "claude": return agentMessages(sessionId, cwd, agentId, parent);
|
|
6773
|
+
case "codex": return codexAgent(agentId, parent);
|
|
6774
|
+
case "opencode": return openCodeAgent(agentId, parent);
|
|
6775
|
+
}
|
|
6776
|
+
}
|
|
6767
6777
|
function rewind(request) {
|
|
6768
6778
|
return locked(request.sessionId, () => rewindNow(request));
|
|
6769
6779
|
}
|
|
@@ -6822,6 +6832,24 @@ async function rewindNow(request) {
|
|
|
6822
6832
|
publish$2(sessionId, await history$1(sessionId, cwd));
|
|
6823
6833
|
return result;
|
|
6824
6834
|
}
|
|
6835
|
+
function restart(sessionId) {
|
|
6836
|
+
return locked(sessionId, async () => {
|
|
6837
|
+
const run = runs.get(sessionId);
|
|
6838
|
+
if (run === void 0) return;
|
|
6839
|
+
if (run.provider !== "claude") throw new Error("Only Claude Code threads can be restarted");
|
|
6840
|
+
if (run.running) await run.interrupt();
|
|
6841
|
+
run.stop();
|
|
6842
|
+
await run.closed;
|
|
6843
|
+
new Run({
|
|
6844
|
+
sessionId,
|
|
6845
|
+
cwd: run.cwd,
|
|
6846
|
+
resume: true,
|
|
6847
|
+
resumeAt: null,
|
|
6848
|
+
settings: run.settings
|
|
6849
|
+
});
|
|
6850
|
+
publish$2(sessionId, await history$1(sessionId, run.cwd));
|
|
6851
|
+
});
|
|
6852
|
+
}
|
|
6825
6853
|
async function open$1(client, sessionId, projectId) {
|
|
6826
6854
|
client.opening = sessionId;
|
|
6827
6855
|
const event = await sessionHistory(sessionId, projectPath(projectId));
|
|
@@ -8453,6 +8481,15 @@ const lastUsedSchema = z.discriminatedUnion("provider", [z.strictObject({
|
|
|
8453
8481
|
accountId: z.null(),
|
|
8454
8482
|
model: z.string()
|
|
8455
8483
|
})]);
|
|
8484
|
+
const lastEffortSchema = z.strictObject({
|
|
8485
|
+
provider: z.enum([
|
|
8486
|
+
"claude",
|
|
8487
|
+
"codex",
|
|
8488
|
+
"opencode"
|
|
8489
|
+
]),
|
|
8490
|
+
model: z.string(),
|
|
8491
|
+
effort: z.string().nullable()
|
|
8492
|
+
});
|
|
8456
8493
|
function readLastUsed() {
|
|
8457
8494
|
return db.select().from(lastUsedModels).all();
|
|
8458
8495
|
}
|
|
@@ -8473,6 +8510,22 @@ function saveLastUsed(value) {
|
|
|
8473
8510
|
});
|
|
8474
8511
|
return null;
|
|
8475
8512
|
}
|
|
8513
|
+
function readLastEfforts() {
|
|
8514
|
+
return db.select().from(lastEfforts).all();
|
|
8515
|
+
}
|
|
8516
|
+
function saveLastEffort(value) {
|
|
8517
|
+
const result = lastEffortSchema.safeParse(value);
|
|
8518
|
+
if (!result.success) throw new Error(z.prettifyError(result.error));
|
|
8519
|
+
db.insert(lastEfforts).values(result.data).onConflictDoUpdate({
|
|
8520
|
+
target: [lastEfforts.provider, lastEfforts.model],
|
|
8521
|
+
set: { effort: result.data.effort }
|
|
8522
|
+
}).run();
|
|
8523
|
+
broadcast({
|
|
8524
|
+
type: "lastEfforts",
|
|
8525
|
+
lastEfforts: readLastEfforts()
|
|
8526
|
+
});
|
|
8527
|
+
return null;
|
|
8528
|
+
}
|
|
8476
8529
|
// ../core/src/app-icons.ts
|
|
8477
8530
|
const appIcons = [
|
|
8478
8531
|
{
|
|
@@ -8573,6 +8626,7 @@ const handlers = {
|
|
|
8573
8626
|
return {
|
|
8574
8627
|
...configInfo(),
|
|
8575
8628
|
lastUsed: readLastUsed(),
|
|
8629
|
+
lastEfforts: readLastEfforts(),
|
|
8576
8630
|
hostname: os.hostname(),
|
|
8577
8631
|
projects: projects(),
|
|
8578
8632
|
sessions: sessions(),
|
|
@@ -8584,6 +8638,7 @@ const handlers = {
|
|
|
8584
8638
|
},
|
|
8585
8639
|
"config.get": () => configInfo(),
|
|
8586
8640
|
"lastUsed.save": (params) => saveLastUsed(params),
|
|
8641
|
+
"lastEffort.save": (params) => saveLastEffort(params),
|
|
8587
8642
|
"appIcon.save": (params) => saveAppIcon(params),
|
|
8588
8643
|
"config.save": async (params) => {
|
|
8589
8644
|
const before = readConfig();
|
|
@@ -8645,13 +8700,7 @@ const handlers = {
|
|
|
8645
8700
|
"sessions.earlier": (params) => earlier(params.sessionId, params.before),
|
|
8646
8701
|
"sessions.export": (params) => exportSession(params.sessionId, params.projectId),
|
|
8647
8702
|
"sessions.image": (params) => image(params.sessionId, params.itemId, params.index),
|
|
8648
|
-
"sessions.agent": (params) =>
|
|
8649
|
-
switch (providerOf(params.sessionId)) {
|
|
8650
|
-
case "claude": return agentMessages(params.sessionId, projectPath(params.projectId), params.agentId, params.parent);
|
|
8651
|
-
case "codex": return codexAgent(params.agentId, params.parent);
|
|
8652
|
-
case "opencode": return openCodeAgent(params.agentId, params.parent);
|
|
8653
|
-
}
|
|
8654
|
-
},
|
|
8703
|
+
"sessions.agent": (params) => agentHistory(params.sessionId, projectPath(params.projectId), params.agentId, params.parent),
|
|
8655
8704
|
"sessions.send": async (params, client) => {
|
|
8656
8705
|
await send$1(client, params);
|
|
8657
8706
|
return null;
|
|
@@ -8668,6 +8717,10 @@ const handlers = {
|
|
|
8668
8717
|
await runs.get(params.sessionId)?.interrupt();
|
|
8669
8718
|
return null;
|
|
8670
8719
|
},
|
|
8720
|
+
"sessions.restart": async (params) => {
|
|
8721
|
+
await restart(params.sessionId);
|
|
8722
|
+
return null;
|
|
8723
|
+
},
|
|
8671
8724
|
"sessions.stopTask": async (params) => {
|
|
8672
8725
|
await runs.get(params.sessionId)?.stopTask(params.taskId);
|
|
8673
8726
|
return null;
|