@seawork/server 1.0.15 → 1.0.16
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/dist/server/server/agent/providers/claude-agent.d.ts +16 -0
- package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.js +36 -23
- package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
- package/dist/server/server/agent/providers/seawork-models.d.ts.map +1 -1
- package/dist/server/server/agent/providers/seawork-models.js +47 -9
- package/dist/server/server/agent/providers/seawork-models.js.map +1 -1
- package/dist/server/server/daemon-config-store.d.ts +1 -0
- package/dist/server/server/daemon-config-store.d.ts.map +1 -1
- package/dist/server/server/daemon-config-store.js.map +1 -1
- package/dist/server/server/dictation/dictation-stream-manager.d.ts +9 -0
- package/dist/server/server/dictation/dictation-stream-manager.d.ts.map +1 -1
- package/dist/server/server/dictation/dictation-stream-manager.js +21 -1
- package/dist/server/server/dictation/dictation-stream-manager.js.map +1 -1
- package/dist/server/server/persisted-config.d.ts +145 -39
- package/dist/server/server/persisted-config.d.ts.map +1 -1
- package/dist/server/server/persisted-config.js +113 -13
- package/dist/server/server/persisted-config.js.map +1 -1
- package/dist/server/server/session.js +1 -1
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/speech/providers/openai/config.d.ts +6 -0
- package/dist/server/server/speech/providers/openai/config.d.ts.map +1 -1
- package/dist/server/server/speech/providers/openai/config.js +92 -22
- package/dist/server/server/speech/providers/openai/config.js.map +1 -1
- package/dist/server/server/speech/providers/openai/runtime.d.ts.map +1 -1
- package/dist/server/server/speech/providers/openai/runtime.js +43 -12
- package/dist/server/server/speech/providers/openai/runtime.js.map +1 -1
- package/dist/server/server/speech/providers/openai/stt.d.ts +1 -0
- package/dist/server/server/speech/providers/openai/stt.d.ts.map +1 -1
- package/dist/server/server/speech/providers/openai/stt.js +2 -1
- package/dist/server/server/speech/providers/openai/stt.js.map +1 -1
- package/dist/server/server/workspace-registry-model.d.ts.map +1 -1
- package/dist/server/server/workspace-registry-model.js +21 -48
- package/dist/server/server/workspace-registry-model.js.map +1 -1
- package/package.json +3 -3
|
@@ -13,6 +13,12 @@ export type OpenAiSpeechProviderConfig = {
|
|
|
13
13
|
apiKey?: string;
|
|
14
14
|
};
|
|
15
15
|
realtimeTranscriptionModel?: string;
|
|
16
|
+
dictation?: {
|
|
17
|
+
apiKey?: string;
|
|
18
|
+
baseURL?: string;
|
|
19
|
+
model?: string;
|
|
20
|
+
confidenceThreshold?: number;
|
|
21
|
+
};
|
|
16
22
|
};
|
|
17
23
|
export declare function resolveOpenAiSpeechConfig(params: {
|
|
18
24
|
env: NodeJS.ProcessEnv;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../../src/server/speech/providers/openai/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,eAAO,MAAM,2CAA2C,sBAAsB,CAAC;AAC/E,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAEhD,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,GAAG,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,0BAA0B,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../../src/server/speech/providers/openai/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,eAAO,MAAM,2CAA2C,sBAAsB,CAAC;AAC/E,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAEhD,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,GAAG,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,0BAA0B,CAAC,EAAE,MAAM,CAAC;IAIpC,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH,CAAC;AAmCF,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,SAAS,EAAE,eAAe,CAAC;IAC3B,SAAS,EAAE,wBAAwB,CAAC;CACrC,GAAG,0BAA0B,GAAG,SAAS,CAiIzC"}
|
|
@@ -12,8 +12,11 @@ const OptionalTrimmedStringSchema = z
|
|
|
12
12
|
.transform((value) => (value && value.length > 0 ? value : undefined));
|
|
13
13
|
const OpenAiSpeechResolutionSchema = z.object({
|
|
14
14
|
apiKey: OptionalTrimmedStringSchema,
|
|
15
|
+
dictationApiKey: OptionalTrimmedStringSchema,
|
|
16
|
+
dictationBaseURL: OptionalTrimmedStringSchema,
|
|
17
|
+
dictationModel: OptionalTrimmedStringSchema,
|
|
15
18
|
sttConfidenceThreshold: OptionalFiniteNumberSchema,
|
|
16
|
-
|
|
19
|
+
voiceSttModel: OptionalTrimmedStringSchema,
|
|
17
20
|
ttsVoice: z.string().trim().toLowerCase().pipe(OpenAiTtsVoiceSchema).default("alloy"),
|
|
18
21
|
ttsModel: z
|
|
19
22
|
.string()
|
|
@@ -24,18 +27,61 @@ const OpenAiSpeechResolutionSchema = z.object({
|
|
|
24
27
|
realtimeTranscriptionModel: OptionalTrimmedStringSchema.default(DEFAULT_OPENAI_REALTIME_TRANSCRIPTION_MODEL),
|
|
25
28
|
});
|
|
26
29
|
export function resolveOpenAiSpeechConfig(params) {
|
|
30
|
+
const persistedOpenAi = params.persisted.providers?.openai;
|
|
31
|
+
const persistedDictationOpenAi = params.persisted.features?.dictation?.openai;
|
|
32
|
+
// The legacy providers.openai.{apiKey,baseURL} fields predate the
|
|
33
|
+
// dictation override and were originally documented as voice
|
|
34
|
+
// credentials. We preserve that meaning unless the user also set a
|
|
35
|
+
// baseURL — in that case, the credentials clearly target an
|
|
36
|
+
// OpenAI-compatible endpoint (e.g. Groq) that voice mode (TTS,
|
|
37
|
+
// Realtime) does not support, so we treat the whole legacy block as
|
|
38
|
+
// dictation-scoped to avoid 401-ing voice mode.
|
|
39
|
+
const legacyOpenAiApiKey = persistedOpenAi?.apiKey;
|
|
40
|
+
const legacyOpenAiBaseURL = persistedOpenAi?.baseURL;
|
|
41
|
+
// The legacy block counts as a dictation override only when both
|
|
42
|
+
// apiKey AND baseURL are present together — that's the only shape
|
|
43
|
+
// that unambiguously targets a non-OpenAI endpoint. A standalone
|
|
44
|
+
// legacy baseURL (no apiKey) is a corrupt half-config and must NOT
|
|
45
|
+
// pair the custom URL with the env/top-level OpenAI key.
|
|
46
|
+
const legacyIsDictationScoped = Boolean(legacyOpenAiApiKey && legacyOpenAiBaseURL);
|
|
47
|
+
// When features.dictation.openai is present, treat it as the entire
|
|
48
|
+
// dictation override block — do NOT mix-and-match with the legacy
|
|
49
|
+
// providers.openai fields. Otherwise a half-migrated config could
|
|
50
|
+
// produce nonsensical combinations like "OpenAI key + Groq baseURL".
|
|
51
|
+
let dictationApiKey;
|
|
52
|
+
let dictationBaseURL;
|
|
53
|
+
if (persistedDictationOpenAi) {
|
|
54
|
+
dictationApiKey = persistedDictationOpenAi.apiKey;
|
|
55
|
+
dictationBaseURL = persistedDictationOpenAi.baseURL;
|
|
56
|
+
}
|
|
57
|
+
else if (legacyIsDictationScoped) {
|
|
58
|
+
dictationApiKey = legacyOpenAiApiKey;
|
|
59
|
+
dictationBaseURL = legacyOpenAiBaseURL;
|
|
60
|
+
}
|
|
27
61
|
const parsed = OpenAiSpeechResolutionSchema.parse({
|
|
28
|
-
apiKey
|
|
62
|
+
// Top-level apiKey is the credential for voiceStt / voiceTts / Realtime.
|
|
63
|
+
// Env wins (desktop's gateway injection), with persisted
|
|
64
|
+
// providers.openai.apiKey as a fallback for self-hosted users who
|
|
65
|
+
// configured voice via config.json. The fallback is suppressed when a
|
|
66
|
+
// legacy baseURL is also set, since that signals the credentials
|
|
67
|
+
// belong to a non-OpenAI endpoint that the voice stack can't talk to.
|
|
68
|
+
apiKey: params.env.OPENAI_API_KEY ?? (legacyIsDictationScoped ? undefined : legacyOpenAiApiKey),
|
|
69
|
+
dictationApiKey,
|
|
70
|
+
dictationBaseURL,
|
|
71
|
+
// Dictation model has its own dedicated source — it must not borrow
|
|
72
|
+
// from voiceMode.stt.model, otherwise dictation would silently inherit
|
|
73
|
+
// a model intended for voice (e.g. gpt-4o-transcribe instead of
|
|
74
|
+
// whisper-large-v3 on Groq).
|
|
75
|
+
dictationModel: params.providers.dictationStt.enabled !== false &&
|
|
76
|
+
params.providers.dictationStt.provider === "openai"
|
|
77
|
+
? params.persisted.features?.dictation?.stt?.model
|
|
78
|
+
: undefined,
|
|
29
79
|
sttConfidenceThreshold: params.env.STT_CONFIDENCE_THRESHOLD ??
|
|
30
80
|
params.persisted.features?.dictation?.stt?.confidenceThreshold,
|
|
31
|
-
|
|
81
|
+
voiceSttModel: params.env.STT_MODEL ??
|
|
32
82
|
(params.providers.voiceStt.enabled !== false &&
|
|
33
83
|
params.providers.voiceStt.provider === "openai"
|
|
34
84
|
? params.persisted.features?.voiceMode?.stt?.model
|
|
35
|
-
: undefined) ??
|
|
36
|
-
(params.providers.dictationStt.enabled !== false &&
|
|
37
|
-
params.providers.dictationStt.provider === "openai"
|
|
38
|
-
? params.persisted.features?.dictation?.stt?.model
|
|
39
85
|
: undefined),
|
|
40
86
|
ttsVoice: params.env.TTS_VOICE ??
|
|
41
87
|
(params.providers.voiceTts.enabled !== false &&
|
|
@@ -56,25 +102,49 @@ export function resolveOpenAiSpeechConfig(params) {
|
|
|
56
102
|
: undefined) ??
|
|
57
103
|
DEFAULT_OPENAI_REALTIME_TRANSCRIPTION_MODEL,
|
|
58
104
|
});
|
|
59
|
-
|
|
105
|
+
// Dictation override is independent: it can be present without the
|
|
106
|
+
// top-level apiKey (e.g. user only configured Groq for dictation, no
|
|
107
|
+
// env OPENAI_API_KEY).
|
|
108
|
+
const hasDictationOverride = Boolean(parsed.dictationApiKey || parsed.dictationBaseURL);
|
|
109
|
+
if (!parsed.apiKey && !hasDictationOverride) {
|
|
60
110
|
return undefined;
|
|
61
111
|
}
|
|
62
112
|
return {
|
|
63
|
-
apiKey: parsed.apiKey,
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
113
|
+
...(parsed.apiKey ? { apiKey: parsed.apiKey } : {}),
|
|
114
|
+
...(parsed.apiKey
|
|
115
|
+
? {
|
|
116
|
+
stt: {
|
|
117
|
+
apiKey: parsed.apiKey,
|
|
118
|
+
...(parsed.sttConfidenceThreshold !== undefined
|
|
119
|
+
? { confidenceThreshold: parsed.sttConfidenceThreshold }
|
|
120
|
+
: {}),
|
|
121
|
+
...(parsed.voiceSttModel ? { model: parsed.voiceSttModel } : {}),
|
|
122
|
+
},
|
|
123
|
+
tts: {
|
|
124
|
+
apiKey: parsed.apiKey,
|
|
125
|
+
voice: parsed.ttsVoice,
|
|
126
|
+
model: parsed.ttsModel,
|
|
127
|
+
responseFormat: "pcm",
|
|
128
|
+
},
|
|
129
|
+
}
|
|
130
|
+
: {}),
|
|
77
131
|
realtimeTranscriptionModel: parsed.realtimeTranscriptionModel,
|
|
132
|
+
...(hasDictationOverride
|
|
133
|
+
? {
|
|
134
|
+
dictation: {
|
|
135
|
+
...(parsed.dictationApiKey ? { apiKey: parsed.dictationApiKey } : {}),
|
|
136
|
+
...(parsed.dictationBaseURL ? { baseURL: parsed.dictationBaseURL } : {}),
|
|
137
|
+
...(parsed.dictationModel ? { model: parsed.dictationModel } : {}),
|
|
138
|
+
// Confidence threshold is dictation-only by design (voice mode
|
|
139
|
+
// doesn't enforce it). Carry it on the dictation block so
|
|
140
|
+
// runtime can read it even when there is no top-level voice
|
|
141
|
+
// apiKey (i.e. dictation-only deployments).
|
|
142
|
+
...(parsed.sttConfidenceThreshold !== undefined
|
|
143
|
+
? { confidenceThreshold: parsed.sttConfidenceThreshold }
|
|
144
|
+
: {}),
|
|
145
|
+
},
|
|
146
|
+
}
|
|
147
|
+
: {}),
|
|
78
148
|
};
|
|
79
149
|
}
|
|
80
150
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../../src/server/speech/providers/openai/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,MAAM,CAAC,MAAM,2CAA2C,GAAG,mBAAmB,CAAC;AAC/E,MAAM,CAAC,MAAM,wBAAwB,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../../src/server/speech/providers/openai/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../../../src/server/speech/providers/openai/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC3F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,aAAa,CAAC;AAWrB,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,oBAAoB,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACnD,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACxC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACxC,mBAAmB,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAClD,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../../../src/server/speech/providers/openai/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC3F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,aAAa,CAAC;AAWrB,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,oBAAoB,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACnD,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACxC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACxC,mBAAmB,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAClD,CAAC;AAoBF,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,0BAA0B,GAAG,SAAS,GACnD,wBAAwB,CAO1B;AAED,wBAAgB,oCAAoC,CAAC,MAAM,EAAE;IAC3D,SAAS,EAAE,wBAAwB,CAAC;IACpC,YAAY,EAAE,0BAA0B,GAAG,SAAS,CAAC;IACrD,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CA2CP;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,SAAS,EAAE,wBAAwB,CAAC;IACpC,YAAY,EAAE,0BAA0B,GAAG,SAAS,CAAC;IACrD,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,cAAc,CAwGjB"}
|
|
@@ -4,10 +4,17 @@ import { OpenAISTT } from "./stt.js";
|
|
|
4
4
|
import { OpenAITTS } from "./tts.js";
|
|
5
5
|
function resolveOpenAiCredentials(openaiConfig) {
|
|
6
6
|
const openaiApiKey = openaiConfig?.apiKey;
|
|
7
|
+
// Dictation override is a unit: when a custom baseURL is set, the
|
|
8
|
+
// matching apiKey must come from the same block. Never pair a custom
|
|
9
|
+
// dictation baseURL (e.g. Groq) with the top-level voice apiKey
|
|
10
|
+
// (Seawork/OpenAI) — that would 401 against the wrong endpoint.
|
|
11
|
+
const dictationApiKey = openaiConfig?.dictation?.baseURL
|
|
12
|
+
? openaiConfig?.dictation?.apiKey
|
|
13
|
+
: (openaiConfig?.dictation?.apiKey ?? openaiApiKey);
|
|
7
14
|
return {
|
|
8
15
|
openaiSttApiKey: openaiConfig?.stt?.apiKey ?? openaiApiKey,
|
|
9
16
|
openaiTtsApiKey: openaiConfig?.tts?.apiKey ?? openaiApiKey,
|
|
10
|
-
openaiDictationApiKey:
|
|
17
|
+
openaiDictationApiKey: dictationApiKey,
|
|
11
18
|
};
|
|
12
19
|
}
|
|
13
20
|
export function getOpenAiSpeechAvailability(openaiConfig) {
|
|
@@ -85,18 +92,42 @@ export function initializeOpenAiSpeechServices(params) {
|
|
|
85
92
|
}
|
|
86
93
|
const dictationApiKey = openAiCredentials.openaiDictationApiKey;
|
|
87
94
|
if (needsOpenAiDictation && dictationApiKey) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
95
|
+
// Dictation override scope: only openaiConfig.dictation.* applies here.
|
|
96
|
+
// voiceStt / voiceTts / Realtime never see this baseURL or this model.
|
|
97
|
+
const dictationBaseURL = openaiConfig?.dictation?.baseURL;
|
|
98
|
+
const dictationModel = openaiConfig?.dictation?.model;
|
|
99
|
+
// confidenceThreshold lives on the dictation block so it survives
|
|
100
|
+
// the dictation-only deployment case (no top-level voice apiKey
|
|
101
|
+
// means openaiConfig.stt is undefined).
|
|
102
|
+
const dictationConfidenceThreshold = openaiConfig?.dictation?.confidenceThreshold;
|
|
103
|
+
// When a custom baseURL is configured (e.g. Groq), the OpenAI Realtime
|
|
104
|
+
// WebSocket endpoint is unavailable. Fall back to the REST
|
|
105
|
+
// /audio/transcriptions path via OpenAISTT, which buffers PCM and
|
|
106
|
+
// transcribes on commit.
|
|
107
|
+
if (dictationBaseURL) {
|
|
108
|
+
dictationSttService = new OpenAISTT({
|
|
91
109
|
apiKey: dictationApiKey,
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
110
|
+
baseURL: dictationBaseURL,
|
|
111
|
+
...(dictationModel ? { model: dictationModel } : {}),
|
|
112
|
+
...(dictationConfidenceThreshold !== undefined
|
|
113
|
+
? { confidenceThreshold: dictationConfidenceThreshold }
|
|
114
|
+
: {}),
|
|
115
|
+
}, logger);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
dictationSttService = {
|
|
119
|
+
id: "openai",
|
|
120
|
+
createSession: ({ logger: sessionLogger, language, prompt }) => new OpenAIRealtimeTranscriptionSession({
|
|
121
|
+
apiKey: dictationApiKey,
|
|
122
|
+
logger: sessionLogger,
|
|
123
|
+
transcriptionModel: openaiConfig?.realtimeTranscriptionModel ??
|
|
124
|
+
DEFAULT_OPENAI_REALTIME_TRANSCRIPTION_MODEL,
|
|
125
|
+
...(language ? { language } : {}),
|
|
126
|
+
...(prompt ? { prompt } : {}),
|
|
127
|
+
turnDetection: null,
|
|
128
|
+
}),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
100
131
|
}
|
|
101
132
|
}
|
|
102
133
|
else if (needsOpenAiStt || needsOpenAiTts || needsOpenAiDictation) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../../../src/server/speech/providers/openai/runtime.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,2CAA2C,EAC3C,wBAAwB,GAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kCAAkC,EAAE,MAAM,qCAAqC,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAqBrC,SAAS,wBAAwB,CAC/B,YAAoD;IAEpD,MAAM,YAAY,GAAG,YAAY,EAAE,MAAM,CAAC;IAC1C,OAAO;QACL,eAAe,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,IAAI,YAAY;QAC1D,eAAe,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,IAAI,YAAY;QAC1D,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../../../src/server/speech/providers/openai/runtime.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,2CAA2C,EAC3C,wBAAwB,GAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kCAAkC,EAAE,MAAM,qCAAqC,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAqBrC,SAAS,wBAAwB,CAC/B,YAAoD;IAEpD,MAAM,YAAY,GAAG,YAAY,EAAE,MAAM,CAAC;IAC1C,kEAAkE;IAClE,qEAAqE;IACrE,gEAAgE;IAChE,gEAAgE;IAChE,MAAM,eAAe,GAAG,YAAY,EAAE,SAAS,EAAE,OAAO;QACtD,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM;QACjC,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,IAAI,YAAY,CAAC,CAAC;IACtD,OAAO;QACL,eAAe,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,IAAI,YAAY;QAC1D,eAAe,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,IAAI,YAAY;QAC1D,qBAAqB,EAAE,eAAe;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,YAAoD;IAEpD,MAAM,WAAW,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IAC3D,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC;QACzC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC;QACzC,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oCAAoC,CAAC,MAIpD;IACC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IACnD,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IAEjE,MAAM,2BAA2B,GAAa,EAAE,CAAC;IACjD,IACE,SAAS,CAAC,QAAQ,CAAC,OAAO,KAAK,KAAK;QACpC,SAAS,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;QACxC,CAAC,iBAAiB,CAAC,eAAe,EAClC,CAAC;QACD,2BAA2B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC;IACD,IACE,SAAS,CAAC,QAAQ,CAAC,OAAO,KAAK,KAAK;QACpC,SAAS,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;QACxC,CAAC,iBAAiB,CAAC,eAAe,EAClC,CAAC;QACD,2BAA2B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC;IACD,IACE,SAAS,CAAC,YAAY,CAAC,OAAO,KAAK,KAAK;QACxC,SAAS,CAAC,YAAY,CAAC,QAAQ,KAAK,QAAQ;QAC5C,CAAC,iBAAiB,CAAC,qBAAqB,EACxC,CAAC;QACD,2BAA2B,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,2BAA2B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,KAAK,CACV;YACE,kBAAkB,EAAE;gBAClB,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,QAAQ;gBAC7C,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ;gBACrC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ;aACtC;YACD,2BAA2B;SAC5B,EACD,oFAAoF,CACrF,CAAC;QACF,MAAM,IAAI,KAAK,CACb,8DAA8D,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAK9C;IACC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC7D,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IAEjE,IAAI,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;IACrC,IAAI,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;IACrC,IAAI,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,CAAC;IACvD,MAAM,oBAAoB,GAAG,QAAQ,CAAC,oBAAoB,CAAC;IAE3D,MAAM,cAAc,GAClB,CAAC,UAAU,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,KAAK,KAAK,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAClG,MAAM,cAAc,GAClB,CAAC,UAAU,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,KAAK,KAAK,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAClG,MAAM,oBAAoB,GACxB,CAAC,mBAAmB;QACpB,SAAS,CAAC,YAAY,CAAC,OAAO,KAAK,KAAK;QACxC,SAAS,CAAC,YAAY,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAE/C,IACE,CAAC,cAAc,IAAI,cAAc,IAAI,oBAAoB,CAAC;QAC1D,CAAC,iBAAiB,CAAC,eAAe;YAChC,iBAAiB,CAAC,eAAe;YACjC,iBAAiB,CAAC,qBAAqB,CAAC,EAC1C,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAElD,IAAI,cAAc,IAAI,iBAAiB,CAAC,eAAe,EAAE,CAAC;YACxD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,EAAE,CAAC;YACrE,UAAU,GAAG,IAAI,SAAS,CACxB;gBACE,MAAM,EAAE,iBAAiB,CAAC,eAAe;gBACzC,GAAG,SAAS;aACb,EACD,MAAM,CACP,CAAC;QACJ,CAAC;QAED,IAAI,cAAc,IAAI,iBAAiB,CAAC,eAAe,EAAE,CAAC;YACxD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,EAAE,CAAC;YACrE,UAAU,GAAG,IAAI,SAAS,CACxB;gBACE,MAAM,EAAE,iBAAiB,CAAC,eAAe;gBACzC,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,wBAAwB;gBAC/B,cAAc,EAAE,KAAK;gBACrB,GAAG,SAAS;aACb,EACD,MAAM,CACP,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,iBAAiB,CAAC,qBAAqB,CAAC;QAChE,IAAI,oBAAoB,IAAI,eAAe,EAAE,CAAC;YAC5C,wEAAwE;YACxE,uEAAuE;YACvE,MAAM,gBAAgB,GAAG,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC;YAC1D,MAAM,cAAc,GAAG,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC;YACtD,kEAAkE;YAClE,gEAAgE;YAChE,wCAAwC;YACxC,MAAM,4BAA4B,GAAG,YAAY,EAAE,SAAS,EAAE,mBAAmB,CAAC;YAClF,uEAAuE;YACvE,2DAA2D;YAC3D,kEAAkE;YAClE,yBAAyB;YACzB,IAAI,gBAAgB,EAAE,CAAC;gBACrB,mBAAmB,GAAG,IAAI,SAAS,CACjC;oBACE,MAAM,EAAE,eAAe;oBACvB,OAAO,EAAE,gBAAgB;oBACzB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpD,GAAG,CAAC,4BAA4B,KAAK,SAAS;wBAC5C,CAAC,CAAC,EAAE,mBAAmB,EAAE,4BAA4B,EAAE;wBACvD,CAAC,CAAC,EAAE,CAAC;iBACR,EACD,MAAM,CACP,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,mBAAmB,GAAG;oBACpB,EAAE,EAAE,QAAQ;oBACZ,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAC7D,IAAI,kCAAkC,CAAC;wBACrC,MAAM,EAAE,eAAe;wBACvB,MAAM,EAAE,aAAa;wBACrB,kBAAkB,EAChB,YAAY,EAAE,0BAA0B;4BACxC,2CAA2C;wBAC7C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC7B,aAAa,EAAE,IAAI;qBACpB,CAAC;iBACL,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,cAAc,IAAI,cAAc,IAAI,oBAAoB,EAAE,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;IACpF,CAAC;IAED,OAAO;QACL,oBAAoB;QACpB,UAAU;QACV,UAAU;QACV,mBAAmB;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -3,6 +3,7 @@ import type { LogprobToken, SpeechToTextProvider, StreamingTranscriptionSession,
|
|
|
3
3
|
export type { LogprobToken, TranscriptionResult };
|
|
4
4
|
export interface STTConfig {
|
|
5
5
|
apiKey: string;
|
|
6
|
+
baseURL?: string;
|
|
6
7
|
model?: "whisper-1" | "gpt-4o-transcribe" | "gpt-4o-mini-transcribe" | (string & {});
|
|
7
8
|
confidenceThreshold?: number;
|
|
8
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stt.d.ts","sourceRoot":"","sources":["../../../../../../src/server/speech/providers/openai/stt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAO7B,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,6BAA6B,EAC7B,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAElD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,WAAW,GAAG,mBAAmB,GAAG,wBAAwB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACrF,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AA0BD,qBAAa,SAAU,YAAW,oBAAoB;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,SAAgB,EAAE,EAAG,QAAQ,CAAU;gBAE3B,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"stt.d.ts","sourceRoot":"","sources":["../../../../../../src/server/speech/providers/openai/stt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAO7B,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,6BAA6B,EAC7B,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAElD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,GAAG,mBAAmB,GAAG,wBAAwB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACrF,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AA0BD,qBAAa,SAAU,YAAW,oBAAoB;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,SAAgB,EAAE,EAAG,QAAQ,CAAU;gBAE3B,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM;IAapD,aAAa,CAAC,MAAM,EAAE;QAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,6BAA6B;YA6GnB,uBAAuB;CAmFtC"}
|
|
@@ -33,8 +33,9 @@ export class OpenAISTT {
|
|
|
33
33
|
this.logger = parentLogger.child({ module: "agent", provider: "openai", component: "stt" });
|
|
34
34
|
this.openaiClient = new OpenAI({
|
|
35
35
|
apiKey: sttConfig.apiKey,
|
|
36
|
+
...(sttConfig.baseURL ? { baseURL: sttConfig.baseURL } : {}),
|
|
36
37
|
});
|
|
37
|
-
this.logger.info({ model: sttConfig.model || "whisper-1" }, "STT (OpenAI Whisper) initialized");
|
|
38
|
+
this.logger.info({ model: sttConfig.model || "whisper-1", baseURL: sttConfig.baseURL ?? "default" }, "STT (OpenAI Whisper) initialized");
|
|
38
39
|
}
|
|
39
40
|
createSession(params) {
|
|
40
41
|
const emitter = new EventEmitter();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stt.js","sourceRoot":"","sources":["../../../../../../src/server/speech/providers/openai/stt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"stt.js","sourceRoot":"","sources":["../../../../../../src/server/speech/providers/openai/stt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-registry-model.d.ts","sourceRoot":"","sources":["../../../src/server/workspace-registry-model.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAExE,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,SAAS,CAAC;AACrD,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG,UAAU,GAAG,WAAW,CAAC;AACjF,MAAM,MAAM,0BAA0B,GAAG;IACvC,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;IAC7C,oBAAoB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,0BAA0B,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"workspace-registry-model.d.ts","sourceRoot":"","sources":["../../../src/server/workspace-registry-model.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAExE,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,SAAS,CAAC;AACrD,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG,UAAU,GAAG,WAAW,CAAC;AACjF,MAAM,MAAM,0BAA0B,GAAG;IACvC,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;IAC7C,oBAAoB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,0BAA0B,GAAG,MAAM,CAK3F;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,sBAAsB,EAAE,OAAO,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GAAG,MAAM,CAOT;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAQpE;AAQD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,0BAA0B,CAAC;CACtC,GAAG,MAAM,CAST;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,0BAA0B,CAAC;CACtC,GAAG,MAAM,CAKT;AAYD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,oBAAoB,CAK5F;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,sBAAsB,CAKhG;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAWtB;AAED,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA8DnC"}
|
|
@@ -8,54 +8,12 @@ export function normalizeWorkspaceId(cwd) {
|
|
|
8
8
|
return resolve(trimmed);
|
|
9
9
|
}
|
|
10
10
|
export function deriveWorkspaceId(cwd, checkout) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
function deriveRemoteProjectKey(remoteUrl) {
|
|
14
|
-
if (!remoteUrl) {
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
const trimmed = remoteUrl.trim();
|
|
18
|
-
if (!trimmed) {
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
let host = null;
|
|
22
|
-
let remotePath = null;
|
|
23
|
-
const scpLike = trimmed.match(/^[^@]+@([^:]+):(.+)$/);
|
|
24
|
-
if (scpLike) {
|
|
25
|
-
host = scpLike[1] ?? null;
|
|
26
|
-
remotePath = scpLike[2] ?? null;
|
|
27
|
-
}
|
|
28
|
-
else if (trimmed.includes("://")) {
|
|
29
|
-
try {
|
|
30
|
-
const parsed = new URL(trimmed);
|
|
31
|
-
host = parsed.hostname || null;
|
|
32
|
-
remotePath = parsed.pathname ? parsed.pathname.replace(/^\/+/, "") : null;
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
if (!host || !remotePath) {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
let cleanedPath = remotePath.trim().replace(/^\/+/, "").replace(/\/+$/, "");
|
|
42
|
-
if (cleanedPath.endsWith(".git")) {
|
|
43
|
-
cleanedPath = cleanedPath.slice(0, -4);
|
|
11
|
+
if (checkout.isSeaworkOwnedWorktree && checkout.worktreeRoot) {
|
|
12
|
+
return checkout.worktreeRoot;
|
|
44
13
|
}
|
|
45
|
-
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
const cleanedHost = host.toLowerCase();
|
|
49
|
-
if (cleanedHost === "github.com") {
|
|
50
|
-
return `remote:github.com/${cleanedPath}`;
|
|
51
|
-
}
|
|
52
|
-
return `remote:${cleanedHost}/${cleanedPath}`;
|
|
14
|
+
return normalizeWorkspaceId(cwd);
|
|
53
15
|
}
|
|
54
16
|
export function deriveProjectGroupingKey(options) {
|
|
55
|
-
const remoteKey = deriveRemoteProjectKey(options.remoteUrl);
|
|
56
|
-
if (remoteKey) {
|
|
57
|
-
return remoteKey;
|
|
58
|
-
}
|
|
59
17
|
const mainRepoRoot = options.mainRepoRoot?.trim();
|
|
60
18
|
if (options.isSeaworkOwnedWorktree && mainRepoRoot) {
|
|
61
19
|
return mainRepoRoot;
|
|
@@ -76,6 +34,9 @@ function deriveWorkspaceDirectoryName(cwd) {
|
|
|
76
34
|
return segments[segments.length - 1] ?? cwd;
|
|
77
35
|
}
|
|
78
36
|
export function deriveWorkspaceDisplayName(input) {
|
|
37
|
+
if (isGitSubdirectory(input.checkout)) {
|
|
38
|
+
return deriveWorkspaceDirectoryName(input.cwd);
|
|
39
|
+
}
|
|
79
40
|
const branch = input.checkout.currentBranch?.trim() ?? null;
|
|
80
41
|
if (branch && branch.toUpperCase() !== "HEAD") {
|
|
81
42
|
return branch;
|
|
@@ -88,11 +49,23 @@ export function deriveProjectRootPath(input) {
|
|
|
88
49
|
}
|
|
89
50
|
return input.cwd;
|
|
90
51
|
}
|
|
52
|
+
function isGitSubdirectory(checkout) {
|
|
53
|
+
if (!checkout.isGit || checkout.isSeaworkOwnedWorktree) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
if (!checkout.worktreeRoot) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return normalizeWorkspaceId(checkout.cwd) !== normalizeWorkspaceId(checkout.worktreeRoot);
|
|
60
|
+
}
|
|
91
61
|
export function deriveProjectKind(checkout) {
|
|
92
|
-
|
|
62
|
+
if (!checkout.isGit || isGitSubdirectory(checkout)) {
|
|
63
|
+
return "non_git";
|
|
64
|
+
}
|
|
65
|
+
return "git";
|
|
93
66
|
}
|
|
94
67
|
export function deriveWorkspaceKind(checkout) {
|
|
95
|
-
if (!checkout.isGit) {
|
|
68
|
+
if (!checkout.isGit || isGitSubdirectory(checkout)) {
|
|
96
69
|
return "directory";
|
|
97
70
|
}
|
|
98
71
|
return checkout.isSeaworkOwnedWorktree ? "worktree" : "local_checkout";
|
|
@@ -153,7 +126,7 @@ export async function buildProjectPlacementForCwd(input) {
|
|
|
153
126
|
mainRepoRoot: null,
|
|
154
127
|
}));
|
|
155
128
|
const projectKey = deriveProjectGroupingKey({
|
|
156
|
-
cwd:
|
|
129
|
+
cwd: normalizedCwd,
|
|
157
130
|
remoteUrl: checkout.remoteUrl,
|
|
158
131
|
isSeaworkOwnedWorktree: checkout.isSeaworkOwnedWorktree,
|
|
159
132
|
mainRepoRoot: checkout.mainRepoRoot,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-registry-model.js","sourceRoot":"","sources":["../../../src/server/workspace-registry-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAWjE,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,QAAoC;IACjF,
|
|
1
|
+
{"version":3,"file":"workspace-registry-model.js","sourceRoot":"","sources":["../../../src/server/workspace-registry-model.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seawork/server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.16",
|
|
4
4
|
"description": "Seawork backend server",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -74,8 +74,8 @@
|
|
|
74
74
|
"@isaacs/ttlcache": "^2.1.4",
|
|
75
75
|
"@modelcontextprotocol/sdk": "^1.20.1",
|
|
76
76
|
"@sctg/sentencepiece-js": "^1.1.0",
|
|
77
|
-
"@seawork/highlight": "1.0.
|
|
78
|
-
"@seawork/relay": "1.0.
|
|
77
|
+
"@seawork/highlight": "1.0.16",
|
|
78
|
+
"@seawork/relay": "1.0.16",
|
|
79
79
|
"@xterm/headless": "^6.0.0",
|
|
80
80
|
"ai": "5.0.78",
|
|
81
81
|
"ajv": "^8.17.1",
|