@hyperdreamer/pi-webui 1.11.0-beta.8 → 1.11.0

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.
Files changed (61) hide show
  1. package/README.md +1 -1
  2. package/dist/client/assets/{CodeViewer-DdYnGA-X.js → CodeViewer-Jy1WSFR_.js} +1 -1
  3. package/dist/client/assets/{UnifiedDiffViewer-BSMTtVUW.js → UnifiedDiffViewer-iic0AurS.js} +1 -1
  4. package/dist/client/assets/{index-B5Kn_roi.js → index-6NlIF1nJ.js} +593 -451
  5. package/dist/client/index.html +1 -1
  6. package/dist/config.js +70 -11
  7. package/dist/config.js.map +1 -1
  8. package/dist/server/app.js +6 -1
  9. package/dist/server/app.js.map +1 -1
  10. package/dist/server/sessiond/sessionProxyRoutes.js +1 -0
  11. package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
  12. package/dist/server/sessiond.js +38 -5
  13. package/dist/server/sessiond.js.map +1 -1
  14. package/dist/server/sessions/modelPolicySettingsPersistence.js +82 -0
  15. package/dist/server/sessions/modelPolicySettingsPersistence.js.map +1 -0
  16. package/dist/server/sessions/piSessionManagerGateway.js +227 -9
  17. package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
  18. package/dist/server/sessions/piSessionService.js +678 -242
  19. package/dist/server/sessions/piSessionService.js.map +1 -1
  20. package/dist/server/sessions/rememberCurrentModelPolicy.js +62 -0
  21. package/dist/server/sessions/rememberCurrentModelPolicy.js.map +1 -0
  22. package/dist/server/sessions/sessionArchiveStore.js +6 -0
  23. package/dist/server/sessions/sessionArchiveStore.js.map +1 -1
  24. package/dist/server/sessions/sessionCreationSource.js +101 -0
  25. package/dist/server/sessions/sessionCreationSource.js.map +1 -0
  26. package/dist/server/sessions/sessionDefaultsRoutes.js +7 -1
  27. package/dist/server/sessions/sessionDefaultsRoutes.js.map +1 -1
  28. package/dist/server/sessions/sessionDefaultsService.js +85 -3
  29. package/dist/server/sessions/sessionDefaultsService.js.map +1 -1
  30. package/dist/server/sessions/sessionMetadataStore.js +107 -13
  31. package/dist/server/sessions/sessionMetadataStore.js.map +1 -1
  32. package/dist/server/sessions/sessionModelPolicy.js +23 -0
  33. package/dist/server/sessions/sessionModelPolicy.js.map +1 -1
  34. package/dist/server/sessions/sessionNameGenerator.js +5 -4
  35. package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
  36. package/dist/server/sessions/sessionReorder.js +117 -0
  37. package/dist/server/sessions/sessionReorder.js.map +1 -0
  38. package/dist/server/sessions/sessionRouteFastifyOptions.js +8 -0
  39. package/dist/server/sessions/sessionRouteFastifyOptions.js.map +1 -0
  40. package/dist/server/sessions/sessionRoutes.js +187 -4
  41. package/dist/server/sessions/sessionRoutes.js.map +1 -1
  42. package/dist/server/sessions/starterModelPolicyPreferenceStore.js +142 -29
  43. package/dist/server/sessions/starterModelPolicyPreferenceStore.js.map +1 -1
  44. package/dist/server/sessions/utilityModelExtension.js +197 -0
  45. package/dist/server/sessions/utilityModelExtension.js.map +1 -0
  46. package/dist/server/sessions/utilityModelResolver.js +93 -0
  47. package/dist/server/sessions/utilityModelResolver.js.map +1 -0
  48. package/dist/server/sessions/utilityModelSettingsRoutes.js +62 -0
  49. package/dist/server/sessions/utilityModelSettingsRoutes.js.map +1 -0
  50. package/dist/server/sessions/utilityModelSettingsService.js +114 -0
  51. package/dist/server/sessions/utilityModelSettingsService.js.map +1 -0
  52. package/dist/shared/apiTypes.d.ts +105 -2
  53. package/dist/shared/apiTypes.js +8 -0
  54. package/dist/shared/apiTypes.js.map +1 -1
  55. package/dist/shared/capabilities.js +9 -0
  56. package/dist/shared/capabilities.js.map +1 -1
  57. package/dist/shared/federatedRoutes.js +4 -0
  58. package/dist/shared/federatedRoutes.js.map +1 -1
  59. package/docs/assets/pi-webui-desktop.png +0 -0
  60. package/docs/config.md +37 -8
  61. package/package.json +1 -1
@@ -0,0 +1,82 @@
1
+ import { isKnownThinkingLevel } from "../../shared/thinkingLevels.js";
2
+ /** Complete restore attempts before an incomplete rollback is reported. */
3
+ export const MAX_MODEL_POLICY_SETTINGS_RESTORE_ATTEMPTS = 3;
4
+ export function modelPolicySettingsPersistence(candidate) {
5
+ if (!isModelPolicySettingsPersistence(candidate)) {
6
+ throw new Error("Cannot initialize a complete session policy without checked model-default settings persistence support");
7
+ }
8
+ return candidate;
9
+ }
10
+ export function captureModelPolicySettings(settings) {
11
+ const global = settings.getGlobalSettings();
12
+ const defaultProvider = optionalString(global.defaultProvider);
13
+ const defaultModel = optionalString(global.defaultModel);
14
+ const defaultThinkingLevel = optionalThinkingLevel(global.defaultThinkingLevel);
15
+ return {
16
+ ...(defaultProvider === undefined ? {} : { defaultProvider }),
17
+ ...(defaultModel === undefined ? {} : { defaultModel }),
18
+ ...(defaultThinkingLevel === undefined ? {} : { defaultThinkingLevel }),
19
+ };
20
+ }
21
+ /** Settle queued writes and fail when Pi recorded a persistence error. */
22
+ export async function settleModelPolicySettings(settings, phase) {
23
+ const failures = await settleAttempt(settings);
24
+ if (failures.length === 0)
25
+ return;
26
+ throw new AggregateError(failures, `Pi model defaults were not durably persisted ${phase}: ${describe(failures)}`);
27
+ }
28
+ /**
29
+ * Reapply the whole snapshot until storage confirms it. Every attempt rewrites
30
+ * all three fields, so a partially durable attempt still converges to one
31
+ * consistent prior tuple.
32
+ */
33
+ export async function restoreModelPolicySettings(settings, snapshot) {
34
+ const failures = [];
35
+ for (let attempt = 1; attempt <= MAX_MODEL_POLICY_SETTINGS_RESTORE_ATTEMPTS; attempt += 1) {
36
+ settings.setDefaultProvider(snapshot.defaultProvider);
37
+ settings.setDefaultModel(snapshot.defaultModel);
38
+ settings.setDefaultThinkingLevel(snapshot.defaultThinkingLevel);
39
+ const attemptFailures = await settleAttempt(settings);
40
+ if (attemptFailures.length === 0)
41
+ return;
42
+ failures.push(...attemptFailures);
43
+ }
44
+ throw new AggregateError(failures, `Pi model defaults were not durably restored: ${describe(failures)}`);
45
+ }
46
+ async function settleAttempt(settings) {
47
+ const failures = [];
48
+ try {
49
+ await settings.flush();
50
+ }
51
+ catch (error) {
52
+ failures.push(error instanceof Error ? error : new Error(String(error)));
53
+ }
54
+ for (const recorded of settings.drainErrors()) {
55
+ failures.push(new Error(`${recorded.scope} settings: ${recorded.error.message}`));
56
+ }
57
+ return failures;
58
+ }
59
+ function describe(failures) {
60
+ return failures.map((failure) => failure.message).join("; ");
61
+ }
62
+ function isModelPolicySettingsPersistence(value) {
63
+ if (!isRecord(value))
64
+ return false;
65
+ const candidate = value;
66
+ return (typeof candidate["getGlobalSettings"] === "function" &&
67
+ typeof candidate["setDefaultProvider"] === "function" &&
68
+ typeof candidate["setDefaultModel"] === "function" &&
69
+ typeof candidate["setDefaultThinkingLevel"] === "function" &&
70
+ typeof candidate["flush"] === "function" &&
71
+ typeof candidate["drainErrors"] === "function");
72
+ }
73
+ function isRecord(value) {
74
+ return typeof value === "object" && value !== null && !Array.isArray(value);
75
+ }
76
+ function optionalString(value) {
77
+ return typeof value === "string" ? value : undefined;
78
+ }
79
+ function optionalThinkingLevel(value) {
80
+ return typeof value === "string" && isKnownThinkingLevel(value) ? value : undefined;
81
+ }
82
+ //# sourceMappingURL=modelPolicySettingsPersistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelPolicySettingsPersistence.js","sourceRoot":"","sources":["../../../src/server/sessions/modelPolicySettingsPersistence.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,13 @@
1
- import { readdir } from "node:fs/promises";
1
+ import { createReadStream } from "node:fs";
2
+ import { link, readdir, stat, unlink, writeFile } from "node:fs/promises";
3
+ import { randomUUID } from "node:crypto";
2
4
  import { homedir } from "node:os";
3
5
  import { dirname, isAbsolute, join, resolve } from "node:path";
4
- import { SessionManager, SettingsManager } from "@earendil-works/pi-coding-agent";
6
+ import { createInterface } from "node:readline";
7
+ import { parseSessionEntries, SessionManager, SettingsManager, } from "@earendil-works/pi-coding-agent";
5
8
  import { canonicalizeStoredCwd, cwdPathsEqual } from "../workingDirectory.js";
9
+ import { inspectSessionCreationSource, SESSION_CREATION_SOURCE_CUSTOM_TYPE, } from "./sessionCreationSource.js";
10
+ const MAX_CONCURRENT_SESSION_LIST_LOADS = 10;
6
11
  export class SessionDirResolver {
7
12
  constructor(options) {
8
13
  this.agentDir = options.agentDir;
@@ -38,6 +43,7 @@ export function createPiSessionManagerGateway(options) {
38
43
  class SettingsAwarePiSessionManagerGateway {
39
44
  constructor(resolver) {
40
45
  this.resolver = resolver;
46
+ this.committedInitialFiles = new WeakMap();
41
47
  }
42
48
  async list(cwd) {
43
49
  const resolution = this.resolver.resolve(cwd);
@@ -58,15 +64,227 @@ class SettingsAwarePiSessionManagerGateway {
58
64
  open(path) {
59
65
  return SessionManager.open(path, dirname(path));
60
66
  }
67
+ async commitInitialEntries(manager) {
68
+ const sessionFile = manager.getSessionFile();
69
+ const header = manager.getHeader?.();
70
+ const entries = manager.getEntries?.();
71
+ if (sessionFile === undefined || sessionFile === "")
72
+ throw new Error("Cannot durably commit a session without a session file");
73
+ if (header === undefined || header === null || entries === undefined)
74
+ throw new Error("Cannot durably commit a session without its header and entries");
75
+ if (manager.setSessionFile === undefined)
76
+ throw new Error("Cannot durably commit a session without manager reload support");
77
+ const tempFile = `${sessionFile}.pi-webui-${randomUUID()}.tmp`;
78
+ let linked = false;
79
+ try {
80
+ await writeFile(tempFile, serializeInitialSession(header, entries), {
81
+ encoding: "utf8",
82
+ flag: "wx",
83
+ flush: true,
84
+ });
85
+ await link(tempFile, sessionFile);
86
+ linked = true;
87
+ manager.setSessionFile(sessionFile);
88
+ this.committedInitialFiles.set(manager, sessionFile);
89
+ }
90
+ catch (error) {
91
+ if (linked)
92
+ await unlinkIfPresent(sessionFile);
93
+ throw error;
94
+ }
95
+ finally {
96
+ await unlinkIfPresent(tempFile);
97
+ }
98
+ }
99
+ async discardInitialEntries(manager) {
100
+ const sessionFile = this.committedInitialFiles.get(manager);
101
+ if (sessionFile === undefined)
102
+ return;
103
+ this.committedInitialFiles.delete(manager);
104
+ await unlinkIfPresent(sessionFile);
105
+ }
106
+ }
107
+ function serializeInitialSession(header, entries) {
108
+ return `${[header, ...entries]
109
+ .map((entry) => JSON.stringify(entry))
110
+ .join("\n")}\n`;
111
+ }
112
+ async function unlinkIfPresent(path) {
113
+ try {
114
+ await unlink(path);
115
+ }
116
+ catch (error) {
117
+ if (typeof error === "object" &&
118
+ error !== null &&
119
+ "code" in error &&
120
+ error.code === "ENOENT")
121
+ return;
122
+ throw error;
123
+ }
61
124
  }
62
125
  export async function listSessionsInDir(sessionDir) {
63
- // listAll(sessionDir) lists without the SDK's internal cwd filter, which would
64
- // otherwise compare against this process's cwd and drop other projects' sessions.
65
- // Cwd filtering is applied explicitly by filterSessionsForCwd where needed.
66
- // Session file headers are written by external tools (Pi CLI, SDK consumers),
67
- // so their cwd is canonicalized here before it enters pi-webui.
68
- const sessions = await SessionManager.listAll(sessionDir);
69
- return sessions.map((session) => ({ ...session, cwd: canonicalizeStoredCwd(session.cwd) }));
126
+ // Listing and source inspection share one asynchronous JSONL pass. Constructing
127
+ // a persisted SessionManager here would migrate legacy files as a side effect.
128
+ let files;
129
+ try {
130
+ files = (await readdir(sessionDir))
131
+ .filter((file) => file.endsWith(".jsonl"))
132
+ .map((file) => join(sessionDir, file));
133
+ }
134
+ catch {
135
+ return [];
136
+ }
137
+ const sessions = [];
138
+ for (let index = 0; index < files.length; index += MAX_CONCURRENT_SESSION_LIST_LOADS) {
139
+ const batch = await Promise.all(files
140
+ .slice(index, index + MAX_CONCURRENT_SESSION_LIST_LOADS)
141
+ .map((file) => readSessionListEntry(file)));
142
+ for (const session of batch) {
143
+ if (session !== undefined)
144
+ sessions.push(session);
145
+ }
146
+ }
147
+ return sessions.sort((left, right) => right.modified.getTime() - left.modified.getTime());
148
+ }
149
+ async function readSessionListEntry(path) {
150
+ try {
151
+ const stats = await stat(path);
152
+ const lines = createInterface({
153
+ input: createReadStream(path, { encoding: "utf8" }),
154
+ crlfDelay: Infinity,
155
+ });
156
+ let header;
157
+ let name;
158
+ let messageCount = 0;
159
+ let firstMessage = "";
160
+ const allMessages = [];
161
+ let lastActivityTime;
162
+ let newestCreationSourceEntry;
163
+ for await (const line of lines) {
164
+ for (const parsed of parseSessionEntries(line)) {
165
+ if (!isRecord(parsed))
166
+ continue;
167
+ if (header === undefined) {
168
+ if (parsed.type !== "session")
169
+ return undefined;
170
+ header = parsed;
171
+ continue;
172
+ }
173
+ if (parsed.type === "custom" &&
174
+ parsed.customType === SESSION_CREATION_SOURCE_CUSTOM_TYPE) {
175
+ newestCreationSourceEntry = parsed;
176
+ }
177
+ if (parsed.type === "session_info") {
178
+ name = normalizedSessionName(parsed.name);
179
+ }
180
+ if (parsed.type !== "message")
181
+ continue;
182
+ messageCount += 1;
183
+ const message = sessionMessage(parsed.message);
184
+ if (message === undefined)
185
+ continue;
186
+ const activityTime = sessionMessageActivityTime(parsed.timestamp, message);
187
+ if (activityTime !== undefined) {
188
+ lastActivityTime = Math.max(lastActivityTime ?? 0, activityTime);
189
+ }
190
+ if (message.role !== "user" &&
191
+ message.role !== "assistant") {
192
+ continue;
193
+ }
194
+ if (message.text === "")
195
+ continue;
196
+ allMessages.push(message.text);
197
+ if (firstMessage === "" && message.role === "user") {
198
+ firstMessage = message.text;
199
+ }
200
+ }
201
+ }
202
+ if (header === undefined)
203
+ return undefined;
204
+ const headerTimestamp = header.timestamp;
205
+ const headerTime = new Date(headerTimestamp).getTime();
206
+ const sourceInspection = inspectSessionCreationSource(newestCreationSourceEntry === undefined
207
+ ? []
208
+ : [newestCreationSourceEntry]);
209
+ const cwd = typeof header.cwd === "string"
210
+ ? canonicalizeStoredCwd(header.cwd)
211
+ : "";
212
+ const parentSessionPath = typeof header.parentSession === "string"
213
+ ? header.parentSession
214
+ : undefined;
215
+ return {
216
+ path,
217
+ id: header.id,
218
+ cwd,
219
+ ...(name === undefined ? {} : { name }),
220
+ ...(parentSessionPath === undefined ? {} : { parentSessionPath }),
221
+ created: new Date(headerTimestamp),
222
+ modified: lastActivityTime !== undefined && lastActivityTime > 0
223
+ ? new Date(lastActivityTime)
224
+ : !Number.isNaN(headerTime)
225
+ ? new Date(headerTime)
226
+ : stats.mtime,
227
+ messageCount,
228
+ firstMessage: firstMessage || "(no messages)",
229
+ allMessagesText: allMessages.join(" "),
230
+ ...(sourceInspection.kind === "valid"
231
+ ? { creationSource: sourceInspection.source }
232
+ : {}),
233
+ };
234
+ }
235
+ catch {
236
+ return undefined;
237
+ }
238
+ }
239
+ function sessionMessage(value) {
240
+ if (!isRecord(value))
241
+ return undefined;
242
+ const { content, role, timestamp } = value;
243
+ if (typeof role !== "string")
244
+ return undefined;
245
+ let text;
246
+ if (typeof content === "string") {
247
+ text = content;
248
+ }
249
+ else if (Array.isArray(content)) {
250
+ text = content
251
+ .flatMap((block) => {
252
+ if (!isRecord(block))
253
+ return [];
254
+ const { text: blockText, type } = block;
255
+ return type === "text" && typeof blockText === "string"
256
+ ? [blockText]
257
+ : [];
258
+ })
259
+ .join(" ");
260
+ }
261
+ else {
262
+ return undefined;
263
+ }
264
+ return {
265
+ role,
266
+ text,
267
+ ...(typeof timestamp === "number" ? { timestamp } : {}),
268
+ };
269
+ }
270
+ function sessionMessageActivityTime(entryTimestamp, message) {
271
+ if (message.role !== "user" && message.role !== "assistant") {
272
+ return undefined;
273
+ }
274
+ if (message.timestamp !== undefined)
275
+ return message.timestamp;
276
+ if (typeof entryTimestamp !== "string")
277
+ return undefined;
278
+ const timestamp = new Date(entryTimestamp).getTime();
279
+ return Number.isNaN(timestamp) ? undefined : timestamp;
280
+ }
281
+ function normalizedSessionName(value) {
282
+ if (typeof value !== "string")
283
+ return undefined;
284
+ return value.trim() || undefined;
285
+ }
286
+ function isRecord(value) {
287
+ return typeof value === "object" && value !== null;
70
288
  }
71
289
  export async function listSessionsInDefaultPiStore(storeRoot) {
72
290
  let entries;
@@ -1 +1 @@
1
- {"version":3,"file":"piSessionManagerGateway.js","sourceRoot":"","sources":["../../../src/server/sessions/piSessionManagerGateway.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"piSessionManagerGateway.js","sourceRoot":"","sources":["../../../src/server/sessions/piSessionManagerGateway.ts"],"names":[],"mappings":"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"}