fix typescript errors and update dependencies

This commit is contained in:
itsrubberduck
2026-02-17 18:13:04 +01:00
parent d34fba5cba
commit 8f45c3397d
25 changed files with 3377 additions and 2583 deletions

View File

@@ -203,7 +203,8 @@ export function sanitizeAutoTrigger(raw: any): DecisionNodeAutoTrigger | undefin
} else if (normalizedType === 'variable') {
trigger.variable = asTrimmedString(payload.variable) ?? ''
trigger.operator = asComparisonOperatorValue(payload.operator)
trigger.value = asVariableValue(payload.value, '')
const variableValue = asVariableValue(payload.value, '')
trigger.value = typeof variableValue === 'boolean' ? String(variableValue) : variableValue
}
trigger.once = asBoolean(payload.once, true)

View File

@@ -42,7 +42,7 @@ const ACK = createState({
name: 'Acknowledge',
summary: 'Acknowledge pilot readback',
triggers: [
{ type: 'regex', pattern: 'roger', patternFlags: 'i' },
{ id: 'ack-regex', type: 'regex', pattern: 'roger', patternFlags: 'i' },
],
})
@@ -50,7 +50,7 @@ const TAXI = createState({
name: 'Taxi clearance',
summary: 'Pilot requesting taxi clearance',
triggers: [
{ type: 'regex', pattern: 'request', patternFlags: 'i' },
{ id: 'taxi-regex', type: 'regex', pattern: 'request', patternFlags: 'i' },
],
})
@@ -58,7 +58,7 @@ const HOLD = createState({
name: 'Hold position',
summary: 'Pilot requesting hold position',
triggers: [
{ type: 'regex', pattern: 'request', patternFlags: 'i' },
{ id: 'hold-regex', type: 'regex', pattern: 'request', patternFlags: 'i' },
],
})
@@ -74,7 +74,16 @@ const runtimeSystem: RuntimeDecisionSystem = {
flows: {
main: {
slug: 'main',
schema_version: '1.0',
name: 'Main Flow',
start_state: 'START',
end_states: [],
variables: {},
flags: {},
policies: {},
hooks: {},
roles: ['pilot', 'atc', 'system'],
phases: ['ground'],
entry_mode: 'main',
states: {
START,
@@ -126,7 +135,18 @@ describe('routeDecision', () => {
],
}
const result = await routeDecision(input)
const previousApiKey = process.env.OPENAI_API_KEY
process.env.OPENAI_API_KEY = ''
let result: Awaited<ReturnType<typeof routeDecision>>
try {
result = await routeDecision(input)
} finally {
if (previousApiKey === undefined) {
delete process.env.OPENAI_API_KEY
} else {
process.env.OPENAI_API_KEY = previousApiKey
}
}
assert.equal(result.trace?.calls.length, 1)
assert.ok(result.trace?.calls[0]?.error)
@@ -135,4 +155,3 @@ describe('routeDecision', () => {
assert.equal(result.pilot_intent ?? null, null)
})
})

View File

@@ -17,15 +17,6 @@ import {getServerRuntimeConfig} from './runtimeConfig'
let openaiClient: OpenAI | null = null
let cachedModel: string | null = null
import https from 'node:https'
const httpsAgent = new https.Agent({
keepAlive: true,
maxSockets: 50, // bei Bedarf anpassen
maxFreeSockets: 10,
timeout: 0 // keine Socket-Idle-Timeouts durch Node
})
function ensureOpenAI(): OpenAI {
if (!openaiClient) {
const {openaiKey, openaiProject, openaiBaseUrl, llmModel} = getServerRuntimeConfig()
@@ -34,7 +25,6 @@ function ensureOpenAI(): OpenAI {
}
const clientOptions: ConstructorParameters<typeof OpenAI>[0] = {apiKey: openaiKey,
defaultHeaders: { 'Connection': 'keep-alive' },
defaultHttpAgent: httpsAgent
}
if (openaiProject) {
clientOptions.project = openaiProject
@@ -1055,7 +1045,7 @@ export async function routeDecision(input: LLMDecisionInput): Promise<LLMDecisio
JSON.stringify(optimizedInput, null, 2),
].join('\n')
const callEntry = {
const callEntry: LLMDecisionTrace['calls'][number] = {
stage: 'decision' as const,
request: {
systemPrompt,

View File

@@ -1,7 +1,7 @@
import { execFile } from "node:child_process";
export async function applyRadioEffect(input: string, output: string) {
const filter="[0:a]highpass=f=300,lowpass=f=3400,compand=attacks=0.02:decays=0.25:points=-80/-900|-70/-20|0/-10|20/-8:gain=6,volume=1.2[a];anoisesrc=color=white:amplitude=0.02[ns];[a][ns]amix=inputs=2:weights=1 0.25:duration=shortest,volume=1.0,aecho=0.6:0.7:8:0.08,acompressor=threshold=0.6:ratio=6:attack=20:release=200";
await new Promise((res,rej)=>
await new Promise<void>((res,rej)=>
execFile("ffmpeg",["-y","-i",input,"-filter_complex",filter,"-ar","16000",output],
(err,_,stderr)=>err?rej(new Error(stderr)):res())
);

View File

@@ -1,4 +1,5 @@
import { UpdateSubscriber, UpdateSubscriberDocument } from '../models/UpdateSubscriber'
import { UpdateSubscriber } from '../models/UpdateSubscriber'
import type { UpdateSubscriberDocument } from '../models/UpdateSubscriber'
interface RegisterSubscriberOptions {
email: string