@hyperdreamer/pi-webui 1.11.0-beta.9 → 1.11.1
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/README.md +10 -1
- package/dist/client/assets/{CodeViewer-CbMSking.js → CodeViewer-C0XQ5fEe.js} +1 -1
- package/dist/client/assets/{UnifiedDiffViewer-CseybZvK.js → UnifiedDiffViewer-BGXZn_Bc.js} +1 -1
- package/dist/client/assets/{index-Dd5_xTMQ.js → index-CkfjnumG.js} +588 -448
- package/dist/client/index.html +1 -1
- package/dist/config.js +70 -11
- package/dist/config.js.map +1 -1
- package/dist/server/app.js +6 -1
- package/dist/server/app.js.map +1 -1
- package/dist/server/sessiond/sessionProxyRoutes.js +1 -0
- package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
- package/dist/server/sessiond.js +38 -5
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/sessions/modelPolicySettingsPersistence.js +82 -0
- package/dist/server/sessions/modelPolicySettingsPersistence.js.map +1 -0
- package/dist/server/sessions/piSessionManagerGateway.js +227 -9
- package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
- package/dist/server/sessions/piSessionService.js +678 -242
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/rememberCurrentModelPolicy.js +62 -0
- package/dist/server/sessions/rememberCurrentModelPolicy.js.map +1 -0
- package/dist/server/sessions/sessionArchiveStore.js +6 -0
- package/dist/server/sessions/sessionArchiveStore.js.map +1 -1
- package/dist/server/sessions/sessionCreationSource.js +101 -0
- package/dist/server/sessions/sessionCreationSource.js.map +1 -0
- package/dist/server/sessions/sessionDefaultsRoutes.js +7 -1
- package/dist/server/sessions/sessionDefaultsRoutes.js.map +1 -1
- package/dist/server/sessions/sessionDefaultsService.js +85 -3
- package/dist/server/sessions/sessionDefaultsService.js.map +1 -1
- package/dist/server/sessions/sessionMetadataStore.js +107 -13
- package/dist/server/sessions/sessionMetadataStore.js.map +1 -1
- package/dist/server/sessions/sessionModelPolicy.js +23 -0
- package/dist/server/sessions/sessionModelPolicy.js.map +1 -1
- package/dist/server/sessions/sessionNameGenerator.js +5 -4
- package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
- package/dist/server/sessions/sessionReorder.js +117 -0
- package/dist/server/sessions/sessionReorder.js.map +1 -0
- package/dist/server/sessions/sessionRouteFastifyOptions.js +8 -0
- package/dist/server/sessions/sessionRouteFastifyOptions.js.map +1 -0
- package/dist/server/sessions/sessionRoutes.js +187 -4
- package/dist/server/sessions/sessionRoutes.js.map +1 -1
- package/dist/server/sessions/starterModelPolicyPreferenceStore.js +142 -29
- package/dist/server/sessions/starterModelPolicyPreferenceStore.js.map +1 -1
- package/dist/server/sessions/utilityModelExtension.js +197 -0
- package/dist/server/sessions/utilityModelExtension.js.map +1 -0
- package/dist/server/sessions/utilityModelResolver.js +93 -0
- package/dist/server/sessions/utilityModelResolver.js.map +1 -0
- package/dist/server/sessions/utilityModelSettingsRoutes.js +62 -0
- package/dist/server/sessions/utilityModelSettingsRoutes.js.map +1 -0
- package/dist/server/sessions/utilityModelSettingsService.js +114 -0
- package/dist/server/sessions/utilityModelSettingsService.js.map +1 -0
- package/dist/shared/apiTypes.d.ts +105 -2
- package/dist/shared/apiTypes.js +8 -0
- package/dist/shared/apiTypes.js.map +1 -1
- package/dist/shared/capabilities.js +9 -0
- package/dist/shared/capabilities.js.map +1 -1
- package/dist/shared/federatedRoutes.js +4 -0
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/docs/assets/pi-webui-desktop.png +0 -0
- package/docs/config.md +37 -8
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionMetadataStore.js","sourceRoot":"","sources":["../../../src/server/sessions/sessionMetadataStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"sessionMetadataStore.js","sourceRoot":"","sources":["../../../src/server/sessions/sessionMetadataStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,22 @@ export function serializeSessionModelPolicy(policy) {
|
|
|
29
29
|
...(policy.tier === undefined ? {} : { tier: policy.tier }),
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
|
+
export function planSessionModelPolicyInitialization(policy, resolveTier) {
|
|
33
|
+
const cloned = cloneSessionModelPolicy(policy);
|
|
34
|
+
if (cloned.mode === "exact") {
|
|
35
|
+
return {
|
|
36
|
+
policy: cloned,
|
|
37
|
+
target: cloneExactModelSelection(cloned.exact),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if (cloned.tier === undefined) {
|
|
41
|
+
throw new Error("tiered policy is missing a canonical tier");
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
policy: cloned,
|
|
45
|
+
target: cloneExactModelSelection(resolveTier(cloned.tier)),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
32
48
|
export function planSessionModelPolicyUpdate(current, update, resolveTier) {
|
|
33
49
|
if (update.mode === "exact") {
|
|
34
50
|
const exact = cloneExactModelSelection(update.exact);
|
|
@@ -109,6 +125,13 @@ function isCanonicalModelTier(value) {
|
|
|
109
125
|
function exactPolicy(exact) {
|
|
110
126
|
return { mode: "exact", exact: cloneExactModelSelection(exact) };
|
|
111
127
|
}
|
|
128
|
+
function cloneSessionModelPolicy(policy) {
|
|
129
|
+
return {
|
|
130
|
+
mode: policy.mode,
|
|
131
|
+
exact: cloneExactModelSelection(policy.exact),
|
|
132
|
+
...(policy.tier === undefined ? {} : { tier: policy.tier }),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
112
135
|
function cloneExactModelSelection(selection) {
|
|
113
136
|
return {
|
|
114
137
|
model: { provider: selection.model.provider, id: selection.model.id },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionModelPolicy.js","sourceRoot":"","sources":["../../../src/server/sessions/sessionModelPolicy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sessionModelPolicy.js","sourceRoot":"","sources":["../../../src/server/sessions/sessionModelPolicy.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,17 +8,18 @@ export function deterministicSessionName(firstMessage) {
|
|
|
8
8
|
return undefined;
|
|
9
9
|
return relayHandoffSessionName(firstMessage.trimStart());
|
|
10
10
|
}
|
|
11
|
-
export async function generateShortSessionName(streamFn, model, firstMessage) {
|
|
12
|
-
const
|
|
11
|
+
export async function generateShortSessionName(streamFn, model, firstMessage, thinkingLevel = "minimal") {
|
|
12
|
+
const context = {
|
|
13
13
|
systemPrompt: "Generate a concise title for a coding-agent chat session. Return only the title, with no quotes or punctuation wrapper.",
|
|
14
14
|
messages: [{
|
|
15
15
|
role: "user",
|
|
16
16
|
content: `Create a 2-6 word title for this request:\n\n${truncateInput(firstMessage)}`,
|
|
17
17
|
timestamp: Date.now(),
|
|
18
18
|
}],
|
|
19
|
-
}
|
|
19
|
+
};
|
|
20
|
+
const stream = await streamFn(model, context, {
|
|
20
21
|
maxTokens: 24,
|
|
21
|
-
reasoning:
|
|
22
|
+
...(thinkingLevel === "off" ? {} : { reasoning: thinkingLevel }),
|
|
22
23
|
signal: AbortSignal.timeout(SESSION_NAME_TIMEOUT_MS),
|
|
23
24
|
});
|
|
24
25
|
let streamedText = "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionNameGenerator.js","sourceRoot":"","sources":["../../../src/server/sessions/sessionNameGenerator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sessionNameGenerator.js","sourceRoot":"","sources":["../../../src/server/sessions/sessionNameGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
export class SessionReorderDomainError extends Error {
|
|
2
|
+
constructor(kind, message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.kind = kind;
|
|
5
|
+
this.name = "SessionReorderDomainError";
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Validate a complete reorder request against the full sibling/pin group
|
|
10
|
+
* derived from `catalog`. Requires exact identity-set equality between the
|
|
11
|
+
* submitted ordered sessions and every catalog session currently eligible
|
|
12
|
+
* for `request.scope`/`request.pinned`, so a stale client cannot silently
|
|
13
|
+
* drop or omit a sibling.
|
|
14
|
+
*/
|
|
15
|
+
export function validateSessionReorder(target, request, catalog) {
|
|
16
|
+
requireTargetIncluded(target, request);
|
|
17
|
+
requireDistinctIdentities(request.orderedSessions);
|
|
18
|
+
const byIdentity = catalogByIdentity(catalog);
|
|
19
|
+
const resolved = resolveOrderedSessions(request.orderedSessions, byIdentity);
|
|
20
|
+
requireDistinctPaths(request.orderedSessions, resolved);
|
|
21
|
+
const eligible = catalog.filter((session) => isEligibleForScope(session, request.scope, request.pinned));
|
|
22
|
+
const eligibleIdentities = new Set(eligible.map((session) => identityKey(session.cwd, session.id)));
|
|
23
|
+
const submittedIdentities = new Set(request.orderedSessions.map((ref) => identityKey(ref.cwd, ref.id)));
|
|
24
|
+
for (const ref of request.orderedSessions) {
|
|
25
|
+
if (!eligibleIdentities.has(identityKey(ref.cwd, ref.id))) {
|
|
26
|
+
throw new SessionReorderDomainError("conflict", `Session is no longer eligible for this reorder: ${ref.id}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
for (const identity of eligibleIdentities) {
|
|
30
|
+
if (!submittedIdentities.has(identity)) {
|
|
31
|
+
throw new SessionReorderDomainError("conflict", "Session group changed during reorder");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const sessionPaths = resolved.map((session) => session.path);
|
|
35
|
+
const orderedSessions = request.orderedSessions.map((ref, manualOrder) => ({ ...ref, manualOrder }));
|
|
36
|
+
return { sessionPaths, response: { orderedSessions } };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Post-write guard: repeat the submitted-member existence, persistence,
|
|
40
|
+
* archive, scope, and pin checks against a freshly read catalog, but do not
|
|
41
|
+
* require exact identity-set equality so a session created concurrently with
|
|
42
|
+
* the write remains unordered at the top rather than failing the write.
|
|
43
|
+
*/
|
|
44
|
+
export function assertSubmittedSessionsCurrent(target, request, catalog) {
|
|
45
|
+
requireTargetIncluded(target, request);
|
|
46
|
+
requireDistinctIdentities(request.orderedSessions);
|
|
47
|
+
const byIdentity = catalogByIdentity(catalog);
|
|
48
|
+
for (const ref of request.orderedSessions) {
|
|
49
|
+
const session = byIdentity.get(identityKey(ref.cwd, ref.id));
|
|
50
|
+
if (session === undefined)
|
|
51
|
+
throw new SessionReorderDomainError("not-found", `Session not found: ${ref.id}`);
|
|
52
|
+
if (!isEligibleForScope(session, request.scope, request.pinned)) {
|
|
53
|
+
throw new SessionReorderDomainError("conflict", `Session changed during reorder: ${ref.id}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function requireTargetIncluded(target, request) {
|
|
58
|
+
const included = request.orderedSessions.some((ref) => ref.id === target.id && ref.cwd === target.cwd);
|
|
59
|
+
if (!included)
|
|
60
|
+
throw new SessionReorderDomainError("invalid", "Target session must be included in the ordered sessions");
|
|
61
|
+
}
|
|
62
|
+
function requireDistinctIdentities(orderedSessions) {
|
|
63
|
+
const identities = new Set();
|
|
64
|
+
for (const ref of orderedSessions) {
|
|
65
|
+
const identity = identityKey(ref.cwd, ref.id);
|
|
66
|
+
if (identities.has(identity)) {
|
|
67
|
+
throw new SessionReorderDomainError("invalid", "Duplicate session reference in reorder request");
|
|
68
|
+
}
|
|
69
|
+
identities.add(identity);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function catalogByIdentity(catalog) {
|
|
73
|
+
const byIdentity = new Map();
|
|
74
|
+
for (const session of catalog)
|
|
75
|
+
byIdentity.set(identityKey(session.cwd, session.id), session);
|
|
76
|
+
return byIdentity;
|
|
77
|
+
}
|
|
78
|
+
function resolveOrderedSessions(orderedSessions, byIdentity) {
|
|
79
|
+
return orderedSessions.map((ref) => {
|
|
80
|
+
const session = byIdentity.get(identityKey(ref.cwd, ref.id));
|
|
81
|
+
if (session === undefined)
|
|
82
|
+
throw new SessionReorderDomainError("not-found", `Session not found: ${ref.id}`);
|
|
83
|
+
return session;
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
function requireDistinctPaths(orderedSessions, resolved) {
|
|
87
|
+
const pathsSeen = new Map();
|
|
88
|
+
for (let index = 0; index < resolved.length; index += 1) {
|
|
89
|
+
const session = resolved[index];
|
|
90
|
+
const ref = orderedSessions[index];
|
|
91
|
+
if (session === undefined || ref === undefined)
|
|
92
|
+
continue;
|
|
93
|
+
const existing = pathsSeen.get(session.path);
|
|
94
|
+
if (existing !== undefined && (existing.id !== ref.id || existing.cwd !== ref.cwd)) {
|
|
95
|
+
throw new SessionReorderDomainError("invalid", "Distinct sessions resolved to the same persisted path");
|
|
96
|
+
}
|
|
97
|
+
pathsSeen.set(session.path, ref);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function isEligibleForScope(session, scope, pinned) {
|
|
101
|
+
if (session.archived === true)
|
|
102
|
+
return false;
|
|
103
|
+
if (session.persisted !== true)
|
|
104
|
+
return false;
|
|
105
|
+
if ((session.pinned === true) !== pinned)
|
|
106
|
+
return false;
|
|
107
|
+
if (scope.kind === "root") {
|
|
108
|
+
if (session.parentSessionPath !== undefined)
|
|
109
|
+
return false;
|
|
110
|
+
return session.cwd === scope.cwd;
|
|
111
|
+
}
|
|
112
|
+
return session.parentSessionPath === scope.parentSessionPath;
|
|
113
|
+
}
|
|
114
|
+
function identityKey(cwd, id) {
|
|
115
|
+
return JSON.stringify([cwd, id]);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=sessionReorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionReorder.js","sourceRoot":"","sources":["../../../src/server/sessions/sessionReorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SESSION_REORDER_SESSION_ID_MAX_LENGTH } from "../../shared/apiTypes.js";
|
|
2
|
+
/** Router capacity required for strict validation of the reorder session ID. */
|
|
3
|
+
export const sessionRouteFastifyOptions = {
|
|
4
|
+
routerOptions: {
|
|
5
|
+
maxParamLength: SESSION_REORDER_SESSION_ID_MAX_LENGTH + 1,
|
|
6
|
+
},
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=sessionRouteFastifyOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionRouteFastifyOptions.js","sourceRoot":"","sources":["../../../src/server/sessions/sessionRouteFastifyOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,MAAM,0BAA0B,CAAC;AAEjF,gFAAgF;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,aAAa,EAAE;QACb,cAAc,EAAE,qCAAqC,GAAG,CAAC;KAC1D;CACF,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { MODEL_TIERS, SESSION_TREE_CUSTOM_INSTRUCTIONS_MAX_LENGTH, SESSION_UNREAD_CATALOG_ID_MAX_LENGTH, SESSION_UNREAD_CWD_MAX_LENGTH, SESSION_UNREAD_SESSION_ID_MAX_LENGTH, } from "../../shared/apiTypes.js";
|
|
1
|
+
import { MODEL_TIERS, SESSION_REORDER_CWD_MAX_LENGTH, SESSION_REORDER_LIMIT, SESSION_REORDER_PARENT_PATH_MAX_LENGTH, SESSION_REORDER_SESSION_ID_MAX_LENGTH, SESSION_TREE_CUSTOM_INSTRUCTIONS_MAX_LENGTH, SESSION_UNREAD_CATALOG_ID_MAX_LENGTH, SESSION_UNREAD_CWD_MAX_LENGTH, SESSION_UNREAD_SESSION_ID_MAX_LENGTH, } from "../../shared/apiTypes.js";
|
|
2
2
|
import { projectBrowserMessageResponse } from "../browserMessageProjection.js";
|
|
3
3
|
import { normalizeRequestCwd } from "../workingDirectory.js";
|
|
4
|
+
import { RememberCurrentModelPolicyConflictError } from "./rememberCurrentModelPolicy.js";
|
|
4
5
|
import { normalizeSessionCleanupRequest } from "./sessionCleanup.js";
|
|
6
|
+
import { SessionReorderDomainError } from "./sessionReorder.js";
|
|
5
7
|
const MAX_SESSION_MODEL_POLICY_STRING_LENGTH = 512;
|
|
6
8
|
const MAX_NOTIFICATION_SESSION_ID_LENGTH = 512;
|
|
7
9
|
const MAX_NOTIFICATION_CWD_LENGTH = 32 * 1024;
|
|
@@ -23,9 +25,9 @@ export function registerSessionRoutes(app, sessions, eventHub, prefix = "") {
|
|
|
23
25
|
try {
|
|
24
26
|
const body = sessionStartRequestFromUnknown(request.body);
|
|
25
27
|
const cwd = normalizeRequestCwd(body.cwd);
|
|
26
|
-
if (body.
|
|
28
|
+
if (body.options === undefined)
|
|
27
29
|
return await sessions.start(cwd);
|
|
28
|
-
return await sessions.start(cwd,
|
|
30
|
+
return await sessions.start(cwd, body.options);
|
|
29
31
|
}
|
|
30
32
|
catch (error) {
|
|
31
33
|
return reply.code(400).send({ error: errorMessage(error) });
|
|
@@ -217,6 +219,21 @@ export function registerSessionRoutes(app, sessions, eventHub, prefix = "") {
|
|
|
217
219
|
return reply.code(mutationErrorStatus(error)).send({ error: errorMessage(error) });
|
|
218
220
|
}
|
|
219
221
|
});
|
|
222
|
+
app.post(`${prefix}/sessions/:sessionId/model-policy/remember`, async (request, reply) => {
|
|
223
|
+
let lookup;
|
|
224
|
+
try {
|
|
225
|
+
lookup = rememberModelPolicyLookup(request.params.sessionId, request.query, request.body);
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
return reply.code(400).send({ error: errorMessage(error) });
|
|
229
|
+
}
|
|
230
|
+
try {
|
|
231
|
+
return await sessions.rememberCurrentModelPolicy(lookup);
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
return reply.code(rememberModelPolicyErrorStatus(error)).send({ error: errorMessage(error) });
|
|
235
|
+
}
|
|
236
|
+
});
|
|
220
237
|
app.post(`${prefix}/sessions/:sessionId/model`, async (request, reply) => {
|
|
221
238
|
try {
|
|
222
239
|
const body = optionalRecord(request.body);
|
|
@@ -456,6 +473,25 @@ export function registerSessionRoutes(app, sessions, eventHub, prefix = "") {
|
|
|
456
473
|
return reply.code(mutationErrorStatus(error)).send({ error: errorMessage(error) });
|
|
457
474
|
}
|
|
458
475
|
});
|
|
476
|
+
app.post(`${prefix}/sessions/:sessionId/reorder`, async (request, reply) => {
|
|
477
|
+
let parsed;
|
|
478
|
+
let sessionId;
|
|
479
|
+
try {
|
|
480
|
+
sessionId = requireNonEmptyBoundedString(request.params.sessionId, "sessionId", SESSION_REORDER_SESSION_ID_MAX_LENGTH);
|
|
481
|
+
parsed = sessionReorderRequestFromUnknown(request.body);
|
|
482
|
+
if (!parsed.orderedSessions.some((entry) => (entry.id === sessionId && entry.cwd === parsed.cwd)))
|
|
483
|
+
throw new Error("orderedSessions must contain the URL target");
|
|
484
|
+
}
|
|
485
|
+
catch (error) {
|
|
486
|
+
return reply.code(400).send({ error: errorMessage(error) });
|
|
487
|
+
}
|
|
488
|
+
try {
|
|
489
|
+
return await sessions.reorder({ id: sessionId, cwd: parsed.cwd }, parsed);
|
|
490
|
+
}
|
|
491
|
+
catch (error) {
|
|
492
|
+
return reply.code(sessionReorderErrorStatus(error)).send({ error: errorMessage(error) });
|
|
493
|
+
}
|
|
494
|
+
});
|
|
459
495
|
app.get(`${prefix}/sessions/:sessionId/events`, { websocket: true }, (socket, request) => {
|
|
460
496
|
// Only the id matters for event subscription; cwd is intentionally ignored
|
|
461
497
|
// so a malformed value cannot throw inside the websocket handler.
|
|
@@ -501,13 +537,131 @@ function notificationRef(id, cwd) {
|
|
|
501
537
|
cwd: normalizeRequestCwd(cwd),
|
|
502
538
|
};
|
|
503
539
|
}
|
|
540
|
+
function sessionReorderRequestFromUnknown(value) {
|
|
541
|
+
const record = requirePlainRecord(value, "session reorder");
|
|
542
|
+
requireExactFields(record, ["cwd", "scope", "pinned", "catalogCwds", "orderedSessions"], "session reorder");
|
|
543
|
+
const cwd = normalizeRequestCwd(requireNonEmptyBoundedString(record["cwd"], "cwd", SESSION_REORDER_CWD_MAX_LENGTH));
|
|
544
|
+
const scope = sessionReorderScopeFromUnknown(record["scope"]);
|
|
545
|
+
const pinned = record["pinned"];
|
|
546
|
+
if (typeof pinned !== "boolean")
|
|
547
|
+
throw new Error("pinned field must be a boolean");
|
|
548
|
+
const catalogCwds = normalizedReorderCatalogCwds(record["catalogCwds"]);
|
|
549
|
+
const catalogCwdSet = new Set(catalogCwds);
|
|
550
|
+
if (!catalogCwdSet.has(cwd))
|
|
551
|
+
throw new Error("cwd must be included in catalogCwds");
|
|
552
|
+
if (scope.kind === "root" && !catalogCwdSet.has(scope.cwd)) {
|
|
553
|
+
throw new Error("scope.cwd must be included in catalogCwds");
|
|
554
|
+
}
|
|
555
|
+
const orderedSessions = reorderSessionRefsFromUnknown(record["orderedSessions"]);
|
|
556
|
+
for (const session of orderedSessions) {
|
|
557
|
+
if (!catalogCwdSet.has(session.cwd)) {
|
|
558
|
+
throw new Error("orderedSessions CWD must be included in catalogCwds");
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
return { cwd, scope, pinned, catalogCwds, orderedSessions };
|
|
562
|
+
}
|
|
563
|
+
function sessionReorderScopeFromUnknown(value) {
|
|
564
|
+
const record = requirePlainRecord(value, "scope");
|
|
565
|
+
const kind = record["kind"];
|
|
566
|
+
if (kind === "root") {
|
|
567
|
+
requireExactFields(record, ["kind", "cwd"], "scope");
|
|
568
|
+
return {
|
|
569
|
+
kind,
|
|
570
|
+
cwd: normalizeRequestCwd(requireNonEmptyBoundedString(record["cwd"], "scope.cwd", SESSION_REORDER_CWD_MAX_LENGTH)),
|
|
571
|
+
};
|
|
572
|
+
}
|
|
573
|
+
if (kind === "children") {
|
|
574
|
+
requireExactFields(record, ["kind", "parentSessionPath"], "scope");
|
|
575
|
+
return {
|
|
576
|
+
kind,
|
|
577
|
+
parentSessionPath: requireNonEmptyBoundedString(record["parentSessionPath"], "scope.parentSessionPath", SESSION_REORDER_PARENT_PATH_MAX_LENGTH),
|
|
578
|
+
};
|
|
579
|
+
}
|
|
580
|
+
throw new Error("scope.kind field is invalid");
|
|
581
|
+
}
|
|
582
|
+
function normalizedReorderCatalogCwds(value) {
|
|
583
|
+
if (!Array.isArray(value))
|
|
584
|
+
throw new Error("catalogCwds field must be an array");
|
|
585
|
+
if (value.length === 0)
|
|
586
|
+
throw new Error("catalogCwds field must not be empty");
|
|
587
|
+
if (value.length > SESSION_REORDER_LIMIT) {
|
|
588
|
+
throw new Error(`catalogCwds field must contain at most ${String(SESSION_REORDER_LIMIT)} entries`);
|
|
589
|
+
}
|
|
590
|
+
const seen = new Set();
|
|
591
|
+
return value.map((entry, index) => {
|
|
592
|
+
const cwd = normalizeRequestCwd(requireNonEmptyBoundedString(entry, `catalogCwds[${String(index)}]`, SESSION_REORDER_CWD_MAX_LENGTH));
|
|
593
|
+
if (seen.has(cwd))
|
|
594
|
+
throw new Error("catalogCwds field contains duplicate CWDs");
|
|
595
|
+
seen.add(cwd);
|
|
596
|
+
return cwd;
|
|
597
|
+
});
|
|
598
|
+
}
|
|
599
|
+
function reorderSessionRefsFromUnknown(value) {
|
|
600
|
+
if (!Array.isArray(value))
|
|
601
|
+
throw new Error("orderedSessions field must be an array");
|
|
602
|
+
if (value.length === 0)
|
|
603
|
+
throw new Error("orderedSessions field must not be empty");
|
|
604
|
+
if (value.length > SESSION_REORDER_LIMIT) {
|
|
605
|
+
throw new Error(`orderedSessions field must contain at most ${String(SESSION_REORDER_LIMIT)} entries`);
|
|
606
|
+
}
|
|
607
|
+
const seen = new Set();
|
|
608
|
+
return value.map((entry, index) => {
|
|
609
|
+
const label = `orderedSessions[${String(index)}]`;
|
|
610
|
+
const record = requirePlainRecord(entry, label);
|
|
611
|
+
requireExactFields(record, ["id", "cwd"], label);
|
|
612
|
+
const id = requireNonEmptyBoundedString(record["id"], `${label}.id`, SESSION_REORDER_SESSION_ID_MAX_LENGTH);
|
|
613
|
+
const cwd = normalizeRequestCwd(requireNonEmptyBoundedString(record["cwd"], `${label}.cwd`, SESSION_REORDER_CWD_MAX_LENGTH));
|
|
614
|
+
const identity = JSON.stringify([cwd, id]);
|
|
615
|
+
if (seen.has(identity))
|
|
616
|
+
throw new Error("orderedSessions field contains duplicate session references");
|
|
617
|
+
seen.add(identity);
|
|
618
|
+
return { id, cwd };
|
|
619
|
+
});
|
|
620
|
+
}
|
|
504
621
|
function sessionStartRequestFromUnknown(value) {
|
|
505
622
|
const record = requirePlainRecord(value, "request body");
|
|
623
|
+
const hasCreationSource = Object.hasOwn(record, "creationSource");
|
|
624
|
+
const hasInitialModelPolicy = Object.hasOwn(record, "initialModelPolicy");
|
|
625
|
+
if (hasCreationSource || hasInitialModelPolicy) {
|
|
626
|
+
requireExactFields(record, ["cwd", "creationSource", "initialModelPolicy"], "session start");
|
|
627
|
+
const cwd = requireString(record, "cwd");
|
|
628
|
+
if (!hasCreationSource)
|
|
629
|
+
throw new Error("creationSource field is required");
|
|
630
|
+
if (!hasInitialModelPolicy)
|
|
631
|
+
throw new Error("initialModelPolicy field is required");
|
|
632
|
+
if (record["creationSource"] !== "session-list-plus") {
|
|
633
|
+
throw new Error("unknown session creation source");
|
|
634
|
+
}
|
|
635
|
+
return {
|
|
636
|
+
cwd,
|
|
637
|
+
options: {
|
|
638
|
+
creationSource: "session-list-plus",
|
|
639
|
+
initialModelPolicy: starterModelPolicyPreferenceFromUnknown(record["initialModelPolicy"]),
|
|
640
|
+
},
|
|
641
|
+
};
|
|
642
|
+
}
|
|
506
643
|
requireExactFields(record, ["cwd", "modelPolicy"], "session start");
|
|
507
644
|
const cwd = requireString(record, "cwd");
|
|
508
645
|
if (!Object.hasOwn(record, "modelPolicy"))
|
|
509
646
|
return { cwd };
|
|
510
|
-
return { cwd, modelPolicy: sessionModelPolicyUpdateFromUnknown(record["modelPolicy"]) };
|
|
647
|
+
return { cwd, options: { modelPolicy: sessionModelPolicyUpdateFromUnknown(record["modelPolicy"]) } };
|
|
648
|
+
}
|
|
649
|
+
function starterModelPolicyPreferenceFromUnknown(value) {
|
|
650
|
+
const record = requirePlainRecord(value, "initial model policy");
|
|
651
|
+
requireExactFields(record, ["mode", "exact", "tier"], "initial model policy");
|
|
652
|
+
const mode = record["mode"];
|
|
653
|
+
if (mode !== "exact" && mode !== "tiered") {
|
|
654
|
+
throw new Error("initial model policy mode must be exact or tiered");
|
|
655
|
+
}
|
|
656
|
+
if (!Object.hasOwn(record, "exact"))
|
|
657
|
+
throw new Error("exact field is required");
|
|
658
|
+
const exact = exactModelSelectionFromUnknown(record["exact"]);
|
|
659
|
+
if (!Object.hasOwn(record, "tier")) {
|
|
660
|
+
if (mode === "tiered")
|
|
661
|
+
throw new Error("tier field is required");
|
|
662
|
+
return { mode, exact };
|
|
663
|
+
}
|
|
664
|
+
return { mode, exact, tier: tierFromUnknown(record["tier"]) };
|
|
511
665
|
}
|
|
512
666
|
function modelPolicyMutationBodyFromUnknown(value) {
|
|
513
667
|
const record = requirePlainRecord(value, "request body");
|
|
@@ -575,6 +729,19 @@ function isPlainRecord(value) {
|
|
|
575
729
|
const prototype = Reflect.getPrototypeOf(value);
|
|
576
730
|
return prototype === Object.prototype || prototype === null;
|
|
577
731
|
}
|
|
732
|
+
function rememberModelPolicyLookup(id, query, body) {
|
|
733
|
+
if (body !== undefined)
|
|
734
|
+
throw new Error("request body must be empty");
|
|
735
|
+
if (!isRecord(query))
|
|
736
|
+
throw new Error("query must be an object");
|
|
737
|
+
const record = query;
|
|
738
|
+
requireExactFields(record, ["cwd"], "model policy remember query");
|
|
739
|
+
const cwd = record.cwd;
|
|
740
|
+
if (cwd !== undefined && typeof cwd !== "string") {
|
|
741
|
+
throw new Error("cwd query parameter must be a string");
|
|
742
|
+
}
|
|
743
|
+
return sessionLookupFromCwd(id, cwd);
|
|
744
|
+
}
|
|
578
745
|
function sessionLookupFromQuery(id, query) {
|
|
579
746
|
return sessionLookupFromCwd(id, query.cwd);
|
|
580
747
|
}
|
|
@@ -695,9 +862,25 @@ function optionalNumber(value) {
|
|
|
695
862
|
function errorMessage(error) {
|
|
696
863
|
return error instanceof Error ? error.message : String(error);
|
|
697
864
|
}
|
|
865
|
+
function sessionReorderErrorStatus(error) {
|
|
866
|
+
if (!(error instanceof SessionReorderDomainError))
|
|
867
|
+
return 500;
|
|
868
|
+
if (error.kind === "invalid")
|
|
869
|
+
return 400;
|
|
870
|
+
if (error.kind === "not-found")
|
|
871
|
+
return 404;
|
|
872
|
+
return 409;
|
|
873
|
+
}
|
|
698
874
|
function mutationErrorStatus(error) {
|
|
699
875
|
return isSessionNotFoundError(error) ? 404 : 400;
|
|
700
876
|
}
|
|
877
|
+
function rememberModelPolicyErrorStatus(error) {
|
|
878
|
+
if (isSessionNotFoundError(error))
|
|
879
|
+
return 404;
|
|
880
|
+
if (error instanceof RememberCurrentModelPolicyConflictError)
|
|
881
|
+
return 409;
|
|
882
|
+
return 500;
|
|
883
|
+
}
|
|
701
884
|
function notificationErrorStatus(error) {
|
|
702
885
|
return isSessionNotFoundError(error) ? 404 : 400;
|
|
703
886
|
}
|