@glwhappen/web-code 1.32.9 → 1.32.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.de.md +1 -1
- package/README.ko.md +1 -1
- package/README.md +1 -1
- package/README.ru.md +1 -1
- package/README.tr.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/api-docs.html +6 -7
- package/dist/assets/{index-D_7CSvqO.js → index-CBo8yakG.js} +276 -261
- package/dist/assets/index-Dl5QP21C.css +32 -0
- package/dist/index.html +2 -2
- package/dist/modelConstants.js +841 -0
- package/dist-server/server/claude-sdk.js +57 -34
- package/dist-server/server/claude-sdk.js.map +1 -1
- package/dist-server/server/cursor-cli.js +6 -3
- package/dist-server/server/cursor-cli.js.map +1 -1
- package/dist-server/server/gemini-cli.js +3 -1
- package/dist-server/server/gemini-cli.js.map +1 -1
- package/dist-server/server/gemini-response-handler.js +34 -0
- package/dist-server/server/gemini-response-handler.js.map +1 -1
- package/dist-server/server/index.js +131 -19
- package/dist-server/server/index.js.map +1 -1
- package/dist-server/server/modules/database/index.js +1 -0
- package/dist-server/server/modules/database/index.js.map +1 -1
- package/dist-server/server/modules/projects/services/project-management.service.js +1 -0
- package/dist-server/server/modules/projects/services/project-management.service.js.map +1 -1
- package/dist-server/server/modules/projects/services/projects-with-sessions-fetch.service.js +4 -0
- package/dist-server/server/modules/projects/services/projects-with-sessions-fetch.service.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-models.provider.js +143 -0
- package/dist-server/server/modules/providers/list/claude/claude-models.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/claude/claude.provider.js +2 -0
- package/dist-server/server/modules/providers/list/claude/claude.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-models.provider.js +84 -0
- package/dist-server/server/modules/providers/list/codex/codex-models.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/codex/codex-skills.provider.js +7 -39
- package/dist-server/server/modules/providers/list/codex/codex-skills.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex.provider.js +2 -0
- package/dist-server/server/modules/providers/list/codex/codex.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js +754 -0
- package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/cursor/cursor-sessions.provider.js +2 -15
- package/dist-server/server/modules/providers/list/cursor/cursor-sessions.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/cursor/cursor.provider.js +2 -0
- package/dist-server/server/modules/providers/list/cursor/cursor.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/gemini/gemini-models.provider.js +27 -0
- package/dist-server/server/modules/providers/list/gemini/gemini-models.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/gemini/gemini-sessions.provider.js +3 -9
- package/dist-server/server/modules/providers/list/gemini/gemini-sessions.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/gemini/gemini.provider.js +2 -0
- package/dist-server/server/modules/providers/list/gemini/gemini.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/opencode/opencode-auth.provider.js +92 -0
- package/dist-server/server/modules/providers/list/opencode/opencode-auth.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/opencode/opencode-mcp.provider.js +181 -0
- package/dist-server/server/modules/providers/list/opencode/opencode-mcp.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js +267 -0
- package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js +115 -0
- package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/opencode/opencode-sessions.provider.js +410 -0
- package/dist-server/server/modules/providers/list/opencode/opencode-sessions.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/opencode/opencode-skills.provider.js +62 -0
- package/dist-server/server/modules/providers/list/opencode/opencode-skills.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/opencode/opencode.provider.js +19 -0
- package/dist-server/server/modules/providers/list/opencode/opencode.provider.js.map +1 -0
- package/dist-server/server/modules/providers/provider.registry.js +2 -0
- package/dist-server/server/modules/providers/provider.registry.js.map +1 -1
- package/dist-server/server/modules/providers/provider.routes.js +42 -1
- package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
- package/dist-server/server/modules/providers/services/mcp.service.js +1 -9
- package/dist-server/server/modules/providers/services/mcp.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-models.service.js +199 -0
- package/dist-server/server/modules/providers/services/provider-models.service.js.map +1 -0
- package/dist-server/server/modules/providers/services/session-synchronizer.service.js +1 -0
- package/dist-server/server/modules/providers/services/session-synchronizer.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/sessions-watcher.service.js +7 -0
- package/dist-server/server/modules/providers/services/sessions-watcher.service.js.map +1 -1
- package/dist-server/server/modules/providers/shared/base/abstract.provider.js.map +1 -1
- package/dist-server/server/modules/providers/tests/mcp.test.js +73 -6
- package/dist-server/server/modules/providers/tests/mcp.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/opencode-models.test.js +66 -0
- package/dist-server/server/modules/providers/tests/opencode-models.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/opencode-sessions.test.js +264 -0
- package/dist-server/server/modules/providers/tests/opencode-sessions.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/provider-models.service.test.js +270 -0
- package/dist-server/server/modules/providers/tests/provider-models.service.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/skills.test.js +33 -0
- package/dist-server/server/modules/providers/tests/skills.test.js.map +1 -1
- package/dist-server/server/modules/websocket/services/chat-websocket.service.js +18 -1
- package/dist-server/server/modules/websocket/services/chat-websocket.service.js.map +1 -1
- package/dist-server/server/modules/websocket/services/shell-websocket.service.js +9 -1
- package/dist-server/server/modules/websocket/services/shell-websocket.service.js.map +1 -1
- package/dist-server/server/openai-codex.js +32 -4
- package/dist-server/server/openai-codex.js.map +1 -1
- package/dist-server/server/opencode-cli.js +287 -0
- package/dist-server/server/opencode-cli.js.map +1 -0
- package/dist-server/server/opencode-cli.test.js +84 -0
- package/dist-server/server/opencode-cli.test.js.map +1 -0
- package/dist-server/server/routes/agent.js +21 -8
- package/dist-server/server/routes/agent.js.map +1 -1
- package/dist-server/server/routes/commands.js +202 -209
- package/dist-server/server/routes/commands.js.map +1 -1
- package/dist-server/server/routes/cursor.js +2 -2
- package/dist-server/server/routes/cursor.js.map +1 -1
- package/dist-server/server/routes/settings.js +0 -10
- package/dist-server/server/routes/settings.js.map +1 -1
- package/dist-server/server/routes/tests/commands.test.js +76 -0
- package/dist-server/server/routes/tests/commands.test.js.map +1 -0
- package/dist-server/server/shared/utils.js +286 -0
- package/dist-server/server/shared/utils.js.map +1 -1
- package/package.json +3 -1
- package/public/api-docs.html +878 -0
- package/public/modelConstants.js +841 -0
- package/server/claude-sdk.js +64 -35
- package/server/cursor-cli.js +6 -3
- package/server/gemini-cli.js +7 -1
- package/server/gemini-response-handler.js +38 -0
- package/server/index.js +150 -19
- package/server/modules/database/index.ts +1 -0
- package/server/modules/projects/services/project-management.service.ts +2 -0
- package/server/modules/projects/services/projects-with-sessions-fetch.service.ts +7 -1
- package/server/modules/providers/README.md +11 -3
- package/server/modules/providers/list/claude/claude-models.provider.ts +193 -0
- package/server/modules/providers/list/claude/claude.provider.ts +3 -0
- package/server/modules/providers/list/codex/codex-models.provider.ts +125 -0
- package/server/modules/providers/list/codex/codex-skills.provider.ts +10 -50
- package/server/modules/providers/list/codex/codex.provider.ts +3 -0
- package/server/modules/providers/list/cursor/cursor-models.provider.ts +820 -0
- package/server/modules/providers/list/cursor/cursor-sessions.provider.ts +7 -20
- package/server/modules/providers/list/cursor/cursor.provider.ts +3 -0
- package/server/modules/providers/list/gemini/gemini-models.provider.ts +42 -0
- package/server/modules/providers/list/gemini/gemini-sessions.provider.ts +3 -10
- package/server/modules/providers/list/gemini/gemini.provider.ts +3 -0
- package/server/modules/providers/list/opencode/opencode-auth.provider.ts +111 -0
- package/server/modules/providers/list/opencode/opencode-mcp.provider.ts +228 -0
- package/server/modules/providers/list/opencode/opencode-models.provider.ts +339 -0
- package/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.ts +158 -0
- package/server/modules/providers/list/opencode/opencode-sessions.provider.ts +506 -0
- package/server/modules/providers/list/opencode/opencode-skills.provider.ts +78 -0
- package/server/modules/providers/list/opencode/opencode.provider.ts +27 -0
- package/server/modules/providers/provider.registry.ts +2 -0
- package/server/modules/providers/provider.routes.ts +62 -2
- package/server/modules/providers/services/mcp.service.ts +1 -12
- package/server/modules/providers/services/provider-models.service.ts +325 -0
- package/server/modules/providers/services/session-synchronizer.service.ts +1 -0
- package/server/modules/providers/services/sessions-watcher.service.ts +8 -0
- package/server/modules/providers/shared/base/abstract.provider.ts +2 -0
- package/server/modules/providers/tests/mcp.test.ts +93 -6
- package/server/modules/providers/tests/opencode-models.test.ts +73 -0
- package/server/modules/providers/tests/opencode-sessions.test.ts +336 -0
- package/server/modules/providers/tests/provider-models.service.test.ts +318 -0
- package/server/modules/providers/tests/skills.test.ts +66 -0
- package/server/modules/websocket/services/chat-websocket.service.ts +21 -1
- package/server/modules/websocket/services/shell-websocket.service.ts +9 -0
- package/server/openai-codex.js +40 -4
- package/server/opencode-cli.js +336 -0
- package/server/opencode-cli.test.js +95 -0
- package/server/routes/agent.js +22 -8
- package/server/routes/commands.js +254 -233
- package/server/routes/cursor.js +2 -2
- package/server/routes/settings.js +1 -10
- package/server/routes/tests/commands.test.js +82 -0
- package/server/shared/interfaces.ts +45 -0
- package/server/shared/types.ts +88 -1
- package/server/shared/utils.ts +384 -0
- package/dist/assets/index-DdxLnCfK.css +0 -32
- package/dist-server/shared/modelConstants.js +0 -99
- package/dist-server/shared/modelConstants.js.map +0 -1
- 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;
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
21
|
+
addUniqueProviderSkillSource(sources, seenRootDirs, {
|
|
54
22
|
scope: 'repo',
|
|
55
23
|
rootDir: path.join(path.dirname(workspacePath), '.agents', 'skills'),
|
|
56
24
|
commandPrefix: '$',
|
|
57
25
|
});
|
|
58
|
-
|
|
26
|
+
addUniqueProviderSkillSource(sources, seenRootDirs, {
|
|
59
27
|
scope: 'repo',
|
|
60
28
|
rootDir: path.join(repoRoot, '.agents', 'skills'),
|
|
61
29
|
commandPrefix: '$',
|
|
62
30
|
});
|
|
63
31
|
}
|
|
64
|
-
|
|
32
|
+
addUniqueProviderSkillSource(sources, seenRootDirs, {
|
|
65
33
|
scope: 'user',
|
|
66
34
|
rootDir: path.join(os.homedir(), '.agents', 'skills'),
|
|
67
35
|
commandPrefix: '$',
|
|
68
36
|
});
|
|
69
|
-
|
|
37
|
+
addUniqueProviderSkillSource(sources, seenRootDirs, {
|
|
70
38
|
scope: 'admin',
|
|
71
39
|
rootDir: path.join('/etc', 'codex', 'skills'),
|
|
72
40
|
commandPrefix: '$',
|
|
73
41
|
});
|
|
74
|
-
|
|
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,
|
|
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;
|
|
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"}
|