@glwhappen/web-code 1.32.7 → 1.32.10

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 (170) hide show
  1. package/README.de.md +1 -1
  2. package/README.ko.md +1 -1
  3. package/README.md +1 -1
  4. package/README.ru.md +1 -1
  5. package/README.tr.md +1 -1
  6. package/README.zh-CN.md +1 -1
  7. package/dist/api-docs.html +6 -7
  8. package/dist/assets/{index-CCGk0QgG.js → index-BLLsK3sG.js} +277 -262
  9. package/dist/assets/index-Dl5QP21C.css +32 -0
  10. package/dist/index.html +2 -2
  11. package/dist/modelConstants.js +841 -0
  12. package/dist-server/server/claude-sdk.js +57 -34
  13. package/dist-server/server/claude-sdk.js.map +1 -1
  14. package/dist-server/server/cursor-cli.js +6 -3
  15. package/dist-server/server/cursor-cli.js.map +1 -1
  16. package/dist-server/server/gemini-cli.js +3 -1
  17. package/dist-server/server/gemini-cli.js.map +1 -1
  18. package/dist-server/server/gemini-response-handler.js +34 -0
  19. package/dist-server/server/gemini-response-handler.js.map +1 -1
  20. package/dist-server/server/index.js +131 -19
  21. package/dist-server/server/index.js.map +1 -1
  22. package/dist-server/server/modules/database/index.js +1 -0
  23. package/dist-server/server/modules/database/index.js.map +1 -1
  24. package/dist-server/server/modules/projects/services/project-management.service.js +1 -0
  25. package/dist-server/server/modules/projects/services/project-management.service.js.map +1 -1
  26. package/dist-server/server/modules/projects/services/projects-with-sessions-fetch.service.js +4 -0
  27. package/dist-server/server/modules/projects/services/projects-with-sessions-fetch.service.js.map +1 -1
  28. package/dist-server/server/modules/providers/list/claude/claude-models.provider.js +143 -0
  29. package/dist-server/server/modules/providers/list/claude/claude-models.provider.js.map +1 -0
  30. package/dist-server/server/modules/providers/list/claude/claude.provider.js +2 -0
  31. package/dist-server/server/modules/providers/list/claude/claude.provider.js.map +1 -1
  32. package/dist-server/server/modules/providers/list/codex/codex-models.provider.js +84 -0
  33. package/dist-server/server/modules/providers/list/codex/codex-models.provider.js.map +1 -0
  34. package/dist-server/server/modules/providers/list/codex/codex-skills.provider.js +7 -39
  35. package/dist-server/server/modules/providers/list/codex/codex-skills.provider.js.map +1 -1
  36. package/dist-server/server/modules/providers/list/codex/codex.provider.js +2 -0
  37. package/dist-server/server/modules/providers/list/codex/codex.provider.js.map +1 -1
  38. package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js +754 -0
  39. package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js.map +1 -0
  40. package/dist-server/server/modules/providers/list/cursor/cursor-sessions.provider.js +2 -15
  41. package/dist-server/server/modules/providers/list/cursor/cursor-sessions.provider.js.map +1 -1
  42. package/dist-server/server/modules/providers/list/cursor/cursor.provider.js +2 -0
  43. package/dist-server/server/modules/providers/list/cursor/cursor.provider.js.map +1 -1
  44. package/dist-server/server/modules/providers/list/gemini/gemini-models.provider.js +27 -0
  45. package/dist-server/server/modules/providers/list/gemini/gemini-models.provider.js.map +1 -0
  46. package/dist-server/server/modules/providers/list/gemini/gemini-sessions.provider.js +3 -9
  47. package/dist-server/server/modules/providers/list/gemini/gemini-sessions.provider.js.map +1 -1
  48. package/dist-server/server/modules/providers/list/gemini/gemini.provider.js +2 -0
  49. package/dist-server/server/modules/providers/list/gemini/gemini.provider.js.map +1 -1
  50. package/dist-server/server/modules/providers/list/opencode/opencode-auth.provider.js +92 -0
  51. package/dist-server/server/modules/providers/list/opencode/opencode-auth.provider.js.map +1 -0
  52. package/dist-server/server/modules/providers/list/opencode/opencode-mcp.provider.js +181 -0
  53. package/dist-server/server/modules/providers/list/opencode/opencode-mcp.provider.js.map +1 -0
  54. package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js +267 -0
  55. package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js.map +1 -0
  56. package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js +115 -0
  57. package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js.map +1 -0
  58. package/dist-server/server/modules/providers/list/opencode/opencode-sessions.provider.js +410 -0
  59. package/dist-server/server/modules/providers/list/opencode/opencode-sessions.provider.js.map +1 -0
  60. package/dist-server/server/modules/providers/list/opencode/opencode-skills.provider.js +62 -0
  61. package/dist-server/server/modules/providers/list/opencode/opencode-skills.provider.js.map +1 -0
  62. package/dist-server/server/modules/providers/list/opencode/opencode.provider.js +19 -0
  63. package/dist-server/server/modules/providers/list/opencode/opencode.provider.js.map +1 -0
  64. package/dist-server/server/modules/providers/provider.registry.js +2 -0
  65. package/dist-server/server/modules/providers/provider.registry.js.map +1 -1
  66. package/dist-server/server/modules/providers/provider.routes.js +42 -1
  67. package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
  68. package/dist-server/server/modules/providers/services/mcp.service.js +1 -9
  69. package/dist-server/server/modules/providers/services/mcp.service.js.map +1 -1
  70. package/dist-server/server/modules/providers/services/provider-models.service.js +199 -0
  71. package/dist-server/server/modules/providers/services/provider-models.service.js.map +1 -0
  72. package/dist-server/server/modules/providers/services/session-synchronizer.service.js +1 -0
  73. package/dist-server/server/modules/providers/services/session-synchronizer.service.js.map +1 -1
  74. package/dist-server/server/modules/providers/services/sessions-watcher.service.js +7 -0
  75. package/dist-server/server/modules/providers/services/sessions-watcher.service.js.map +1 -1
  76. package/dist-server/server/modules/providers/shared/base/abstract.provider.js.map +1 -1
  77. package/dist-server/server/modules/providers/tests/mcp.test.js +73 -6
  78. package/dist-server/server/modules/providers/tests/mcp.test.js.map +1 -1
  79. package/dist-server/server/modules/providers/tests/opencode-models.test.js +66 -0
  80. package/dist-server/server/modules/providers/tests/opencode-models.test.js.map +1 -0
  81. package/dist-server/server/modules/providers/tests/opencode-sessions.test.js +264 -0
  82. package/dist-server/server/modules/providers/tests/opencode-sessions.test.js.map +1 -0
  83. package/dist-server/server/modules/providers/tests/provider-models.service.test.js +270 -0
  84. package/dist-server/server/modules/providers/tests/provider-models.service.test.js.map +1 -0
  85. package/dist-server/server/modules/providers/tests/skills.test.js +33 -0
  86. package/dist-server/server/modules/providers/tests/skills.test.js.map +1 -1
  87. package/dist-server/server/modules/websocket/services/chat-websocket.service.js +18 -1
  88. package/dist-server/server/modules/websocket/services/chat-websocket.service.js.map +1 -1
  89. package/dist-server/server/modules/websocket/services/shell-websocket.service.js +9 -1
  90. package/dist-server/server/modules/websocket/services/shell-websocket.service.js.map +1 -1
  91. package/dist-server/server/modules/websocket/services/websocket-writer.service.js +6 -0
  92. package/dist-server/server/modules/websocket/services/websocket-writer.service.js.map +1 -1
  93. package/dist-server/server/openai-codex.js +32 -4
  94. package/dist-server/server/openai-codex.js.map +1 -1
  95. package/dist-server/server/opencode-cli.js +287 -0
  96. package/dist-server/server/opencode-cli.js.map +1 -0
  97. package/dist-server/server/opencode-cli.test.js +84 -0
  98. package/dist-server/server/opencode-cli.test.js.map +1 -0
  99. package/dist-server/server/routes/agent.js +21 -8
  100. package/dist-server/server/routes/agent.js.map +1 -1
  101. package/dist-server/server/routes/commands.js +202 -209
  102. package/dist-server/server/routes/commands.js.map +1 -1
  103. package/dist-server/server/routes/cursor.js +2 -2
  104. package/dist-server/server/routes/cursor.js.map +1 -1
  105. package/dist-server/server/routes/settings.js +0 -10
  106. package/dist-server/server/routes/settings.js.map +1 -1
  107. package/dist-server/server/routes/tests/commands.test.js +76 -0
  108. package/dist-server/server/routes/tests/commands.test.js.map +1 -0
  109. package/dist-server/server/shared/utils.js +286 -0
  110. package/dist-server/server/shared/utils.js.map +1 -1
  111. package/package.json +3 -1
  112. package/public/api-docs.html +878 -0
  113. package/public/modelConstants.js +841 -0
  114. package/server/claude-sdk.js +64 -35
  115. package/server/cursor-cli.js +6 -3
  116. package/server/gemini-cli.js +7 -1
  117. package/server/gemini-response-handler.js +38 -0
  118. package/server/index.js +150 -19
  119. package/server/modules/database/index.ts +1 -0
  120. package/server/modules/projects/services/project-management.service.ts +2 -0
  121. package/server/modules/projects/services/projects-with-sessions-fetch.service.ts +7 -1
  122. package/server/modules/providers/README.md +11 -3
  123. package/server/modules/providers/list/claude/claude-models.provider.ts +193 -0
  124. package/server/modules/providers/list/claude/claude.provider.ts +3 -0
  125. package/server/modules/providers/list/codex/codex-models.provider.ts +125 -0
  126. package/server/modules/providers/list/codex/codex-skills.provider.ts +10 -50
  127. package/server/modules/providers/list/codex/codex.provider.ts +3 -0
  128. package/server/modules/providers/list/cursor/cursor-models.provider.ts +820 -0
  129. package/server/modules/providers/list/cursor/cursor-sessions.provider.ts +7 -20
  130. package/server/modules/providers/list/cursor/cursor.provider.ts +3 -0
  131. package/server/modules/providers/list/gemini/gemini-models.provider.ts +42 -0
  132. package/server/modules/providers/list/gemini/gemini-sessions.provider.ts +3 -10
  133. package/server/modules/providers/list/gemini/gemini.provider.ts +3 -0
  134. package/server/modules/providers/list/opencode/opencode-auth.provider.ts +111 -0
  135. package/server/modules/providers/list/opencode/opencode-mcp.provider.ts +228 -0
  136. package/server/modules/providers/list/opencode/opencode-models.provider.ts +339 -0
  137. package/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.ts +158 -0
  138. package/server/modules/providers/list/opencode/opencode-sessions.provider.ts +506 -0
  139. package/server/modules/providers/list/opencode/opencode-skills.provider.ts +78 -0
  140. package/server/modules/providers/list/opencode/opencode.provider.ts +27 -0
  141. package/server/modules/providers/provider.registry.ts +2 -0
  142. package/server/modules/providers/provider.routes.ts +62 -2
  143. package/server/modules/providers/services/mcp.service.ts +1 -12
  144. package/server/modules/providers/services/provider-models.service.ts +325 -0
  145. package/server/modules/providers/services/session-synchronizer.service.ts +1 -0
  146. package/server/modules/providers/services/sessions-watcher.service.ts +8 -0
  147. package/server/modules/providers/shared/base/abstract.provider.ts +2 -0
  148. package/server/modules/providers/tests/mcp.test.ts +93 -6
  149. package/server/modules/providers/tests/opencode-models.test.ts +73 -0
  150. package/server/modules/providers/tests/opencode-sessions.test.ts +336 -0
  151. package/server/modules/providers/tests/provider-models.service.test.ts +318 -0
  152. package/server/modules/providers/tests/skills.test.ts +66 -0
  153. package/server/modules/websocket/services/chat-websocket.service.ts +21 -1
  154. package/server/modules/websocket/services/shell-websocket.service.ts +9 -0
  155. package/server/modules/websocket/services/websocket-writer.service.ts +7 -0
  156. package/server/openai-codex.js +40 -4
  157. package/server/opencode-cli.js +336 -0
  158. package/server/opencode-cli.test.js +95 -0
  159. package/server/routes/agent.js +22 -8
  160. package/server/routes/commands.js +254 -233
  161. package/server/routes/cursor.js +2 -2
  162. package/server/routes/settings.js +1 -10
  163. package/server/routes/tests/commands.test.js +82 -0
  164. package/server/shared/interfaces.ts +45 -0
  165. package/server/shared/types.ts +88 -1
  166. package/server/shared/utils.ts +384 -0
  167. package/dist/assets/index-DdxLnCfK.css +0 -32
  168. package/dist-server/shared/modelConstants.js +0 -99
  169. package/dist-server/shared/modelConstants.js.map +0 -1
  170. package/shared/modelConstants.js +0 -107
@@ -0,0 +1,143 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { sessionsDb } from '../../../../modules/database/index.js';
3
+ import { getDefaultOwnerUserId } from '../../../../shared/default-user.js';
4
+ import { buildDefaultProviderCurrentActiveModel, writeProviderSessionActiveModelChange, } from '../../../../shared/utils.js';
5
+ export const CLAUDE_FALLBACK_MODELS = {
6
+ OPTIONS: [
7
+ {
8
+ value: 'default',
9
+ label: 'Default (recommended)',
10
+ description: 'Use the default model (currently Opus 4.7 (1M context)) · $5/$25 per Mtok',
11
+ },
12
+ {
13
+ value: 'sonnet',
14
+ label: 'Sonnet',
15
+ description: 'Sonnet 4.6 · Best for everyday tasks · $3/$15 per Mtok',
16
+ },
17
+ {
18
+ value: 'sonnet[1m]',
19
+ label: 'Sonnet (1M context)',
20
+ description: 'Sonnet 4.6 for long sessions · $3/$15 per Mtok',
21
+ },
22
+ {
23
+ value: 'haiku',
24
+ label: 'Haiku',
25
+ description: 'Haiku 4.5 · Fastest for quick answers · $1/$5 per Mtok',
26
+ },
27
+ ],
28
+ DEFAULT: 'default',
29
+ };
30
+ const ANSI_PATTERN = new RegExp('[\\u001B\\u009B][[\\]()#;?]*(?:'
31
+ + '(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]'
32
+ + '|(?:[\\dA-PR-TZcf-ntqry=><~]))', 'g');
33
+ const extractClaudeEventModel = (event, sessionId) => {
34
+ const eventSessionId = event.sessionId ?? event.session_id;
35
+ if (eventSessionId && eventSessionId !== sessionId) {
36
+ return null;
37
+ }
38
+ const contentModel = extractClaudeModelFromMessageContent(event.message?.content);
39
+ if (contentModel) {
40
+ return contentModel;
41
+ }
42
+ const directModel = event.model?.trim();
43
+ if (directModel) {
44
+ return directModel;
45
+ }
46
+ const messageModel = event.message?.model?.trim();
47
+ return messageModel || null;
48
+ };
49
+ const stripAnsi = (value) => value.replace(ANSI_PATTERN, '');
50
+ const extractTaggedContent = (content, tagName) => {
51
+ const escapedTagName = tagName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
52
+ const match = new RegExp(`<${escapedTagName}>([\\s\\S]*?)<\\/${escapedTagName}>`).exec(content);
53
+ return match ? match[1] : null;
54
+ };
55
+ const extractClaudeModelFromTextContent = (content) => {
56
+ const localCommandStdout = extractTaggedContent(content, 'local-command-stdout');
57
+ if (localCommandStdout !== null) {
58
+ const cleanedStdout = stripAnsi(localCommandStdout).replace(/\s+/g, ' ').trim();
59
+ const changedModel = /(?:set|changed|switched)\s+model\s+to\s+(.+?)\.?$/i.exec(cleanedStdout);
60
+ if (changedModel?.[1]?.trim()) {
61
+ return changedModel[1].trim();
62
+ }
63
+ }
64
+ const modelTag = extractTaggedContent(content, 'model')?.trim();
65
+ return modelTag || null;
66
+ };
67
+ const extractClaudeModelFromMessageContent = (content) => {
68
+ if (typeof content === 'string') {
69
+ return extractClaudeModelFromTextContent(content);
70
+ }
71
+ if (!Array.isArray(content)) {
72
+ return null;
73
+ }
74
+ for (const part of content) {
75
+ if (!part || typeof part !== 'object' || !('text' in part) || typeof part.text !== 'string') {
76
+ continue;
77
+ }
78
+ const model = extractClaudeModelFromTextContent(part.text);
79
+ if (model) {
80
+ return model;
81
+ }
82
+ }
83
+ return null;
84
+ };
85
+ const readClaudeSessionModelFromJsonl = async (sessionId, jsonlPath) => {
86
+ const content = await readFile(jsonlPath, 'utf8');
87
+ const lines = content
88
+ .split(/\r?\n/)
89
+ .map((line) => line.trim())
90
+ .filter(Boolean);
91
+ for (let index = lines.length - 1; index >= 0; index -= 1) {
92
+ try {
93
+ const event = JSON.parse(lines[index]);
94
+ const model = extractClaudeEventModel(event, sessionId);
95
+ if (model) {
96
+ return { model };
97
+ }
98
+ }
99
+ catch {
100
+ // Skip malformed JSONL lines that can happen during concurrent writes.
101
+ }
102
+ }
103
+ return null;
104
+ };
105
+ export class ClaudeProviderModels {
106
+ async getSupportedModels() {
107
+ // claude creates a new jsonl file as a separate session for this request.
108
+ // As a result, it lists the workspace where this is invoked when it shouldn't.
109
+ //
110
+ // Disabled for now:
111
+ // const queryInstance = query({
112
+ // prompt: 'Get supported models',
113
+ // options: buildClaudeQueryOptions(),
114
+ // });
115
+ // const supportedModels = await queryInstance.supportedModels();
116
+ // queryInstance.close();
117
+ // return buildClaudeModelsDefinition(supportedModels);
118
+ return CLAUDE_FALLBACK_MODELS;
119
+ }
120
+ async getCurrentActiveModel(sessionId) {
121
+ if (!sessionId?.trim()) {
122
+ return buildDefaultProviderCurrentActiveModel(await this.getSupportedModels());
123
+ }
124
+ try {
125
+ const ownerUserId = getDefaultOwnerUserId();
126
+ const jsonlPath = sessionsDb.getSessionById(ownerUserId, sessionId)?.jsonl_path;
127
+ const activeModel = jsonlPath
128
+ ? await readClaudeSessionModelFromJsonl(sessionId, jsonlPath)
129
+ : null;
130
+ if (activeModel?.model) {
131
+ return activeModel;
132
+ }
133
+ }
134
+ catch {
135
+ // Fall through to the provider default when the session-backed lookup fails.
136
+ }
137
+ return buildDefaultProviderCurrentActiveModel(await this.getSupportedModels());
138
+ }
139
+ async changeActiveModel(input) {
140
+ return writeProviderSessionActiveModelChange('claude', input);
141
+ }
142
+ }
143
+ //# sourceMappingURL=claude-models.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-models.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/claude/claude-models.provider.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  import { AbstractProvider } from '../../../../modules/providers/shared/base/abstract.provider.js';
2
2
  import { ClaudeProviderAuth } from '../../../../modules/providers/list/claude/claude-auth.provider.js';
3
+ import { ClaudeProviderModels } from '../../../../modules/providers/list/claude/claude-models.provider.js';
3
4
  import { ClaudeMcpProvider } from '../../../../modules/providers/list/claude/claude-mcp.provider.js';
4
5
  import { ClaudeSessionSynchronizer } from '../../../../modules/providers/list/claude/claude-session-synchronizer.provider.js';
5
6
  import { ClaudeSessionsProvider } from '../../../../modules/providers/list/claude/claude-sessions.provider.js';
6
7
  import { ClaudeSkillsProvider } from '../../../../modules/providers/list/claude/claude-skills.provider.js';
7
8
  export class ClaudeProvider extends AbstractProvider {
9
+ models = new ClaudeProviderModels();
8
10
  mcp = new ClaudeMcpProvider();
9
11
  auth = new ClaudeProviderAuth();
10
12
  skills = new ClaudeSkillsProvider();
@@ -1 +1 @@
1
- {"version":3,"file":"claude.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/claude/claude.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yDAAyD,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wDAAwD,CAAC;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,yEAAyE,CAAC;AACpH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6DAA6D,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AAQjG,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IACzC,GAAG,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAC9B,IAAI,GAAkB,IAAI,kBAAkB,EAAE,CAAC;IAC/C,MAAM,GAAoB,IAAI,oBAAoB,EAAE,CAAC;IACrD,QAAQ,GAAsB,IAAI,sBAAsB,EAAE,CAAC;IAC3D,mBAAmB,GAAiC,IAAI,yBAAyB,EAAE,CAAC;IAE7F;QACE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClB,CAAC;CACF"}
1
+ {"version":3,"file":"claude.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/claude/claude.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yDAAyD,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wDAAwD,CAAC;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,yEAAyE,CAAC;AACpH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6DAA6D,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AASjG,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IACzC,MAAM,GAAoB,IAAI,oBAAoB,EAAE,CAAC;IACrD,GAAG,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAC9B,IAAI,GAAkB,IAAI,kBAAkB,EAAE,CAAC;IAC/C,MAAM,GAAoB,IAAI,oBAAoB,EAAE,CAAC;IACrD,QAAQ,GAAsB,IAAI,sBAAsB,EAAE,CAAC;IAC3D,mBAAmB,GAAiC,IAAI,yBAAyB,EAAE,CAAC;IAE7F;QACE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,84 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import TOML from '@iarna/toml';
5
+ import { buildDefaultProviderCurrentActiveModel, readObjectRecord, readOptionalString, writeProviderSessionActiveModelChange, } from '../../../../shared/utils.js';
6
+ export const CODEX_FALLBACK_MODELS = {
7
+ OPTIONS: [
8
+ { value: 'gpt-5.5', label: 'gpt-5.5' },
9
+ { value: 'gpt-5.4', label: 'gpt-5.4' },
10
+ { value: 'gpt-5.4-mini', label: 'gpt-5.4-mini' },
11
+ { value: 'gpt-5.3-codex', label: 'gpt-5.3-codex' },
12
+ { value: 'gpt-5.2', label: 'gpt-5.2' },
13
+ ],
14
+ DEFAULT: 'gpt-5.4',
15
+ };
16
+ const CODEX_MODELS_CACHE_PATH = path.join(os.homedir(), '.codex', 'models_cache.json');
17
+ const CODEX_CONFIG_PATH = path.join(os.homedir(), '.codex', 'config.toml');
18
+ const isCodexCachedModel = (value) => {
19
+ const record = readObjectRecord(value);
20
+ return Boolean(record && readOptionalString(record.slug));
21
+ };
22
+ const readCodexPriority = (value) => (typeof value === 'number' && Number.isFinite(value) ? value : Number.MAX_SAFE_INTEGER);
23
+ const mapCodexModel = (model) => ({
24
+ value: model.slug,
25
+ label: readOptionalString(model.display_name) ?? model.slug,
26
+ description: readOptionalString(model.description),
27
+ });
28
+ const buildCodexModelsDefinition = (models) => {
29
+ const sortedModels = [...models]
30
+ .filter((model) => model.visibility !== 'hidden' && model.supported_in_api !== false)
31
+ .sort((left, right) => readCodexPriority(left.priority) - readCodexPriority(right.priority));
32
+ const options = [];
33
+ const seenValues = new Set();
34
+ for (const model of sortedModels) {
35
+ const mappedModel = mapCodexModel(model);
36
+ if (seenValues.has(mappedModel.value)) {
37
+ continue;
38
+ }
39
+ seenValues.add(mappedModel.value);
40
+ options.push(mappedModel);
41
+ }
42
+ if (options.length === 0) {
43
+ return CODEX_FALLBACK_MODELS;
44
+ }
45
+ return {
46
+ OPTIONS: options,
47
+ DEFAULT: options[0]?.value ?? CODEX_FALLBACK_MODELS.DEFAULT,
48
+ };
49
+ };
50
+ export class CodexProviderModels {
51
+ async getSupportedModels() {
52
+ try {
53
+ const raw = await readFile(CODEX_MODELS_CACHE_PATH, 'utf8');
54
+ const parsed = readObjectRecord(JSON.parse(raw));
55
+ const models = Array.isArray(parsed?.models)
56
+ ? parsed.models.filter(isCodexCachedModel)
57
+ : [];
58
+ return buildCodexModelsDefinition(models);
59
+ }
60
+ catch {
61
+ return CODEX_FALLBACK_MODELS;
62
+ }
63
+ }
64
+ async getCurrentActiveModel() {
65
+ try {
66
+ const raw = await readFile(CODEX_CONFIG_PATH, 'utf8');
67
+ const parsed = readObjectRecord(TOML.parse(raw));
68
+ const model = readOptionalString(parsed?.model);
69
+ if (!model) {
70
+ return buildDefaultProviderCurrentActiveModel(await this.getSupportedModels());
71
+ }
72
+ return {
73
+ model,
74
+ };
75
+ }
76
+ catch {
77
+ return buildDefaultProviderCurrentActiveModel(await this.getSupportedModels());
78
+ }
79
+ }
80
+ async changeActiveModel(input) {
81
+ return writeProviderSessionActiveModelChange('codex', input);
82
+ }
83
+ }
84
+ //# sourceMappingURL=codex-models.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-models.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/codex/codex-models.provider.ts"],"names":[],"mappings":"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"}
@@ -1,39 +1,7 @@
1
- import fs from 'node:fs/promises';
2
1
  import os from 'node:os';
3
2
  import path from 'node:path';
4
3
  import { SkillsProvider } from '../../../../modules/providers/shared/skills/skills.provider.js';
5
- const hasGitMarker = async (dirPath) => {
6
- try {
7
- const gitMarkerStats = await fs.stat(path.join(dirPath, '.git'));
8
- return gitMarkerStats.isDirectory() || gitMarkerStats.isFile();
9
- }
10
- catch {
11
- return false;
12
- }
13
- };
14
- const findTopmostGitRoot = async (startPath) => {
15
- let currentPath = path.resolve(startPath);
16
- let topmostGitRoot = null;
17
- while (true) {
18
- if (await hasGitMarker(currentPath)) {
19
- topmostGitRoot = currentPath;
20
- }
21
- const parentPath = path.dirname(currentPath);
22
- if (parentPath === currentPath) {
23
- break;
24
- }
25
- currentPath = parentPath;
26
- }
27
- return topmostGitRoot;
28
- };
29
- const addUniqueSource = (sources, seenRootDirs, source) => {
30
- const normalizedRootDir = path.resolve(source.rootDir);
31
- if (seenRootDirs.has(normalizedRootDir)) {
32
- return;
33
- }
34
- seenRootDirs.add(normalizedRootDir);
35
- sources.push({ ...source, rootDir: normalizedRootDir });
36
- };
4
+ import { addUniqueProviderSkillSource, findTopmostGitRoot, } from '../../../../shared/utils.js';
37
5
  export class CodexSkillsProvider extends SkillsProvider {
38
6
  constructor() {
39
7
  super('codex');
@@ -42,7 +10,7 @@ export class CodexSkillsProvider extends SkillsProvider {
42
10
  const sources = [];
43
11
  const seenRootDirs = new Set();
44
12
  const repoRoot = await findTopmostGitRoot(workspacePath);
45
- addUniqueSource(sources, seenRootDirs, {
13
+ addUniqueProviderSkillSource(sources, seenRootDirs, {
46
14
  scope: 'repo',
47
15
  rootDir: path.join(workspacePath, '.agents', 'skills'),
48
16
  commandPrefix: '$',
@@ -50,28 +18,28 @@ export class CodexSkillsProvider extends SkillsProvider {
50
18
  if (repoRoot) {
51
19
  // Codex checks repository skills at the launch folder, one folder above it,
52
20
  // and the topmost git root; these can collapse to the same directory.
53
- addUniqueSource(sources, seenRootDirs, {
21
+ addUniqueProviderSkillSource(sources, seenRootDirs, {
54
22
  scope: 'repo',
55
23
  rootDir: path.join(path.dirname(workspacePath), '.agents', 'skills'),
56
24
  commandPrefix: '$',
57
25
  });
58
- addUniqueSource(sources, seenRootDirs, {
26
+ addUniqueProviderSkillSource(sources, seenRootDirs, {
59
27
  scope: 'repo',
60
28
  rootDir: path.join(repoRoot, '.agents', 'skills'),
61
29
  commandPrefix: '$',
62
30
  });
63
31
  }
64
- addUniqueSource(sources, seenRootDirs, {
32
+ addUniqueProviderSkillSource(sources, seenRootDirs, {
65
33
  scope: 'user',
66
34
  rootDir: path.join(os.homedir(), '.agents', 'skills'),
67
35
  commandPrefix: '$',
68
36
  });
69
- addUniqueSource(sources, seenRootDirs, {
37
+ addUniqueProviderSkillSource(sources, seenRootDirs, {
70
38
  scope: 'admin',
71
39
  rootDir: path.join('/etc', 'codex', 'skills'),
72
40
  commandPrefix: '$',
73
41
  });
74
- addUniqueSource(sources, seenRootDirs, {
42
+ addUniqueProviderSkillSource(sources, seenRootDirs, {
75
43
  scope: 'system',
76
44
  rootDir: path.join(os.homedir(), '.codex', 'skills', '.system'),
77
45
  commandPrefix: '$',
@@ -1 +1 @@
1
- {"version":3,"file":"codex-skills.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/codex/codex-skills.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,sDAAsD,CAAC;AAGtF,MAAM,YAAY,GAAG,KAAK,EAAE,OAAe,EAAoB,EAAE;IAC/D,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACjE,OAAO,cAAc,CAAC,WAAW,EAAE,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,EAAE,SAAiB,EAA0B,EAAE;IAC7E,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,cAAc,GAAkB,IAAI,CAAC;IAEzC,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,cAAc,GAAG,WAAW,CAAC;QAC/B,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM;QACR,CAAC;QAED,WAAW,GAAG,UAAU,CAAC;IAC3B,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,OAA8B,EAC9B,YAAyB,EACzB,MAA2B,EACrB,EAAE;IACR,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;IAED,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,OAAO,mBAAoB,SAAQ,cAAc;IACrD;QACE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAES,KAAK,CAAC,eAAe,CAAC,aAAqB;QACnD,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAEzD,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE;YACrC,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC;YACtD,aAAa,EAAE,GAAG;SACnB,CAAC,CAAC;QAEH,IAAI,QAAQ,EAAE,CAAC;YACb,4EAA4E;YAC5E,sEAAsE;YACtE,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE;gBACrC,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC;gBACpE,aAAa,EAAE,GAAG;aACnB,CAAC,CAAC;YACH,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE;gBACrC,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;gBACjD,aAAa,EAAE,GAAG;aACnB,CAAC,CAAC;QACL,CAAC;QAED,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE;YACrC,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC;YACrD,aAAa,EAAE,GAAG;SACnB,CAAC,CAAC;QACH,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE;YACrC,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;YAC7C,aAAa,EAAE,GAAG;SACnB,CAAC,CAAC;QACH,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE;YACrC,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;YAC/D,aAAa,EAAE,GAAG;SACnB,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
1
+ {"version":3,"file":"codex-skills.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/codex/codex-skills.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,sDAAsD,CAAC;AAEtF,OAAO,EACL,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,OAAO,mBAAoB,SAAQ,cAAc;IACrD;QACE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAES,KAAK,CAAC,eAAe,CAAC,aAAqB;QACnD,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAEzD,4BAA4B,CAAC,OAAO,EAAE,YAAY,EAAE;YAClD,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC;YACtD,aAAa,EAAE,GAAG;SACnB,CAAC,CAAC;QAEH,IAAI,QAAQ,EAAE,CAAC;YACb,4EAA4E;YAC5E,sEAAsE;YACtE,4BAA4B,CAAC,OAAO,EAAE,YAAY,EAAE;gBAClD,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC;gBACpE,aAAa,EAAE,GAAG;aACnB,CAAC,CAAC;YACH,4BAA4B,CAAC,OAAO,EAAE,YAAY,EAAE;gBAClD,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;gBACjD,aAAa,EAAE,GAAG;aACnB,CAAC,CAAC;QACL,CAAC;QAED,4BAA4B,CAAC,OAAO,EAAE,YAAY,EAAE;YAClD,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC;YACrD,aAAa,EAAE,GAAG;SACnB,CAAC,CAAC;QACH,4BAA4B,CAAC,OAAO,EAAE,YAAY,EAAE;YAClD,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;YAC7C,aAAa,EAAE,GAAG;SACnB,CAAC,CAAC;QACH,4BAA4B,CAAC,OAAO,EAAE,YAAY,EAAE;YAClD,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;YAC/D,aAAa,EAAE,GAAG;SACnB,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -1,10 +1,12 @@
1
1
  import { AbstractProvider } from '../../../../modules/providers/shared/base/abstract.provider.js';
2
2
  import { CodexProviderAuth } from '../../../../modules/providers/list/codex/codex-auth.provider.js';
3
+ import { CodexProviderModels } from '../../../../modules/providers/list/codex/codex-models.provider.js';
3
4
  import { CodexMcpProvider } from '../../../../modules/providers/list/codex/codex-mcp.provider.js';
4
5
  import { CodexSessionSynchronizer } from '../../../../modules/providers/list/codex/codex-session-synchronizer.provider.js';
5
6
  import { CodexSessionsProvider } from '../../../../modules/providers/list/codex/codex-sessions.provider.js';
6
7
  import { CodexSkillsProvider } from '../../../../modules/providers/list/codex/codex-skills.provider.js';
7
8
  export class CodexProvider extends AbstractProvider {
9
+ models = new CodexProviderModels();
8
10
  mcp = new CodexMcpProvider();
9
11
  auth = new CodexProviderAuth();
10
12
  skills = new CodexSkillsProvider();
@@ -1 +1 @@
1
- {"version":3,"file":"codex.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/codex/codex.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,uEAAuE,CAAC;AACjH,OAAO,EAAE,qBAAqB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,MAAM,yDAAyD,CAAC;AAQ9F,MAAM,OAAO,aAAc,SAAQ,gBAAgB;IACxC,GAAG,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAC7B,IAAI,GAAkB,IAAI,iBAAiB,EAAE,CAAC;IAC9C,MAAM,GAAoB,IAAI,mBAAmB,EAAE,CAAC;IACpD,QAAQ,GAAsB,IAAI,qBAAqB,EAAE,CAAC;IAC1D,mBAAmB,GAAiC,IAAI,wBAAwB,EAAE,CAAC;IAE5F;QACE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF"}
1
+ {"version":3,"file":"codex.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/codex/codex.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,yDAAyD,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,uEAAuE,CAAC;AACjH,OAAO,EAAE,qBAAqB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,MAAM,yDAAyD,CAAC;AAS9F,MAAM,OAAO,aAAc,SAAQ,gBAAgB;IACxC,MAAM,GAAoB,IAAI,mBAAmB,EAAE,CAAC;IACpD,GAAG,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAC7B,IAAI,GAAkB,IAAI,iBAAiB,EAAE,CAAC;IAC9C,MAAM,GAAoB,IAAI,mBAAmB,EAAE,CAAC;IACpD,QAAQ,GAAsB,IAAI,qBAAqB,EAAE,CAAC;IAC1D,mBAAmB,GAAiC,IAAI,wBAAwB,EAAE,CAAC;IAE5F;QACE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF"}