@jingyi0605/codingns 0.9.8 → 1.0.0-beta.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.
Files changed (169) hide show
  1. package/bin/codingns.mjs +14 -0
  2. package/dist/public/assets/{AdaptiveButlerPage-D-gXre7Y.js → AdaptiveButlerPage-BYETYaIe.js} +2 -2
  3. package/dist/public/assets/App-CHsm-VrM.js +30 -0
  4. package/dist/public/assets/App-Z0Zd7gXR.css +1 -0
  5. package/dist/public/assets/{BootstrapPage-B-yMdfpQ.js → BootstrapPage-Bp0KfySv.js} +1 -1
  6. package/dist/public/assets/ConversationPage-BCrNml1k.js +9 -0
  7. package/dist/public/assets/{DesktopDetachPreviewPage-D1DMaGcy.js → DesktopDetachPreviewPage-DlDSb_tf.js} +1 -1
  8. package/dist/public/assets/{DesktopModal-BnfGW2gk.js → DesktopModal-Csj5AdAN.js} +1 -1
  9. package/dist/public/assets/DesktopWindowPage-CacXiWjV.js +2 -0
  10. package/dist/public/assets/FileContextPanel-DzMUQvE5.js +1 -0
  11. package/dist/public/assets/GitSidebar-C8IC18GH.js +6 -0
  12. package/dist/public/assets/MobileCreateSessionSheet-BtqR_hKc.js +1 -0
  13. package/dist/public/assets/{MobileSheet-rkn_CUOY.js → MobileSheet-Co-qPMBD.js} +1 -1
  14. package/dist/public/assets/PluginAccessOverview-D-KXkcyj.js +1 -0
  15. package/dist/public/assets/{PluginContainerPage-D-ly3i3H.js → PluginContainerPage-BKwCIs4r.js} +1 -1
  16. package/dist/public/assets/{PluginDetailPage-CWAHYyyG.js → PluginDetailPage-Djv_swcO.js} +1 -1
  17. package/dist/public/assets/{PluginsListPage-Cte3vBgR.js → PluginsListPage-DAECNoN6.js} +1 -1
  18. package/dist/public/assets/PureConversationPage-DP1X7Hix.js +1 -0
  19. package/dist/public/assets/{RelayConnectEntryPage-sRJlstx9.js → RelayConnectEntryPage-xL_IPH8a.js} +1 -1
  20. package/dist/public/assets/{ServerSettingsModal-BBft9KEC.js → ServerSettingsModal-CyhMgk10.js} +1 -1
  21. package/dist/public/assets/SessionIndexPage-CVEz50tc.js +1 -0
  22. package/dist/public/assets/SettingsPage-CQNCrgaj.js +2 -0
  23. package/dist/public/assets/TerminalManagerPanel-wVnoRA8u.js +1 -0
  24. package/dist/public/assets/ToolFilesPage-BospXumK.js +1 -0
  25. package/dist/public/assets/ToolGitPage-B2zOeCAD.js +1 -0
  26. package/dist/public/assets/ToolProcessesPage-BDShao4b.js +1 -0
  27. package/dist/public/assets/{ToolsHomePage-D1n4FU1s.js → ToolsHomePage-s4zH7D9M.js} +1 -1
  28. package/dist/public/assets/{WorkbenchLandingPage-BaU_dXls.js → WorkbenchLandingPage-D51QCU_u.js} +1 -1
  29. package/dist/public/assets/{WorkbenchLayout-BksVkkFF.css → WorkbenchLayout-BZdfVest.css} +32 -1
  30. package/dist/public/assets/WorkbenchLayout-Bo2BbMY6.js +1081 -0
  31. package/dist/public/assets/{WorkbenchModal-DWsNm2B2.js → WorkbenchModal-YsyEdJ_m.js} +1 -1
  32. package/dist/public/assets/WorkbenchShellRoute-D3l4aWJS.js +1 -0
  33. package/dist/public/assets/WorkbenchShellRoute-D5fnyF8z.css +1 -0
  34. package/dist/public/assets/WorkspaceDebugDetailPage-CMjNLqFq.js +1 -0
  35. package/dist/public/assets/WorkspaceDetailPage-CKxTbPKh.js +1 -0
  36. package/dist/public/assets/WorkspaceHomePage-CEy4ShCu.js +1 -0
  37. package/dist/public/assets/{client-runtime-manager-D9VbgJZ_.js → client-runtime-manager-BFXU9DmS.js} +1 -1
  38. package/dist/public/assets/host-alias-Zb2xyVrf.js +1 -0
  39. package/dist/public/assets/index-BilHJjYU.js +50 -0
  40. package/dist/public/assets/index-OR7OITpQ.css +1 -0
  41. package/dist/public/assets/{login-direct-candidate-resolver-17wEvjhh.js → login-direct-candidate-resolver-DL8DS-Si.js} +1 -1
  42. package/dist/public/assets/peer-host-config-sync-d2ZcPC5P.js +1 -0
  43. package/dist/public/assets/{plugin-permission-copy-apDn8EWG.js → plugin-permission-copy-DrLk22m5.js} +1 -1
  44. package/dist/public/assets/{plugins-api-CnZYRKoS.js → plugins-api-COF4oh24.js} +1 -1
  45. package/dist/public/assets/{preferences-service-PZlLLAWH.js → preferences-service-CEWNV1w9.js} +1 -1
  46. package/dist/public/assets/{relay-entry-DhHwflXl.js → relay-entry-Cmc8vTlE.js} +1 -1
  47. package/dist/public/assets/useRegisteredDebugTemplates-FdmHG2S4.js +1 -0
  48. package/dist/public/assets/workbench-navigation-ED0157V-.js +1 -0
  49. package/dist/public/index.html +2 -2
  50. package/dist/server/config/env.js +5 -3
  51. package/dist/server/config/env.js.map +1 -1
  52. package/dist/server/modules/assistant-capability/assistant-capability-controller.d.ts +3 -0
  53. package/dist/server/modules/assistant-capability/assistant-capability-controller.js +9 -0
  54. package/dist/server/modules/assistant-capability/assistant-capability-controller.js.map +1 -1
  55. package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +3 -0
  56. package/dist/server/modules/assistant-capability/assistant-capability-service.js +4 -1
  57. package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
  58. package/dist/server/modules/butler/butler-session-service.d.ts +1 -0
  59. package/dist/server/modules/butler/butler-session-service.js +2 -1
  60. package/dist/server/modules/butler/butler-session-service.js.map +1 -1
  61. package/dist/server/modules/client/npm-global-package-service.js +3 -0
  62. package/dist/server/modules/client/npm-global-package-service.js.map +1 -1
  63. package/dist/server/modules/client/service-update-types.d.ts +3 -0
  64. package/dist/server/modules/peer-host/peer-host-controller.d.ts +5 -0
  65. package/dist/server/modules/peer-host/peer-host-controller.js +3 -0
  66. package/dist/server/modules/peer-host/peer-host-controller.js.map +1 -1
  67. package/dist/server/modules/peer-host/peer-host-service.d.ts +1 -0
  68. package/dist/server/modules/peer-host/peer-host-service.js +44 -0
  69. package/dist/server/modules/peer-host/peer-host-service.js.map +1 -1
  70. package/dist/server/modules/sessions/session-controller.d.ts +10 -0
  71. package/dist/server/modules/sessions/session-controller.js +11 -0
  72. package/dist/server/modules/sessions/session-controller.js.map +1 -1
  73. package/dist/server/modules/sessions/session-history-service.d.ts +43 -1
  74. package/dist/server/modules/sessions/session-history-service.js +362 -27
  75. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  76. package/dist/server/modules/tasks/observability-controller.d.ts +2 -0
  77. package/dist/server/modules/tasks/observability-controller.js +16 -1
  78. package/dist/server/modules/tasks/observability-controller.js.map +1 -1
  79. package/dist/server/modules/tasks/observability-service.d.ts +12 -2
  80. package/dist/server/modules/tasks/observability-service.js +16 -3
  81. package/dist/server/modules/tasks/observability-service.js.map +1 -1
  82. package/dist/server/modules/terminal/runtime/terminal-log-spooler.d.ts +5 -0
  83. package/dist/server/modules/terminal/runtime/terminal-log-spooler.js +54 -7
  84. package/dist/server/modules/terminal/runtime/terminal-log-spooler.js.map +1 -1
  85. package/dist/server/modules/workbench/affairs-assistant-session-snapshot-service.js +2 -1
  86. package/dist/server/modules/workbench/affairs-assistant-session-snapshot-service.js.map +1 -1
  87. package/dist/server/modules/workbench/workbench-service.d.ts +2 -0
  88. package/dist/server/modules/workbench/workbench-service.js +173 -20
  89. package/dist/server/modules/workbench/workbench-service.js.map +1 -1
  90. package/dist/server/modules/workspace/affairs-library-controller.d.ts +1 -0
  91. package/dist/server/modules/workspace/affairs-library-controller.js +3 -0
  92. package/dist/server/modules/workspace/affairs-library-controller.js.map +1 -1
  93. package/dist/server/modules/workspace/affairs-library-service.d.ts +4 -0
  94. package/dist/server/modules/workspace/affairs-library-service.js +23 -4
  95. package/dist/server/modules/workspace/affairs-library-service.js.map +1 -1
  96. package/dist/server/modules/workspace/affairs-lightweight-session-controller.d.ts +4 -0
  97. package/dist/server/modules/workspace/affairs-lightweight-session-controller.js +26 -0
  98. package/dist/server/modules/workspace/affairs-lightweight-session-controller.js.map +1 -1
  99. package/dist/server/modules/workspace/affairs-lightweight-session-service.d.ts +15 -1
  100. package/dist/server/modules/workspace/affairs-lightweight-session-service.js +201 -22
  101. package/dist/server/modules/workspace/affairs-lightweight-session-service.js.map +1 -1
  102. package/dist/server/modules/workspace/workspace-controller.d.ts +7 -1
  103. package/dist/server/modules/workspace/workspace-controller.js +11 -1
  104. package/dist/server/modules/workspace/workspace-controller.js.map +1 -1
  105. package/dist/server/modules/workspace/workspace-service.d.ts +9 -2
  106. package/dist/server/modules/workspace/workspace-service.js +45 -10
  107. package/dist/server/modules/workspace/workspace-service.js.map +1 -1
  108. package/dist/server/routes/affairs.js +4 -0
  109. package/dist/server/routes/affairs.js.map +1 -1
  110. package/dist/server/routes/peer-hosts.js +1 -0
  111. package/dist/server/routes/peer-hosts.js.map +1 -1
  112. package/dist/server/routes/sessions.js +2 -0
  113. package/dist/server/routes/sessions.js.map +1 -1
  114. package/dist/server/server/create-server.js +2 -2
  115. package/dist/server/server/create-server.js.map +1 -1
  116. package/dist/server/storage/repositories/session-discovery-diagnostics-repository.d.ts +10 -0
  117. package/dist/server/storage/repositories/session-discovery-diagnostics-repository.js +68 -0
  118. package/dist/server/storage/repositories/session-discovery-diagnostics-repository.js.map +1 -0
  119. package/dist/server/storage/repositories/session-source-index-repository.d.ts +14 -0
  120. package/dist/server/storage/repositories/session-source-index-repository.js +164 -0
  121. package/dist/server/storage/repositories/session-source-index-repository.js.map +1 -0
  122. package/dist/server/storage/repositories/workspace-navigation-state-repository.js +16 -7
  123. package/dist/server/storage/repositories/workspace-navigation-state-repository.js.map +1 -1
  124. package/dist/server/storage/sqlite/client.js +26 -0
  125. package/dist/server/storage/sqlite/client.js.map +1 -1
  126. package/dist/server/storage/sqlite/schema.sql +57 -0
  127. package/dist/server/types/domain.d.ts +45 -0
  128. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js +19 -2
  129. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js.map +1 -1
  130. package/node_modules/@codingns/session-sync-core/dist/providers/codex.d.ts +1 -0
  131. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +45 -1
  132. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
  133. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +11 -4
  134. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
  135. package/package.json +3 -2
  136. package/scripts/node22-runtime.mjs +176 -0
  137. package/scripts/postinstall.mjs +6 -0
  138. package/dist/public/assets/App-7zrCMhE-.css +0 -1
  139. package/dist/public/assets/App-Dl-mcdqy.js +0 -30
  140. package/dist/public/assets/ConversationPage-DRQ5Sg_d.js +0 -9
  141. package/dist/public/assets/DesktopWindowPage-2SWAi0xz.js +0 -2
  142. package/dist/public/assets/FileContextPanel-fbPuE9dO.js +0 -1
  143. package/dist/public/assets/GitSidebar-BkmesJJR.js +0 -6
  144. package/dist/public/assets/MobileCreateSessionSheet-CEJcDBZJ.js +0 -1
  145. package/dist/public/assets/MobileTopHeaderFrame-CU0wsYSS.js +0 -1
  146. package/dist/public/assets/MobileWorkspaceSwitcherHeader-idl8o1OB.js +0 -1
  147. package/dist/public/assets/PluginAccessOverview-BBgM6tb0.js +0 -1
  148. package/dist/public/assets/SessionIndexPage-CN7cEdl9.js +0 -1
  149. package/dist/public/assets/SettingsPage-BGT-YqG2.js +0 -2
  150. package/dist/public/assets/TerminalManagerPanel-6-ZJ8vGn.js +0 -1
  151. package/dist/public/assets/TerminalPage-6GBZ9nXN.css +0 -32
  152. package/dist/public/assets/TerminalPage-CUXXQYU2.js +0 -55
  153. package/dist/public/assets/TerminalRuntimeFallbackModal-zc3qqMKJ.js +0 -1
  154. package/dist/public/assets/ToolFilesPage-QzsZyr0F.js +0 -1
  155. package/dist/public/assets/ToolGitPage-CXg4ncuT.js +0 -1
  156. package/dist/public/assets/ToolProcessesPage-BPsOsg4w.js +0 -1
  157. package/dist/public/assets/WorkbenchLayout-DViAJhHz.js +0 -1027
  158. package/dist/public/assets/WorkbenchShellRoute-BGfRqBUa.js +0 -1
  159. package/dist/public/assets/WorkbenchShellRoute-f2jWjHWu.css +0 -1
  160. package/dist/public/assets/WorkspaceDebugDetailPage-BX0zVSsI.js +0 -1
  161. package/dist/public/assets/WorkspaceDetailPage-Dx6JX4jx.js +0 -1
  162. package/dist/public/assets/WorkspaceHomePage-DQVJ042Z.js +0 -1
  163. package/dist/public/assets/host-alias-0TfFnYxR.js +0 -1
  164. package/dist/public/assets/index-DREvg1Yu.css +0 -1
  165. package/dist/public/assets/index-FOhyOpGY.js +0 -50
  166. package/dist/public/assets/peer-host-config-sync-vYkmqzNz.js +0 -1
  167. package/dist/public/assets/terminal-runtime-meta-2zvacxvM.js +0 -1
  168. package/dist/public/assets/useRegisteredDebugTemplates-CJ-o4tFl.js +0 -1
  169. package/dist/public/assets/workbench-navigation-aqJ1ay4M.js +0 -1
@@ -1,4 +1,5 @@
1
1
  import type { FastifyReply, FastifyRequest } from "fastify";
2
+ import type { SessionProviderConfigMode } from "../../types/domain.js";
2
3
  import type { AffairsLightweightSessionService } from "./affairs-lightweight-session-service.js";
3
4
  interface WorkspaceParams {
4
5
  workspaceId: string;
@@ -16,9 +17,12 @@ interface AffairsLightweightAttachmentBody {
16
17
  interface AffairsLightweightStartBody {
17
18
  provider?: string;
18
19
  content?: string;
20
+ sourceWorkspaceId?: string | null;
19
21
  clientRequestId?: string | null;
20
22
  model?: string | null;
21
23
  reasoningLevel?: string | null;
24
+ providerConfigMode?: SessionProviderConfigMode;
25
+ providerPresetId?: string | null;
22
26
  attachments?: AffairsLightweightAttachmentBody[] | null;
23
27
  }
24
28
  interface AffairsLightweightSendBody extends AffairsLightweightStartBody {
@@ -51,6 +51,20 @@ function requireTextOrAttachments(value, attachments, field, detail) {
51
51
  }
52
52
  return normalized;
53
53
  }
54
+ function normalizeProviderConfigMode(value) {
55
+ if (!value) {
56
+ return undefined;
57
+ }
58
+ if (value === "global-default" || value === "cc-switch-preset") {
59
+ return value;
60
+ }
61
+ throw new AppError({
62
+ statusCode: 400,
63
+ errorCode: "INVALID_INPUT",
64
+ detail: "providerConfigMode 非法",
65
+ field: "providerConfigMode"
66
+ });
67
+ }
54
68
  export class AffairsLightweightSessionController {
55
69
  affairsLightweightSessionService;
56
70
  constructor(affairsLightweightSessionService) {
@@ -91,12 +105,15 @@ export class AffairsLightweightSessionController {
91
105
  const provider = requireText(request.body.provider, "provider", "事务轻量会话必须提供 provider");
92
106
  reply.status(201).send(await this.affairsLightweightSessionService.startSession({
93
107
  workspaceId: request.params.workspaceId,
108
+ sourceWorkspaceId: request.body.sourceWorkspaceId ?? null,
94
109
  userId: requireUserId(request),
95
110
  provider,
96
111
  content,
97
112
  clientRequestId: request.body.clientRequestId ?? null,
98
113
  model: request.body.model ?? null,
99
114
  reasoningLevel: request.body.reasoningLevel ?? null,
115
+ providerConfigMode: normalizeProviderConfigMode(request.body.providerConfigMode),
116
+ providerPresetId: request.body.providerPresetId?.trim() || null,
100
117
  attachments
101
118
  }));
102
119
  };
@@ -114,12 +131,15 @@ export class AffairsLightweightSessionController {
114
131
  try {
115
132
  await this.affairsLightweightSessionService.startSessionStream({
116
133
  workspaceId: request.params.workspaceId,
134
+ sourceWorkspaceId: request.body.sourceWorkspaceId ?? null,
117
135
  userId: requireUserId(request),
118
136
  provider,
119
137
  content,
120
138
  clientRequestId: request.body.clientRequestId ?? null,
121
139
  model: request.body.model ?? null,
122
140
  reasoningLevel: request.body.reasoningLevel ?? null,
141
+ providerConfigMode: normalizeProviderConfigMode(request.body.providerConfigMode),
142
+ providerPresetId: request.body.providerPresetId?.trim() || null,
123
143
  attachments
124
144
  }, async (event) => {
125
145
  reply.raw.write(`${JSON.stringify(event)}\n`);
@@ -143,12 +163,15 @@ export class AffairsLightweightSessionController {
143
163
  const content = requireTextOrAttachments(request.body.content, attachments, "content", "事务轻量会话发送消息必须提供 content 或附件");
144
164
  reply.status(201).send(await this.affairsLightweightSessionService.sendMessage({
145
165
  workspaceId: request.params.workspaceId,
166
+ sourceWorkspaceId: request.body.sourceWorkspaceId ?? null,
146
167
  userId: requireUserId(request),
147
168
  sessionId: request.params.sessionId,
148
169
  content,
149
170
  clientRequestId: request.body.clientRequestId ?? null,
150
171
  model: request.body.model ?? null,
151
172
  reasoningLevel: request.body.reasoningLevel ?? null,
173
+ providerConfigMode: normalizeProviderConfigMode(request.body.providerConfigMode),
174
+ providerPresetId: request.body.providerPresetId?.trim() || null,
152
175
  attachments
153
176
  }));
154
177
  };
@@ -165,12 +188,15 @@ export class AffairsLightweightSessionController {
165
188
  try {
166
189
  await this.affairsLightweightSessionService.sendMessageStream({
167
190
  workspaceId: request.params.workspaceId,
191
+ sourceWorkspaceId: request.body.sourceWorkspaceId ?? null,
168
192
  userId: requireUserId(request),
169
193
  sessionId: request.params.sessionId,
170
194
  content,
171
195
  clientRequestId: request.body.clientRequestId ?? null,
172
196
  model: request.body.model ?? null,
173
197
  reasoningLevel: request.body.reasoningLevel ?? null,
198
+ providerConfigMode: normalizeProviderConfigMode(request.body.providerConfigMode),
199
+ providerPresetId: request.body.providerPresetId?.trim() || null,
174
200
  attachments
175
201
  }, async (event) => {
176
202
  reply.raw.write(`${JSON.stringify(event)}\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"affairs-lightweight-session-controller.js","sourceRoot":"","sources":["../../../../src/modules/workspace/affairs-lightweight-session-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"affairs-lightweight-session-controller.js","sourceRoot":"","sources":["../../../../src/modules/workspace/affairs-lightweight-session-controller.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,11 @@
1
1
  import type { HistoryPage, ProviderId, SyncStatus } from "@codingns/session-sync-core";
2
2
  import type { SessionActivitySource, SessionActivityState, SessionRunningState, SessionProviderConfigMode } from "../../types/domain.js";
3
+ import type { SessionProviderConfigService } from "../sessions/session-provider-config-service.js";
4
+ import type { WorkspaceService } from "./workspace-service.js";
3
5
  export interface AffairsLightweightSessionSummary {
4
6
  sessionId: string;
5
7
  workspaceId: string;
8
+ sourceWorkspaceId?: string;
6
9
  provider: ProviderId;
7
10
  providerSessionId: string;
8
11
  rawStoreRef: string;
@@ -47,22 +50,28 @@ export interface AffairsLightweightAttachmentInput {
47
50
  }
48
51
  export interface StartAffairsLightweightSessionInput {
49
52
  workspaceId: string;
53
+ sourceWorkspaceId?: string | null;
50
54
  userId: string;
51
55
  provider: ProviderId;
52
56
  content: string;
53
57
  clientRequestId?: string | null;
54
58
  model?: string | null;
55
59
  reasoningLevel?: string | null;
60
+ providerConfigMode?: SessionProviderConfigMode | null;
61
+ providerPresetId?: string | null;
56
62
  attachments?: AffairsLightweightAttachmentInput[];
57
63
  }
58
64
  export interface SendAffairsLightweightSessionMessageInput {
59
65
  workspaceId: string;
66
+ sourceWorkspaceId?: string | null;
60
67
  userId: string;
61
68
  sessionId: string;
62
69
  content: string;
63
70
  clientRequestId?: string | null;
64
71
  model?: string | null;
65
72
  reasoningLevel?: string | null;
73
+ providerConfigMode?: SessionProviderConfigMode | null;
74
+ providerPresetId?: string | null;
66
75
  attachments?: AffairsLightweightAttachmentInput[];
67
76
  }
68
77
  export interface AffairsLightweightSessionTurnResult {
@@ -102,10 +111,12 @@ export type AffairsLightweightSessionStreamEvent = {
102
111
  };
103
112
  export declare class AffairsLightweightSessionService {
104
113
  private readonly hostDataRootDir;
114
+ private readonly sessionProviderConfigService;
115
+ private readonly workspaceService;
105
116
  private readonly sessionLocks;
106
117
  private readonly sessionDocumentCache;
107
118
  private teableMirrorSyncNotifier;
108
- constructor(hostDataRootDir: string);
119
+ constructor(hostDataRootDir: string, sessionProviderConfigService?: Pick<SessionProviderConfigService, "prepareSessionBinding" | "resolveLaunchContext"> | null, workspaceService?: Pick<WorkspaceService, "getWorkspaceOrThrow"> | null);
109
120
  configureTeableMirrorSyncNotifier(notifier: (userId: string, reason: string) => void): void;
110
121
  listSessions(workspaceId: string, userId: string): Promise<AffairsLightweightSessionSummary[]>;
111
122
  getSession(workspaceId: string, sessionId: string, userId: string): Promise<AffairsLightweightSessionSummary>;
@@ -138,6 +149,9 @@ export declare class AffairsLightweightSessionService {
138
149
  private readCachedSessionDocument;
139
150
  private readOpenAiRuntimeConfig;
140
151
  private readAnthropicRuntimeConfig;
152
+ private prepareLightweightProviderBinding;
153
+ private resolveLightweightProviderBinding;
154
+ private readLatestClaudeWorkspaceRuntimeModel;
141
155
  private resolveWorkspaceDir;
142
156
  private resolveSessionFilePath;
143
157
  private getLightweightRuntimeConfigPath;
@@ -5,7 +5,7 @@ import { AppError } from "../../shared/errors/app-error.js";
5
5
  import { createId } from "../../shared/utils/id.js";
6
6
  const LIGHTWEIGHT_PROVIDER_IDS = new Set(["codex", "claude-code"]);
7
7
  const LIGHTWEIGHT_STORAGE_VERSION = 1;
8
- const DEFAULT_CLAUDE_MODEL = "claude-sonnet-4-20250514";
8
+ const DEFAULT_CLAUDE_MODEL = "claude-sonnet-4-6";
9
9
  const DEFAULT_OPENAI_MODEL = "gpt-5.4";
10
10
  const ANTHROPIC_API_VERSION = "2023-06-01";
11
11
  const LIGHTWEIGHT_SESSION_TMP_FILE_SUFFIX = ".tmp";
@@ -21,11 +21,15 @@ const LIGHTWEIGHT_SYSTEM_PROMPT = [
21
21
  ].join("\n");
22
22
  export class AffairsLightweightSessionService {
23
23
  hostDataRootDir;
24
+ sessionProviderConfigService;
25
+ workspaceService;
24
26
  sessionLocks = new Map();
25
27
  sessionDocumentCache = new Map();
26
28
  teableMirrorSyncNotifier = null;
27
- constructor(hostDataRootDir) {
29
+ constructor(hostDataRootDir, sessionProviderConfigService = null, workspaceService = null) {
28
30
  this.hostDataRootDir = hostDataRootDir;
31
+ this.sessionProviderConfigService = sessionProviderConfigService;
32
+ this.workspaceService = workspaceService;
29
33
  }
30
34
  configureTeableMirrorSyncNotifier(notifier) {
31
35
  this.teableMirrorSyncNotifier = notifier;
@@ -119,14 +123,23 @@ export class AffairsLightweightSessionService {
119
123
  const acceptedAt = new Date().toISOString();
120
124
  const sessionFilePath = this.resolveSessionFilePath(input.workspaceId, sessionId);
121
125
  const providerSessionId = `affairs-lightweight:${input.provider}:${sessionId}`;
126
+ const providerBinding = this.prepareLightweightProviderBinding({
127
+ sessionId,
128
+ workspaceId: input.workspaceId,
129
+ userId: input.userId,
130
+ provider: input.provider,
131
+ providerConfigMode: input.providerConfigMode ?? null,
132
+ providerPresetId: input.providerPresetId ?? null
133
+ });
122
134
  const session = {
123
135
  sessionId,
124
136
  workspaceId: input.workspaceId,
137
+ sourceWorkspaceId: input.sourceWorkspaceId?.trim() || input.workspaceId,
125
138
  provider: input.provider,
126
139
  providerSessionId,
127
140
  rawStoreRef: sessionFilePath,
128
- providerConfigMode: "global-default",
129
- providerPresetId: null,
141
+ providerConfigMode: providerBinding.providerConfigMode,
142
+ providerPresetId: providerBinding.providerPresetId,
130
143
  parentSessionId: null,
131
144
  isSubagent: false,
132
145
  subagentLabel: null,
@@ -160,12 +173,15 @@ export class AffairsLightweightSessionService {
160
173
  this.notifyTeableSessionChanged(input.userId, `session_started:${input.workspaceId}:${sessionId}`);
161
174
  return this.runTurn(document, {
162
175
  workspaceId: input.workspaceId,
176
+ sourceWorkspaceId: input.sourceWorkspaceId ?? null,
163
177
  userId: input.userId,
164
178
  sessionId,
165
179
  content: input.content,
166
180
  clientRequestId,
167
181
  model: input.model ?? null,
168
182
  reasoningLevel: input.reasoningLevel ?? null,
183
+ providerConfigMode: input.providerConfigMode ?? null,
184
+ providerPresetId: input.providerPresetId ?? null,
169
185
  attachments: input.attachments ?? []
170
186
  });
171
187
  }
@@ -182,14 +198,23 @@ export class AffairsLightweightSessionService {
182
198
  const acceptedAt = new Date().toISOString();
183
199
  const sessionFilePath = this.resolveSessionFilePath(input.workspaceId, sessionId);
184
200
  const providerSessionId = `affairs-lightweight:${input.provider}:${sessionId}`;
201
+ const providerBinding = this.prepareLightweightProviderBinding({
202
+ sessionId,
203
+ workspaceId: input.workspaceId,
204
+ userId: input.userId,
205
+ provider: input.provider,
206
+ providerConfigMode: input.providerConfigMode ?? null,
207
+ providerPresetId: input.providerPresetId ?? null
208
+ });
185
209
  const session = {
186
210
  sessionId,
187
211
  workspaceId: input.workspaceId,
212
+ sourceWorkspaceId: input.sourceWorkspaceId?.trim() || input.workspaceId,
188
213
  provider: input.provider,
189
214
  providerSessionId,
190
215
  rawStoreRef: sessionFilePath,
191
- providerConfigMode: "global-default",
192
- providerPresetId: null,
216
+ providerConfigMode: providerBinding.providerConfigMode,
217
+ providerPresetId: providerBinding.providerPresetId,
193
218
  parentSessionId: null,
194
219
  isSubagent: false,
195
220
  subagentLabel: null,
@@ -222,12 +247,15 @@ export class AffairsLightweightSessionService {
222
247
  await this.writeSessionDocument(document);
223
248
  await this.runTurn(document, {
224
249
  workspaceId: input.workspaceId,
250
+ sourceWorkspaceId: input.sourceWorkspaceId ?? null,
225
251
  userId: input.userId,
226
252
  sessionId,
227
253
  content: input.content,
228
254
  clientRequestId,
229
255
  model: input.model ?? null,
230
256
  reasoningLevel: input.reasoningLevel ?? null,
257
+ providerConfigMode: input.providerConfigMode ?? null,
258
+ providerPresetId: input.providerPresetId ?? null,
231
259
  attachments: input.attachments ?? []
232
260
  }, onEvent);
233
261
  }
@@ -259,6 +287,14 @@ export class AffairsLightweightSessionService {
259
287
  const now = new Date().toISOString();
260
288
  const document = await this.requireSessionDocument(input.workspaceId, input.sessionId, input.userId);
261
289
  const provider = document.session.provider;
290
+ const providerBinding = this.prepareLightweightProviderBinding({
291
+ sessionId: document.session.sessionId,
292
+ workspaceId: input.workspaceId,
293
+ userId: input.userId,
294
+ provider,
295
+ providerConfigMode: input.providerConfigMode ?? document.session.providerConfigMode ?? null,
296
+ providerPresetId: input.providerPresetId ?? document.session.providerPresetId ?? null
297
+ });
262
298
  const userMessage = createUserMessage({
263
299
  provider,
264
300
  providerSessionId: document.session.providerSessionId,
@@ -279,6 +315,8 @@ export class AffairsLightweightSessionService {
279
315
  lastEventAt: now,
280
316
  runningState: "running",
281
317
  activityState: "running",
318
+ providerConfigMode: providerBinding.providerConfigMode,
319
+ providerPresetId: providerBinding.providerPresetId,
282
320
  completedAt: null,
283
321
  syncStatus: "syncing",
284
322
  lastSyncAt: now,
@@ -409,7 +447,7 @@ export class AffairsLightweightSessionService {
409
447
  return this.generateAnthropicResponseSync(document, input);
410
448
  }
411
449
  async generateOpenAiResponseSync(document, input) {
412
- const runtime = await this.readOpenAiRuntimeConfig(input.model?.trim() || null);
450
+ const runtime = await this.readOpenAiRuntimeConfig(document.session, input.model?.trim() || null, input.userId);
413
451
  const responsePayload = createOpenAiResponsesPayload({
414
452
  model: runtime.model,
415
453
  messages: document.messages,
@@ -467,7 +505,7 @@ export class AffairsLightweightSessionService {
467
505
  return fallbackText;
468
506
  }
469
507
  async generateAnthropicResponseSync(document, input) {
470
- const runtime = await this.readAnthropicRuntimeConfig(input.model?.trim() || null);
508
+ const runtime = await this.readAnthropicRuntimeConfig(document.session, input.model?.trim() || null, input.userId);
471
509
  let messages = document.messages.map((message) => createAnthropicMessagePayload(message, input.clientRequestId, normalizeLightweightRuntimeAttachments(input.attachments ?? [], input.clientRequestId)));
472
510
  let finalBody = null;
473
511
  for (let index = 0; index < 4; index += 1) {
@@ -526,7 +564,7 @@ export class AffairsLightweightSessionService {
526
564
  return outputText;
527
565
  }
528
566
  async generateOpenAiResponseStream(document, input, onDelta, onTool) {
529
- const runtime = await this.readOpenAiRuntimeConfig(input.model?.trim() || null);
567
+ const runtime = await this.readOpenAiRuntimeConfig(document.session, input.model?.trim() || null, input.userId);
530
568
  const headers = {
531
569
  "content-type": "application/json",
532
570
  authorization: `Bearer ${runtime.apiKey}`
@@ -582,7 +620,7 @@ export class AffairsLightweightSessionService {
582
620
  return await streamOpenAiSseText(fallbackResponse, onDelta, onTool);
583
621
  }
584
622
  async generateAnthropicResponseStream(document, input, onDelta, onTool) {
585
- const runtime = await this.readAnthropicRuntimeConfig(input.model?.trim() || null);
623
+ const runtime = await this.readAnthropicRuntimeConfig(document.session, input.model?.trim() || null, input.userId);
586
624
  const response = await postJsonWithFallbacks({
587
625
  baseUrl: runtime.baseUrl,
588
626
  pathCandidates: ["v1/messages", "messages"],
@@ -701,17 +739,26 @@ export class AffairsLightweightSessionService {
701
739
  const cached = this.sessionDocumentCache.get(normalizedSessionId);
702
740
  return cached ? cloneSessionDocument(cached) : null;
703
741
  }
704
- async readOpenAiRuntimeConfig(modelOverride) {
742
+ async readOpenAiRuntimeConfig(session, modelOverride, userId) {
705
743
  const injectedConfig = await this.readLightweightRuntimeConfigFile();
706
- const authPath = path.join(os.homedir(), ".codex", "auth.json");
707
- const configPath = path.join(os.homedir(), ".codex", "config.toml");
744
+ const providerBinding = this.resolveLightweightProviderBinding({
745
+ ...session,
746
+ userId
747
+ });
748
+ const providerLaunchContext = providerBinding
749
+ ? this.sessionProviderConfigService?.resolveLaunchContext(providerBinding) ?? null
750
+ : null;
751
+ const runtimeEnv = providerLaunchContext?.runtimeEnv ?? {};
752
+ const runtimeHomeDir = providerLaunchContext?.runtimeHomeDir?.trim() || null;
753
+ const authPath = path.join(runtimeHomeDir ?? path.join(os.homedir(), ".codex"), "auth.json");
754
+ const configPath = path.join(runtimeHomeDir ?? path.join(os.homedir(), ".codex"), "config.toml");
708
755
  const auth = await readJsonFile(authPath);
709
756
  const toml = await safeReadTextFile(configPath);
710
757
  const parsed = parseCodexTomlConfig(toml);
711
- const key = pickFirstText(process.env.CODINGNS_LIGHTWEIGHT_OPENAI_API_KEY, process.env.OPENAI_API_KEY, injectedConfig?.openai?.apiKey, String(auth?.OPENAI_API_KEY ?? ""));
712
- const baseUrl = normalizeBaseUrl(pickFirstText(process.env.CODINGNS_LIGHTWEIGHT_OPENAI_BASE_URL, injectedConfig?.openai?.baseUrl, process.env.OPENAI_BASE_URL, parsed.baseUrl, "https://api.openai.com/v1") ?? "https://api.openai.com/v1");
758
+ const key = pickFirstText(process.env.CODINGNS_LIGHTWEIGHT_OPENAI_API_KEY, runtimeEnv.OPENAI_API_KEY, process.env.OPENAI_API_KEY, injectedConfig?.openai?.apiKey, String(auth?.OPENAI_API_KEY ?? ""));
759
+ const baseUrl = normalizeBaseUrl(pickFirstText(process.env.CODINGNS_LIGHTWEIGHT_OPENAI_BASE_URL, runtimeEnv.OPENAI_BASE_URL, injectedConfig?.openai?.baseUrl, process.env.OPENAI_BASE_URL, parsed.baseUrl, "https://api.openai.com/v1") ?? "https://api.openai.com/v1");
713
760
  const model = modelOverride
714
- || pickFirstText(process.env.CODINGNS_LIGHTWEIGHT_OPENAI_MODEL, injectedConfig?.openai?.model, process.env.OPENAI_MODEL, parsed.model, DEFAULT_OPENAI_MODEL)
761
+ || pickFirstText(process.env.CODINGNS_LIGHTWEIGHT_OPENAI_MODEL, runtimeEnv.OPENAI_MODEL, injectedConfig?.openai?.model, process.env.OPENAI_MODEL, parsed.model, DEFAULT_OPENAI_MODEL)
715
762
  || DEFAULT_OPENAI_MODEL;
716
763
  if (!key) {
717
764
  throw new AppError({
@@ -726,17 +773,29 @@ export class AffairsLightweightSessionService {
726
773
  model
727
774
  };
728
775
  }
729
- async readAnthropicRuntimeConfig(modelOverride) {
776
+ async readAnthropicRuntimeConfig(session, modelOverride, userId) {
730
777
  const injectedConfig = await this.readLightweightRuntimeConfigFile();
731
- const settingsPath = path.join(os.homedir(), ".claude", "settings.json");
732
- const configPath = path.join(os.homedir(), ".claude", "config.json");
778
+ const providerBinding = this.resolveLightweightProviderBinding({
779
+ ...session,
780
+ userId
781
+ });
782
+ const providerLaunchContext = providerBinding
783
+ ? this.sessionProviderConfigService?.resolveLaunchContext(providerBinding) ?? null
784
+ : null;
785
+ const runtimeEnv = providerLaunchContext?.runtimeEnv ?? {};
786
+ const runtimeHomeDir = providerLaunchContext?.runtimeHomeDir?.trim() || null;
787
+ const settingsPath = path.join(runtimeHomeDir ?? path.join(os.homedir(), ".claude"), "settings.json");
788
+ const configPath = path.join(runtimeHomeDir ?? path.join(os.homedir(), ".claude"), "config.json");
733
789
  const settings = await readJsonFile(settingsPath);
734
790
  const config = await readJsonFile(configPath);
735
791
  const env = typeof settings?.env === "object" && settings.env ? settings.env : {};
736
- const key = pickFirstText(process.env.CODINGNS_LIGHTWEIGHT_ANTHROPIC_API_KEY, process.env.ANTHROPIC_API_KEY, injectedConfig?.anthropic?.apiKey, String(env.ANTHROPIC_AUTH_TOKEN ?? config?.primaryApiKey ?? ""));
737
- const baseUrl = normalizeBaseUrl(pickFirstText(process.env.CODINGNS_LIGHTWEIGHT_ANTHROPIC_BASE_URL, injectedConfig?.anthropic?.baseUrl, String(env.ANTHROPIC_BASE_URL ?? ""), process.env.ANTHROPIC_BASE_URL, "https://api.anthropic.com") ?? "https://api.anthropic.com");
792
+ const inferredWorkspaceModel = modelOverride
793
+ ? null
794
+ : await this.readLatestClaudeWorkspaceRuntimeModel(session.sourceWorkspaceId?.trim() || session.workspaceId);
795
+ const key = pickFirstText(process.env.CODINGNS_LIGHTWEIGHT_ANTHROPIC_API_KEY, runtimeEnv.ANTHROPIC_AUTH_TOKEN, runtimeEnv.ANTHROPIC_API_KEY, process.env.ANTHROPIC_API_KEY, injectedConfig?.anthropic?.apiKey, String(env.ANTHROPIC_AUTH_TOKEN ?? config?.primaryApiKey ?? ""));
796
+ const baseUrl = normalizeBaseUrl(pickFirstText(process.env.CODINGNS_LIGHTWEIGHT_ANTHROPIC_BASE_URL, runtimeEnv.ANTHROPIC_BASE_URL, injectedConfig?.anthropic?.baseUrl, String(env.ANTHROPIC_BASE_URL ?? ""), process.env.ANTHROPIC_BASE_URL, "https://api.anthropic.com") ?? "https://api.anthropic.com");
738
797
  const model = modelOverride
739
- || pickFirstText(process.env.CODINGNS_LIGHTWEIGHT_ANTHROPIC_MODEL, injectedConfig?.anthropic?.model, String(env.ANTHROPIC_MODEL ?? ""), DEFAULT_CLAUDE_MODEL)
798
+ || pickFirstText(process.env.CODINGNS_LIGHTWEIGHT_ANTHROPIC_MODEL, runtimeEnv.ANTHROPIC_MODEL, injectedConfig?.anthropic?.model, String(env.ANTHROPIC_MODEL ?? ""), inferredWorkspaceModel, DEFAULT_CLAUDE_MODEL)
740
799
  || DEFAULT_CLAUDE_MODEL;
741
800
  if (!key) {
742
801
  throw new AppError({
@@ -751,6 +810,70 @@ export class AffairsLightweightSessionService {
751
810
  model
752
811
  };
753
812
  }
813
+ prepareLightweightProviderBinding(input) {
814
+ if (!this.sessionProviderConfigService) {
815
+ return {
816
+ provider: input.provider,
817
+ providerConfigMode: input.providerConfigMode ?? "global-default",
818
+ providerPresetId: input.providerPresetId?.trim() || null,
819
+ runtimeHomeDir: null
820
+ };
821
+ }
822
+ const binding = this.sessionProviderConfigService.prepareSessionBinding({
823
+ sessionId: input.sessionId,
824
+ userId: input.userId,
825
+ workspaceId: input.workspaceId,
826
+ provider: input.provider,
827
+ providerConfigMode: input.providerConfigMode ?? null,
828
+ providerPresetId: input.providerPresetId ?? null
829
+ });
830
+ return {
831
+ provider: input.provider,
832
+ providerConfigMode: binding.providerConfigMode,
833
+ providerPresetId: binding.providerPresetId,
834
+ runtimeHomeDir: binding.runtimeHomeDir
835
+ };
836
+ }
837
+ resolveLightweightProviderBinding(session) {
838
+ if (!this.sessionProviderConfigService) {
839
+ return null;
840
+ }
841
+ return this.prepareLightweightProviderBinding({
842
+ sessionId: session.sessionId,
843
+ workspaceId: session.sourceWorkspaceId?.trim() || session.workspaceId,
844
+ userId: session.userId,
845
+ provider: session.provider,
846
+ providerConfigMode: session.providerConfigMode ?? "global-default",
847
+ providerPresetId: session.providerPresetId ?? null
848
+ });
849
+ }
850
+ async readLatestClaudeWorkspaceRuntimeModel(workspaceId) {
851
+ const normalizedWorkspaceId = workspaceId.trim();
852
+ if (!normalizedWorkspaceId || !this.workspaceService) {
853
+ return null;
854
+ }
855
+ const workspace = this.workspaceService.getWorkspaceOrThrow(normalizedWorkspaceId);
856
+ const targetWorkspacePath = normalizeWorkspacePathForMatch(workspace.path);
857
+ const runtimeRootDir = path.join(this.hostDataRootDir, "workspace-session-runtime", normalizedWorkspaceId);
858
+ const runtimeEntries = await safeReadDir(runtimeRootDir);
859
+ let matchedModel = null;
860
+ for (const runtimeEntry of runtimeEntries) {
861
+ if (!runtimeEntry.isFile()) {
862
+ const projectsRootDir = path.join(runtimeRootDir, runtimeEntry.name, "projects");
863
+ const projectFiles = await collectJsonlFiles(projectsRootDir);
864
+ for (const filePath of projectFiles) {
865
+ const candidate = await readLatestClaudeTranscriptModelCandidate(filePath, targetWorkspacePath);
866
+ if (!candidate) {
867
+ continue;
868
+ }
869
+ if (!matchedModel || candidate.timestamp > matchedModel.timestamp) {
870
+ matchedModel = candidate;
871
+ }
872
+ }
873
+ }
874
+ }
875
+ return matchedModel?.model ?? null;
876
+ }
754
877
  resolveWorkspaceDir(workspaceId) {
755
878
  return path.join(this.hostDataRootDir, "affairs-lightweight-sessions", workspaceId);
756
879
  }
@@ -1503,6 +1626,62 @@ async function safeReadDir(dirPath) {
1503
1626
  throw error;
1504
1627
  }
1505
1628
  }
1629
+ async function collectJsonlFiles(rootDir) {
1630
+ const entries = await safeReadDir(rootDir);
1631
+ const results = [];
1632
+ for (const entry of entries) {
1633
+ const fullPath = path.join(rootDir, entry.name);
1634
+ if (entry.isFile()) {
1635
+ if (entry.name.endsWith(".jsonl")) {
1636
+ results.push(fullPath);
1637
+ }
1638
+ continue;
1639
+ }
1640
+ results.push(...await collectJsonlFiles(fullPath));
1641
+ }
1642
+ return results;
1643
+ }
1644
+ async function readLatestClaudeTranscriptModelCandidate(filePath, targetWorkspacePath) {
1645
+ const content = await safeReadTextFile(filePath);
1646
+ if (!content) {
1647
+ return null;
1648
+ }
1649
+ const lines = content.split(/\r?\n/).filter((line) => line.trim().length > 0);
1650
+ let latest = null;
1651
+ for (const line of lines) {
1652
+ let parsed = null;
1653
+ try {
1654
+ parsed = JSON.parse(line);
1655
+ }
1656
+ catch {
1657
+ continue;
1658
+ }
1659
+ const cwd = normalizeWorkspacePathForMatch(String(parsed?.cwd ?? ""));
1660
+ if (!cwd || cwd !== targetWorkspacePath) {
1661
+ continue;
1662
+ }
1663
+ const model = pickFirstText(parsed?.message?.model, parsed?.model);
1664
+ const timestamp = normalizeOptionalTimestamp(String(parsed?.timestamp ?? "")) ?? "";
1665
+ if (!model || !timestamp) {
1666
+ continue;
1667
+ }
1668
+ if (!latest || timestamp > latest.timestamp) {
1669
+ latest = { model, timestamp };
1670
+ }
1671
+ }
1672
+ return latest;
1673
+ }
1674
+ function normalizeWorkspacePathForMatch(value) {
1675
+ const trimmed = value.trim();
1676
+ if (!trimmed) {
1677
+ return "";
1678
+ }
1679
+ const normalized = trimmed.replaceAll("\\", "/");
1680
+ if (/^[a-z]:(?:\/|$)/i.test(normalized) || normalized.startsWith("//")) {
1681
+ return normalized.replace(/\/+$/, "").toLowerCase();
1682
+ }
1683
+ return normalized.length > 1 ? normalized.replace(/\/+$/, "") : normalized;
1684
+ }
1506
1685
  async function postJsonWithFallbacks(input) {
1507
1686
  let lastResponse = null;
1508
1687
  for (const candidate of input.pathCandidates) {