@madh-io/alfred-ai 0.19.0-jarvis.1198 → 0.19.0-jarvis.1199

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 (63) hide show
  1. package/bundle/index.js +2 -2
  2. package/bundle/web-ui/404/index.html +1 -1
  3. package/bundle/web-ui/404.html +1 -1
  4. package/bundle/web-ui/_next/static/5UXDgFC68k3vIGntCtU7z/_buildManifest.js +1 -0
  5. package/bundle/web-ui/_next/static/5UXDgFC68k3vIGntCtU7z/_ssgManifest.js +1 -0
  6. package/bundle/web-ui/_next/static/chunks/app/lebenszeichen/page-016f4bd47a7faec4.js +1 -0
  7. package/bundle/web-ui/background-tasks/index.html +1 -1
  8. package/bundle/web-ui/background-tasks/index.txt +1 -1
  9. package/bundle/web-ui/chat/index.html +1 -1
  10. package/bundle/web-ui/chat/index.txt +1 -1
  11. package/bundle/web-ui/cli-usage/index.html +1 -1
  12. package/bundle/web-ui/cli-usage/index.txt +1 -1
  13. package/bundle/web-ui/cluster/index.html +1 -1
  14. package/bundle/web-ui/cluster/index.txt +1 -1
  15. package/bundle/web-ui/cmdb/index.html +1 -1
  16. package/bundle/web-ui/cmdb/index.txt +1 -1
  17. package/bundle/web-ui/dashboard/index.html +1 -1
  18. package/bundle/web-ui/dashboard/index.txt +1 -1
  19. package/bundle/web-ui/docs/index.html +1 -1
  20. package/bundle/web-ui/docs/index.txt +1 -1
  21. package/bundle/web-ui/goals/index.html +1 -1
  22. package/bundle/web-ui/goals/index.txt +1 -1
  23. package/bundle/web-ui/history/index.html +1 -1
  24. package/bundle/web-ui/history/index.txt +1 -1
  25. package/bundle/web-ui/index.html +1 -1
  26. package/bundle/web-ui/index.txt +1 -1
  27. package/bundle/web-ui/insights/index.html +1 -1
  28. package/bundle/web-ui/insights/index.txt +1 -1
  29. package/bundle/web-ui/interactive/index.html +1 -1
  30. package/bundle/web-ui/interactive/index.txt +1 -1
  31. package/bundle/web-ui/interests/index.html +1 -1
  32. package/bundle/web-ui/interests/index.txt +1 -1
  33. package/bundle/web-ui/itsm/index.html +1 -1
  34. package/bundle/web-ui/itsm/index.txt +1 -1
  35. package/bundle/web-ui/knowledge/index.html +1 -1
  36. package/bundle/web-ui/knowledge/index.txt +1 -1
  37. package/bundle/web-ui/lebenszeichen/index.html +1 -1
  38. package/bundle/web-ui/lebenszeichen/index.txt +2 -2
  39. package/bundle/web-ui/logs/index.html +1 -1
  40. package/bundle/web-ui/logs/index.txt +1 -1
  41. package/bundle/web-ui/memories/index.html +1 -1
  42. package/bundle/web-ui/memories/index.txt +1 -1
  43. package/bundle/web-ui/notes/index.html +1 -1
  44. package/bundle/web-ui/notes/index.txt +1 -1
  45. package/bundle/web-ui/project-agents/index.html +1 -1
  46. package/bundle/web-ui/project-agents/index.txt +1 -1
  47. package/bundle/web-ui/projects/index.html +1 -1
  48. package/bundle/web-ui/projects/index.txt +1 -1
  49. package/bundle/web-ui/runbooks/index.html +1 -1
  50. package/bundle/web-ui/runbooks/index.txt +1 -1
  51. package/bundle/web-ui/sandboxes/index.html +1 -1
  52. package/bundle/web-ui/sandboxes/index.txt +1 -1
  53. package/bundle/web-ui/services/index.html +1 -1
  54. package/bundle/web-ui/services/index.txt +1 -1
  55. package/bundle/web-ui/settings/index.html +1 -1
  56. package/bundle/web-ui/settings/index.txt +1 -1
  57. package/bundle/web-ui/social/index.html +1 -1
  58. package/bundle/web-ui/social/index.txt +1 -1
  59. package/bundle/web-ui/todos/index.html +1 -1
  60. package/bundle/web-ui/todos/index.txt +1 -1
  61. package/bundle/web-ui/vorgaenge/index.html +1 -1
  62. package/bundle/web-ui/vorgaenge/index.txt +1 -1
  63. package/package.json +1 -1
package/bundle/index.js CHANGED
@@ -7816,7 +7816,7 @@ Base commit: \`${e.baseCommitSha.slice(0,8)}\``;return{ok:!0,prUrl:(await a.crea
7816
7816
  `)+d.join(`
7817
7817
  `)+`
7818
7818
  `;r(o,u,"utf8")}}catch(i){this.deps.logger.debug({err:i},"v726 .gitignore update skipped")}if(t.kind!=="empty")try{let{copyFileSync:i,statSync:r}=await import("node:fs");if(t.kind==="repo_path"){if(t.path.includes(".."))throw new Error("repo_path darf kein .. enthalten");let a=Xt.resolve(s,t.path);if(!a.startsWith(Xt.resolve(s)))throw new Error("repo_path verl\xE4sst projectCwd");let o=Xt.join(n,Xt.basename(a));i(a,o),this.deps.logger.info({src:a,target:o,size:r(o).size},"v726 db-seed copied from repo_path")}else if(t.kind==="upload"){if(!this.deps.dbSeedRepo||!this.deps.uploadSeedsPath)throw new Error("Upload-Seed angefordert aber dbSeedRepo/uploadSeedsPath nicht konfiguriert");let a=await this.deps.dbSeedRepo.getById(t.seedId);if(!a)throw new Error(`Seed ${t.seedId} nicht gefunden`);if(a.kind!=="upload")throw new Error(`Seed ${t.seedId} ist kind=${a.kind}, nicht upload`);let o=Xt.resolve(this.deps.uploadSeedsPath,a.storageRef);if(!o.startsWith(Xt.resolve(this.deps.uploadSeedsPath)))throw new Error("Upload-Seed verl\xE4sst uploadSeedsPath");let c=Xt.join(n,a.name);i(o,c),this.deps.logger.info({src:o,target:c,size:r(c).size},"v726 db-seed copied from upload")}}catch(i){this.deps.logger.warn({err:i},"v726 db-seed copy failed (sandbox startet mit leerem .alfred-data)")}}};m(Ds,"runGit");m(RW,"runGitBoth");NW=[{name:"AWS Access Key",re:/\bAKIA[0-9A-Z]{16}\b/g},{name:"GitHub Token",re:/\bghp_[A-Za-z0-9]{36}\b/g},{name:"GitHub PAT",re:/\bghs_[A-Za-z0-9]{36}\b/g},{name:"GitLab Token",re:/\bglpat-[A-Za-z0-9_-]{20}\b/g},{name:"OpenAI Key",re:/\bsk-[A-Za-z0-9]{48,}\b/g},{name:"Anthropic Key",re:/\bsk-ant-[A-Za-z0-9-_]{24,}\b/g},{name:"Stripe Secret",re:/\bsk_live_[A-Za-z0-9]{24,}\b/g},{name:"Slack Token",re:/\bxox[abp]-[A-Za-z0-9-]{10,}\b/g},{name:"Private Key",re:/-----BEGIN (?:RSA |EC |DSA )?PRIVATE KEY-----/g},{name:"JWT Token",re:/\beyJ[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}\b/g}];m($W,"stripAnsi");m(CW,"summarizeTestFailure");m(LW,"scanForSecrets");m(OW,"parseRepoFromUrl");m(DW,"resolveDockerfilesDir")});var JL={};Le(JL,{IdentityResolver:()=>IE});var IE,YL=A(()=>{"use strict";Zi();IE=class{static{m(this,"IdentityResolver")}users;projects;logger;constructor(e,t,s){this.users=e,this.projects=t,this.logger=s}async resolveOwnerFromConfig(e,t){if(!e||typeof e!="string")throw new Error("IdentityResolver.resolveOwnerFromConfig: empty/invalid envValue");if(Yr(e)){try{await this.users.findById(e)||this.logger.warn({envValue:e.slice(0,8)},"v804 owner UUID not found in users-table \u2014 accepting anyway (may belong to alfred_users table)")}catch{}return mg(e)}let s=t??this.guessPlatformFromFormat(e);if(!s)throw new Error(`IdentityResolver.resolveOwnerFromConfig: "${e.slice(0,20)}" ist kein UUID-Format und keine platform-hint angegeben. Setze ALFRED_OWNER_PLATFORM=telegram (oder matrix/discord/etc.) oder ALFRED_OWNER_USER_ID direkt auf den DB-UUID.`);let n=await this.users.findOrCreate(s,e),i=fc(n.id);if(!i)throw new Error(`IdentityResolver: findOrCreate returned non-UUID id "${n.id}"`);return this.logger.info({platform:s,platformUserId:e.slice(0,12)+"\u2026",resolvedUUID:i.slice(0,8)+"\u2026"},"v804 owner platform-id resolved to UUID"),i}async resolveMasterId(e){try{let t=await this.users.getMasterUserId(e);return fc(t)??e}catch(t){return this.logger.debug({err:t,userId:e.slice(0,8)},"v804 getMasterUserId failed, returning original"),e}}async findProjectOwner(e){if(!this.projects)return null;try{let t=await this.projects.getByIdAnyOwner(e);return t?fc(t.userId)??null:null}catch(t){return this.logger.debug({err:t,projectId:e},"v804 findProjectOwner failed"),null}}guessPlatformFromFormat(e){if(/^\d{6,15}$/.test(e))return"telegram";if(/^@[^:]+:[\w.-]+$/.test(e))return"matrix"}}});var ZL={};Le(ZL,{UserIdAuditScanner:()=>RE});import{randomUUID as xW}from"node:crypto";var MW,RE,QL=A(()=>{"use strict";Zi();MW=[{table:"memories",pk:"id",uidColumn:"user_id"},{table:"documents",pk:"id",uidColumn:"user_id"},{table:"document_chunks",pk:"id",uidColumn:"user_id"},{table:"todos",pk:"id",uidColumn:"user_id"},{table:"notes",pk:"id",uidColumn:"user_id"},{table:"reminders",pk:"id",uidColumn:"user_id"},{table:"conversations",pk:"id",uidColumn:"user_id"},{table:"projects",pk:"id",uidColumn:"user_id"},{table:"background_tasks",pk:"id",uidColumn:"user_id"},{table:"agent_sessions",pk:"id",uidColumn:"user_id"},{table:"sandboxes",pk:"id",uidColumn:"user_id"},{table:"project_automations",pk:"id",uidColumn:"user_id"},{table:"goals",pk:"id",uidColumn:"user_id"},{table:"runbooks",pk:"id",uidColumn:"user_id"},{table:"insights",pk:"id",uidColumn:"user_id"}],RE=class{static{m(this,"UserIdAuditScanner")}adapter;logger;targets;constructor(e,t,s=MW){this.adapter=e,this.logger=t,this.targets=s}async scan(){let e={scanned:0,flaggedNew:0,alreadyFlagged:0,skippedTables:[]},t=new Date().toISOString();for(let s of this.targets)try{let n=await this.adapter.query(`SELECT ${s.pk} AS row_id, ${s.uidColumn} AS uid FROM ${s.table} WHERE ${s.uidColumn} IS NOT NULL`);for(let i of n){e.scanned+=1;let r=gg(i.uid);if(r==="uuid")continue;if(await this.adapter.queryOne("SELECT id FROM user_id_format_audit WHERE table_name = ? AND column_name = ? AND row_id = ?",[s.table,s.uidColumn,String(i.row_id)])){e.alreadyFlagged+=1;continue}await this.adapter.execute(`INSERT INTO user_id_format_audit (id, table_name, column_name, row_id, user_id_value, format_class, detected_at)
7819
- VALUES (?, ?, ?, ?, ?, ?, ?)`,[xW(),s.table,s.uidColumn,String(i.row_id),i.uid,r,t]),e.flaggedNew+=1}}catch(n){let i=n.message??"";if(/no such table|does not exist|relation .* does not exist/i.test(i)){e.skippedTables.push(s.table);continue}this.logger.warn({err:n,table:s.table},"v808 audit-scan failed for table (continuing)")}return e.flaggedNew>0?this.logger.warn({scanned:e.scanned,flaggedNew:e.flaggedNew,alreadyFlagged:e.alreadyFlagged,skipped:e.skippedTables.length},"v808 UserIdAudit: non-UUID user_id rows detected \u2014 see user_id_format_audit table"):this.logger.debug({scanned:e.scanned,alreadyFlagged:e.alreadyFlagged,skipped:e.skippedTables.length},"v808 UserIdAudit: scan complete, all user_id rows have UUID format"),e}}});var lm={};Le(lm,{default:()=>UW});var UW,dm=A(()=>{UW={name:"@madh-io/alfred-ai",version:"0.19.0-jarvis.1198",description:"Alfred \u2014 Personal AI Assistant across Telegram, Discord, WhatsApp, Matrix & Signal",type:"module",bin:{alfred:"bundle/index.js"},files:["bundle"],scripts:{build:"tsc",bundle:"node ../../scripts/bundle.mjs",prepublishOnly:"npm run build && npm run bundle",clean:"rm -rf dist bundle *.tsbuildinfo"},keywords:["ai","assistant","chatbot","telegram","discord","whatsapp","matrix","signal","claude","openai","ollama"],license:"MIT",repository:{type:"git",url:"https://github.com/madh99/alfred-ai.git"},homepage:"https://github.com/madh99/alfred-ai#readme",bugs:{url:"https://github.com/madh99/alfred-ai/issues"},dependencies:{"@anthropic-ai/sdk":"^0.105.0","@google/genai":"^1.45.0","@modelcontextprotocol/sdk":"^1.12.1","better-sqlite3":"^11.8.0",botbuilder:"^4.23.0",ccxt:"^4.4.0","discord.js":"^14.18.0",docx:"^9.0.0",dotenv:"^16.4.0",exceljs:"^4.4.0",grammy:"^1.35.0",imapflow:"^1.2.10","js-yaml":"^4.1.0",mammoth:"^1.8.0",mqtt:"^5.0.0",nodemailer:"^8.0.1",openai:"^6.44.0","pdf-parse":"^1.1.1",pdfkit:"^0.16.0",pino:"^9.6.0","pino-pretty":"^13.0.0",puppeteer:"^24.0.0","puppeteer-core":"^24.0.0","rss-parser":"^3.13.0",sharp:"^0.34.0",sonos:"^1.14.0",undici:"^7.10.0","youtube-transcript":"^1.3.0",zod:"^3.24.0"},optionalDependencies:{"@aws-sdk/client-s3":"^3.700.0","@influxdata/influxdb-client":"^1.35.0","@whiskeysockets/baileys":"6.7.21",googleapis:"^144.0.0","hafas-client":"^6.3.0",ioredis:"^5.4.0","matrix-bot-sdk":"^0.8.0",mongodb:"^6.12.0",mssql:"^11.0.0",mysql2:"^3.12.0",pg:"^8.13.0",tsdav:"^2.1.0"},devDependencies:{"@alfred/config":"workspace:*","@alfred/core":"workspace:*","@alfred/logger":"workspace:*","@alfred/mcp-server":"workspace:*","@alfred/security":"workspace:*","@alfred/storage":"workspace:*","@alfred/types":"workspace:*","@types/js-yaml":"^4.0.9"},publishConfig:{access:"public"},engines:{node:">=20"}}});var eO={};Le(eO,{collectNodeMetrics:()=>um});import Vo from"node:os";import{statfs as FW}from"node:fs/promises";async function um(l){let e=[],t=new Set;for(let s of l)if(s)try{let n=await FW(s),i=Number(n.blocks)*Number(n.bsize),r=Number(n.bavail)*Number(n.bsize);if(i<=0)continue;let a=`${i}:${Number(n.bfree)}:${Number(n.type)}`;if(t.has(a))continue;t.add(a),e.push({path:s,totalGb:NE(i/1024**3),freeGb:NE(r/1024**3),usedPct:Math.min(100,Math.max(0,Math.round((1-r/i)*100)))})}catch{}return{cpuLoad1m:NE(Vo.loadavg()[0]??0),cpuCores:Vo.cpus().length,memTotalMb:Math.round(Vo.totalmem()/1024**2),memFreeMb:Math.round(Vo.freemem()/1024**2),rssMb:Math.round(process.memoryUsage().rss/1024**2),nodeJs:process.version,platform:Vo.platform(),osRelease:Vo.release(),disks:e}}function NE(l){return Math.round(l*10)/10}var hm=A(()=>{"use strict";m(um,"collectNodeMetrics");m(NE,"round1")});var sO={};Le(sO,{ClusterManager:()=>Od});import tO from"node:os";var Od,$E=A(()=>{"use strict";hm();Od=class{static{m(this,"ClusterManager")}config;logger;redis;heartbeatTimer;heartbeatMs;failoverMs;constructor(e,t){this.config=e,this.logger=t,this.heartbeatMs=e.heartbeatIntervalMs??1e4,this.failoverMs=e.failoverAfterMs??3e4}async connect(){try{let e;try{e=(await Function('return import("ioredis")')()).default}catch{throw new Error('Cluster mode requires the "ioredis" package. Install it: npm install ioredis')}this.redis=new e(this.config.redisUrl),this.logger.info({nodeId:this.config.nodeId,role:this.config.role},"Cluster manager connected to Redis")}catch(e){this.logger.error({err:e},"Failed to connect to Redis \u2014 cluster features disabled");return}this.heartbeatTimer=setInterval(()=>this.sendHeartbeat(),this.heartbeatMs),await this.sendHeartbeat()}async disconnect(){this.heartbeatTimer&&clearInterval(this.heartbeatTimer),await this.redis?.quit()}nodeInfo;setNodeInfo(e){this.nodeInfo=e}async collectMetricsSafe(){try{return JSON.stringify(await um(this.nodeInfo?.diskPaths??["/"]))}catch{return"{}"}}async sendHeartbeat(){try{let e=Math.floor(process.uptime()),t=JSON.stringify({id:this.config.nodeId,role:this.config.role,timestamp:new Date().toISOString(),uptime:e,host:tO.hostname(),version:this.nodeInfo?.version??"",adapters:this.nodeInfo?.adapters?.()??[]});await this.redis.set(`alfred:cluster:heartbeat:${this.config.nodeId}`,t,"EX",Math.ceil(this.failoverMs/1e3))}catch(e){this.logger.warn({err:e},"Heartbeat send failed")}}async getNodes(){if(!this.redis)return[];try{let e=await this.redis.keys("alfred:cluster:heartbeat:*"),t=[];for(let s of e){let n=await this.redis.get(s);if(n)try{let i=JSON.parse(n);t.push({...i,healthy:!0})}catch{}}return t}catch{return[]}}async acquireLock(e,t=3e5){if(!this.redis)return!0;try{return await this.redis.set(`alfred:lock:${e}`,this.config.nodeId,"NX","PX",t)==="OK"}catch{return!0}}async releaseLock(e){if(this.redis)try{await this.redis.get(`alfred:lock:${e}`)===this.config.nodeId&&await this.redis.del(`alfred:lock:${e}`)}catch{}}async publish(e,t){if(this.redis)try{await this.redis.publish(`alfred:${e}`,JSON.stringify({...t,nodeId:this.config.nodeId}))}catch(s){this.logger.warn({err:s,channel:e},"Cluster publish failed")}}async subscribe(e,t){if(this.redis)try{let s=this.redis.duplicate();await s.subscribe(`alfred:${e}`),s.on("message",(n,i)=>{try{let r=JSON.parse(i);r.nodeId!==this.config.nodeId&&t(r)}catch{}})}catch(s){this.logger.warn({err:s,channel:e},"Cluster subscribe failed")}}async routeMessage(e,t,s){await this.publish("messages",{type:"send_message",targetPlatform:e,chatId:t,text:s})}failoverCheckTimer;onFailoverCallback;startFailoverMonitoring(e){this.config.role==="secondary"&&(this.onFailoverCallback=e,this.failoverCheckTimer=setInterval(async()=>{try{let t=await this.getNodes(),s=new Set(t.map(n=>n.id));for(let n of this.config.nodes??[])n.id!==this.config.nodeId&&(s.has(n.id)||(this.logger.warn({deadNodeId:n.id},"Node heartbeat missing \u2014 failover triggered"),this.onFailoverCallback?.(n.id)))}catch(t){this.logger.debug({err:t},"Failover check error")}},this.failoverMs))}stopFailoverMonitoring(){this.failoverCheckTimer&&clearInterval(this.failoverCheckTimer)}async announceTakeover(e,t){await this.publish("events",{type:"failover",deadNodeId:e,takenOverBy:this.config.nodeId,adapters:t}),this.logger.info({deadNodeId:e,adapters:t},"Failover: adapters taken over")}async syncConfig(e,t){await this.publish("config-sync",{type:e,...t})}async onConfigSync(e){await this.subscribe("config-sync",t=>{let{type:s,...n}=t;e(s,n)})}get nodeId(){return this.config.nodeId}get role(){return this.config.role??"node"}get isConnected(){return!!this.redis}pgAdapter;pgHeartbeatTimer;startPgHeartbeat(e){this.pgAdapter=e,this.pgHeartbeatTimer=setInterval(()=>this.sendPgHeartbeat(),this.heartbeatMs),this.sendPgHeartbeat()}async sendPgHeartbeat(){if(this.pgAdapter)try{let e=new Date().toISOString(),t=Math.floor(process.uptime()),s=new Date(Date.now()-t*1e3).toISOString(),n=await this.collectMetricsSafe();await this.pgAdapter.execute(`INSERT INTO node_heartbeats (node_id, host, last_seen_at, started_at, uptime_s, adapters, version, metrics)
7819
+ VALUES (?, ?, ?, ?, ?, ?, ?)`,[xW(),s.table,s.uidColumn,String(i.row_id),i.uid,r,t]),e.flaggedNew+=1}}catch(n){let i=n.message??"";if(/no such table|does not exist|relation .* does not exist/i.test(i)){e.skippedTables.push(s.table);continue}this.logger.warn({err:n,table:s.table},"v808 audit-scan failed for table (continuing)")}return e.flaggedNew>0?this.logger.warn({scanned:e.scanned,flaggedNew:e.flaggedNew,alreadyFlagged:e.alreadyFlagged,skipped:e.skippedTables.length},"v808 UserIdAudit: non-UUID user_id rows detected \u2014 see user_id_format_audit table"):this.logger.debug({scanned:e.scanned,alreadyFlagged:e.alreadyFlagged,skipped:e.skippedTables.length},"v808 UserIdAudit: scan complete, all user_id rows have UUID format"),e}}});var lm={};Le(lm,{default:()=>UW});var UW,dm=A(()=>{UW={name:"@madh-io/alfred-ai",version:"0.19.0-jarvis.1199",description:"Alfred \u2014 Personal AI Assistant across Telegram, Discord, WhatsApp, Matrix & Signal",type:"module",bin:{alfred:"bundle/index.js"},files:["bundle"],scripts:{build:"tsc",bundle:"node ../../scripts/bundle.mjs",prepublishOnly:"npm run build && npm run bundle",clean:"rm -rf dist bundle *.tsbuildinfo"},keywords:["ai","assistant","chatbot","telegram","discord","whatsapp","matrix","signal","claude","openai","ollama"],license:"MIT",repository:{type:"git",url:"https://github.com/madh99/alfred-ai.git"},homepage:"https://github.com/madh99/alfred-ai#readme",bugs:{url:"https://github.com/madh99/alfred-ai/issues"},dependencies:{"@anthropic-ai/sdk":"^0.105.0","@google/genai":"^1.45.0","@modelcontextprotocol/sdk":"^1.12.1","better-sqlite3":"^11.8.0",botbuilder:"^4.23.0",ccxt:"^4.4.0","discord.js":"^14.18.0",docx:"^9.0.0",dotenv:"^16.4.0",exceljs:"^4.4.0",grammy:"^1.35.0",imapflow:"^1.2.10","js-yaml":"^4.1.0",mammoth:"^1.8.0",mqtt:"^5.0.0",nodemailer:"^8.0.1",openai:"^6.44.0","pdf-parse":"^1.1.1",pdfkit:"^0.16.0",pino:"^9.6.0","pino-pretty":"^13.0.0",puppeteer:"^24.0.0","puppeteer-core":"^24.0.0","rss-parser":"^3.13.0",sharp:"^0.34.0",sonos:"^1.14.0",undici:"^7.10.0","youtube-transcript":"^1.3.0",zod:"^3.24.0"},optionalDependencies:{"@aws-sdk/client-s3":"^3.700.0","@influxdata/influxdb-client":"^1.35.0","@whiskeysockets/baileys":"6.7.21",googleapis:"^144.0.0","hafas-client":"^6.3.0",ioredis:"^5.4.0","matrix-bot-sdk":"^0.8.0",mongodb:"^6.12.0",mssql:"^11.0.0",mysql2:"^3.12.0",pg:"^8.13.0",tsdav:"^2.1.0"},devDependencies:{"@alfred/config":"workspace:*","@alfred/core":"workspace:*","@alfred/logger":"workspace:*","@alfred/mcp-server":"workspace:*","@alfred/security":"workspace:*","@alfred/storage":"workspace:*","@alfred/types":"workspace:*","@types/js-yaml":"^4.0.9"},publishConfig:{access:"public"},engines:{node:">=20"}}});var eO={};Le(eO,{collectNodeMetrics:()=>um});import Vo from"node:os";import{statfs as FW}from"node:fs/promises";async function um(l){let e=[],t=new Set;for(let s of l)if(s)try{let n=await FW(s),i=Number(n.blocks)*Number(n.bsize),r=Number(n.bavail)*Number(n.bsize);if(i<=0)continue;let a=`${i}:${Number(n.bfree)}:${Number(n.type)}`;if(t.has(a))continue;t.add(a),e.push({path:s,totalGb:NE(i/1024**3),freeGb:NE(r/1024**3),usedPct:Math.min(100,Math.max(0,Math.round((1-r/i)*100)))})}catch{}return{cpuLoad1m:NE(Vo.loadavg()[0]??0),cpuCores:Vo.cpus().length,memTotalMb:Math.round(Vo.totalmem()/1024**2),memFreeMb:Math.round(Vo.freemem()/1024**2),rssMb:Math.round(process.memoryUsage().rss/1024**2),nodeJs:process.version,platform:Vo.platform(),osRelease:Vo.release(),disks:e}}function NE(l){return Math.round(l*10)/10}var hm=A(()=>{"use strict";m(um,"collectNodeMetrics");m(NE,"round1")});var sO={};Le(sO,{ClusterManager:()=>Od});import tO from"node:os";var Od,$E=A(()=>{"use strict";hm();Od=class{static{m(this,"ClusterManager")}config;logger;redis;heartbeatTimer;heartbeatMs;failoverMs;constructor(e,t){this.config=e,this.logger=t,this.heartbeatMs=e.heartbeatIntervalMs??1e4,this.failoverMs=e.failoverAfterMs??3e4}async connect(){try{let e;try{e=(await Function('return import("ioredis")')()).default}catch{throw new Error('Cluster mode requires the "ioredis" package. Install it: npm install ioredis')}this.redis=new e(this.config.redisUrl),this.logger.info({nodeId:this.config.nodeId,role:this.config.role},"Cluster manager connected to Redis")}catch(e){this.logger.error({err:e},"Failed to connect to Redis \u2014 cluster features disabled");return}this.heartbeatTimer=setInterval(()=>this.sendHeartbeat(),this.heartbeatMs),await this.sendHeartbeat()}async disconnect(){this.heartbeatTimer&&clearInterval(this.heartbeatTimer),await this.redis?.quit()}nodeInfo;setNodeInfo(e){this.nodeInfo=e}async collectMetricsSafe(){try{return JSON.stringify(await um(this.nodeInfo?.diskPaths??["/"]))}catch{return"{}"}}async sendHeartbeat(){try{let e=Math.floor(process.uptime()),t=JSON.stringify({id:this.config.nodeId,role:this.config.role,timestamp:new Date().toISOString(),uptime:e,host:tO.hostname(),version:this.nodeInfo?.version??"",adapters:this.nodeInfo?.adapters?.()??[]});await this.redis.set(`alfred:cluster:heartbeat:${this.config.nodeId}`,t,"EX",Math.ceil(this.failoverMs/1e3))}catch(e){this.logger.warn({err:e},"Heartbeat send failed")}}async getNodes(){if(!this.redis)return[];try{let e=await this.redis.keys("alfred:cluster:heartbeat:*"),t=[];for(let s of e){let n=await this.redis.get(s);if(n)try{let i=JSON.parse(n);t.push({...i,healthy:!0})}catch{}}return t}catch{return[]}}async acquireLock(e,t=3e5){if(!this.redis)return!0;try{return await this.redis.set(`alfred:lock:${e}`,this.config.nodeId,"NX","PX",t)==="OK"}catch{return!0}}async releaseLock(e){if(this.redis)try{await this.redis.get(`alfred:lock:${e}`)===this.config.nodeId&&await this.redis.del(`alfred:lock:${e}`)}catch{}}async publish(e,t){if(this.redis)try{await this.redis.publish(`alfred:${e}`,JSON.stringify({...t,nodeId:this.config.nodeId}))}catch(s){this.logger.warn({err:s,channel:e},"Cluster publish failed")}}async subscribe(e,t){if(this.redis)try{let s=this.redis.duplicate();await s.subscribe(`alfred:${e}`),s.on("message",(n,i)=>{try{let r=JSON.parse(i);r.nodeId!==this.config.nodeId&&t(r)}catch{}})}catch(s){this.logger.warn({err:s,channel:e},"Cluster subscribe failed")}}async routeMessage(e,t,s){await this.publish("messages",{type:"send_message",targetPlatform:e,chatId:t,text:s})}failoverCheckTimer;onFailoverCallback;startFailoverMonitoring(e){this.config.role==="secondary"&&(this.onFailoverCallback=e,this.failoverCheckTimer=setInterval(async()=>{try{let t=await this.getNodes(),s=new Set(t.map(n=>n.id));for(let n of this.config.nodes??[])n.id!==this.config.nodeId&&(s.has(n.id)||(this.logger.warn({deadNodeId:n.id},"Node heartbeat missing \u2014 failover triggered"),this.onFailoverCallback?.(n.id)))}catch(t){this.logger.debug({err:t},"Failover check error")}},this.failoverMs))}stopFailoverMonitoring(){this.failoverCheckTimer&&clearInterval(this.failoverCheckTimer)}async announceTakeover(e,t){await this.publish("events",{type:"failover",deadNodeId:e,takenOverBy:this.config.nodeId,adapters:t}),this.logger.info({deadNodeId:e,adapters:t},"Failover: adapters taken over")}async syncConfig(e,t){await this.publish("config-sync",{type:e,...t})}async onConfigSync(e){await this.subscribe("config-sync",t=>{let{type:s,...n}=t;e(s,n)})}get nodeId(){return this.config.nodeId}get role(){return this.config.role??"node"}get isConnected(){return!!this.redis}pgAdapter;pgHeartbeatTimer;startPgHeartbeat(e){this.pgAdapter=e,this.pgHeartbeatTimer=setInterval(()=>this.sendPgHeartbeat(),this.heartbeatMs),this.sendPgHeartbeat()}async sendPgHeartbeat(){if(this.pgAdapter)try{let e=new Date().toISOString(),t=Math.floor(process.uptime()),s=new Date(Date.now()-t*1e3).toISOString(),n=await this.collectMetricsSafe();await this.pgAdapter.execute(`INSERT INTO node_heartbeats (node_id, host, last_seen_at, started_at, uptime_s, adapters, version, metrics)
7820
7820
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)
7821
7821
  ON CONFLICT (node_id) DO UPDATE SET
7822
7822
  host = excluded.host,
@@ -8374,7 +8374,7 @@ Confidence-Skala:
8374
8374
  - 0.5-0.7: m\xF6glicherweise hilfreich, aber L\xF6sung nicht eindeutig
8375
8375
  - < 0.5: keine konkrete Erkenntnis/L\xF6sung erkennbar \u2192 is_runbook_candidate: false
8376
8376
 
8377
- Wenn is_runbook_candidate false ist, alle anderen Felder d\xFCrfen leer sein.`,c={};try{let y=(await this.llm.complete({messages:[{role:"user",content:o}],maxTokens:1500,temperature:.2,tier:"default"})).content.trim().match(/\{[\s\S]*\}/);y&&(c=JSON.parse(y[0]))}catch(f){this.logger.debug({err:f,conversationId:e},"Runbook-reflector LLM call failed"),await this.markProcessed(t,n);return}let d=typeof c.confidence=="number"?c.confidence:0,u=c.is_runbook_candidate===!0,h=!!c.title&&Array.isArray(c.steps)&&c.steps.length>=2;if(!u||!h||d<l.DRAFT_THRESHOLD){await this.markProcessed(t,n);return}if(await this.runbookRepo.findBySource(t,"chat_session",e)){await this.markProcessed(t,n);return}try{let f=new Set((c.tags??[]).map(y=>y.toLowerCase())),g=GD(c.title??"");if(g.size>=2||f.size>=2){let w=(await this.runbookRepo.list(t,{limit:200})).find(_=>{if([...f].filter(v=>_.tags.map(N=>N.toLowerCase()).includes(v)).length>=3)return!0;let T=GD(_.title);if(g.size===0||T.size===0)return!1;let k=[...g].filter(v=>T.has(v)).length,b=Math.min(g.size,T.size);return b>0&&k/b>=.6});if(w){this.logger.info({conversationId:e,newTitle:c.title?.slice(0,60),existingId:w.id.slice(0,8),existingTitle:w.title.slice(0,60)},"Runbook-reflector R2: similar runbook already exists \u2014 skipping"),await this.markProcessed(t,n);return}}}catch(f){this.logger.debug({err:f},"Runbook-reflector R2: similarity-dedup failed (non-critical, falling through)")}if(d>=l.CONFIRM_THRESHOLD)await this.confirmationQueue.enqueue({chatId:this.ownerChatId,platform:this.ownerPlatform,source:"reasoning",sourceId:`runbook-from-chat-${e.slice(0,8)}`,description:`Runbook aus Chat-Session erstellen (Confidence ${(d*100).toFixed(0)}%): "${c.title?.slice(0,80)}"?`,skillName:"runbook",skillParams:{action:"create",title:c.title,symptom:c.symptom??"",cause:c.cause??"",steps:c.steps,verification:c.verification??"",rollback:c.rollback??"",source_type:"chat_session",source_id:e,status:"draft",tags:[...c.tags??[],"auto-extracted","high-confidence"]},timeoutMinutes:1440}),this.logger.info({conversationId:e,title:c.title,confidence:d},"Chat-session runbook enqueued for confirmation");else try{await this.runbookRepo.create(t,{title:c.title,symptom:c.symptom,cause:c.cause,steps:c.steps,verification:c.verification,rollback:c.rollback,sourceType:"chat_session",sourceId:e,confidence:d,status:"draft",tags:[...c.tags??[],"auto-extracted","low-confidence"]}),this.logger.info({conversationId:e,title:c.title,confidence:d},"Chat-session runbook auto-saved as draft")}catch(f){this.logger.debug({err:f},"Auto-draft runbook creation failed")}await this.markProcessed(t,n)}async markProcessed(e,t){try{await this.memoryRepo.saveWithMetadata(e,t,new Date().toISOString(),"system","general",1,"auto");let s=new Date(Date.now()+l.MARKER_TTL_MS).toISOString();await this.memoryRepo.setExpiry(e,t,s)}catch{}}}});var JD={};Le(JD,{SkillFailureReflector:()=>$k});var $k,YD=A(()=>{"use strict";$k=class{static{m(this,"SkillFailureReflector")}activityRepo;logger;windowMinutes;minConsecutiveFails;maxWorkaroundSteps;constructor(e,t,s){this.activityRepo=e,this.logger=t,this.windowMinutes=s?.windowMinutes??30,this.minConsecutiveFails=s?.minConsecutiveFails??2,this.maxWorkaroundSteps=s?.maxWorkaroundSteps??10}async detect(e){let t=this.windowMinutes*60*1e3,s=new Date(Date.now()-t).toISOString(),n;try{n=(await this.activityRepo.query({eventType:"skill_exec",userId:e,since:s,limit:200})).map(o=>({id:o.id,skillName:o.action??"",success:o.outcome==="success",error:o.errorMessage,input:o.details,createdAt:o.timestamp}))}catch{return[]}if(n.length===0)return[];n.sort((a,o)=>a.createdAt.localeCompare(o.createdAt));let i=[],r=0;for(;r<n.length;){let a=n[r];if(a.success){r++;continue}let o=this.classifyError(a.error??""),c=1,d=r+1;for(;d<n.length&&!n[d].success&&n[d].skillName===a.skillName&&this.classifyError(n[d].error??"")===o;)c++,d++;if(c<this.minConsecutiveFails){r=d;continue}let u=Math.min(n.length,d+8),h=[],p=n.slice(r,d).map(g=>g.id),f=!1;for(let g=d;g<u;g++){let y=n[g];if(y.skillName==="shell"||y.skillName==="code_agent"||y.skillName==="deploy"){let w=typeof y.input?.command=="string"?y.input.command:JSON.stringify(y.input).slice(0,200);if(h.push(w),p.push(y.id),y.success&&(f=!0),h.length>=this.maxWorkaroundSteps)break}}if(h.length>0&&f){let g=this.extractScope(a.input);i.push({failedSkill:a.skillName,errorClass:o,scope:g,workaroundSteps:h,finalSuccess:f,detectedAt:new Date().toISOString(),participatingActivityIds:p}),this.logger.info({failedSkill:a.skillName,errorClass:o,scope:g,workaroundSteps:h.length},"SkillFailureReflector: workaround pattern detected")}r=u>d?u:d}return i}classifyError(e){let t=e.toLowerCase();return/command not found/.test(t)?"COMMAND_NOT_FOUND":/eacces|permission denied/.test(t)?"EACCES":/enoent|no such file/.test(t)?"ENOENT":/etimedout|timeout/.test(t)?"TIMEOUT":/ehostunreach|enetunreach|econnrefused/.test(t)?"NETWORK":/auth|unauthorized|forbidden/.test(t)?"AUTH_FAIL":/not found|404/.test(t)?"NOT_FOUND":"OTHER"}extractScope(e){if(e){if(typeof e.host=="string")return`host=${e.host}`;if(typeof e.target_host=="string")return`host=${e.target_host}`;if(typeof e.cwd=="string")return`cwd=${e.cwd}`}}}});import Zo from"node:fs";import Ck from"node:os";import Dt from"node:path";import{randomUUID as ZD}from"node:crypto";import jK from"js-yaml";async function BK(l,e,t,s,n){let i=t.toLowerCase(),r=s.map(c=>c.toLowerCase()).filter(c=>c.length>=4),a=m(c=>r.filter(d=>c.includes(d)||i.split(/\s+/).some(u=>c.includes(u.toLowerCase())&&u.length>=4)).length,"matchScore"),o=await l.listProblems(e,{isKnownError:!0,limit:50});for(let c of o)if(!(!c.workaround&&!c.knownErrorDescription)&&a(c.title.toLowerCase())>=2)return{...c,sourceKind:"problem"};if(n)try{let c=await n.listIncidents(e,{limit:300}),d=null;for(let u of c){if(u.status!=="closed"&&u.status!=="resolved"||!u.resolution||u.resolution.trim().length<20)continue;let h=a(`${u.title} ${u.rootCause??""}`.toLowerCase());h>=2&&(!d||h>d.score)&&(d={inc:u,score:h})}if(d)return{id:d.inc.id,title:d.inc.title,workaround:d.inc.resolution,knownErrorDescription:d.inc.rootCause,sourceKind:"incident"}}catch{}return null}var Pr,QD=A(()=>{"use strict";ou();ru();nt();cn();rh();Na();ze();Fw();sN();iN();y_();w_();__();T_();E_();k_();b_();S_();v_();A_();I_();R_();d$();gf();D_();x_();M_();J_();_$();Y_();Cr();_f();Z_();Q_();eT();tT();sT();rT();aT();oT();cT();lT();dT();jl();Cl();yT();_T();m(BK,"findKnownErrorMatch");Pr=class{static{m(this,"Alfred")}config;logger;database;pipeline;llmProvider;reminderScheduler;backgroundTaskRunner;proactiveScheduler;watchEngine;triggerManager;confirmationQueue;adapters=new Map;formatter=new Gl;userRepo;skillRegistry;skillSandbox;mcpManager;calendarSkill;calendarWatcher;todoWatcher;reasoningEngine;reflectionEngine;chatSessionRunbookReflector;usageRepo;serviceUsageRepo;auditRepo;summaryRepo;activityRepo;memoryRepo;runbookRepo;projectRepo;agentConventionsRepo;agentConventionsSkillRef;buildConventionsEmbeddingLookup(e,t){if(!e||!t||!this.embeddingServiceRef||!this.embeddingRepoRef||!this.agentConventionsRepo||!this.config.agentConventions?.embeddingInjection)return;let n=this.agentConventionsRepo,i=this.llmProvider;return async(r,a)=>{try{if(!i||!i.supportsEmbeddings?.())return[];let c=(await n.listForProject(e).catch(()=>[])).flatMap(f=>f.neutralFormat.lessons.map(g=>({...g,packagePath:f.packagePath})));if(c.length===0)return[];let d=await i.embed(r.slice(0,800));if(!d)return[];let u=d.embedding,h=[];for(let f of c.slice(0,50)){let g=await i.embed(f.text.slice(0,800)).catch(()=>null);g&&h.push({lesson:f,emb:g.embedding})}let p=m((f,g)=>{let y=0,w=0,_=0;for(let T=0;T<f.length;T++)y+=f[T]*g[T],w+=f[T]*f[T],_+=g[T]*g[T];let E=Math.sqrt(w)*Math.sqrt(_);return E===0?0:y/E},"cosine");return h.map(({lesson:f,emb:g})=>({text:f.text,source:`lesson:${f.source}:conf=${f.confidence.toFixed(2)}`,similarity:p(u,g)})).filter(f=>f.similarity>.55).sort((f,g)=>g.similarity-f.similarity).slice(0,5)}catch(o){return this.logger.debug({err:o,projectId:e},"v830 conventions-embedding-lookup failed (non-fatal)"),[]}}}embeddingServiceRef;embeddingRepoRef;learnedRecipeRepo;envRepoRef;envCryptoRef;dbSeedRepoRef;envSkillFactory;conversationRepo;insightsRepo;notificationRouter;insightEngine;legacyDataUids=[];projectManager;projectHealthMonitor;projectSkillRef;projectAgentSkillRef;codeAgentTaskAborts=new Map;async gitInWorktree(e,t,s={}){let{execFile:n}=await import("node:child_process"),{promisify:i}=await import("node:util"),r=await import("node:fs"),a=await import("node:path"),o=i(n),c=s.timeout??3e4,d=s.maxBuffer??1024*1024;if(!(typeof process.getuid=="function"&&process.getuid()===0))return o("git",t,{cwd:e,timeout:c,maxBuffer:d});let h=0;try{let p=a.join(e,".git"),f=r.statSync(p);if(f.isFile()){let g=r.readFileSync(p,"utf8").trim(),y=/^gitdir:\s*(.+)$/.exec(g);if(y){let w=y[1].trim(),_=a.isAbsolute(w)?w:a.resolve(e,w);h=r.statSync(_).uid}else h=f.uid}else h=f.uid}catch{try{h=r.statSync(e).uid}catch{}}if(h===0)return o("git",t,{cwd:e,timeout:c,maxBuffer:d});try{let{stdout:p}=await o("id",["-nu",String(h)],{timeout:3e3}),f=p.trim();if(!f)throw new Error(`uid ${h} resolves to empty name`);return o("sudo",["-u",f,"git",...t],{cwd:e,timeout:c,maxBuffer:d})}catch(p){return this.logger.warn({err:p,cwd:e,effectiveUid:h},"v796 gitInWorktree sudo-wrap setup failed, falling back to direct git (may hit dubious-ownership)"),o("git",t,{cwd:e,timeout:c,maxBuffer:d})}}agentSessionManager;projectAgentRunnerRef;commitsRepoRef;cliRunsRepoRef;agentBusyRegistry=new ff;projectSessionRepoRef;plansRepoRef;featuresRepoRef;delegateSkillRef;codeAgentSkillRef;mcpTokenStoreRef;watchRepo;scheduledActionRepo;skillHealthRepo;clusterManager;adapterClaimManager;webAuthCallback;reminderRepo;todoRepo;noteRepo;attachmentRepo;documentRepoRef;fileStoreRef;projectAutomationsRepo;automationEngine;shareManager;projectMoveService;spotifySkill;bmwSkill;bmwTelematicRepo;memorySkillRef;kgServiceRef;sonosSkill;skillHealthTracker;jobRegister;providerPuls;degradationsWaechter;lebenszeichenRepo;letzteProben={ergebnisse:[]};weltmodellBeobachter;haEreignisQuelle;hausAnwesenheit;socialRepo;socialSkillRef;publishingEngine;contentStudio;speechSynthesizerRef;interestsRepo;interestsSkillRef;topicCollector;sourceProvisioner;interestDetector;topicDigestBuilder;sourceMaintenance;registriereJob(e){if(!this.jobRegister){this.logger.error({job:e.key},"Lebenszeichen: Job-Register fehlt \u2014 Job NICHT registriert");return}this.jobRegister.registriere(e)}async sendeAnOwner(e){let t=this.config.security?.ownerUserId;if(!t)return!1;let s=this.config.telegram?.enabled?"telegram":this.config.matrix?.enabled?"matrix":this.config.discord?.enabled?"discord":void 0,n=s?this.adapters.get(s):void 0;if(!n)return!1;try{return await n.sendMessage(t,e),!0}catch(i){return this.logger.warn({err:i.message},"Lebenszeichen: Owner-Satz konnte nicht gesendet werden"),!1}}async lebenszeichenStatus(){let{JobRunsRepository:e}=await Promise.resolve().then(()=>(nt(),it)),t=new e(this.database.getAdapter()),s=[];for(let n of this.jobRegister?.definitionen()??[]){let i=await t.letzterLauf(n.key).catch(()=>{});s.push({...n,letzterLauf:i??null})}return{registerGestartetAm:this.jobRegister?.gestartetAm??null,jobs:s,puls:this.providerPuls?.alle()??[],proben:this.letzteProben,offen:this.degradationsWaechter?.offeneZustaende()??[],letzteLaeufe:await t.listeLetzte(60).catch(()=>[]),adapter:this.adapterZustaende(),kennzahlen:this.reasoningEngine?.kennzahlen.snapshot()??null,warum:this.reasoningEngine?.warum.letzte(10)??[]}}async claimDailySlot(e){if(this.database?.getAdapter().type!=="postgres")return!0;try{return((await this.database.getAdapter().execute("INSERT INTO reasoning_slots (slot_key, node_id, claimed_at) VALUES (?, ?, ?) ON CONFLICT DO NOTHING",[e,this.config.cluster?.nodeId??"single",new Date().toISOString()])).changes??0)>0}catch{return!0}}insightTracker;sandboxManager;ownerMasterUserId;identityResolver;requireOwner(){if(!this.ownerMasterUserId)throw new Error("Alfred.requireOwner() called before init() completed. Check that this code path runs AFTER alfred.initialize() \u2014 see ADR-0001 (docs/adr/0001-user-identity-model.md) for the init-order requirement.");return this.ownerMasterUserId}tryOwner(){return this.ownerMasterUserId}async resolveCliAgent(e,t,s){let n=(this.config.codeAgents?.agents??[]).map(a=>a.name),i;if(e&&this.projectRepo)try{let a=this.tryOwner();a&&(i=(await this.projectRepo.getById(a,e))?.agentStrategy)}catch{}let r=new Set;for(let a of n)this.agentBusyRegistry.isBusy(a,e)&&r.add(a);try{if(this.projectSessionRepoRef){let a=await this.projectSessionRepoRef.listRunning();for(let o of a)o.agentName&&n.includes(o.agentName)&&r.add(o.agentName)}}catch{}return nN({available:n,strategy:i,requestedAgent:t,busy:r,isAutomatic:s?.isAutomatic,resumeAgent:s?.resumeAgent})}userServiceResolverRef;startedAt=new Date().toISOString();withLegacyForOwner(e,t){if(!this.ownerMasterUserId||e!==this.ownerMasterUserId||this.legacyDataUids.length===0)return t;let s=[...t];for(let n of this.legacyDataUids)s.includes(n)||s.push(n);return s}constructor(e){this.config=e,this.logger=zr("alfred",e.logger.level)}async initialize(){this.logger.info("Initializing Alfred..."),this.database=await Gs.create({backend:this.config.storage.backend??"sqlite",path:this.config.storage.path,connectionString:this.config.storage.connectionString});let e=this.database.getAdapter();try{let{SandboxChatRepository:M,ProjectAgentSessionRepository:J}=await Promise.resolve().then(()=>(nt(),it)),P=await new M(e).failOrphanedCodeAgentTasks();P>0&&this.logger.info({count:P},"v767 startup: marked orphaned chat-tasks as failed");let Q=await new J(e).failOrphanedSessions();Q>0&&this.logger.info({count:Q},"v768 startup: marked orphaned project-agent-sessions as failed")}catch(M){this.logger.warn({err:M},"v767/v768 startup orphan-cleanup failed (non-fatal)")}let t=new Hr(e);this.conversationRepo=t;let s=new Xr(e);this.userRepo=s;let n=new ii(e);this.auditRepo=n;let i=new Wr(e);this.memoryRepo=i;let r=new oi(e),a=new Kr(e);this.reminderRepo=a;let o=new Gr(e);this.noteRepo=o;{let{bereinigeAttributeNachSchema:M}=await Promise.resolve().then(()=>(ad(),m$));ks.setAttributSanitizer((J,O)=>M(J,O).bereinigt)}let c=new Yi(e),d=new Vr(e),u=new qr(e),h=new Zr(e);this.scheduledActionRepo=h;let p=new ai(e);this.activityRepo=p;let f=new hd(p,this.logger.child({component:"activity"})),g=new ra(e);this.skillHealthRepo=g;let y=new pd(g,this.logger.child({component:"skill-health"}),f);this.skillHealthTracker=y,this.logger.info("Storage initialized");let w=new Ia,_=this.loadSecurityRules();w.loadRules(_);let E;try{let{AuditLogger:M}=await Promise.resolve().then(()=>(ru(),vb)),J=this.config.logger.auditLogPath??"./data/logs/audit.log";E=new M(J),this.logger.info({path:J},"File-based audit logger initialized")}catch(M){this.logger.warn({err:M},"File-based audit logger init failed \u2014 DB-audit still active")}let T=new Ra(w,n,this.logger.child({component:"security"}),E);this.logger.info({ruleCount:_.length},"Security engine initialized");let k=nh(this.config.llm,this.logger.child({component:"llm"}));await k.initialize(),this.llmProvider=k;let b=new ia(e);this.usageRepo=b,k.setPersist((M,J,O,P,U,Q)=>{b.record(M,J,O,P,U,Q).catch(()=>{})});{let{ProviderPuls:M}=await Promise.resolve().then(()=>(TT(),I$)),{LebenszeichenRepository:J}=await Promise.resolve().then(()=>(nt(),it));this.lebenszeichenRepo=new J(e);let O=this.lebenszeichenRepo;this.providerPuls=new M(this.logger.child({component:"lebenszeichen"}),{speichere:m(U=>O.speicherePuls(U),"speichere"),ladeAlle:m(()=>O.ladePuls(),"ladeAlle")});let P=this.providerPuls;k.setPulsCallback(U=>{P.verarbeite(U)})}{let{WeltmodellBeobachter:M}=await Promise.resolve().then(()=>(o_(),a_));this.weltmodellBeobachter=new M(this.logger.child({component:"weltmodell"}),async J=>{if(!this.reasoningEngine){this.logger.debug({quelle:J.quelle},"v1175 Mini-Pass: Reasoning-Engine noch nicht bereit");return}await this.reasoningEngine.triggerMiniPass(J)})}{let{JobRegister:M}=await Promise.resolve().then(()=>(AT(),vT)),{JobRunsRepository:J}=await Promise.resolve().then(()=>(nt(),it)),O=this.userRepo;if(!O)throw new Error("Job-Register: userRepo fehlt");this.jobRegister=new M({logger:this.logger.child({component:"lebenszeichen"}),nodeId:this.config.cluster?.nodeId??"single",listMasters:m(()=>O.listMasters(),"listMasters"),listAll:m(()=>O.listAll(),"listAll"),claimSlot:m(P=>this.claimDailySlot(P),"claimSlot"),runs:new J(e)})}k.setBillingAlertCallback(M=>{this.logger.warn({...M},M.kind==="recovered"?"v868.3 LLM billing recovered":"v868 LLM billing failure (Owner-Satz kommt vom Lebenszeichen-W\xE4chter)")});let v=new la(e);this.serviceUsageRepo=v;let N=new Vl(k,c,this.logger.child({component:"embeddings"}));this.embeddingServiceRef=N,this.embeddingRepoRef=c;let I=this.config.llm.embeddings?.model??this.config.llm.default?.model??"unknown";if(k.supportsEmbeddings())try{await N.validateModelConsistency(I)>0&&setTimeout(async()=>{try{let J=await s.listAll(),O=0;for(let P of J){let U=await i.listAll(P.id);for(let Q of U)await N.embedAndStore(P.id,`${Q.key}: ${Q.value}`,"memory",Q.id),O++}this.logger.info({count:O,model:I},"Re-embedded all memories with new model")}catch(J){this.logger.error({err:J},"Background re-embedding failed")}},5e3)}catch(M){this.logger.error({err:M},"Embedding model consistency check failed")}let $=this.config.activeLearning?.enabled!==!1,L,V;$&&(L=new nd({llm:k,memoryRepo:i,logger:this.logger.child({component:"active-learning"}),embeddingService:N,minMessageLength:this.config.activeLearning?.minMessageLength,minConfidence:this.config.activeLearning?.minConfidence,maxExtractionsPerMinute:this.config.activeLearning?.maxExtractionsPerMinute}),V=new id(i,this.logger.child({component:"memory-retriever"}),N),this.logger.info("Active learning & memory retriever initialized"));let x=new na(e);this.summaryRepo=x;let D=new ld(k,x,this.logger.child({component:"summarizer"}));this.logger.info("Conversation summarizer initialized");let C=this.skillSandbox=new Pa(this.logger.child({component:"sandbox"})),R=this.skillRegistry=new Ma;R.register(new Ua),R.register(new Fa),R.register(new ja(this.config.search?{provider:this.config.search.provider,apiKey:this.config.search.apiKey,baseUrl:this.config.search.baseUrl}:void 0)),R.register(new Ba(a));let j=new za(o);R.register(j);let B=new ea(e);this.todoRepo=B;let F=new co(B);R.register(F),R.register(new Ha),R.register(new Xa);let fe=new Wa(i,N);R.register(fe),this.memorySkillRef=fe;let be=new Ka(k,R,C,T);R.register(be),this.delegateSkillRef=be;{let{ChatHistorySkill:M}=await Promise.resolve().then(()=>(ze(),Ze));R.register(new M(t))}{let{BrainstormingSkill:M}=await Promise.resolve().then(()=>(ze(),Ze)),{BrainstormingRepository:J}=await Promise.resolve().then(()=>(nt(),it)),O=new J(e),P=new M(O);P.setKgContextFn(async(U,Q)=>{if(!this.kgServiceRef)return"";let ue=this.ownerMasterUserId??U,le=await new ks(e).getFullGraph(ue,"personal"),ee=Q.toLowerCase(),je=le.entities.filter(de=>de.name.toLowerCase().includes(ee)||de.normalizedName.includes(ee)||de.attributes?.value&&String(de.attributes.value).toLowerCase().includes(ee)),ie=new Set(je.map(de=>de.id)),he=le.relations.filter(de=>ie.has(de.sourceEntityId)||ie.has(de.targetEntityId)),ne=new Set;for(let de of he)ne.add(de.sourceEntityId),ne.add(de.targetEntityId);let ve=le.entities.filter(de=>ie.has(de.id)||ne.has(de.id)),q=ve.slice(0,20).map(de=>{let Oe=Object.entries(de.attributes??{}).filter(([Xe])=>!["skillName","type","memoryKey","memoryConfidence"].includes(Xe)).map(([Xe,st])=>`${Xe}=${String(st).slice(0,60)}`).join(", ");return`- [${de.entityType}] ${de.name}${Oe?` (${Oe})`:""}`}),X=he.slice(0,15).map(de=>{let Oe=ve.find(st=>st.id===de.sourceEntityId)?.name??"?",Xe=ve.find(st=>st.id===de.targetEntityId)?.name??"?";return`- ${Oe} \u2192 ${de.relationType} \u2192 ${Xe}`}),W="";try{W=(await i.search(ue,Q)).slice(0,5).map(Oe=>`- [memory] ${Oe.key}: ${Oe.value.slice(0,100)}`).join(`
8377
+ Wenn is_runbook_candidate false ist, alle anderen Felder d\xFCrfen leer sein.`,c={};try{let y=(await this.llm.complete({messages:[{role:"user",content:o}],maxTokens:1500,temperature:.2,tier:"default"})).content.trim().match(/\{[\s\S]*\}/);y&&(c=JSON.parse(y[0]))}catch(f){this.logger.debug({err:f,conversationId:e},"Runbook-reflector LLM call failed"),await this.markProcessed(t,n);return}let d=typeof c.confidence=="number"?c.confidence:0,u=c.is_runbook_candidate===!0,h=!!c.title&&Array.isArray(c.steps)&&c.steps.length>=2;if(!u||!h||d<l.DRAFT_THRESHOLD){await this.markProcessed(t,n);return}if(await this.runbookRepo.findBySource(t,"chat_session",e)){await this.markProcessed(t,n);return}try{let f=new Set((c.tags??[]).map(y=>y.toLowerCase())),g=GD(c.title??"");if(g.size>=2||f.size>=2){let w=(await this.runbookRepo.list(t,{limit:200})).find(_=>{if([...f].filter(v=>_.tags.map(N=>N.toLowerCase()).includes(v)).length>=3)return!0;let T=GD(_.title);if(g.size===0||T.size===0)return!1;let k=[...g].filter(v=>T.has(v)).length,b=Math.min(g.size,T.size);return b>0&&k/b>=.6});if(w){this.logger.info({conversationId:e,newTitle:c.title?.slice(0,60),existingId:w.id.slice(0,8),existingTitle:w.title.slice(0,60)},"Runbook-reflector R2: similar runbook already exists \u2014 skipping"),await this.markProcessed(t,n);return}}}catch(f){this.logger.debug({err:f},"Runbook-reflector R2: similarity-dedup failed (non-critical, falling through)")}if(d>=l.CONFIRM_THRESHOLD)await this.confirmationQueue.enqueue({chatId:this.ownerChatId,platform:this.ownerPlatform,source:"reasoning",sourceId:`runbook-from-chat-${e.slice(0,8)}`,description:`Runbook aus Chat-Session erstellen (Confidence ${(d*100).toFixed(0)}%): "${c.title?.slice(0,80)}"?`,skillName:"runbook",skillParams:{action:"create",title:c.title,symptom:c.symptom??"",cause:c.cause??"",steps:c.steps,verification:c.verification??"",rollback:c.rollback??"",source_type:"chat_session",source_id:e,status:"draft",tags:[...c.tags??[],"auto-extracted","high-confidence"]},timeoutMinutes:1440}),this.logger.info({conversationId:e,title:c.title,confidence:d},"Chat-session runbook enqueued for confirmation");else try{await this.runbookRepo.create(t,{title:c.title,symptom:c.symptom,cause:c.cause,steps:c.steps,verification:c.verification,rollback:c.rollback,sourceType:"chat_session",sourceId:e,confidence:d,status:"draft",tags:[...c.tags??[],"auto-extracted","low-confidence"]}),this.logger.info({conversationId:e,title:c.title,confidence:d},"Chat-session runbook auto-saved as draft")}catch(f){this.logger.debug({err:f},"Auto-draft runbook creation failed")}await this.markProcessed(t,n)}async markProcessed(e,t){try{await this.memoryRepo.saveWithMetadata(e,t,new Date().toISOString(),"system","general",1,"auto");let s=new Date(Date.now()+l.MARKER_TTL_MS).toISOString();await this.memoryRepo.setExpiry(e,t,s)}catch{}}}});var JD={};Le(JD,{SkillFailureReflector:()=>$k});var $k,YD=A(()=>{"use strict";$k=class{static{m(this,"SkillFailureReflector")}activityRepo;logger;windowMinutes;minConsecutiveFails;maxWorkaroundSteps;constructor(e,t,s){this.activityRepo=e,this.logger=t,this.windowMinutes=s?.windowMinutes??30,this.minConsecutiveFails=s?.minConsecutiveFails??2,this.maxWorkaroundSteps=s?.maxWorkaroundSteps??10}async detect(e){let t=this.windowMinutes*60*1e3,s=new Date(Date.now()-t).toISOString(),n;try{n=(await this.activityRepo.query({eventType:"skill_exec",userId:e,since:s,limit:200})).map(o=>({id:o.id,skillName:o.action??"",success:o.outcome==="success",error:o.errorMessage,input:o.details,createdAt:o.timestamp}))}catch{return[]}if(n.length===0)return[];n.sort((a,o)=>a.createdAt.localeCompare(o.createdAt));let i=[],r=0;for(;r<n.length;){let a=n[r];if(a.success){r++;continue}let o=this.classifyError(a.error??""),c=1,d=r+1;for(;d<n.length&&!n[d].success&&n[d].skillName===a.skillName&&this.classifyError(n[d].error??"")===o;)c++,d++;if(c<this.minConsecutiveFails){r=d;continue}let u=Math.min(n.length,d+8),h=[],p=n.slice(r,d).map(g=>g.id),f=!1;for(let g=d;g<u;g++){let y=n[g];if(y.skillName==="shell"||y.skillName==="code_agent"||y.skillName==="deploy"){let w=typeof y.input?.command=="string"?y.input.command:JSON.stringify(y.input).slice(0,200);if(h.push(w),p.push(y.id),y.success&&(f=!0),h.length>=this.maxWorkaroundSteps)break}}if(h.length>0&&f){let g=this.extractScope(a.input);i.push({failedSkill:a.skillName,errorClass:o,scope:g,workaroundSteps:h,finalSuccess:f,detectedAt:new Date().toISOString(),participatingActivityIds:p}),this.logger.info({failedSkill:a.skillName,errorClass:o,scope:g,workaroundSteps:h.length},"SkillFailureReflector: workaround pattern detected")}r=u>d?u:d}return i}classifyError(e){let t=e.toLowerCase();return/command not found/.test(t)?"COMMAND_NOT_FOUND":/eacces|permission denied/.test(t)?"EACCES":/enoent|no such file/.test(t)?"ENOENT":/etimedout|timeout/.test(t)?"TIMEOUT":/ehostunreach|enetunreach|econnrefused/.test(t)?"NETWORK":/auth|unauthorized|forbidden/.test(t)?"AUTH_FAIL":/not found|404/.test(t)?"NOT_FOUND":"OTHER"}extractScope(e){if(e){if(typeof e.host=="string")return`host=${e.host}`;if(typeof e.target_host=="string")return`host=${e.target_host}`;if(typeof e.cwd=="string")return`cwd=${e.cwd}`}}}});import Zo from"node:fs";import Ck from"node:os";import Dt from"node:path";import{randomUUID as ZD}from"node:crypto";import jK from"js-yaml";async function BK(l,e,t,s,n){let i=t.toLowerCase(),r=s.map(c=>c.toLowerCase()).filter(c=>c.length>=4),a=m(c=>r.filter(d=>c.includes(d)||i.split(/\s+/).some(u=>c.includes(u.toLowerCase())&&u.length>=4)).length,"matchScore"),o=await l.listProblems(e,{isKnownError:!0,limit:50});for(let c of o)if(!(!c.workaround&&!c.knownErrorDescription)&&a(c.title.toLowerCase())>=2)return{...c,sourceKind:"problem"};if(n)try{let c=await n.listIncidents(e,{limit:300}),d=null;for(let u of c){if(u.status!=="closed"&&u.status!=="resolved"||!u.resolution||u.resolution.trim().length<20)continue;let h=a(`${u.title} ${u.rootCause??""}`.toLowerCase());h>=2&&(!d||h>d.score)&&(d={inc:u,score:h})}if(d)return{id:d.inc.id,title:d.inc.title,workaround:d.inc.resolution,knownErrorDescription:d.inc.rootCause,sourceKind:"incident"}}catch{}return null}var Pr,QD=A(()=>{"use strict";ou();ru();nt();cn();rh();Na();ze();Fw();sN();iN();y_();w_();__();T_();E_();k_();b_();S_();v_();A_();I_();R_();d$();gf();D_();x_();M_();J_();_$();Y_();Cr();_f();Z_();Q_();eT();tT();sT();rT();aT();oT();cT();lT();dT();jl();Cl();yT();_T();m(BK,"findKnownErrorMatch");Pr=class{static{m(this,"Alfred")}config;logger;database;pipeline;llmProvider;reminderScheduler;backgroundTaskRunner;proactiveScheduler;watchEngine;triggerManager;confirmationQueue;adapters=new Map;formatter=new Gl;userRepo;skillRegistry;skillSandbox;mcpManager;calendarSkill;calendarWatcher;todoWatcher;reasoningEngine;reflectionEngine;chatSessionRunbookReflector;usageRepo;serviceUsageRepo;auditRepo;summaryRepo;activityRepo;memoryRepo;runbookRepo;projectRepo;agentConventionsRepo;agentConventionsSkillRef;buildConventionsEmbeddingLookup(e,t){if(!e||!t||!this.embeddingServiceRef||!this.embeddingRepoRef||!this.agentConventionsRepo||!this.config.agentConventions?.embeddingInjection)return;let n=this.agentConventionsRepo,i=this.llmProvider;return async(r,a)=>{try{if(!i||!i.supportsEmbeddings?.())return[];let c=(await n.listForProject(e).catch(()=>[])).flatMap(f=>f.neutralFormat.lessons.map(g=>({...g,packagePath:f.packagePath})));if(c.length===0)return[];let d=await i.embed(r.slice(0,800));if(!d)return[];let u=d.embedding,h=[];for(let f of c.slice(0,50)){let g=await i.embed(f.text.slice(0,800)).catch(()=>null);g&&h.push({lesson:f,emb:g.embedding})}let p=m((f,g)=>{let y=0,w=0,_=0;for(let T=0;T<f.length;T++)y+=f[T]*g[T],w+=f[T]*f[T],_+=g[T]*g[T];let E=Math.sqrt(w)*Math.sqrt(_);return E===0?0:y/E},"cosine");return h.map(({lesson:f,emb:g})=>({text:f.text,source:`lesson:${f.source}:conf=${f.confidence.toFixed(2)}`,similarity:p(u,g)})).filter(f=>f.similarity>.55).sort((f,g)=>g.similarity-f.similarity).slice(0,5)}catch(o){return this.logger.debug({err:o,projectId:e},"v830 conventions-embedding-lookup failed (non-fatal)"),[]}}}embeddingServiceRef;embeddingRepoRef;learnedRecipeRepo;envRepoRef;envCryptoRef;dbSeedRepoRef;envSkillFactory;conversationRepo;insightsRepo;notificationRouter;insightEngine;legacyDataUids=[];projectManager;projectHealthMonitor;projectSkillRef;projectAgentSkillRef;codeAgentTaskAborts=new Map;async gitInWorktree(e,t,s={}){let{execFile:n}=await import("node:child_process"),{promisify:i}=await import("node:util"),r=await import("node:fs"),a=await import("node:path"),o=i(n),c=s.timeout??3e4,d=s.maxBuffer??1024*1024;if(!(typeof process.getuid=="function"&&process.getuid()===0))return o("git",t,{cwd:e,timeout:c,maxBuffer:d});let h=0;try{let p=a.join(e,".git"),f=r.statSync(p);if(f.isFile()){let g=r.readFileSync(p,"utf8").trim(),y=/^gitdir:\s*(.+)$/.exec(g);if(y){let w=y[1].trim(),_=a.isAbsolute(w)?w:a.resolve(e,w);h=r.statSync(_).uid}else h=f.uid}else h=f.uid}catch{try{h=r.statSync(e).uid}catch{}}if(h===0)return o("git",t,{cwd:e,timeout:c,maxBuffer:d});try{let{stdout:p}=await o("id",["-nu",String(h)],{timeout:3e3}),f=p.trim();if(!f)throw new Error(`uid ${h} resolves to empty name`);return o("sudo",["-u",f,"git",...t],{cwd:e,timeout:c,maxBuffer:d})}catch(p){return this.logger.warn({err:p,cwd:e,effectiveUid:h},"v796 gitInWorktree sudo-wrap setup failed, falling back to direct git (may hit dubious-ownership)"),o("git",t,{cwd:e,timeout:c,maxBuffer:d})}}agentSessionManager;projectAgentRunnerRef;commitsRepoRef;cliRunsRepoRef;agentBusyRegistry=new ff;projectSessionRepoRef;plansRepoRef;featuresRepoRef;delegateSkillRef;codeAgentSkillRef;mcpTokenStoreRef;watchRepo;scheduledActionRepo;skillHealthRepo;clusterManager;adapterClaimManager;webAuthCallback;reminderRepo;todoRepo;noteRepo;attachmentRepo;documentRepoRef;fileStoreRef;projectAutomationsRepo;automationEngine;shareManager;projectMoveService;spotifySkill;bmwSkill;bmwTelematicRepo;memorySkillRef;kgServiceRef;sonosSkill;skillHealthTracker;jobRegister;providerPuls;degradationsWaechter;lebenszeichenRepo;letzteProben={ergebnisse:[]};weltmodellBeobachter;haEreignisQuelle;hausAnwesenheit;socialRepo;socialSkillRef;publishingEngine;contentStudio;speechSynthesizerRef;interestsRepo;interestsSkillRef;topicCollector;sourceProvisioner;interestDetector;topicDigestBuilder;sourceMaintenance;registriereJob(e){if(!this.jobRegister){this.logger.error({job:e.key},"Lebenszeichen: Job-Register fehlt \u2014 Job NICHT registriert");return}this.jobRegister.registriere(e)}async sendeAnOwner(e){let t=this.config.security?.ownerUserId;if(!t)return!1;let s=this.config.telegram?.enabled?"telegram":this.config.matrix?.enabled?"matrix":this.config.discord?.enabled?"discord":void 0,n=s?this.adapters.get(s):void 0;if(!n)return!1;try{return await n.sendMessage(t,e),!0}catch(i){return this.logger.warn({err:i.message},"Lebenszeichen: Owner-Satz konnte nicht gesendet werden"),!1}}async lebenszeichenStatus(){let{JobRunsRepository:e}=await Promise.resolve().then(()=>(nt(),it)),t=new e(this.database.getAdapter()),s=[];for(let n of this.jobRegister?.definitionen()??[]){let i=await t.letzterLauf(n.key).catch(()=>{});s.push({...n,letzterLauf:i??null})}return{registerGestartetAm:this.jobRegister?.gestartetAm??null,jobs:s,puls:this.providerPuls?.alle()??[],proben:this.letzteProben,offen:this.degradationsWaechter?.offeneZustaende()??[],letzteLaeufe:await t.listeLetzte(60).catch(()=>[]),adapter:this.adapterZustaende(),kennzahlen:this.reasoningEngine?.kennzahlen.snapshot()??null,warum:this.reasoningEngine?.warum.letzte(10)??[],kennzahlenGestern:await(async()=>{try{let n=this.tryOwner();if(!n)return null;let{MesswerteRepository:i}=await Promise.resolve().then(()=>(nt(),it)),r=await new i(this.database.getAdapter()).letzteProEntity(n,"kennzahl",48);if(r.length===0)return null;let a={};for(let o of r)o.wert!==void 0&&(a[o.entity.replace(/^kennzahl\./,"")]=o.wert);return{zeit:r[0].zeit,werte:a}}catch{return null}})()}}async claimDailySlot(e){if(this.database?.getAdapter().type!=="postgres")return!0;try{return((await this.database.getAdapter().execute("INSERT INTO reasoning_slots (slot_key, node_id, claimed_at) VALUES (?, ?, ?) ON CONFLICT DO NOTHING",[e,this.config.cluster?.nodeId??"single",new Date().toISOString()])).changes??0)>0}catch{return!0}}insightTracker;sandboxManager;ownerMasterUserId;identityResolver;requireOwner(){if(!this.ownerMasterUserId)throw new Error("Alfred.requireOwner() called before init() completed. Check that this code path runs AFTER alfred.initialize() \u2014 see ADR-0001 (docs/adr/0001-user-identity-model.md) for the init-order requirement.");return this.ownerMasterUserId}tryOwner(){return this.ownerMasterUserId}async resolveCliAgent(e,t,s){let n=(this.config.codeAgents?.agents??[]).map(a=>a.name),i;if(e&&this.projectRepo)try{let a=this.tryOwner();a&&(i=(await this.projectRepo.getById(a,e))?.agentStrategy)}catch{}let r=new Set;for(let a of n)this.agentBusyRegistry.isBusy(a,e)&&r.add(a);try{if(this.projectSessionRepoRef){let a=await this.projectSessionRepoRef.listRunning();for(let o of a)o.agentName&&n.includes(o.agentName)&&r.add(o.agentName)}}catch{}return nN({available:n,strategy:i,requestedAgent:t,busy:r,isAutomatic:s?.isAutomatic,resumeAgent:s?.resumeAgent})}userServiceResolverRef;startedAt=new Date().toISOString();withLegacyForOwner(e,t){if(!this.ownerMasterUserId||e!==this.ownerMasterUserId||this.legacyDataUids.length===0)return t;let s=[...t];for(let n of this.legacyDataUids)s.includes(n)||s.push(n);return s}constructor(e){this.config=e,this.logger=zr("alfred",e.logger.level)}async initialize(){this.logger.info("Initializing Alfred..."),this.database=await Gs.create({backend:this.config.storage.backend??"sqlite",path:this.config.storage.path,connectionString:this.config.storage.connectionString});let e=this.database.getAdapter();try{let{SandboxChatRepository:M,ProjectAgentSessionRepository:J}=await Promise.resolve().then(()=>(nt(),it)),P=await new M(e).failOrphanedCodeAgentTasks();P>0&&this.logger.info({count:P},"v767 startup: marked orphaned chat-tasks as failed");let Q=await new J(e).failOrphanedSessions();Q>0&&this.logger.info({count:Q},"v768 startup: marked orphaned project-agent-sessions as failed")}catch(M){this.logger.warn({err:M},"v767/v768 startup orphan-cleanup failed (non-fatal)")}let t=new Hr(e);this.conversationRepo=t;let s=new Xr(e);this.userRepo=s;let n=new ii(e);this.auditRepo=n;let i=new Wr(e);this.memoryRepo=i;let r=new oi(e),a=new Kr(e);this.reminderRepo=a;let o=new Gr(e);this.noteRepo=o;{let{bereinigeAttributeNachSchema:M}=await Promise.resolve().then(()=>(ad(),m$));ks.setAttributSanitizer((J,O)=>M(J,O).bereinigt)}let c=new Yi(e),d=new Vr(e),u=new qr(e),h=new Zr(e);this.scheduledActionRepo=h;let p=new ai(e);this.activityRepo=p;let f=new hd(p,this.logger.child({component:"activity"})),g=new ra(e);this.skillHealthRepo=g;let y=new pd(g,this.logger.child({component:"skill-health"}),f);this.skillHealthTracker=y,this.logger.info("Storage initialized");let w=new Ia,_=this.loadSecurityRules();w.loadRules(_);let E;try{let{AuditLogger:M}=await Promise.resolve().then(()=>(ru(),vb)),J=this.config.logger.auditLogPath??"./data/logs/audit.log";E=new M(J),this.logger.info({path:J},"File-based audit logger initialized")}catch(M){this.logger.warn({err:M},"File-based audit logger init failed \u2014 DB-audit still active")}let T=new Ra(w,n,this.logger.child({component:"security"}),E);this.logger.info({ruleCount:_.length},"Security engine initialized");let k=nh(this.config.llm,this.logger.child({component:"llm"}));await k.initialize(),this.llmProvider=k;let b=new ia(e);this.usageRepo=b,k.setPersist((M,J,O,P,U,Q)=>{b.record(M,J,O,P,U,Q).catch(()=>{})});{let{ProviderPuls:M}=await Promise.resolve().then(()=>(TT(),I$)),{LebenszeichenRepository:J}=await Promise.resolve().then(()=>(nt(),it));this.lebenszeichenRepo=new J(e);let O=this.lebenszeichenRepo;this.providerPuls=new M(this.logger.child({component:"lebenszeichen"}),{speichere:m(U=>O.speicherePuls(U),"speichere"),ladeAlle:m(()=>O.ladePuls(),"ladeAlle")});let P=this.providerPuls;k.setPulsCallback(U=>{P.verarbeite(U)})}{let{WeltmodellBeobachter:M}=await Promise.resolve().then(()=>(o_(),a_));this.weltmodellBeobachter=new M(this.logger.child({component:"weltmodell"}),async J=>{if(!this.reasoningEngine){this.logger.debug({quelle:J.quelle},"v1175 Mini-Pass: Reasoning-Engine noch nicht bereit");return}await this.reasoningEngine.triggerMiniPass(J)})}{let{JobRegister:M}=await Promise.resolve().then(()=>(AT(),vT)),{JobRunsRepository:J}=await Promise.resolve().then(()=>(nt(),it)),O=this.userRepo;if(!O)throw new Error("Job-Register: userRepo fehlt");this.jobRegister=new M({logger:this.logger.child({component:"lebenszeichen"}),nodeId:this.config.cluster?.nodeId??"single",listMasters:m(()=>O.listMasters(),"listMasters"),listAll:m(()=>O.listAll(),"listAll"),claimSlot:m(P=>this.claimDailySlot(P),"claimSlot"),runs:new J(e)})}k.setBillingAlertCallback(M=>{this.logger.warn({...M},M.kind==="recovered"?"v868.3 LLM billing recovered":"v868 LLM billing failure (Owner-Satz kommt vom Lebenszeichen-W\xE4chter)")});let v=new la(e);this.serviceUsageRepo=v;let N=new Vl(k,c,this.logger.child({component:"embeddings"}));this.embeddingServiceRef=N,this.embeddingRepoRef=c;let I=this.config.llm.embeddings?.model??this.config.llm.default?.model??"unknown";if(k.supportsEmbeddings())try{await N.validateModelConsistency(I)>0&&setTimeout(async()=>{try{let J=await s.listAll(),O=0;for(let P of J){let U=await i.listAll(P.id);for(let Q of U)await N.embedAndStore(P.id,`${Q.key}: ${Q.value}`,"memory",Q.id),O++}this.logger.info({count:O,model:I},"Re-embedded all memories with new model")}catch(J){this.logger.error({err:J},"Background re-embedding failed")}},5e3)}catch(M){this.logger.error({err:M},"Embedding model consistency check failed")}let $=this.config.activeLearning?.enabled!==!1,L,V;$&&(L=new nd({llm:k,memoryRepo:i,logger:this.logger.child({component:"active-learning"}),embeddingService:N,minMessageLength:this.config.activeLearning?.minMessageLength,minConfidence:this.config.activeLearning?.minConfidence,maxExtractionsPerMinute:this.config.activeLearning?.maxExtractionsPerMinute}),V=new id(i,this.logger.child({component:"memory-retriever"}),N),this.logger.info("Active learning & memory retriever initialized"));let x=new na(e);this.summaryRepo=x;let D=new ld(k,x,this.logger.child({component:"summarizer"}));this.logger.info("Conversation summarizer initialized");let C=this.skillSandbox=new Pa(this.logger.child({component:"sandbox"})),R=this.skillRegistry=new Ma;R.register(new Ua),R.register(new Fa),R.register(new ja(this.config.search?{provider:this.config.search.provider,apiKey:this.config.search.apiKey,baseUrl:this.config.search.baseUrl}:void 0)),R.register(new Ba(a));let j=new za(o);R.register(j);let B=new ea(e);this.todoRepo=B;let F=new co(B);R.register(F),R.register(new Ha),R.register(new Xa);let fe=new Wa(i,N);R.register(fe),this.memorySkillRef=fe;let be=new Ka(k,R,C,T);R.register(be),this.delegateSkillRef=be;{let{ChatHistorySkill:M}=await Promise.resolve().then(()=>(ze(),Ze));R.register(new M(t))}{let{BrainstormingSkill:M}=await Promise.resolve().then(()=>(ze(),Ze)),{BrainstormingRepository:J}=await Promise.resolve().then(()=>(nt(),it)),O=new J(e),P=new M(O);P.setKgContextFn(async(U,Q)=>{if(!this.kgServiceRef)return"";let ue=this.ownerMasterUserId??U,le=await new ks(e).getFullGraph(ue,"personal"),ee=Q.toLowerCase(),je=le.entities.filter(de=>de.name.toLowerCase().includes(ee)||de.normalizedName.includes(ee)||de.attributes?.value&&String(de.attributes.value).toLowerCase().includes(ee)),ie=new Set(je.map(de=>de.id)),he=le.relations.filter(de=>ie.has(de.sourceEntityId)||ie.has(de.targetEntityId)),ne=new Set;for(let de of he)ne.add(de.sourceEntityId),ne.add(de.targetEntityId);let ve=le.entities.filter(de=>ie.has(de.id)||ne.has(de.id)),q=ve.slice(0,20).map(de=>{let Oe=Object.entries(de.attributes??{}).filter(([Xe])=>!["skillName","type","memoryKey","memoryConfidence"].includes(Xe)).map(([Xe,st])=>`${Xe}=${String(st).slice(0,60)}`).join(", ");return`- [${de.entityType}] ${de.name}${Oe?` (${Oe})`:""}`}),X=he.slice(0,15).map(de=>{let Oe=ve.find(st=>st.id===de.sourceEntityId)?.name??"?",Xe=ve.find(st=>st.id===de.targetEntityId)?.name??"?";return`- ${Oe} \u2192 ${de.relationType} \u2192 ${Xe}`}),W="";try{W=(await i.search(ue,Q)).slice(0,5).map(Oe=>`- [memory] ${Oe.key}: ${Oe.value.slice(0,100)}`).join(`
8378
8378
  `)}catch{}return`Entities:
8379
8379
  ${q.join(`
8380
8380
  `)}
@@ -1 +1 @@
1
- <!DOCTYPE html><!--exmjf2Jpr25IuJk0JqSJp--><html lang="de"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/alfred/_next/static/css/f0761175a8b5e35f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/alfred/_next/static/chunks/webpack-a80a11427021d142.js"/><script src="/alfred/_next/static/chunks/8e6518bb-ac69cad76942bec4.js" async=""></script><script src="/alfred/_next/static/chunks/743-8d9b5b61ab50b7b3.js" async=""></script><script src="/alfred/_next/static/chunks/main-app-bf91f7268c1fdab4.js" async=""></script><script src="/alfred/_next/static/chunks/719-2880b6276161d80c.js" async=""></script><script src="/alfred/_next/static/chunks/app/layout-893502dcb97a8de9.js" async=""></script><meta name="robots" content="noindex"/><title>Alfred AI</title><meta name="description" content="Self-hosted AI Assistant"/><script src="/alfred/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden"><div hidden=""><!--$--><!--/$--></div><div class="flex items-center justify-center h-screen bg-[#0a0a0a]"><div class="text-gray-400">Verbinde...</div></div><script src="/alfred/_next/static/chunks/webpack-a80a11427021d142.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8719,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"ConfigProvider\"]\n3:I[6117,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"AuthGate\"]\n4:I[4314,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"Sidebar\"]\n5:I[8954,[],\"\"]\n6:I[5640,[],\"\"]\n7:I[2051,[],\"OutletBoundary\"]\n9:I[6658,[],\"AsyncMetadataOutlet\"]\nb:I[2051,[],\"ViewportBoundary\"]\nd:I[2051,[],\"MetadataBoundary\"]\ne:\"$Sreact.suspense\"\n10:I[7698,[],\"\"]\n:HL[\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"exmjf2Jpr25IuJk0JqSJp\",\"p\":\"/alfred\",\"c\":[\"\",\"_not-found\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"de\",\"children\":[\"$\",\"body\",null,{\"className\":\"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-full\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-y-auto\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L7\",null,{\"children\":[\"$L8\",[\"$\",\"$L9\",null,{\"promise\":\"$@a\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],null],[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$e\",null,{\"fallback\":null,\"children\":\"$Lf\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$10\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n8:null\n"])</script><script>self.__next_f.push([1,"a:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Alfred AI\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Self-hosted AI Assistant\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"f:\"$a:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--5UXDgFC68k3vIGntCtU7z--><html lang="de"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/alfred/_next/static/css/f0761175a8b5e35f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/alfred/_next/static/chunks/webpack-a80a11427021d142.js"/><script src="/alfred/_next/static/chunks/8e6518bb-ac69cad76942bec4.js" async=""></script><script src="/alfred/_next/static/chunks/743-8d9b5b61ab50b7b3.js" async=""></script><script src="/alfred/_next/static/chunks/main-app-bf91f7268c1fdab4.js" async=""></script><script src="/alfred/_next/static/chunks/719-2880b6276161d80c.js" async=""></script><script src="/alfred/_next/static/chunks/app/layout-893502dcb97a8de9.js" async=""></script><meta name="robots" content="noindex"/><title>Alfred AI</title><meta name="description" content="Self-hosted AI Assistant"/><script src="/alfred/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden"><div hidden=""><!--$--><!--/$--></div><div class="flex items-center justify-center h-screen bg-[#0a0a0a]"><div class="text-gray-400">Verbinde...</div></div><script src="/alfred/_next/static/chunks/webpack-a80a11427021d142.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8719,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"ConfigProvider\"]\n3:I[6117,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"AuthGate\"]\n4:I[4314,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"Sidebar\"]\n5:I[8954,[],\"\"]\n6:I[5640,[],\"\"]\n7:I[2051,[],\"OutletBoundary\"]\n9:I[6658,[],\"AsyncMetadataOutlet\"]\nb:I[2051,[],\"ViewportBoundary\"]\nd:I[2051,[],\"MetadataBoundary\"]\ne:\"$Sreact.suspense\"\n10:I[7698,[],\"\"]\n:HL[\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"5UXDgFC68k3vIGntCtU7z\",\"p\":\"/alfred\",\"c\":[\"\",\"_not-found\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"de\",\"children\":[\"$\",\"body\",null,{\"className\":\"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-full\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-y-auto\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L7\",null,{\"children\":[\"$L8\",[\"$\",\"$L9\",null,{\"promise\":\"$@a\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],null],[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$e\",null,{\"fallback\":null,\"children\":\"$Lf\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$10\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n8:null\n"])</script><script>self.__next_f.push([1,"a:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Alfred AI\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Self-hosted AI Assistant\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"f:\"$a:metadata\"\n"])</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><!--exmjf2Jpr25IuJk0JqSJp--><html lang="de"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/alfred/_next/static/css/f0761175a8b5e35f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/alfred/_next/static/chunks/webpack-a80a11427021d142.js"/><script src="/alfred/_next/static/chunks/8e6518bb-ac69cad76942bec4.js" async=""></script><script src="/alfred/_next/static/chunks/743-8d9b5b61ab50b7b3.js" async=""></script><script src="/alfred/_next/static/chunks/main-app-bf91f7268c1fdab4.js" async=""></script><script src="/alfred/_next/static/chunks/719-2880b6276161d80c.js" async=""></script><script src="/alfred/_next/static/chunks/app/layout-893502dcb97a8de9.js" async=""></script><meta name="robots" content="noindex"/><title>Alfred AI</title><meta name="description" content="Self-hosted AI Assistant"/><script src="/alfred/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden"><div hidden=""><!--$--><!--/$--></div><div class="flex items-center justify-center h-screen bg-[#0a0a0a]"><div class="text-gray-400">Verbinde...</div></div><script src="/alfred/_next/static/chunks/webpack-a80a11427021d142.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8719,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"ConfigProvider\"]\n3:I[6117,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"AuthGate\"]\n4:I[4314,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"Sidebar\"]\n5:I[8954,[],\"\"]\n6:I[5640,[],\"\"]\n7:I[2051,[],\"OutletBoundary\"]\n9:I[6658,[],\"AsyncMetadataOutlet\"]\nb:I[2051,[],\"ViewportBoundary\"]\nd:I[2051,[],\"MetadataBoundary\"]\ne:\"$Sreact.suspense\"\n10:I[7698,[],\"\"]\n:HL[\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"exmjf2Jpr25IuJk0JqSJp\",\"p\":\"/alfred\",\"c\":[\"\",\"_not-found\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"de\",\"children\":[\"$\",\"body\",null,{\"className\":\"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-full\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-y-auto\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L7\",null,{\"children\":[\"$L8\",[\"$\",\"$L9\",null,{\"promise\":\"$@a\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],null],[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$e\",null,{\"fallback\":null,\"children\":\"$Lf\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$10\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n8:null\n"])</script><script>self.__next_f.push([1,"a:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Alfred AI\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Self-hosted AI Assistant\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"f:\"$a:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--5UXDgFC68k3vIGntCtU7z--><html lang="de"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/alfred/_next/static/css/f0761175a8b5e35f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/alfred/_next/static/chunks/webpack-a80a11427021d142.js"/><script src="/alfred/_next/static/chunks/8e6518bb-ac69cad76942bec4.js" async=""></script><script src="/alfred/_next/static/chunks/743-8d9b5b61ab50b7b3.js" async=""></script><script src="/alfred/_next/static/chunks/main-app-bf91f7268c1fdab4.js" async=""></script><script src="/alfred/_next/static/chunks/719-2880b6276161d80c.js" async=""></script><script src="/alfred/_next/static/chunks/app/layout-893502dcb97a8de9.js" async=""></script><meta name="robots" content="noindex"/><title>Alfred AI</title><meta name="description" content="Self-hosted AI Assistant"/><script src="/alfred/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden"><div hidden=""><!--$--><!--/$--></div><div class="flex items-center justify-center h-screen bg-[#0a0a0a]"><div class="text-gray-400">Verbinde...</div></div><script src="/alfred/_next/static/chunks/webpack-a80a11427021d142.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8719,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"ConfigProvider\"]\n3:I[6117,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"AuthGate\"]\n4:I[4314,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"Sidebar\"]\n5:I[8954,[],\"\"]\n6:I[5640,[],\"\"]\n7:I[2051,[],\"OutletBoundary\"]\n9:I[6658,[],\"AsyncMetadataOutlet\"]\nb:I[2051,[],\"ViewportBoundary\"]\nd:I[2051,[],\"MetadataBoundary\"]\ne:\"$Sreact.suspense\"\n10:I[7698,[],\"\"]\n:HL[\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"5UXDgFC68k3vIGntCtU7z\",\"p\":\"/alfred\",\"c\":[\"\",\"_not-found\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"de\",\"children\":[\"$\",\"body\",null,{\"className\":\"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-full\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-y-auto\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L7\",null,{\"children\":[\"$L8\",[\"$\",\"$L9\",null,{\"promise\":\"$@a\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],null],[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$e\",null,{\"fallback\":null,\"children\":\"$Lf\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$10\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n8:null\n"])</script><script>self.__next_f.push([1,"a:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Alfred AI\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Self-hosted AI Assistant\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"f:\"$a:metadata\"\n"])</script></body></html>
@@ -0,0 +1 @@
1
+ self.__BUILD_MANIFEST=function(e,r,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:29,errorRate:1e-4,numBits:556,numHashes:14,bitArray:[0,0,r,r,1,1,r,r,e,r,r,e,e,e,e,e,r,r,r,e,r,r,r,r,r,e,r,e,r,r,r,e,r,r,e,r,r,e,e,e,e,e,e,e,e,e,r,r,e,r,r,e,r,e,e,r,r,r,r,e,e,e,r,r,e,e,e,r,e,r,r,r,e,r,e,r,e,r,r,r,r,r,r,e,e,e,r,r,r,e,r,r,r,e,e,e,e,e,e,r,r,r,e,e,r,r,r,r,e,e,r,e,e,e,r,r,r,e,e,e,r,e,r,e,r,e,r,e,r,r,r,e,r,e,e,r,e,r,r,r,e,e,r,e,e,e,e,e,e,r,r,r,r,r,e,e,e,e,e,e,r,r,e,e,e,r,e,e,e,e,r,e,e,r,r,r,e,e,e,r,r,e,r,e,r,e,r,e,e,e,r,e,e,e,r,r,r,e,r,r,e,r,r,e,r,e,e,r,r,e,e,e,e,e,e,e,r,e,e,r,e,e,e,e,e,r,e,r,r,e,r,e,r,r,e,r,r,r,r,r,e,r,e,r,e,r,e,r,e,r,r,r,e,r,e,r,e,e,e,e,r,e,e,r,e,r,r,e,e,e,r,e,e,r,r,r,r,r,r,e,e,r,e,e,e,r,r,e,r,r,e,r,r,r,r,e,r,e,e,r,r,e,r,r,r,e,r,e,e,e,e,e,r,e,e,r,r,r,e,e,e,e,e,r,e,e,r,r,r,r,r,e,e,e,e,e,e,e,r,r,r,e,e,r,r,e,r,r,r,r,e,r,e,e,r,e,e,e,e,r,e,r,e,r,r,r,e,r,e,r,e,r,r,r,r,e,r,e,e,e,e,r,r,r,r,r,e,r,e,r,r,r,r,e,e,r,r,r,r,r,r,r,e,e,e,e,r,e,e,r,e,r,e,e,e,r,e,r,e,r,e,e,r,e,e,e,e,r,e,r,e,r,e,r,r,e,e,r,e,e,e,r,e,e,e,e,e,e,r,e,e,e,e,e,e,e,e,e,r,r,e,r,e,r,e,r,r,r,r,r,r,e,r,r,r,r,e,e,e,e,r,r,e,e,r,e,r,e,r,e,e,e,e,r,r,e,r,r,e,r,r,r,e,r,r,r,e,r,e,r,r,e,r,e,e,r,e,r,e,e,r,e,r,r,e,r,e,r,r,e,r,e,r,e,e,e,r,e,r,e,e,e,r,e,e,e,e,e,r,e,r,e,e,e,e,e]},__routerFilterDynamic:{numItems:r,errorRate:1e-4,numBits:r,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-01ab52c470df0174.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
@@ -0,0 +1 @@
1
+ self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[74],{4875:(e,s,t)=>{"use strict";t.d(s,{LebenszeichenPage:()=>o});var a=t(8111),r=t(5271),l=t(5242),n=t(8719);function i(e){if(!e)return"—";let s=Math.round((Date.now()-Date.parse(e))/6e4);if(s<1)return"gerade eben";if(s<60)return"vor ".concat(s," min");let t=Math.round(s/60);return t<48?"vor ".concat(t," h"):"vor ".concat(Math.round(t/24)," Tagen")}function c(e){return"taeglich"===e.art?936e5:"woechentlich"===e.art?6912e5:Math.max(18e5,2*e.minuten*6e4)}let d={ok:"bg-emerald-500",warn:"bg-amber-400",bad:"bg-red-500"},h=[["vollpaesse","Vollp\xe4sse"],["rundgaenge","Rundg\xe4nge ohne LLM"],["miniPaesse","Mini-P\xe4sse"],["insightsGesendet","Insights gesendet"],["insightsAufgeschoben","aufgeschoben"],["insightsStill","still abgelegt"],["gateTreffer","Gate-Treffer"],["gateAusgesetzt","Gate ausgesetzt"],["aktionenAusgefuehrt","Aktionen ausgef\xfchrt"],["aktionenBestaetigung","zur Best\xe4tigung"],["aktionenBlockiert","blockiert"],["aktionenUebersprungen","\xfcbersprungen"],["aktionenFehlgeschlagen","fehlgeschlagen"],["vorgaengeAngelegt","Vorg\xe4nge angelegt"]];function x(e){let{zustand:s}=e;return(0,a.jsx)("span",{className:(0,l.A)("inline-block w-2.5 h-2.5 rounded-full",d[s])})}function o(){var e,s,t,d,o,m;let{client:g}=(0,n.U)(),[u,p]=(0,r.useState)(null),[j,b]=(0,r.useState)(!0),[f,N]=(0,r.useState)(null),y=(0,r.useCallback)(async()=>{b(!0);try{let e=await g.fetchLebenszeichen();p(e),N(e?null:"Keine Daten (Endpoint nicht verf\xfcgbar)")}catch(e){N(e.message)}finally{b(!1)}},[g]);(0,r.useEffect)(()=>{y();let e=setInterval(y,6e4);return()=>clearInterval(e)},[y]);let z=null!=(e=null==u?void 0:u.offen)?e:[];return(0,a.jsxs)("div",{className:"p-6 max-w-5xl mx-auto space-y-6",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("h1",{className:"text-xl font-semibold text-gray-200",children:"\uD83D\uDC93 Lebenszeichen"}),(0,a.jsx)("button",{onClick:y,className:"px-2.5 py-1 text-xs rounded border border-[#1f1f1f] text-gray-500 hover:text-gray-300",children:"Aktualisieren"})]}),j&&!u&&(0,a.jsx)("div",{className:"text-gray-500 text-sm",children:"Laden…"}),f&&(0,a.jsxs)("div",{className:"text-red-400 text-sm",children:["Fehler: ",f]}),u&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:(0,l.A)("rounded-lg px-4 py-2.5 text-xs border",z.length?"bg-red-500/5 border-red-500/30 text-red-300":"bg-emerald-500/5 border-emerald-500/20 text-emerald-300/80"),children:0===z.length?"✅ Keine offene Meldung — alle Tiers, Jobs und Datenquellen im Takt.":(0,a.jsx)("ul",{className:"space-y-1",children:z.map(e=>(0,a.jsxs)("li",{children:["⚠️ ",e.text," ",(0,a.jsxs)("span",{className:"text-gray-500",children:["(offen seit ",i(e.offenSeit),", zuletzt gemeldet ",i(e.zuletztGemeldet),")"]})]},e.key))})}),u.warum&&u.warum.length>0&&(0,a.jsxs)("section",{className:"bg-[#111111] border border-[#1f1f1f] rounded-xl p-4",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-1",children:"Warum? — Begr\xfcndungen der letzten Meldungen"}),(0,a.jsx)("div",{className:"text-xs text-gray-500 mb-3",children:'Deterministisch aus dem Pass: Art, Ausl\xf6ser (ge\xe4nderte Sektion mit erster Abweichung oder Zustandswechsel), Gate-Aussetzung, Zustellung. Im Chat gen\xfcgt „warum?".'}),(0,a.jsx)("ul",{className:"space-y-2 text-xs",children:u.warum.map(e=>(0,a.jsxs)("li",{className:"border-t border-[#1a1a1a] pt-2",children:[(0,a.jsxs)("div",{className:"flex flex-wrap gap-x-3 text-gray-400",children:[(0,a.jsx)("span",{className:"text-gray-200",children:i(e.zeit)}),(0,a.jsx)("span",{children:"vollpass"===e.art?"Vollpass":"minipass"===e.art?"Mini-Pass":"Ereignis-Pass"}),(0,a.jsx)("span",{className:(0,l.A)("gesendet"===e.zustellung?"text-emerald-400":"aufgeschoben"===e.zustellung?"text-amber-300":"text-gray-500"),children:e.zustellung}),e.dauerMs?(0,a.jsxs)("span",{children:[(e.dauerMs/1e3).toFixed(1)," s"]}):null,e.insights.length>0&&(0,a.jsxs)("span",{children:[e.insights.length," Meldung",1===e.insights.length?"":"en"]})]}),(0,a.jsxs)("div",{className:"text-gray-300",children:["Ausl\xf6ser: ",e.ausloeser.length?e.ausloeser.join(" \xb7 "):"Vollpass nach Zeitablauf"]}),e.gateAusgesetzt.length>0&&(0,a.jsxs)("div",{className:"text-amber-300",children:["Gate ausgesetzt: ",e.gateAusgesetzt.join(", ")]}),e.insights.length>0&&(0,a.jsx)("div",{className:"text-gray-500",children:e.insights.map(e=>"„".concat(e,'"')).join(", ")})]},e.zeit))})]}),u.kennzahlen&&(0,a.jsxs)("section",{className:"bg-[#111111] border border-[#1f1f1f] rounded-xl p-4",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-1",children:"Kennzahlen"}),(0,a.jsxs)("div",{className:"text-xs text-gray-500 mb-3",children:["gez\xe4hlt seit ",i(u.kennzahlen.seit)," — Tagesabschluss 23:50 schreibt sie als Messwerte, die Lern-Telemetrie (So 19:15) rechnet die Woche"]}),(0,a.jsx)("div",{className:"grid grid-cols-2 sm:grid-cols-4 lg:grid-cols-7 gap-2",children:h.map(e=>{var s,t,r;let[l,n]=e;return(0,a.jsxs)("div",{className:"rounded-lg border border-[#1a1a1a] px-3 py-2",children:[(0,a.jsx)("div",{className:"text-lg tabular-nums text-gray-200",children:null!=(t=null==(s=u.kennzahlen)?void 0:s.werte[l])?t:0}),(0,a.jsx)("div",{className:"text-[11px] text-gray-500 leading-tight",children:n}),u.kennzahlenGestern&&(0,a.jsxs)("div",{className:"text-[11px] text-gray-600 tabular-nums",children:["gestern ",null!=(r=u.kennzahlenGestern.werte[l])?r:0]})]},l)})}),u.kennzahlenGestern&&(0,a.jsxs)("div",{className:"mt-3 text-xs text-gray-500",children:["Tagesabschluss ",i(u.kennzahlenGestern.zeit),": Insights reagiert ",null!=(s=u.kennzahlenGestern.werte.insightsReagiert)?s:0," \xb7 verworfen ",null!=(t=u.kennzahlenGestern.werte.insightsVerworfen)?t:0," \xb7 abgelaufen ",null!=(d=u.kennzahlenGestern.werte.insightsAbgelaufen)?d:0," \xb7 Vorg\xe4nge erledigt ",null!=(o=u.kennzahlenGestern.werte.vorgaengeErledigt)?o:0," \xb7 LLM-Kosten $",(null!=(m=u.kennzahlenGestern.werte.kostenUsd)?m:0).toFixed(2)]})]}),u.adapter&&u.adapter.length>0&&(0,a.jsxs)("section",{className:"bg-[#111111] border border-[#1f1f1f] rounded-xl p-4",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-3",children:"Messaging-Adapter"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:u.adapter.map(e=>(0,a.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border border-[#1a1a1a] px-3 py-1.5 text-xs",children:[(0,a.jsx)(x,{zustand:"connected"===e.status?"ok":"bad"}),(0,a.jsx)("span",{className:"text-gray-200",children:e.platform}),(0,a.jsx)("span",{className:"text-gray-500",children:"connected"===e.status?"verbunden":"".concat(e.status).concat(e.getrenntSeitMs?" \xb7 seit ".concat(i(new Date(e.getrenntSeitMs).toISOString())):"")})]},e.platform))})]}),(0,a.jsxs)("section",{className:"bg-[#111111] border border-[#1f1f1f] rounded-xl p-4",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-3",children:"Provider-Puls"}),0===u.puls.length&&(0,a.jsx)("div",{className:"text-xs text-gray-500",children:"Noch keine LLM-Aufrufe seit Start."}),(0,a.jsxs)("table",{className:"w-full text-xs",children:[(0,a.jsx)("thead",{className:"text-gray-500 text-left",children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{className:"py-1 pr-2"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"Tier"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"Provider / Modell"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"Letzter Erfolg"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"Letzter Fehler"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"Klasse"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"Gest\xf6rt seit"}),(0,a.jsx)("th",{className:"py-1 text-right",children:"OK / Fehler"})]})}),(0,a.jsx)("tbody",{className:"text-gray-300",children:u.puls.map(e=>{var s;return(0,a.jsxs)("tr",{className:"border-t border-[#1a1a1a]",children:[(0,a.jsx)("td",{className:"py-1.5 pr-2",children:(0,a.jsx)(x,{zustand:e.letzterFehler?!e.letzterErfolg||e.letzterFehler>e.letzterErfolg?"bad":"ok":e.letzterErfolg?"ok":"warn"})}),(0,a.jsx)("td",{className:"py-1.5 pr-3 font-medium",children:e.tier}),(0,a.jsxs)("td",{className:"py-1.5 pr-3 text-gray-400",children:[e.provider," / ",e.model]}),(0,a.jsx)("td",{className:"py-1.5 pr-3",children:i(e.letzterErfolg)}),(0,a.jsx)("td",{className:"py-1.5 pr-3",children:i(e.letzterFehler)}),(0,a.jsx)("td",{className:"py-1.5 pr-3",children:null!=(s=e.fehlerKlasse)?s:"—"}),(0,a.jsx)("td",{className:"py-1.5 pr-3",children:e.gestoertSeit?i(e.gestoertSeit):"—"}),(0,a.jsxs)("td",{className:"py-1.5 text-right tabular-nums",children:[e.erfolge," / ",e.fehler]})]},e.tier)})})]})]}),(0,a.jsxs)("section",{className:"bg-[#111111] border border-[#1f1f1f] rounded-xl p-4",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-1",children:"Jobs im Register"}),(0,a.jsxs)("div",{className:"text-[11px] text-gray-500 mb-3",children:["Register gestartet ",i(u.registerGestartetAm)," \xb7 10-min-Raster \xb7 Nachholen nach Restart"]}),(0,a.jsxs)("table",{className:"w-full text-xs",children:[(0,a.jsx)("thead",{className:"text-gray-500 text-left",children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{className:"py-1 pr-2"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"Job"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"Takt"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"Bereich"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"Letzter Lauf"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"Ergebnis"}),(0,a.jsx)("th",{className:"py-1",children:"Z\xe4hler"})]})}),(0,a.jsx)("tbody",{className:"text-gray-300",children:u.jobs.map(e=>{var s,t,r,l,n,d;return(0,a.jsxs)("tr",{className:"border-t border-[#1a1a1a]",children:[(0,a.jsx)("td",{className:"py-1.5 pr-2",children:(0,a.jsx)(x,{zustand:(n=e,d=u.registerGestartetAm,n.letzterLauf?!1===n.letzterLauf.ok||Date.now()-Date.parse(n.letzterLauf.startedAt)>c(n.takt)?"bad":"ok":d&&Date.now()-Date.parse(d)>c(n.takt)?"bad":"warn")})}),(0,a.jsxs)("td",{className:"py-1.5 pr-3",children:[(0,a.jsx)("div",{className:"font-medium",children:e.key}),(0,a.jsx)("div",{className:"text-gray-500",children:e.beschreibung})]}),(0,a.jsx)("td",{className:"py-1.5 pr-3",children:"taeglich"===(l=e.takt).art?"t\xe4glich ".concat(l.um):"woechentlich"===l.art?"".concat(["So","Mo","Di","Mi","Do","Fr","Sa"][l.tag]," ").concat(l.um):"alle ".concat(l.minuten," min")}),(0,a.jsx)("td",{className:"py-1.5 pr-3",children:e.bereich}),(0,a.jsx)("td",{className:"py-1.5 pr-3",children:i(null==(s=e.letzterLauf)?void 0:s.startedAt)}),(0,a.jsx)("td",{className:"py-1.5 pr-3",children:e.letzterLauf?e.letzterLauf.ok?"ok":(0,a.jsx)("span",{className:"text-red-400",children:null!=(r=e.letzterLauf.fehler)?r:"Fehler"}):"—"}),(0,a.jsx)("td",{className:"py-1.5 text-gray-400",children:(null==(t=e.letzterLauf)?void 0:t.zaehler)?Object.entries(e.letzterLauf.zaehler).map(e=>{let[s,t]=e;return"".concat(s," ").concat(t)}).join(" \xb7 "):""})]},e.key)})})]})]}),(0,a.jsxs)("section",{className:"bg-[#111111] border border-[#1f1f1f] rounded-xl p-4",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-1",children:"Synthetische Proben"}),(0,a.jsxs)("div",{className:"text-[11px] text-gray-500 mb-3",children:["t\xe4glich 06:50 \xb7 ",u.proben.zeit?"zuletzt ".concat(i(u.proben.zeit)):"noch nicht gelaufen (erster Lauf 06:50)"]}),u.proben.ergebnisse.length>0&&(0,a.jsx)("ul",{className:"space-y-1 text-xs text-gray-300",children:u.proben.ergebnisse.map(e=>(0,a.jsxs)("li",{className:"flex items-start gap-2",children:[(0,a.jsx)(x,{zustand:e.ok?"ok":"bad"}),(0,a.jsx)("span",{className:"text-gray-500 w-12 shrink-0",children:e.art}),(0,a.jsx)("span",{className:"font-medium w-40 shrink-0",children:e.name}),(0,a.jsx)("span",{className:"text-gray-400",children:e.detail})]},"".concat(e.art,":").concat(e.name)))})]}),(0,a.jsxs)("section",{className:"bg-[#111111] border border-[#1f1f1f] rounded-xl p-4",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-3",children:"Letzte L\xe4ufe (job_runs)"}),(0,a.jsxs)("table",{className:"w-full text-xs",children:[(0,a.jsx)("thead",{className:"text-gray-500 text-left",children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{className:"py-1 pr-3",children:"Zeit"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"Job"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"User"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"Dauer"}),(0,a.jsx)("th",{className:"py-1 pr-3",children:"Ergebnis"}),(0,a.jsx)("th",{className:"py-1",children:"Z\xe4hler / Fehler"})]})}),(0,a.jsx)("tbody",{className:"text-gray-300",children:u.letzteLaeufe.map(e=>{var s;return(0,a.jsxs)("tr",{className:"border-t border-[#1a1a1a]",children:[(0,a.jsx)("td",{className:"py-1 pr-3 text-gray-400 whitespace-nowrap",children:new Date(e.startedAt).toLocaleString("de-AT")}),(0,a.jsx)("td",{className:"py-1 pr-3",children:e.jobKey}),(0,a.jsx)("td",{className:"py-1 pr-3 text-gray-500",children:e.userId?e.userId.slice(0,8):"global"}),(0,a.jsx)("td",{className:"py-1 pr-3 tabular-nums",children:e.finishedAt?"".concat(Math.max(0,Math.round((Date.parse(e.finishedAt)-Date.parse(e.startedAt))/1e3))," s"):"l\xe4uft"}),(0,a.jsx)("td",{className:"py-1 pr-3",children:void 0===e.ok?"…":e.ok?"ok":(0,a.jsx)("span",{className:"text-red-400",children:"Fehler"})}),(0,a.jsx)("td",{className:"py-1 text-gray-400",children:null!=(s=e.fehler)?s:e.zaehler?Object.entries(e.zaehler).map(e=>{let[s,t]=e;return"".concat(s," ").concat(t)}).join(" \xb7 "):""})]},e.id)})})]}),0===u.letzteLaeufe.length&&(0,a.jsx)("div",{className:"text-xs text-gray-500",children:"Noch keine L\xe4ufe — der erste Nachtjob schreibt ab 03:00."})]})]})]})}},5242:(e,s,t)=>{"use strict";t.d(s,{A:()=>a});let a=function(){for(var e,s,t=0,a="",r=arguments.length;t<r;t++)(e=arguments[t])&&(s=function e(s){var t,a,r="";if("string"==typeof s||"number"==typeof s)r+=s;else if("object"==typeof s)if(Array.isArray(s)){var l=s.length;for(t=0;t<l;t++)s[t]&&(a=e(s[t]))&&(r&&(r+=" "),r+=a)}else for(a in s)s[a]&&(r&&(r+=" "),r+=a);return r}(e))&&(a&&(a+=" "),a+=s);return a}},6283:(e,s,t)=>{Promise.resolve().then(t.bind(t,4875))}},e=>{e.O(0,[719,814,743,358],()=>e(e.s=6283)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- <!DOCTYPE html><!--exmjf2Jpr25IuJk0JqSJp--><html lang="de"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/alfred/_next/static/css/f0761175a8b5e35f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/alfred/_next/static/chunks/webpack-a80a11427021d142.js"/><script src="/alfred/_next/static/chunks/8e6518bb-ac69cad76942bec4.js" async=""></script><script src="/alfred/_next/static/chunks/743-8d9b5b61ab50b7b3.js" async=""></script><script src="/alfred/_next/static/chunks/main-app-bf91f7268c1fdab4.js" async=""></script><script src="/alfred/_next/static/chunks/719-2880b6276161d80c.js" async=""></script><script src="/alfred/_next/static/chunks/app/layout-893502dcb97a8de9.js" async=""></script><script src="/alfred/_next/static/chunks/app/background-tasks/page-06a7315f90f821da.js" async=""></script><title>Alfred AI</title><meta name="description" content="Self-hosted AI Assistant"/><script src="/alfred/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden"><div hidden=""><!--$--><!--/$--></div><div class="flex items-center justify-center h-screen bg-[#0a0a0a]"><div class="text-gray-400">Verbinde...</div></div><script src="/alfred/_next/static/chunks/webpack-a80a11427021d142.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8719,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"ConfigProvider\"]\n3:I[6117,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"AuthGate\"]\n4:I[4314,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"Sidebar\"]\n5:I[8954,[],\"\"]\n6:I[5640,[],\"\"]\n7:I[9854,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"488\",\"static/chunks/app/background-tasks/page-06a7315f90f821da.js\"],\"BackgroundTasksPage\"]\n8:I[2051,[],\"OutletBoundary\"]\na:I[6658,[],\"AsyncMetadataOutlet\"]\nc:I[2051,[],\"ViewportBoundary\"]\ne:I[2051,[],\"MetadataBoundary\"]\nf:\"$Sreact.suspense\"\n11:I[7698,[],\"\"]\n:HL[\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"exmjf2Jpr25IuJk0JqSJp\",\"p\":\"/alfred\",\"c\":[\"\",\"background-tasks\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"background-tasks\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"de\",\"children\":[\"$\",\"body\",null,{\"className\":\"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-full\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-y-auto\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]}]}]}]]}],{\"children\":[\"background-tasks\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L7\",null,{}],null,[\"$\",\"$L8\",null,{\"children\":[\"$L9\",[\"$\",\"$La\",null,{\"promise\":\"$@b\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}],null],[\"$\",\"$Le\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":\"$L10\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$11\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n9:null\n"])</script><script>self.__next_f.push([1,"b:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Alfred AI\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Self-hosted AI Assistant\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"10:\"$b:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--5UXDgFC68k3vIGntCtU7z--><html lang="de"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/alfred/_next/static/css/f0761175a8b5e35f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/alfred/_next/static/chunks/webpack-a80a11427021d142.js"/><script src="/alfred/_next/static/chunks/8e6518bb-ac69cad76942bec4.js" async=""></script><script src="/alfred/_next/static/chunks/743-8d9b5b61ab50b7b3.js" async=""></script><script src="/alfred/_next/static/chunks/main-app-bf91f7268c1fdab4.js" async=""></script><script src="/alfred/_next/static/chunks/719-2880b6276161d80c.js" async=""></script><script src="/alfred/_next/static/chunks/app/layout-893502dcb97a8de9.js" async=""></script><script src="/alfred/_next/static/chunks/app/background-tasks/page-06a7315f90f821da.js" async=""></script><title>Alfred AI</title><meta name="description" content="Self-hosted AI Assistant"/><script src="/alfred/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden"><div hidden=""><!--$--><!--/$--></div><div class="flex items-center justify-center h-screen bg-[#0a0a0a]"><div class="text-gray-400">Verbinde...</div></div><script src="/alfred/_next/static/chunks/webpack-a80a11427021d142.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8719,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"ConfigProvider\"]\n3:I[6117,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"AuthGate\"]\n4:I[4314,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"Sidebar\"]\n5:I[8954,[],\"\"]\n6:I[5640,[],\"\"]\n7:I[9854,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"488\",\"static/chunks/app/background-tasks/page-06a7315f90f821da.js\"],\"BackgroundTasksPage\"]\n8:I[2051,[],\"OutletBoundary\"]\na:I[6658,[],\"AsyncMetadataOutlet\"]\nc:I[2051,[],\"ViewportBoundary\"]\ne:I[2051,[],\"MetadataBoundary\"]\nf:\"$Sreact.suspense\"\n11:I[7698,[],\"\"]\n:HL[\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"5UXDgFC68k3vIGntCtU7z\",\"p\":\"/alfred\",\"c\":[\"\",\"background-tasks\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"background-tasks\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"de\",\"children\":[\"$\",\"body\",null,{\"className\":\"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-full\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-y-auto\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]}]}]}]]}],{\"children\":[\"background-tasks\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L7\",null,{}],null,[\"$\",\"$L8\",null,{\"children\":[\"$L9\",[\"$\",\"$La\",null,{\"promise\":\"$@b\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}],null],[\"$\",\"$Le\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":\"$L10\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$11\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n9:null\n"])</script><script>self.__next_f.push([1,"b:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Alfred AI\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Self-hosted AI Assistant\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"10:\"$b:metadata\"\n"])</script></body></html>
@@ -12,7 +12,7 @@ e:I[2051,[],"MetadataBoundary"]
12
12
  f:"$Sreact.suspense"
13
13
  11:I[7698,[],""]
14
14
  :HL["/alfred/_next/static/css/f0761175a8b5e35f.css","style"]
15
- 0:{"P":null,"b":"exmjf2Jpr25IuJk0JqSJp","p":"/alfred","c":["","background-tasks",""],"i":false,"f":[[["",{"children":["background-tasks",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/alfred/_next/static/css/f0761175a8b5e35f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"de","children":["$","body",null,{"className":"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","div",null,{"className":"flex h-full","children":[["$","$L4",null,{}],["$","main",null,{"className":"flex-1 overflow-y-auto","children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]}]}]]}],{"children":["background-tasks",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{}],null,["$","$L8",null,{"children":["$L9",["$","$La",null,{"promise":"$@b"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lc",null,{"children":"$Ld"}],null],["$","$Le",null,{"children":["$","div",null,{"hidden":true,"children":["$","$f",null,{"fallback":null,"children":"$L10"}]}]}]]}],false]],"m":"$undefined","G":["$11",[]],"s":false,"S":true}
15
+ 0:{"P":null,"b":"5UXDgFC68k3vIGntCtU7z","p":"/alfred","c":["","background-tasks",""],"i":false,"f":[[["",{"children":["background-tasks",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/alfred/_next/static/css/f0761175a8b5e35f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"de","children":["$","body",null,{"className":"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","div",null,{"className":"flex h-full","children":[["$","$L4",null,{}],["$","main",null,{"className":"flex-1 overflow-y-auto","children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]}]}]]}],{"children":["background-tasks",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{}],null,["$","$L8",null,{"children":["$L9",["$","$La",null,{"promise":"$@b"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lc",null,{"children":"$Ld"}],null],["$","$Le",null,{"children":["$","div",null,{"hidden":true,"children":["$","$f",null,{"fallback":null,"children":"$L10"}]}]}]]}],false]],"m":"$undefined","G":["$11",[]],"s":false,"S":true}
16
16
  d:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
17
17
  9:null
18
18
  b:{"metadata":[["$","title","0",{"children":"Alfred AI"}],["$","meta","1",{"name":"description","content":"Self-hosted AI Assistant"}]],"error":null,"digest":"$undefined"}
@@ -1 +1 @@
1
- <!DOCTYPE html><!--exmjf2Jpr25IuJk0JqSJp--><html lang="de"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/alfred/_next/static/css/f0761175a8b5e35f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/alfred/_next/static/chunks/webpack-a80a11427021d142.js"/><script src="/alfred/_next/static/chunks/8e6518bb-ac69cad76942bec4.js" async=""></script><script src="/alfred/_next/static/chunks/743-8d9b5b61ab50b7b3.js" async=""></script><script src="/alfred/_next/static/chunks/main-app-bf91f7268c1fdab4.js" async=""></script><script src="/alfred/_next/static/chunks/719-2880b6276161d80c.js" async=""></script><script src="/alfred/_next/static/chunks/app/layout-893502dcb97a8de9.js" async=""></script><script src="/alfred/_next/static/chunks/915-660ab09c4b0a3b92.js" async=""></script><script src="/alfred/_next/static/chunks/550-7b038e1d67d66931.js" async=""></script><script src="/alfred/_next/static/chunks/app/chat/page-278ea057f23c2397.js" async=""></script><title>Alfred AI</title><meta name="description" content="Self-hosted AI Assistant"/><script src="/alfred/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden"><div hidden=""><!--$--><!--/$--></div><div class="flex items-center justify-center h-screen bg-[#0a0a0a]"><div class="text-gray-400">Verbinde...</div></div><script src="/alfred/_next/static/chunks/webpack-a80a11427021d142.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8719,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"ConfigProvider\"]\n3:I[6117,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"AuthGate\"]\n4:I[4314,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"Sidebar\"]\n5:I[8954,[],\"\"]\n6:I[5640,[],\"\"]\n7:I[9550,[\"915\",\"static/chunks/915-660ab09c4b0a3b92.js\",\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"550\",\"static/chunks/550-7b038e1d67d66931.js\",\"457\",\"static/chunks/app/chat/page-278ea057f23c2397.js\"],\"ChatPage\"]\n8:I[2051,[],\"OutletBoundary\"]\na:I[6658,[],\"AsyncMetadataOutlet\"]\nc:I[2051,[],\"ViewportBoundary\"]\ne:I[2051,[],\"MetadataBoundary\"]\nf:\"$Sreact.suspense\"\n11:I[7698,[],\"\"]\n:HL[\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"exmjf2Jpr25IuJk0JqSJp\",\"p\":\"/alfred\",\"c\":[\"\",\"chat\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"chat\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"de\",\"children\":[\"$\",\"body\",null,{\"className\":\"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-full\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-y-auto\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]}]}]}]]}],{\"children\":[\"chat\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L7\",null,{}],null,[\"$\",\"$L8\",null,{\"children\":[\"$L9\",[\"$\",\"$La\",null,{\"promise\":\"$@b\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}],null],[\"$\",\"$Le\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":\"$L10\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$11\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n9:null\n"])</script><script>self.__next_f.push([1,"b:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Alfred AI\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Self-hosted AI Assistant\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"10:\"$b:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--5UXDgFC68k3vIGntCtU7z--><html lang="de"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/alfred/_next/static/css/f0761175a8b5e35f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/alfred/_next/static/chunks/webpack-a80a11427021d142.js"/><script src="/alfred/_next/static/chunks/8e6518bb-ac69cad76942bec4.js" async=""></script><script src="/alfred/_next/static/chunks/743-8d9b5b61ab50b7b3.js" async=""></script><script src="/alfred/_next/static/chunks/main-app-bf91f7268c1fdab4.js" async=""></script><script src="/alfred/_next/static/chunks/719-2880b6276161d80c.js" async=""></script><script src="/alfred/_next/static/chunks/app/layout-893502dcb97a8de9.js" async=""></script><script src="/alfred/_next/static/chunks/915-660ab09c4b0a3b92.js" async=""></script><script src="/alfred/_next/static/chunks/550-7b038e1d67d66931.js" async=""></script><script src="/alfred/_next/static/chunks/app/chat/page-278ea057f23c2397.js" async=""></script><title>Alfred AI</title><meta name="description" content="Self-hosted AI Assistant"/><script src="/alfred/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden"><div hidden=""><!--$--><!--/$--></div><div class="flex items-center justify-center h-screen bg-[#0a0a0a]"><div class="text-gray-400">Verbinde...</div></div><script src="/alfred/_next/static/chunks/webpack-a80a11427021d142.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8719,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"ConfigProvider\"]\n3:I[6117,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"AuthGate\"]\n4:I[4314,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"Sidebar\"]\n5:I[8954,[],\"\"]\n6:I[5640,[],\"\"]\n7:I[9550,[\"915\",\"static/chunks/915-660ab09c4b0a3b92.js\",\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"550\",\"static/chunks/550-7b038e1d67d66931.js\",\"457\",\"static/chunks/app/chat/page-278ea057f23c2397.js\"],\"ChatPage\"]\n8:I[2051,[],\"OutletBoundary\"]\na:I[6658,[],\"AsyncMetadataOutlet\"]\nc:I[2051,[],\"ViewportBoundary\"]\ne:I[2051,[],\"MetadataBoundary\"]\nf:\"$Sreact.suspense\"\n11:I[7698,[],\"\"]\n:HL[\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"5UXDgFC68k3vIGntCtU7z\",\"p\":\"/alfred\",\"c\":[\"\",\"chat\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"chat\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"de\",\"children\":[\"$\",\"body\",null,{\"className\":\"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-full\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-y-auto\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]}]}]}]]}],{\"children\":[\"chat\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L7\",null,{}],null,[\"$\",\"$L8\",null,{\"children\":[\"$L9\",[\"$\",\"$La\",null,{\"promise\":\"$@b\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}],null],[\"$\",\"$Le\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":\"$L10\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$11\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n9:null\n"])</script><script>self.__next_f.push([1,"b:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Alfred AI\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Self-hosted AI Assistant\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"10:\"$b:metadata\"\n"])</script></body></html>
@@ -12,7 +12,7 @@ e:I[2051,[],"MetadataBoundary"]
12
12
  f:"$Sreact.suspense"
13
13
  11:I[7698,[],""]
14
14
  :HL["/alfred/_next/static/css/f0761175a8b5e35f.css","style"]
15
- 0:{"P":null,"b":"exmjf2Jpr25IuJk0JqSJp","p":"/alfred","c":["","chat",""],"i":false,"f":[[["",{"children":["chat",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/alfred/_next/static/css/f0761175a8b5e35f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"de","children":["$","body",null,{"className":"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","div",null,{"className":"flex h-full","children":[["$","$L4",null,{}],["$","main",null,{"className":"flex-1 overflow-y-auto","children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]}]}]]}],{"children":["chat",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{}],null,["$","$L8",null,{"children":["$L9",["$","$La",null,{"promise":"$@b"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lc",null,{"children":"$Ld"}],null],["$","$Le",null,{"children":["$","div",null,{"hidden":true,"children":["$","$f",null,{"fallback":null,"children":"$L10"}]}]}]]}],false]],"m":"$undefined","G":["$11",[]],"s":false,"S":true}
15
+ 0:{"P":null,"b":"5UXDgFC68k3vIGntCtU7z","p":"/alfred","c":["","chat",""],"i":false,"f":[[["",{"children":["chat",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/alfred/_next/static/css/f0761175a8b5e35f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"de","children":["$","body",null,{"className":"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","div",null,{"className":"flex h-full","children":[["$","$L4",null,{}],["$","main",null,{"className":"flex-1 overflow-y-auto","children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]}]}]]}],{"children":["chat",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{}],null,["$","$L8",null,{"children":["$L9",["$","$La",null,{"promise":"$@b"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lc",null,{"children":"$Ld"}],null],["$","$Le",null,{"children":["$","div",null,{"hidden":true,"children":["$","$f",null,{"fallback":null,"children":"$L10"}]}]}]]}],false]],"m":"$undefined","G":["$11",[]],"s":false,"S":true}
16
16
  d:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
17
17
  9:null
18
18
  b:{"metadata":[["$","title","0",{"children":"Alfred AI"}],["$","meta","1",{"name":"description","content":"Self-hosted AI Assistant"}]],"error":null,"digest":"$undefined"}
@@ -1 +1 @@
1
- <!DOCTYPE html><!--exmjf2Jpr25IuJk0JqSJp--><html lang="de"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/alfred/_next/static/css/f0761175a8b5e35f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/alfred/_next/static/chunks/webpack-a80a11427021d142.js"/><script src="/alfred/_next/static/chunks/8e6518bb-ac69cad76942bec4.js" async=""></script><script src="/alfred/_next/static/chunks/743-8d9b5b61ab50b7b3.js" async=""></script><script src="/alfred/_next/static/chunks/main-app-bf91f7268c1fdab4.js" async=""></script><script src="/alfred/_next/static/chunks/719-2880b6276161d80c.js" async=""></script><script src="/alfred/_next/static/chunks/app/layout-893502dcb97a8de9.js" async=""></script><script src="/alfred/_next/static/chunks/app/cli-usage/page-6ebfcc4560abe7d3.js" async=""></script><title>Alfred AI</title><meta name="description" content="Self-hosted AI Assistant"/><script src="/alfred/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden"><div hidden=""><!--$--><!--/$--></div><div class="flex items-center justify-center h-screen bg-[#0a0a0a]"><div class="text-gray-400">Verbinde...</div></div><script src="/alfred/_next/static/chunks/webpack-a80a11427021d142.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8719,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"ConfigProvider\"]\n3:I[6117,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"AuthGate\"]\n4:I[4314,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"Sidebar\"]\n5:I[8954,[],\"\"]\n6:I[5640,[],\"\"]\n7:I[7740,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"41\",\"static/chunks/app/cli-usage/page-6ebfcc4560abe7d3.js\"],\"CliUsagePage\"]\n8:I[2051,[],\"OutletBoundary\"]\na:I[6658,[],\"AsyncMetadataOutlet\"]\nc:I[2051,[],\"ViewportBoundary\"]\ne:I[2051,[],\"MetadataBoundary\"]\nf:\"$Sreact.suspense\"\n11:I[7698,[],\"\"]\n:HL[\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"exmjf2Jpr25IuJk0JqSJp\",\"p\":\"/alfred\",\"c\":[\"\",\"cli-usage\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"cli-usage\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"de\",\"children\":[\"$\",\"body\",null,{\"className\":\"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-full\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-y-auto\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]}]}]}]]}],{\"children\":[\"cli-usage\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L7\",null,{}],null,[\"$\",\"$L8\",null,{\"children\":[\"$L9\",[\"$\",\"$La\",null,{\"promise\":\"$@b\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}],null],[\"$\",\"$Le\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":\"$L10\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$11\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n9:null\n"])</script><script>self.__next_f.push([1,"b:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Alfred AI\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Self-hosted AI Assistant\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"10:\"$b:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--5UXDgFC68k3vIGntCtU7z--><html lang="de"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/alfred/_next/static/css/f0761175a8b5e35f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/alfred/_next/static/chunks/webpack-a80a11427021d142.js"/><script src="/alfred/_next/static/chunks/8e6518bb-ac69cad76942bec4.js" async=""></script><script src="/alfred/_next/static/chunks/743-8d9b5b61ab50b7b3.js" async=""></script><script src="/alfred/_next/static/chunks/main-app-bf91f7268c1fdab4.js" async=""></script><script src="/alfred/_next/static/chunks/719-2880b6276161d80c.js" async=""></script><script src="/alfred/_next/static/chunks/app/layout-893502dcb97a8de9.js" async=""></script><script src="/alfred/_next/static/chunks/app/cli-usage/page-6ebfcc4560abe7d3.js" async=""></script><title>Alfred AI</title><meta name="description" content="Self-hosted AI Assistant"/><script src="/alfred/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden"><div hidden=""><!--$--><!--/$--></div><div class="flex items-center justify-center h-screen bg-[#0a0a0a]"><div class="text-gray-400">Verbinde...</div></div><script src="/alfred/_next/static/chunks/webpack-a80a11427021d142.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8719,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"ConfigProvider\"]\n3:I[6117,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"AuthGate\"]\n4:I[4314,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"177\",\"static/chunks/app/layout-893502dcb97a8de9.js\"],\"Sidebar\"]\n5:I[8954,[],\"\"]\n6:I[5640,[],\"\"]\n7:I[7740,[\"719\",\"static/chunks/719-2880b6276161d80c.js\",\"41\",\"static/chunks/app/cli-usage/page-6ebfcc4560abe7d3.js\"],\"CliUsagePage\"]\n8:I[2051,[],\"OutletBoundary\"]\na:I[6658,[],\"AsyncMetadataOutlet\"]\nc:I[2051,[],\"ViewportBoundary\"]\ne:I[2051,[],\"MetadataBoundary\"]\nf:\"$Sreact.suspense\"\n11:I[7698,[],\"\"]\n:HL[\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"5UXDgFC68k3vIGntCtU7z\",\"p\":\"/alfred\",\"c\":[\"\",\"cli-usage\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"cli-usage\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/alfred/_next/static/css/f0761175a8b5e35f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"de\",\"children\":[\"$\",\"body\",null,{\"className\":\"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-full\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-y-auto\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]}]}]}]]}],{\"children\":[\"cli-usage\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L7\",null,{}],null,[\"$\",\"$L8\",null,{\"children\":[\"$L9\",[\"$\",\"$La\",null,{\"promise\":\"$@b\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}],null],[\"$\",\"$Le\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":\"$L10\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$11\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n9:null\n"])</script><script>self.__next_f.push([1,"b:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Alfred AI\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Self-hosted AI Assistant\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"10:\"$b:metadata\"\n"])</script></body></html>
@@ -12,7 +12,7 @@ e:I[2051,[],"MetadataBoundary"]
12
12
  f:"$Sreact.suspense"
13
13
  11:I[7698,[],""]
14
14
  :HL["/alfred/_next/static/css/f0761175a8b5e35f.css","style"]
15
- 0:{"P":null,"b":"exmjf2Jpr25IuJk0JqSJp","p":"/alfred","c":["","cli-usage",""],"i":false,"f":[[["",{"children":["cli-usage",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/alfred/_next/static/css/f0761175a8b5e35f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"de","children":["$","body",null,{"className":"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","div",null,{"className":"flex h-full","children":[["$","$L4",null,{}],["$","main",null,{"className":"flex-1 overflow-y-auto","children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]}]}]]}],{"children":["cli-usage",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{}],null,["$","$L8",null,{"children":["$L9",["$","$La",null,{"promise":"$@b"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lc",null,{"children":"$Ld"}],null],["$","$Le",null,{"children":["$","div",null,{"hidden":true,"children":["$","$f",null,{"fallback":null,"children":"$L10"}]}]}]]}],false]],"m":"$undefined","G":["$11",[]],"s":false,"S":true}
15
+ 0:{"P":null,"b":"5UXDgFC68k3vIGntCtU7z","p":"/alfred","c":["","cli-usage",""],"i":false,"f":[[["",{"children":["cli-usage",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/alfred/_next/static/css/f0761175a8b5e35f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"de","children":["$","body",null,{"className":"bg-[#0a0a0a] text-gray-200 h-screen overflow-hidden","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","div",null,{"className":"flex h-full","children":[["$","$L4",null,{}],["$","main",null,{"className":"flex-1 overflow-y-auto","children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]}]}]]}],{"children":["cli-usage",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{}],null,["$","$L8",null,{"children":["$L9",["$","$La",null,{"promise":"$@b"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lc",null,{"children":"$Ld"}],null],["$","$Le",null,{"children":["$","div",null,{"hidden":true,"children":["$","$f",null,{"fallback":null,"children":"$L10"}]}]}]]}],false]],"m":"$undefined","G":["$11",[]],"s":false,"S":true}
16
16
  d:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
17
17
  9:null
18
18
  b:{"metadata":[["$","title","0",{"children":"Alfred AI"}],["$","meta","1",{"name":"description","content":"Self-hosted AI Assistant"}]],"error":null,"digest":"$undefined"}