@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
@@ -1 +1 @@
1
- {"version":3,"file":"sessionMetadataStore.js","sourceRoot":"","sources":["../../../src/server/sessions/sessionMetadataStore.ts"],"names":[],"mappings":"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"}
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":"AAAA,OAAO,EACL,WAAW,GAKZ,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,MAAM,gCAAgC,GAAG,uBAAuB,CAAC;AAYxE,MAAM,UAAU,yBAAyB,CACvC,OAA2B,EAC3B,QAA6B;IAE7B,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE,SAAS;QAEpC,IAAI,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC9D,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC;aAChC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAA0B;IACpE,OAAO;QACL,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE;YACL,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE;YAC3E,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa;SAC1C;QACD,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,MAA0B,EAC1B,WAAqD;IAErD,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO;YACL,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC;SAC/C,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO;QACL,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,wBAAwB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,OAA2B,EAC3B,MAAgC,EAChC,WAAqD;IAErD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrD,OAAO;YACL,MAAM,EAAE;gBACN,IAAI,EAAE,OAAO;gBACb,KAAK;gBACL,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;aAC9D;YACD,MAAM,EAAE,wBAAwB,CAAC,KAAK,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;QAC7F,MAAM,EAAE,wBAAwB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,gCAAgC,CAAC;AACnH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACnD,cAAc,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAE3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAElF,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACpF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACjF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACvD,cAAc,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;IACnD,OAAO;QACL,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,aAAa,EAAE,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,gBAAgB,CAAC;KACzE,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACvD,cAAc,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3C,OAAO;QACL,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;QACxD,EAAE,EAAE,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa;IAClD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IACpE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,MAA+B,EAAE,WAA8B;IACrF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACjF,IAAI,UAAU,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,KAAa;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;IAC7G,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,WAAW,CAAC,KAA0B;IAC7C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,SAAS,uBAAuB,CAAC,MAA0B;IACzD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7C,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,SAA8B;IAC9D,OAAO;QACL,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE;QACrE,aAAa,EAAE,SAAS,CAAC,aAAa;KACvC,CAAC;AACJ,CAAC"}
@@ -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 stream = await streamFn(model, {
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: "minimal",
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":"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"}
1
+ {"version":3,"file":"sessionNameGenerator.js","sourceRoot":"","sources":["../../../src/server/sessions/sessionNameGenerator.ts"],"names":[],"mappings":"AAIA,MAAM,uBAAuB,GAAG,MAAM,CAAC;AACvC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAC3C,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AAC1C,MAAM,wBAAwB,GAAG,+DAA+D,CAAC;AAEjG,MAAM,UAAU,wBAAwB,CAAC,YAAqB;IAC5D,IAAI,OAAO,YAAY,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEvD,OAAO,uBAAuB,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAAkB,EAClB,KAAkB,EAClB,YAAoB,EACpB,gBAA+B,SAAS;IAExC,MAAM,OAAO,GAAG;QACd,YAAY,EAAE,yHAAyH;QACvI,QAAQ,EAAE,CAAC;gBACT,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE,gDAAgD,aAAa,CAAC,YAAY,CAAC,EAAE;gBACtF,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;KACH,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B,KAAK,EACL,OAAO,EACP;QACE,SAAS,EAAE,EAAE;QACb,GAAG,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;QAChE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,uBAAuB,CAAC;KACrD,CACF,CAAC;IAEF,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,YAA0C,CAAC;IAC/C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;YAAE,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC;QAC7D,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;QACxD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,SAAS,CAAC;IAC/C,CAAC;IAED,OAAO,gBAAgB,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC;AACvG,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAqB;IACvD,IAAI,OAAO,YAAY,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEvD,OAAO,gBAAgB,CAAC,YAAY;SACjC,OAAO,CAAC,yDAAyD,EAAE,EAAE,CAAC;SACtE,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC;SAC/B,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,OAAO,CAAC;SACf,KAAK,CAAC,CAAC,EAAE,+BAA+B,CAAC;SACzC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAC1C,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC;SAChD,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC;SACtC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE;SACN,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC;SACjC,IAAI,EAAE,CAAC;IACV,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1C,CAAC;AAED,SAAS,uBAAuB,CAAC,YAAoB;IACnD,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1D,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAErC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE7F,OAAO,gBAAgB,CAAC,sBAAsB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,sBAAsB,CAAC,SAAiB,EAAE,SAAiB;IAClE,MAAM,MAAM,GAAG,QAAQ,CAAC;IACxB,MAAM,MAAM,GAAG,QAAQ,SAAS,EAAE,CAAC;IACnC,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAChG,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAC5E,OAAO,GAAG,MAAM,GAAG,kBAAkB,GAAG,MAAM,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB,EAAE,SAAiB;IAC7D,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IACpD,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjF,OAAO,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAyB;IAClD,OAAO,OAAO,CAAC,OAAO;SACnB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;SACtC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACxB,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,MAAM,IAAI,4BAA4B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,GAAG,CAAC;AACnH,CAAC"}
@@ -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.modelPolicy === undefined)
28
+ if (body.options === undefined)
27
29
  return await sessions.start(cwd);
28
- return await sessions.start(cwd, { modelPolicy: body.modelPolicy });
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
  }