nodal-agents 0.4.2 → 0.4.4

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 (130) hide show
  1. package/README.md +12 -12
  2. package/package.json +2 -1
  3. package/runner.js +247 -66
  4. package/web/.next/BUILD_ID +1 -1
  5. package/web/.next/build-manifest.json +2 -2
  6. package/web/.next/prerender-manifest.json +3 -3
  7. package/web/.next/server/app/(dashboard)/agents/[id]/edit/page.js +3 -3
  8. package/web/.next/server/app/(dashboard)/agents/[id]/edit/page.js.nft.json +1 -1
  9. package/web/.next/server/app/(dashboard)/agents/[id]/edit/page_client-reference-manifest.js +1 -1
  10. package/web/.next/server/app/(dashboard)/agents/[id]/telegram/page.js +2 -2
  11. package/web/.next/server/app/(dashboard)/agents/[id]/telegram/page_client-reference-manifest.js +1 -1
  12. package/web/.next/server/app/(dashboard)/agents/page.js +2 -2
  13. package/web/.next/server/app/(dashboard)/agents/page_client-reference-manifest.js +1 -1
  14. package/web/.next/server/app/(dashboard)/approvals/page.js +2 -2
  15. package/web/.next/server/app/(dashboard)/approvals/page.js.nft.json +1 -1
  16. package/web/.next/server/app/(dashboard)/approvals/page_client-reference-manifest.js +1 -1
  17. package/web/.next/server/app/(dashboard)/automations/page.js +2 -2
  18. package/web/.next/server/app/(dashboard)/automations/page_client-reference-manifest.js +1 -1
  19. package/web/.next/server/app/(dashboard)/billing/page.js +2 -2
  20. package/web/.next/server/app/(dashboard)/billing/page_client-reference-manifest.js +1 -1
  21. package/web/.next/server/app/(dashboard)/chat/page.js +1 -1
  22. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  23. package/web/.next/server/app/(dashboard)/connectors/page.js +1 -1
  24. package/web/.next/server/app/(dashboard)/connectors/page.js.nft.json +1 -1
  25. package/web/.next/server/app/(dashboard)/connectors/page_client-reference-manifest.js +1 -1
  26. package/web/.next/server/app/(dashboard)/credentials/page.js +1 -1
  27. package/web/.next/server/app/(dashboard)/credentials/page.js.nft.json +1 -1
  28. package/web/.next/server/app/(dashboard)/credentials/page_client-reference-manifest.js +1 -1
  29. package/web/.next/server/app/(dashboard)/jobs/[id]/page.js +2 -2
  30. package/web/.next/server/app/(dashboard)/jobs/[id]/page_client-reference-manifest.js +1 -1
  31. package/web/.next/server/app/(dashboard)/jobs/page.js +2 -2
  32. package/web/.next/server/app/(dashboard)/jobs/page.js.nft.json +1 -1
  33. package/web/.next/server/app/(dashboard)/jobs/page_client-reference-manifest.js +1 -1
  34. package/web/.next/server/app/(dashboard)/llm-providers/page.js +1 -1
  35. package/web/.next/server/app/(dashboard)/llm-providers/page_client-reference-manifest.js +1 -1
  36. package/web/.next/server/app/(dashboard)/logs/page.js +2 -2
  37. package/web/.next/server/app/(dashboard)/logs/page_client-reference-manifest.js +1 -1
  38. package/web/.next/server/app/(dashboard)/mcp/page.js +1 -1
  39. package/web/.next/server/app/(dashboard)/mcp/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/(dashboard)/memories/page.js +2 -2
  41. package/web/.next/server/app/(dashboard)/memories/page_client-reference-manifest.js +1 -1
  42. package/web/.next/server/app/(dashboard)/page.js +4 -4
  43. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  44. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  45. package/web/.next/server/app/(dashboard)/settings/page.js +2 -2
  46. package/web/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  47. package/web/.next/server/app/(dashboard)/skills/[id]/edit/page.js +1 -1
  48. package/web/.next/server/app/(dashboard)/skills/[id]/edit/page.js.nft.json +1 -1
  49. package/web/.next/server/app/(dashboard)/skills/[id]/edit/page_client-reference-manifest.js +1 -1
  50. package/web/.next/server/app/(dashboard)/skills/new/page.js +2 -2
  51. package/web/.next/server/app/(dashboard)/skills/new/page.js.nft.json +1 -1
  52. package/web/.next/server/app/(dashboard)/skills/new/page_client-reference-manifest.js +1 -1
  53. package/web/.next/server/app/(dashboard)/skills/page.js +1 -1
  54. package/web/.next/server/app/(dashboard)/skills/page_client-reference-manifest.js +1 -1
  55. package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  56. package/web/.next/server/app/_global-error.html +1 -1
  57. package/web/.next/server/app/_global-error.rsc +2 -2
  58. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  59. package/web/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  60. package/web/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  61. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  62. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +2 -2
  63. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  64. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  65. package/web/.next/server/app/_not-found.html +1 -1
  66. package/web/.next/server/app/_not-found.rsc +2 -2
  67. package/web/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  68. package/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  69. package/web/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  70. package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  71. package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  72. package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  73. package/web/.next/server/app/api/oauth/[provider]/callback/route.js +1 -1
  74. package/web/.next/server/app/login/page_client-reference-manifest.js +1 -1
  75. package/web/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/onboarding.html +1 -1
  77. package/web/.next/server/app/onboarding.rsc +2 -2
  78. package/web/.next/server/app/onboarding.segments/_full.segment.rsc +2 -2
  79. package/web/.next/server/app/onboarding.segments/_head.segment.rsc +1 -1
  80. package/web/.next/server/app/onboarding.segments/_index.segment.rsc +2 -2
  81. package/web/.next/server/app/onboarding.segments/_tree.segment.rsc +1 -1
  82. package/web/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +1 -1
  83. package/web/.next/server/app/onboarding.segments/onboarding.segment.rsc +1 -1
  84. package/web/.next/server/chunks/3233.js +1 -1
  85. package/web/.next/server/chunks/3889.js +1 -0
  86. package/web/.next/server/chunks/5329.js +1 -0
  87. package/web/.next/server/chunks/593.js +1 -0
  88. package/web/.next/server/chunks/7231.js +1 -0
  89. package/web/.next/server/chunks/7741.js +1 -1
  90. package/web/.next/server/middleware-build-manifest.js +1 -1
  91. package/web/.next/server/pages/404.html +1 -1
  92. package/web/.next/server/pages/500.html +1 -1
  93. package/web/.next/server/server-reference-manifest.js +1 -1
  94. package/web/.next/server/server-reference-manifest.json +1 -1
  95. package/web/.next/static/chunks/{9123-20653d928e33410a.js → 9123-67530ba510c58003.js} +1 -1
  96. package/web/.next/static/chunks/app/(dashboard)/agents/[id]/edit/page-a2c267f563cd1a70.js +2 -0
  97. package/web/.next/static/chunks/app/(dashboard)/agents/[id]/telegram/page-2d7cae43f5e6952a.js +1 -0
  98. package/web/.next/static/chunks/app/(dashboard)/agents/page-bed833ebdd3646fb.js +1 -0
  99. package/web/.next/static/chunks/app/(dashboard)/approvals/{page-79dea6e91956eeba.js → page-4b27762472802ce0.js} +1 -1
  100. package/web/.next/static/chunks/app/(dashboard)/automations/{page-3b863b7af8e2c1a3.js → page-9e5d2ce807ce1c37.js} +1 -1
  101. package/web/.next/static/chunks/app/(dashboard)/chat/page-8f81d7e3abb475a6.js +1 -0
  102. package/web/.next/static/chunks/app/(dashboard)/connectors/{page-4a437ba82f4086da.js → page-39b1d9560235d574.js} +1 -1
  103. package/web/.next/static/chunks/app/(dashboard)/jobs/[id]/page-112bb22a9ec43be0.js +1 -0
  104. package/web/.next/static/chunks/app/(dashboard)/jobs/{page-94a311f688a255d8.js → page-44351170ed5f9180.js} +1 -1
  105. package/web/.next/static/chunks/app/(dashboard)/{layout-e1b0d4fad2926646.js → layout-53e69de869cba0d0.js} +1 -1
  106. package/web/.next/static/chunks/app/(dashboard)/llm-providers/{page-e5e2c4e2b783d37f.js → page-8f6ce47ba228e38b.js} +1 -1
  107. package/web/.next/static/chunks/app/(dashboard)/mcp/page-cdf057e468c6e92e.js +1 -0
  108. package/web/.next/static/chunks/app/(dashboard)/memories/page-e706ab4aa681fa99.js +1 -0
  109. package/web/.next/static/chunks/app/(dashboard)/{page-fb50e1576a3ab2e4.js → page-29cfae3bf701076e.js} +1 -1
  110. package/web/.next/static/chunks/app/(dashboard)/settings/page-312ae27ae71ea6d1.js +1 -0
  111. package/web/.next/static/chunks/app/(dashboard)/skills/[id]/edit/page-89a8a30db5eb96e1.js +1 -0
  112. package/web/.next/static/chunks/app/(dashboard)/skills/new/page-46a424b203591560.js +1 -0
  113. package/web/.next/static/chunks/app/(dashboard)/skills/page-edad7bbd3230fb7a.js +1 -0
  114. package/web/.next/server/chunks/1945.js +0 -1
  115. package/web/.next/server/chunks/4839.js +0 -1
  116. package/web/.next/server/chunks/8206.js +0 -1
  117. package/web/.next/server/chunks/8398.js +0 -1
  118. package/web/.next/static/chunks/app/(dashboard)/agents/[id]/edit/page-a8e293c54c818084.js +0 -2
  119. package/web/.next/static/chunks/app/(dashboard)/agents/[id]/telegram/page-7a94ae67b2c3c9c3.js +0 -1
  120. package/web/.next/static/chunks/app/(dashboard)/agents/page-b258b8975ac6450b.js +0 -1
  121. package/web/.next/static/chunks/app/(dashboard)/chat/page-4d965bb7ee3732db.js +0 -1
  122. package/web/.next/static/chunks/app/(dashboard)/jobs/[id]/page-be20dcbf25c8f3ce.js +0 -1
  123. package/web/.next/static/chunks/app/(dashboard)/mcp/page-c071c54f76273ac4.js +0 -1
  124. package/web/.next/static/chunks/app/(dashboard)/memories/page-8ca0b34ad35eb1fa.js +0 -1
  125. package/web/.next/static/chunks/app/(dashboard)/settings/page-7b256e9c462e97f8.js +0 -1
  126. package/web/.next/static/chunks/app/(dashboard)/skills/[id]/edit/page-12930816795e8b20.js +0 -1
  127. package/web/.next/static/chunks/app/(dashboard)/skills/new/page-e3a19abaf7468db9.js +0 -1
  128. package/web/.next/static/chunks/app/(dashboard)/skills/page-43f1475a0bc9c45f.js +0 -1
  129. /package/web/.next/static/{ZuUX-HBTQOhLf0tFI6JQI → PV5qpGylrVW3jZ7zKHuhE}/_buildManifest.js +0 -0
  130. /package/web/.next/static/{ZuUX-HBTQOhLf0tFI6JQI → PV5qpGylrVW3jZ7zKHuhE}/_ssgManifest.js +0 -0
@@ -1220,4 +1220,4 @@ To: ${d.to??""}
1220
1220
  WHERE id IN (SELECT id FROM descendants)
1221
1221
  AND entity_id = ${b.entityId}
1222
1222
  AND status NOT IN ('completed', 'failed', 'cancelled')
1223
- `),(0,e.revalidatePath)("/jobs"),(0,e.revalidatePath)(`/jobs/${a}`),cT({status:"cancelled"})}catch(a){return console.error("[cancelJobAction]",a),cU("db_error","Failed to cancel job")}}let dq=g.Ik({agentId:g.Yj().guid(),botToken:g.Yj().min(20,"Token looks too short").max(200,"Token looks too long").regex(/^\d+:[A-Za-z0-9_-]+$/,"Token must look like 123456789:AAAAA...")});async function dr(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid agent id");let c=(0,y.Lf)(),[d]=await c.select({id:k.X6.id,slug:k.X6.slug,name:k.X6.name,botToken:k.X6.telegramBotToken,botUsername:k.X6.telegramBotUsername,lastSeenChatIdTelegram:k.X6.lastSeenChatIdTelegram}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,a),(0,k.eq)(k.X6.entityId,b.entityId)));if(!d)return cU("not_found","Agent not found");return cT({agentId:d.id,agentSlug:d.slug,agentName:d.name,status:d.botToken?"connected":"disconnected",botUsername:d.botUsername,lastSeenChatIdTelegram:d.lastSeenChatIdTelegram})}catch(a){return console.error("[getAgentTelegramConfigAction]",a),cU("db_error","Failed to load Telegram config")}}async function ds(a){try{let b,c=await cV(),d=dq.safeParse(a);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid input");let{agentId:f,botToken:g}=d.data,h=(0,y.Lf)(),[i]=await h.select({id:k.X6.id,slug:k.X6.slug,name:k.X6.name}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,f),(0,k.eq)(k.X6.entityId,c.entityId)));if(!i)return cU("not_found","Agent not found");try{b=await n(g)}catch(a){if(a instanceof l&&"telegram_invalid_token"===a.code)return cU("telegram_invalid_token","Telegram rejected this token. Double-check it from @BotFather.");throw a}let j=0;try{let a=await o({botToken:g,offset:-1,timeout:0,limit:1});a.length>0&&(j=Math.max(...a.map(a=>a.update_id))+1)}catch{}return await h.update(k.X6).set({telegramBotToken:g,telegramBotUsername:b.username,telegramOffset:j,updatedAt:new Date}).where((0,k.eq)(k.X6.id,f)),(0,e.revalidatePath)("/agents"),(0,e.revalidatePath)(`/agents/${f}/telegram`),cT({agentId:i.id,agentSlug:i.slug,agentName:i.name,status:"connected",botUsername:b.username,lastSeenChatIdTelegram:null})}catch(a){return console.error("[configureAgentTelegramAction]",a),cU("db_error","Failed to configure Telegram")}}async function dt(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid agent id");let c=(0,y.Lf)(),[d]=await c.select({id:k.X6.id}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,a),(0,k.eq)(k.X6.entityId,b.entityId)));if(!d)return cU("not_found","Agent not found");return await c.update(k.X6).set({telegramBotToken:null,telegramBotUsername:null,telegramOffset:null,updatedAt:new Date}).where((0,k.eq)(k.X6.id,a)),(0,e.revalidatePath)("/agents"),(0,e.revalidatePath)(`/agents/${a}/telegram`),cT(void 0)}catch(a){return console.error("[disconnectAgentTelegramAction]",a),cU("db_error","Failed to disconnect Telegram")}}let du=g.Ik({agentId:g.Yj().guid().optional(),category:g.k5(["preference","context","outcome","learned_rule"]).optional(),tag:g.Yj().min(1).max(80).optional(),archived:g.zM().default(!1),page:g.ai().int().min(1).default(1),pageSize:g.ai().int().min(1).max(200).default(50)});async function dv(a={}){try{let b=await cV(),c=du.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)(),e=await v(d,{entityId:b.entityId,agentId:c.data.agentId,category:c.data.category,tags:c.data.tag?[c.data.tag]:void 0,archived:c.data.archived,page:c.data.page,pageSize:c.data.pageSize,sort:"recent"}),f=Array.from(new Set(e.items.map(a=>a.agent_id).filter(a=>null!==a))),g=new Map;if(f.length>0)for(let a of(await d.select({id:k.X6.id,name:k.X6.name,slug:k.X6.slug}).from(k.X6).where((0,k.RV)(k.X6.id,f))))g.set(a.id,{name:a.name,slug:a.slug});let h=e.items.map(a=>{let b=a.agent_id?g.get(a.agent_id):null;return{...a,agentName:b?.name??null,agentSlug:b?.slug??null}});return cT({items:h,page:e.page,pageSize:e.pageSize,totalCount:e.totalCount,hasMore:e.hasMore})}catch(a){return console.error("[listMemoriesAction]",a),cU("db_error","Failed to load memories")}}async function dw(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid memory id");let c=(0,y.Lf)();return await s(c,a,b.entityId,{archived:!0}),(0,e.revalidatePath)("/memories"),cT(void 0)}catch(a){if(a instanceof q)return cU("not_found","Memory not found");return console.error("[archiveMemoryAction]",a),cU("db_error","Failed to archive memory")}}async function dx(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid memory id");let c=(0,y.Lf)();return await s(c,a,b.entityId,{archived:!1}),(0,e.revalidatePath)("/memories"),cT(void 0)}catch(a){if(a instanceof q)return cU("not_found","Memory not found");return console.error("[unarchiveMemoryAction]",a),cU("db_error","Failed to unarchive memory")}}async function dy(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid memory id");let c=(0,y.Lf)();return await t(c,a,b.entityId),(0,e.revalidatePath)("/memories"),cT(void 0)}catch(a){if(a instanceof q)return cU("not_found","Memory not found");return console.error("[deleteMemoryAction]",a),cU("db_error","Failed to delete memory")}}async function dz(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.select().from(k.tK).where((0,k.eq)(k.tK.entityId,a.entityId)),d=[...new Set(c.map(a=>a.credentialId).filter(a=>null!==a))],e=d.length>0?await b.select().from(k.z3).where((0,k.RV)(k.z3.id,d)):[],f=new Map;for(let a of e)f.set(a.id,a);let g=new Map;for(let a of e)try{let b=a.payload,c=b.startsWith("enc:v1:")?(0,w.Yc)(b):b,d=JSON.parse(c);g.set(a.id,{accountName:"string"==typeof d.accountName?d.accountName:null,expiresAt:"string"==typeof d.expiresAt&&d.expiresAt?new Date(d.expiresAt):null,scopes:"string"==typeof d.scopes?d.scopes:null})}catch{g.set(a.id,{accountName:null,expiresAt:null,scopes:null})}let h=c.map(a=>{let b=a.credentialId?f.get(a.credentialId):void 0,c=a.credentialId?g.get(a.credentialId)??null:null;return{id:a.id,slug:a.slug,name:a.name,authType:a.authType,active:a.active??!0,hasApiKey:!!a.apiKey,credentialId:a.credentialId??null,credentialName:b?.name??null,credentialType:b?b.type:null,credentialAccountName:c?.accountName??null,credentialExpiresAt:c?.expiresAt??null,credentialScopes:c?.scopes??null,createdAt:a.createdAt,updatedAt:a.updatedAt}}),i=F.Y.map(a=>({slug:a.slug,label:a.label,authType:a.authType,docsHint:a.docsHint,credentialType:a.credentialType??null}));return cT({instances:h,catalog:i})}catch(a){return console.error("[listConnectorsAction]",a),cU("db_error","Failed to load connectors")}}let dA=g.Ik({slug:g.Yj().min(1).max(80),name:g.Yj().min(1,"Name is required").max(120),apiKey:g.Yj().min(1,"API key is required")});async function dB(a){try{let b=await cV(),c=dA.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=F.Y.find(a=>a.slug===c.data.slug);if(!d)return cU("validation_failed","Unknown connector slug");if("api_key"!==d.authType)return cU("validation_failed",`Connector ${c.data.slug} uses ${d.authType}, not api_key`);let f=(0,y.Lf)(),g=(0,w.ph)(c.data.apiKey)?c.data.apiKey:(0,w.w)(c.data.apiKey),[h]=await f.insert(k.tK).values({entityId:b.entityId,slug:c.data.slug,name:c.data.name,apiKey:g,authType:"api_key",active:!0}).returning({id:k.tK.id});if(!h)return cU("db_error","Insert returned no row");return(0,e.revalidatePath)("/connectors"),cT({id:h.id})}catch(a){return console.error("[saveApiKeyConnectorAction]",a),cU("db_error","Failed to save connector")}}async function dC(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid connector id");let c=(0,y.Lf)(),[d]=await c.select({id:k.tK.id}).from(k.tK).where((0,k.Uo)((0,k.eq)(k.tK.id,a),(0,k.eq)(k.tK.entityId,b.entityId)));if(!d)return cU("not_found","Connector not found");return await c.delete(k.tK).where((0,k.eq)(k.tK.id,a)),(0,e.revalidatePath)("/connectors"),cT(void 0)}catch(a){return console.error("[deleteConnectorAction]",a),cU("db_error","Failed to delete connector")}}async function dD(){try{let a=await cV(),b=(0,y.Lf)(),c=(await b.select().from(k.h_).where((0,k.eq)(k.h_.entityId,a.entityId))).map(a=>({id:a.id,slug:a.slug,name:a.name,active:a.active??!0,hasApiKey:!!a.apiKey,apiKeyLast4:a.apiKeyLast4??null,toolCount:Array.isArray(a.availableTools)?a.availableTools.length:0,createdAt:a.createdAt})),d=I.map(a=>({slug:a.slug,label:a.label,description:a.description,docsHint:a.docsHint,keyPrefix:a.keyPrefix,serverUrl:a.serverUrl,transport:a.transport,command:a.command,args:a.args,envVarNames:a.envVarNames,status:a.status??"verified"}));return cT({instances:c,catalog:d})}catch(a){return console.error("[listMcpServersAction]",a),cU("db_error","Failed to load MCP connectors")}}let dE=g.Ik({slug:g.Yj().min(1).max(80),name:g.Yj().min(1,"Name is required").max(120),apiKey:g.Yj().max(2e3).optional(),url:g.Yj().url("Invalid URL").optional(),customSlug:g.Yj().min(2).max(30).regex(/^[a-z0-9-]+$/,"Slug must be lowercase letters, digits, dashes").optional(),customAuthScheme:g.k5(["header","query","bearer"]).optional(),customAuthParamName:g.Yj().min(1).max(100).optional(),customCommand:g.Yj().min(1).max(200).optional(),customArgs:g.YO(g.Yj().max(500)).max(20).optional(),customEnv:g.g1(g.Yj(),g.Yj().max(2e3)).optional()});async function dF(a){try{let b=await cV(),c=dE.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=I.find(a=>a.slug===c.data.slug);if(!d)return cU("validation_failed","Unknown MCP connector");let f="custom-http-mcp"===d.slug,g="custom-stdio-mcp"===d.slug,h=d.slug,i=d.transport,j=d.authScheme,l=d.authParamName;if(f){if(!c.data.customSlug)return cU("validation_failed","Server slug is required for custom MCP");if(!c.data.customAuthScheme)return cU("validation_failed","Auth scheme is required for custom MCP");if(h=c.data.customSlug,j=c.data.customAuthScheme,l="bearer"===c.data.customAuthScheme?"Authorization":c.data.customAuthParamName??"","bearer"!==j&&!l)return cU("validation_failed",`Auth param name is required for the "${j}" scheme`)}else if(g){if(!c.data.customSlug)return cU("validation_failed","Server slug is required for custom MCP");if(!c.data.customCommand)return cU("validation_failed","Command is required for stdio MCP");h=c.data.customSlug,i="stdio"}if(f||g){let a=(0,y.Lf)();if((await a.select({id:k.h_.id}).from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.entityId,b.entityId),(0,k.eq)(k.h_.slug,h)))).length>0)return cU("slug_taken",`Slug "${h}" is already used by another MCP server. Pick a different one.`)}if("http"===i){let a=(c.data.apiKey??"").trim();if(!a)return cU("validation_failed","API key is required");if(!f&&d.keyPrefix.length>0&&!d.keyPrefix.some(b=>a.startsWith(b))){let a=1===d.keyPrefix.length?`"${d.keyPrefix[0]}"`:`one of: ${d.keyPrefix.map(a=>`"${a}"`).join(", ")}`;return cU("validation_failed",`API key must start with ${a}`)}let g=d.serverUrl??c.data.url??null;if(!g)return cU("validation_failed",`${d.label} requires a server URL`);let i=[],m=null;try{if(m=await N({transport:"http",url:g,apiKey:a,authScheme:j,authParamName:l}),d.verifyToolName&&!f){let a=await m.client.callTool({name:d.verifyToolName,arguments:{}});if(!0===a.isError)return cU("mcp_connect_failed",`${d.label} rejected the API key.`)}i=m.tools.map(a=>({name:a.name,description:a.description??null}))}catch(b){let a=b instanceof Error?b.message:String(b);return cU("mcp_connect_failed",`Could not connect to ${d.label}: ${a}`)}finally{m&&await m.close().catch(()=>{})}let n=(0,y.Lf)(),o=(0,w.w)(a),[p]=await n.insert(k.h_).values({entityId:b.entityId,name:c.data.name,slug:h,transport:"http",url:g,apiKey:o,apiKeyLast4:(0,w.nK)(a),authScheme:j,authParamName:l,availableTools:i,active:!0}).returning({id:k.h_.id});if(!p)return cU("db_error","Insert returned no row");return(0,e.revalidatePath)("/mcp"),cT({id:p.id})}let m=g?c.data.customCommand:d.command??c.data.customCommand,n=c.data.customArgs??d.args??[],o=c.data.customEnv??{},p=[],q=null;try{p=(q=await N({transport:"stdio",command:m,args:n,env:o})).tools.map(a=>({name:a.name,description:a.description??null}))}catch(b){let a=b instanceof Error?b.message:String(b);return cU("mcp_connect_failed",`Could not start ${d.label} subprocess (${m}): ${a}`)}finally{q&&await q.close().catch(()=>{})}let r={};for(let[a,b]of Object.entries(o))r[a]=(0,w.w)(b);let s=(0,y.Lf)(),[t]=await s.insert(k.h_).values({entityId:b.entityId,name:c.data.name,slug:h,transport:"stdio",url:null,apiKey:null,apiKeyLast4:null,authScheme:null,authParamName:null,command:m,args:n,envVars:r,availableTools:p,active:!0}).returning({id:k.h_.id});if(!t)return cU("db_error","Insert returned no row");return(0,e.revalidatePath)("/mcp"),cT({id:t.id})}catch(a){return console.error("[createMcpServerFromCatalogAction]",a),cU("db_error","Failed to save MCP connector")}}async function dG(a,b){try{let c=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid MCP server id");let d=g.Yj().min(1,"Name is required").max(120).safeParse(b);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid name");let f=(0,y.Lf)(),[h]=await f.select({id:k.h_.id}).from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.id,a),(0,k.eq)(k.h_.entityId,c.entityId)));if(!h)return cU("not_found","MCP connector not found");return await f.update(k.h_).set({name:d.data,updatedAt:new Date}).where((0,k.eq)(k.h_.id,a)),(0,e.revalidatePath)("/mcp"),cT(void 0)}catch(a){return console.error("[renameMcpServerAction]",a),cU("db_error","Failed to rename MCP server")}}async function dH(a,b){try{let c=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid MCP server id");let d=g.Yj().min(1,"API key is required").max(2e3).safeParse(b);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid API key");let f=d.data.trim(),h=(0,y.Lf)(),[i]=await h.select({id:k.h_.id,slug:k.h_.slug,url:k.h_.url,authScheme:k.h_.authScheme,authParamName:k.h_.authParamName}).from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.id,a),(0,k.eq)(k.h_.entityId,c.entityId)));if(!i)return cU("not_found","MCP connector not found");let j=I.find(a=>a.slug===i.slug);if(j&&j.keyPrefix.length>0&&!j.keyPrefix.some(a=>f.startsWith(a))){let a=1===j.keyPrefix.length?`"${j.keyPrefix[0]}"`:`one of: ${j.keyPrefix.map(a=>`"${a}"`).join(", ")}`;return cU("validation_failed",`API key must start with ${a}`)}if(!i.url||!i.authScheme||!i.authParamName)return cU("validation_failed","MCP server has incomplete configuration");let l=[],m=null;try{m=await N({transport:"http",url:i.url,apiKey:f,authScheme:i.authScheme,authParamName:i.authParamName}),l=((await m.client.listTools()).tools??[]).map(a=>({name:a.name,description:a.description??null})),j?.verifyToolName&&await m.client.callTool({name:j.verifyToolName,arguments:{}})}catch(b){let a=b instanceof Error?b.message:"unknown error";return cU("mcp_connect_failed",`Couldn't verify the new key: ${a}`)}finally{m&&await m.close().catch(()=>{})}let n=(0,w.ph)(f)?f:(0,w.w)(f);return await h.update(k.h_).set({apiKey:n,apiKeyLast4:(0,w.nK)(f),availableTools:l,updatedAt:new Date}).where((0,k.eq)(k.h_.id,a)),(0,e.revalidatePath)("/mcp"),cT(void 0)}catch(a){return console.error("[updateMcpServerApiKeyAction]",a),cU("db_error","Failed to rotate MCP API key")}}async function dI(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid MCP server id");let c=(0,y.Lf)(),[d]=await c.select().from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.id,a),(0,k.eq)(k.h_.entityId,b.entityId)));if(!d)return cU("not_found","MCP connector not found");let e=d.envVars??{};return cT({id:d.id,name:d.name,slug:d.slug,transport:d.transport,url:d.url??null,authScheme:d.authScheme??null,authParamName:d.authParamName??null,command:d.command??null,args:Array.isArray(d.args)?d.args:[],envKeys:Object.keys(e),hasApiKey:!!d.apiKey,apiKeyLast4:d.apiKeyLast4??null})}catch(a){return console.error("[getMcpServerConfigAction]",a),cU("db_error","Failed to load MCP server config")}}let dJ=g.Ik({name:g.Yj().min(1,"Name is required").max(120),url:g.Yj().url("Invalid URL").optional(),authScheme:g.k5(["header","query","bearer"]).optional(),authParamName:g.Yj().max(100).optional(),apiKey:g.Yj().max(2e3).optional(),command:g.Yj().min(1).max(200).optional(),args:g.YO(g.Yj().max(500)).max(20).optional(),env:g.g1(g.Yj(),g.Yj().max(2e3)).optional()});async function dK(a,b){try{let c=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid MCP server id");let d=dJ.safeParse(b);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid input");let f=(0,y.Lf)(),[h]=await f.select().from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.id,a),(0,k.eq)(k.h_.entityId,c.entityId)));if(!h)return cU("not_found","MCP connector not found");let i=I.find(a=>a.slug===h.slug);if("http"===h.transport){let b,c=(d.data.url??h.url??"").trim();if(!c)return cU("validation_failed","Server URL is required");let g=d.data.authScheme??h.authScheme??"header",j="bearer"===g?"Authorization":(d.data.authParamName??h.authParamName??"").trim();if("bearer"!==g&&!j)return cU("validation_failed",`Auth param name is required for the "${g}" scheme`);let l=(d.data.apiKey??"").trim(),m=l.length>0;if(m){if(i&&i.keyPrefix.length>0&&!i.keyPrefix.some(a=>l.startsWith(a))){let a=1===i.keyPrefix.length?`"${i.keyPrefix[0]}"`:`one of: ${i.keyPrefix.map(a=>`"${a}"`).join(", ")}`;return cU("validation_failed",`API key must start with ${a}`)}b=l}else{if(!h.apiKey)return cU("validation_failed","No stored API key — provide one to connect");try{b=(0,w.Yc)(h.apiKey)}catch{return cU("validation_failed","Stored API key is unreadable — re-enter it")}}let n=[],o=null;try{n=(o=await N({transport:"http",url:c,apiKey:b,authScheme:g,authParamName:j})).tools.map(a=>({name:a.name,description:a.description??null}))}catch(b){let a=b instanceof Error?b.message:String(b);return cU("mcp_connect_failed",`Could not connect with the new config: ${a}`)}finally{o&&await o.close().catch(()=>{})}return await f.update(k.h_).set({name:d.data.name,url:c,authScheme:g,authParamName:j,availableTools:n,...m?{apiKey:(0,w.w)(b),apiKeyLast4:(0,w.nK)(b)}:{},updatedAt:new Date}).where((0,k.eq)(k.h_.id,a)),(0,e.revalidatePath)("/mcp"),cT(void 0)}let j=(d.data.command??h.command??"").trim();if(!j)return cU("validation_failed","Command is required");let l=d.data.args??(Array.isArray(h.args)?h.args:[]),m=h.envVars??{},n=d.data.env,o={},p={};for(let[a,b]of n?Object.entries(n):Object.entries(m).map(([a])=>[a,""]))if(b&&b.length>0)o[a]=b,p[a]=(0,w.w)(b);else if(void 0!==m[a]){try{o[a]=(0,w.Yc)(m[a])}catch{return cU("validation_failed",`Stored value for "${a}" is unreadable — re-enter it`)}p[a]=m[a]}let q=[],r=null;try{q=(r=await N({transport:"stdio",command:j,args:l,env:o})).tools.map(a=>({name:a.name,description:a.description??null}))}catch(b){let a=b instanceof Error?b.message:String(b);return cU("mcp_connect_failed",`Could not start the subprocess (${j}): ${a}`)}finally{r&&await r.close().catch(()=>{})}return await f.update(k.h_).set({name:d.data.name,command:j,args:l,envVars:p,availableTools:q,updatedAt:new Date}).where((0,k.eq)(k.h_.id,a)),(0,e.revalidatePath)("/mcp"),cT(void 0)}catch(a){return console.error("[updateMcpServerConfigAction]",a),cU("db_error","Failed to update MCP server")}}async function dL(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid MCP server id");let c=(0,y.Lf)(),[d]=await c.select({id:k.h_.id}).from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.id,a),(0,k.eq)(k.h_.entityId,b.entityId)));if(!d)return cU("not_found","MCP connector not found");return await c.delete(k.h_).where((0,k.eq)(k.h_.id,a)),(0,e.revalidatePath)("/mcp"),cT(void 0)}catch(a){return console.error("[deleteMcpServerAction]",a),cU("db_error","Failed to delete MCP connector")}}async function dM(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid agent id");let c=(0,y.Lf)(),[d]=await c.select({id:k.X6.id}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,a),(0,k.eq)(k.X6.entityId,b.entityId)));if(!d)return cU("not_found","Agent not found");let e=await c.select({id:k.h_.id,slug:k.h_.slug,name:k.h_.name,availableTools:k.h_.availableTools}).from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.entityId,b.entityId),(0,k.eq)(k.h_.active,!0)));if(0===e.length)return cT([]);let f=await c.select({mcpServerId:k.oS.mcpServerId,enabledTools:k.oS.enabledTools}).from(k.oS).where((0,k.eq)(k.oS.agentId,a)),h=new Map;for(let a of f)h.set(a.mcpServerId,{enabledTools:a.enabledTools??null});let i=e.map(a=>{let b=h.get(a.id);return{mcpServerId:a.id,slug:a.slug,label:a.name,assigned:void 0!==b,enabledTools:b?.enabledTools??null,availableTools:Array.isArray(a.availableTools)?a.availableTools:[]}});return cT(i)}catch(a){return console.error("[listAgentMcpServersAction]",a),cU("db_error","Failed to load agent MCP connectors")}}async function dN(a,b,c,d){try{let f=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid agent id");if(!g.Yj().guid().safeParse(b).success)return cU("validation_failed","Invalid MCP server id");let h=(0,y.Lf)(),[i]=await h.select({id:k.X6.id}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,a),(0,k.eq)(k.X6.entityId,f.entityId)));if(!i)return cU("not_found","Agent not found");let[j]=await h.select({id:k.h_.id}).from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.id,b),(0,k.eq)(k.h_.entityId,f.entityId)));if(!j)return cU("not_found","MCP connector not found");return c?await h.insert(k.oS).values({agentId:a,mcpServerId:b,entityId:f.entityId,enabledTools:d??null}).onConflictDoUpdate({target:[k.oS.agentId,k.oS.mcpServerId],set:{enabledTools:d??null,updatedAt:new Date}}):await h.delete(k.oS).where((0,k.Uo)((0,k.eq)(k.oS.agentId,a),(0,k.eq)(k.oS.mcpServerId,b))),(0,e.revalidatePath)("/agents"),cT(void 0)}catch(a){return console.error("[setAgentMcpServerAssignmentAction]",a),cU("db_error","Failed to update MCP assignment")}}async function dO(a,b){try{let c=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid connector id");if(null!==b&&!g.Yj().guid().safeParse(b).success)return cU("validation_failed","Invalid credential id");let d=(0,y.Lf)(),[f]=await d.select({id:k.tK.id,slug:k.tK.slug,authType:k.tK.authType}).from(k.tK).where((0,k.Uo)((0,k.eq)(k.tK.id,a),(0,k.eq)(k.tK.entityId,c.entityId)));if(!f)return cU("not_found","Connector not found");if("oauth2"!==f.authType)return cU("invalid_auth_type","Only OAuth2 connectors support credential assignment");if(null!==b){let[a]=await d.select({id:k.z3.id,ownerUserId:k.z3.ownerUserId,type:k.z3.type}).from(k.z3).where((0,k.eq)(k.z3.id,b));if(!a)return cU("not_found","Credential not found");if(a.ownerUserId!==c.userId)return cU("forbidden","Access denied");let e=(0,O.ZH)(f.slug);if(e&&e.credentialType!==a.type)return cU("type_mismatch",`Credential type '${a.type}' is not compatible with connector '${f.slug}' (expects '${e.credentialType}')`)}return await d.update(k.tK).set({credentialId:b,updatedAt:new Date}).where((0,k.eq)(k.tK.id,a)),(0,e.revalidatePath)("/connectors"),cT(void 0)}catch(b){console.error("[assignCredentialAction]",b);let a=b instanceof Error?b.message:String(b);return cU("db_error",`Failed to assign credential: ${a}`)}}async function dP(a,b,c){try{let d=await cV();if(!g.Yj().min(1).max(80).safeParse(a).success)return cU("validation_failed","Invalid connector slug");if(!g.Yj().guid().safeParse(b).success)return cU("validation_failed","Invalid credential id");if(void 0!==c&&!g.Yj().min(1).max(120).safeParse(c).success)return cU("validation_failed","Invalid connector name");let f=F.Y.find(b=>b.slug===a);if(!f)return cU("validation_failed","Unknown connector slug");if("oauth2"!==f.authType)return cU("invalid_auth_type","Only OAuth2 connectors support credential assignment");let h=(0,y.Lf)(),[i]=await h.select({id:k.z3.id,ownerUserId:k.z3.ownerUserId,type:k.z3.type,name:k.z3.name}).from(k.z3).where((0,k.eq)(k.z3.id,b));if(!i)return cU("not_found","Credential not found");if(i.ownerUserId!==d.userId)return cU("forbidden","Access denied");if(f.credentialType&&f.credentialType!==i.type)return cU("type_mismatch",`Credential type '${i.type}' is not compatible with connector '${a}' (expects '${f.credentialType}')`);let j=c??i.name??f.label,[l]=await h.insert(k.tK).values({entityId:d.entityId,slug:a,name:j,authType:"oauth2",credentialId:b,active:!0}).returning({id:k.tK.id});if(!l)return cU("db_error","Insert returned no row");return(0,e.revalidatePath)("/connectors"),cT({connectorId:l.id})}catch(b){console.error("[createOrAssignOAuthConnectorAction]",b);let a=b instanceof Error?b.message:String(b);return cU("db_error",`Failed to assign credential: ${a}`)}}async function dQ(a,b){try{let c=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid connector id");let d=g.Yj().min(1,"Name is required").max(120).safeParse(b);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid name");let f=(0,y.Lf)(),[h]=await f.select({id:k.tK.id}).from(k.tK).where((0,k.Uo)((0,k.eq)(k.tK.id,a),(0,k.eq)(k.tK.entityId,c.entityId)));if(!h)return cU("not_found","Connector not found");return await f.update(k.tK).set({name:d.data,updatedAt:new Date}).where((0,k.eq)(k.tK.id,a)),(0,e.revalidatePath)("/connectors"),cT(void 0)}catch(a){return console.error("[renameConnectorAction]",a),cU("db_error","Failed to rename connector")}}async function dR(a,b){try{let c=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid connector id");let d=g.Yj().min(1,"API key is required").max(2e3).safeParse(b);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid API key");let f=(0,y.Lf)(),[h]=await f.select({id:k.tK.id,authType:k.tK.authType}).from(k.tK).where((0,k.Uo)((0,k.eq)(k.tK.id,a),(0,k.eq)(k.tK.entityId,c.entityId)));if(!h)return cU("not_found","Connector not found");if("api_key"!==h.authType)return cU("validation_failed",`Connector uses ${h.authType??"unknown"} auth — key rotation only applies to api_key connectors.`);let i=(0,w.ph)(d.data)?d.data:(0,w.w)(d.data);return await f.update(k.tK).set({apiKey:i,updatedAt:new Date}).where((0,k.eq)(k.tK.id,a)),(0,e.revalidatePath)("/connectors"),cT(void 0)}catch(a){return console.error("[updateConnectorApiKeyAction]",a),cU("db_error","Failed to rotate API key")}}async function dS(a={}){try{let b=await cV(),c=(0,y.Lf)(),d=a.status??"pending",e=(0,k.eq)(k.MZ.entityId,b.entityId),f="all"===d?e:(0,k.Uo)(e,(0,k.eq)(k.MZ.status,d)),g=await c.select({id:k.MZ.id,jobId:k.MZ.jobId,agentId:k.MZ.agentId,agentName:k.X6.name,agentSlug:k.X6.slug,toolName:k.MZ.toolName,toolInput:k.MZ.toolInput,status:k.MZ.status,requestedAt:k.MZ.requestedAt,resolvedAt:k.MZ.resolvedAt,resolvedBy:k.MZ.resolvedBy,expiresAt:k.MZ.expiresAt,notes:k.MZ.notes,jobTask:k.ME.task}).from(k.MZ).leftJoin(k.X6,(0,k.eq)(k.X6.id,k.MZ.agentId)).leftJoin(k.ME,(0,k.eq)(k.ME.id,k.MZ.jobId)).where(f).orderBy((0,k.i8)(k.MZ.requestedAt)).limit(100);return cT(g.map(a=>({...a,status:a.status??"pending"})))}catch(a){return console.error("[listApprovalsAction]",a),cU("db_error","Failed to load approvals")}}let dT=g.Ik({approvalRequestId:g.Yj().guid(),decision:g.k5(["approve","reject"]),notes:g.Yj().max(5e3).optional()});async function dU(a){try{let b;await cV();let c=dT.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");if(!A._.WORKER_SECRET)return console.error("[resolveApprovalAction] WORKER_SECRET missing"),cU("config_error","WORKER_SECRET is not set");let d=`${A._.RUNNER_URL}/api/approve`;try{b=await fetch(d,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${A._.WORKER_SECRET}`},body:JSON.stringify(c.data)})}catch(a){return console.error("[resolveApprovalAction] fetch failed",a),cU("runner_unreachable","Runner did not respond")}if(!b.ok){let a=(await b.json().catch(()=>({}))).error??`runner_${b.status}`;return cU(a,`Runner rejected: ${a}`)}let f=await b.json();return(0,e.revalidatePath)("/approvals"),(0,e.revalidatePath)("/jobs"),(0,e.revalidatePath)(`/jobs/${f.jobId}`),cT({jobId:f.jobId,decision:f.decision})}catch(a){return console.error("[resolveApprovalAction]",a),cU("db_error","Failed to resolve approval")}}async function dV(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.select({id:k.eK.id,name:k.eK.name,slug:k.eK.slug,content:k.eK.content,defaultContent:k.eK.defaultContent,contentOverridden:k.eK.contentOverridden,description:k.eK.description,active:k.eK.active,requiredBuiltins:k.eK.requiredBuiltins,createdAt:k.eK.createdAt,updatedAt:k.eK.updatedAt}).from(k.eK).where((0,k.or)((0,k.eq)(k.eK.entityId,a.entityId),(0,k.RV)(k.eK.slug,J))).orderBy((0,k.i8)(k.eK.updatedAt));if(0===c.length)return cT([]);let d=await b.select({skillId:k.$m.skillId,c:(0,k.ll)`count(*)`}).from(k.$m).where((0,k.Uo)((0,k.eq)(k.$m.entityId,a.entityId),(0,k.RV)(k.$m.skillId,c.map(a=>a.id)))).groupBy(k.$m.skillId),e=new Map;for(let a of d)e.set(a.skillId,Number(a.c));let f=await b.select({skillId:k.$m.skillId,agentId:k.X6.id,agentName:k.X6.name,agentSlug:k.X6.slug,avatarUrl:k.X6.avatarUrl}).from(k.$m).innerJoin(k.X6,(0,k.eq)(k.X6.id,k.$m.agentId)).where((0,k.Uo)((0,k.eq)(k.$m.entityId,a.entityId),(0,k.RV)(k.$m.skillId,c.map(a=>a.id)))).orderBy(k.X6.name),g=new Map;for(let a of f){let b=g.get(a.skillId)??[];b.length<8&&(b.push({id:a.agentId,name:a.agentName,slug:a.agentSlug,avatarUrl:a.avatarUrl}),g.set(a.skillId,b))}return cT(c.map(a=>({id:a.id,name:a.name,slug:a.slug,isSystem:J.includes(a.slug),content:a.content,defaultContent:a.defaultContent,contentOverridden:a.contentOverridden??!1,description:a.description,active:a.active??!0,requiredBuiltins:a.requiredBuiltins??[],assignmentCount:e.get(a.id)??0,assignedAgents:g.get(a.id)??[],createdAt:a.createdAt,updatedAt:a.updatedAt})))}catch(a){return console.error("[listSkillsAction]",a),cU("db_error","Failed to load skills")}}let dW=g.Ik({slug:g.Yj().min(1).max(80).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with dashes"),name:g.Yj().min(1).max(120),content:g.Yj().min(1),description:g.Yj().max(500).optional()});async function dX(a){try{let b=await cV(),c=dW.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)(),f=await (0,k.qz)(d,b.entityId,{slug:c.data.slug,name:c.data.name,content:c.data.content,description:c.data.description??null});if("error"in f)return cU("conflict","A skill with this slug already exists");return(0,e.revalidatePath)("/skills"),cT({id:f.id})}catch(a){return console.error("[createSkillAction]",a),cU("db_error","Failed to create skill")}}async function dY(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid skill id");let c=(0,y.Lf)(),[d]=await c.select({id:k.eK.id}).from(k.eK).where((0,k.Uo)((0,k.eq)(k.eK.id,a),(0,k.eq)(k.eK.entityId,b.entityId)));if(!d)return cU("not_found","Skill not found");return await c.delete(k.eK).where((0,k.eq)(k.eK.id,a)),(0,e.revalidatePath)("/skills"),cT(void 0)}catch(a){return console.error("[deleteSkillAction]",a),cU("db_error","Failed to delete skill")}}let dZ=g.Ik({skillId:g.Yj().guid(),agentId:g.Yj().guid()});async function d$(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid skill id");let c=(0,y.Lf)(),[d]=await c.select({id:k.eK.id}).from(k.eK).where((0,k.Uo)((0,k.eq)(k.eK.id,a),(0,k.eq)(k.eK.entityId,b.entityId)));if(!d)return cU("not_found","Skill not found");let e=await c.select({id:k.X6.id,name:k.X6.name,slug:k.X6.slug}).from(k.X6).where((0,k.eq)(k.X6.entityId,b.entityId)).orderBy(k.X6.name),f=await c.select({agentId:k.$m.agentId}).from(k.$m).where((0,k.eq)(k.$m.skillId,a)),h=new Set(f.map(a=>a.agentId));return cT(e.map(a=>({agentId:a.id,agentName:a.name,agentSlug:a.slug,assigned:h.has(a.id)})))}catch(a){return console.error("[listSkillAssignmentsAction]",a),cU("db_error","Failed to load skill assignments")}}async function d_(a){try{let b=await cV(),c=dZ.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)(),f=await (0,k.ps)(d,b.entityId,c.data,J);if("error"in f){if("skill_not_found"===f.error)return cU("not_found","Skill not found");if("agent_not_found"===f.error)return cU("not_found","Agent not found")}return(0,e.revalidatePath)("/skills"),cT(void 0)}catch(a){return console.error("[assignSkillAction]",a),cU("db_error","Failed to assign skill")}}let d0=g.Ik({id:g.Yj().guid(),name:g.Yj().min(1).max(120),description:g.Yj().max(500).optional(),content:g.Yj().min(1),active:g.zM().optional()});async function d1(a){try{let b=await cV(),c=d0.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let{id:d,name:f,description:g,content:h,active:i}=c.data,j=(0,y.Lf)(),[l]=await j.select({id:k.eK.id,content:k.eK.content}).from(k.eK).where((0,k.Uo)((0,k.eq)(k.eK.id,d),(0,k.eq)(k.eK.entityId,b.entityId)));if(!l)return cU("not_found","Skill not found");let m={name:f,description:g??null,content:h,...void 0!==i?{active:i}:{},updatedAt:new Date};return h!==l.content&&(m.contentOverridden=!0),await j.update(k.eK).set(m).where((0,k.eq)(k.eK.id,d)),(0,e.revalidatePath)("/skills"),cT(void 0)}catch(a){return console.error("[updateSkillAction]",a),cU("db_error","Failed to update skill")}}async function d2(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid skill id");let c=(0,y.Lf)(),[d]=await c.select({id:k.eK.id,defaultContent:k.eK.defaultContent}).from(k.eK).where((0,k.Uo)((0,k.eq)(k.eK.id,a),(0,k.eq)(k.eK.entityId,b.entityId)));if(!d)return cU("not_found","Skill not found");if(null===d.defaultContent)return cU("not_applicable","No default available — this is a user-created skill");return await c.update(k.eK).set({content:d.defaultContent,contentOverridden:!1,updatedAt:new Date}).where((0,k.eq)(k.eK.id,a)),(0,e.revalidatePath)("/skills"),cT(void 0)}catch(a){return console.error("[resetSkillToDefaultAction]",a),cU("db_error","Failed to reset skill")}}async function d3(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid skill id");let c=(0,y.Lf)(),[d]=await c.select({id:k.eK.id,name:k.eK.name,slug:k.eK.slug,content:k.eK.content,defaultContent:k.eK.defaultContent,contentOverridden:k.eK.contentOverridden,description:k.eK.description,active:k.eK.active,requiredBuiltins:k.eK.requiredBuiltins,createdAt:k.eK.createdAt,updatedAt:k.eK.updatedAt}).from(k.eK).where((0,k.Uo)((0,k.eq)(k.eK.id,a),(0,k.or)((0,k.eq)(k.eK.entityId,b.entityId),(0,k.RV)(k.eK.slug,J))));if(!d)return cU("not_found","Skill not found");return cT({id:d.id,name:d.name,slug:d.slug,isSystem:J.includes(d.slug),content:d.content,defaultContent:d.defaultContent,contentOverridden:d.contentOverridden??!1,description:d.description,active:d.active??!0,requiredBuiltins:d.requiredBuiltins??[],assignmentCount:0,assignedAgents:[],createdAt:d.createdAt,updatedAt:d.updatedAt})}catch(a){return console.error("[getSkillByIdAction]",a),cU("db_error","Failed to load skill")}}async function d4(a){try{let b=await cV(),c=dZ.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)();return await d.delete(k.$m).where((0,k.Uo)((0,k.eq)(k.$m.skillId,c.data.skillId),(0,k.eq)(k.$m.agentId,c.data.agentId),(0,k.eq)(k.$m.entityId,b.entityId))),(0,e.revalidatePath)("/skills"),cT(void 0)}catch(a){return console.error("[unassignSkillAction]",a),cU("db_error","Failed to unassign skill")}}let d5=g.Ik({agentId:g.Yj().guid().optional(),toolName:g.Yj().min(1).max(120).optional(),jobId:g.Yj().guid().optional(),page:g.ai().int().min(1).default(1),pageSize:g.ai().int().min(1).max(200).default(50)});async function d6(a={}){try{let b=await cV(),c=d5.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)(),e=[(0,k.eq)(k.Ky.entityId,b.entityId)];c.data.toolName&&e.push((0,k.eq)(k.Ky.toolName,c.data.toolName)),c.data.jobId&&e.push((0,k.eq)(k.Ky.jobId,c.data.jobId));let f=(c.data.page-1)*c.data.pageSize,g=c.data.agentId?await d.select({id:k.Ky.id,jobId:k.Ky.jobId,agentId:k.ME.agentId,toolName:k.Ky.toolName,toolInput:k.Ky.toolInput,toolOutput:k.Ky.toolOutput,durationMs:k.Ky.durationMs,turn:k.Ky.turn,createdAt:k.Ky.createdAt}).from(k.Ky).leftJoin(k.ME,(0,k.eq)(k.ME.id,k.Ky.jobId)).where((0,k.Uo)(...e,(0,k.eq)(k.ME.agentId,c.data.agentId))).orderBy((0,k.i8)(k.Ky.createdAt)).limit(c.data.pageSize).offset(f):await d.select({id:k.Ky.id,jobId:k.Ky.jobId,agentId:k.ME.agentId,toolName:k.Ky.toolName,toolInput:k.Ky.toolInput,toolOutput:k.Ky.toolOutput,durationMs:k.Ky.durationMs,turn:k.Ky.turn,createdAt:k.Ky.createdAt}).from(k.Ky).leftJoin(k.ME,(0,k.eq)(k.ME.id,k.Ky.jobId)).where((0,k.Uo)(...e)).orderBy((0,k.i8)(k.Ky.createdAt)).limit(c.data.pageSize).offset(f),h=Array.from(new Set(g.map(a=>a.agentId).filter(a=>null!==a))),i=new Map;if(h.length>0)for(let a of(await d.select({id:k.X6.id,name:k.X6.name,slug:k.X6.slug}).from(k.X6).where((0,k.RV)(k.X6.id,h))))i.set(a.id,{name:a.name,slug:a.slug});let j=g.map(a=>{let b=a.agentId?i.get(a.agentId):null;return{id:a.id,jobId:a.jobId,agentId:a.agentId,agentName:b?.name??null,agentSlug:b?.slug??null,toolName:a.toolName,toolInput:a.toolInput,toolOutput:a.toolOutput,durationMs:a.durationMs,turn:a.turn,createdAt:a.createdAt}});return cT({items:j,page:c.data.page,pageSize:c.data.pageSize})}catch(a){return console.error("[listToolCallsAction]",a),cU("db_error","Failed to load tool calls")}}async function d7(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.selectDistinct({toolName:k.Ky.toolName}).from(k.Ky).where((0,k.eq)(k.Ky.entityId,a.entityId)).orderBy(k.Ky.toolName);return cT(c.map(a=>a.toolName))}catch(a){return console.error("[listToolNamesAction]",a),cU("db_error","Failed to load tool names")}}async function d8(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.select({status:k.ME.status,count:(0,k.ll)`count(*)`,inputTokens:(0,k.ll)`coalesce(sum(${k.ME.inputTokens}), 0)`,outputTokens:(0,k.ll)`coalesce(sum(${k.ME.outputTokens}), 0)`,durationMs:(0,k.ll)`coalesce(sum(${k.ME.totalDurationMs}), 0)`}).from(k.ME).where((0,k.eq)(k.ME.entityId,a.entityId)).groupBy(k.ME.status),d={},e=0,f=0,g=0,h=0;for(let a of c){let b=a.status??"unknown",c=Number(a.count);d[b]=(d[b]??0)+c,e+=c,f+=Number(a.inputTokens),g+=Number(a.outputTokens),h+=Number(a.durationMs)}let i=d.completed??0,j=i>0?h/i:null,[l]=await b.select({count:(0,k.ll)`count(*)`}).from(k.Ky).where((0,k.eq)(k.Ky.entityId,a.entityId)),m=Number(l?.count??0),n=(await b.select({agentId:k.ME.agentId,agentName:k.X6.name,agentSlug:k.X6.slug,jobCount:(0,k.ll)`count(*)`,inputTokens:(0,k.ll)`coalesce(sum(${k.ME.inputTokens}), 0)`,outputTokens:(0,k.ll)`coalesce(sum(${k.ME.outputTokens}), 0)`}).from(k.ME).leftJoin(k.X6,(0,k.eq)(k.X6.id,k.ME.agentId)).where((0,k.eq)(k.ME.entityId,a.entityId)).groupBy(k.ME.agentId,k.X6.name,k.X6.slug).orderBy((0,k.i8)((0,k.ll)`count(*)`))).filter(a=>!!(a.agentId&&a.agentName&&a.agentSlug)).map(a=>({agentId:a.agentId,agentName:a.agentName,agentSlug:a.agentSlug,jobCount:Number(a.jobCount),inputTokens:Number(a.inputTokens),outputTokens:Number(a.outputTokens)})),[o]=await b.select({count:(0,k.ll)`count(*)`}).from(k.X6).where((0,k.eq)(k.X6.entityId,a.entityId)),p=Number(o?.count??0);return cT({totalJobs:e,statusCounts:d,totalInputTokens:f,totalOutputTokens:g,totalDurationMs:h,avgDurationMs:j,totalToolCalls:m,agentCount:p,perAgent:n})}catch(a){return console.error("[getEntityStatsAction]",a),cU("db_error","Failed to load stats")}}async function d9(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.select({week:(0,k.ll)`to_char(date_trunc('week', ${k.ME.createdAt}), 'YYYY-MM-DD')`,status:k.ME.status,count:(0,k.ll)`count(*)`}).from(k.ME).where((0,k.Uo)((0,k.eq)(k.ME.entityId,a.entityId),(0,k.ll)`${k.ME.createdAt} > now() - interval '12 weeks'`)).groupBy((0,k.ll)`date_trunc('week', ${k.ME.createdAt})`,k.ME.status),d=new Map,e=new Date,f=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate())),g=f.getUTCDay();f.setUTCDate(f.getUTCDate()-(g+6)%7);for(let a=11;a>=0;a--){let b=new Date(f);b.setUTCDate(b.getUTCDate()-7*a);let c=b.toISOString().slice(0,10);d.set(c,{week:c,completed:0,failed:0,cancelled:0,awaiting:0,pending:0})}for(let a of c){let b=d.get(a.week);if(!b)continue;let c=Number(a.count),e=a.status??"";"completed"===e?b.completed+=c:"failed"===e?b.failed+=c:"cancelled"===e?b.cancelled+=c:"pending"===e?b.pending+=c:b.awaiting+=c}return cT(Array.from(d.values()))}catch(a){return console.error("[getWeeklyActivityAction]",a),cU("db_error","Failed to load weekly activity")}}async function ea(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.select({agentId:k.ME.agentId,agentName:k.X6.name,agentSlug:k.X6.slug,avatarUrl:k.X6.avatarUrl,status:k.ME.status,count:(0,k.ll)`count(*)`}).from(k.ME).innerJoin(k.X6,(0,k.eq)(k.X6.id,k.ME.agentId)).where((0,k.Uo)((0,k.eq)(k.ME.entityId,a.entityId),(0,k.ll)`${k.ME.status} IN ('pending', 'processing', 'awaiting_approval', 'awaiting_delegation')`)).groupBy(k.ME.agentId,k.X6.name,k.X6.slug,k.X6.avatarUrl,k.ME.status),d=new Map;for(let a of c){if(!a.agentId||!a.agentName||!a.agentSlug)continue;let b=d.get(a.agentId)??{agentId:a.agentId,agentName:a.agentName,agentSlug:a.agentSlug,avatarUrl:a.avatarUrl??null,processing:0,awaiting:0,pending:0,total:0},c=Number(a.count),e=a.status??"";"processing"===e?b.processing+=c:"awaiting_approval"===e||"awaiting_delegation"===e?b.awaiting+=c:"pending"===e&&(b.pending+=c),b.total+=c,d.set(a.agentId,b)}let e=Array.from(d.values()).sort((a,b)=>b.total!==a.total?b.total-a.total:a.agentName.localeCompare(b.agentName));return cT(e)}catch(a){return console.error("[getActiveJobsByAgentAction]",a),cU("db_error","Failed to load active jobs")}}async function eb(){try{let a=await cV();return cT({llm:{provider:A._.LLM_PROVIDER??null,model:A._.LLM_MODEL??null,baseURL:A._.LLM_BASE_URL??null},authMode:A._.AUTH_MODE,runnerUrl:A._.RUNNER_URL,appUrl:A._.NEXT_PUBLIC_APP_URL,workerSecretConfigured:!!A._.WORKER_SECRET,user:{userId:a.userId,entityId:a.entityId}})}catch(a){return console.error("[getSettingsAction]",a),cU("db_error","Failed to load settings")}}async function ec(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.select({id:k.uQ.id,agentId:k.uQ.agentId,agentName:k.X6.name,agentSlug:k.X6.slug,name:k.uQ.name,cronExpr:k.uQ.cronExpr,task:k.uQ.task,active:k.uQ.active,lastRun:k.uQ.lastRun,nextRun:k.uQ.nextRun,lastStatus:k.uQ.lastStatus,notifyOnSuccess:k.uQ.notifyOnSuccess,createdAt:k.uQ.createdAt,updatedAt:k.uQ.updatedAt}).from(k.uQ).leftJoin(k.X6,(0,k.eq)(k.X6.id,k.uQ.agentId)).where((0,k.eq)(k.uQ.entityId,a.entityId)).orderBy((0,k.i8)(k.uQ.updatedAt));return cT(c.map(a=>({...a,active:a.active??!0,notifyOnSuccess:a.notifyOnSuccess??!1})))}catch(a){return console.error("[listSchedulesAction]",a),cU("db_error","Failed to load schedules")}}let ed=g.Ik({agentId:g.Yj().guid("Pick an agent"),name:g.Yj().min(1).max(120),cronExpr:g.Yj().min(1).max(100),task:g.Yj().min(1),notifyOnSuccess:g.zM().optional().default(!1)});async function ee(a){try{let b=await cV(),c=ed.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)(),[f]=await d.select({id:k.X6.id}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,c.data.agentId),(0,k.eq)(k.X6.entityId,b.entityId)));if(!f)return cU("not_found","Agent not found");let g=Q(c.data.cronExpr);if(!g)return cU("validation_failed","Invalid cron expression");let[h]=await d.insert(k.uQ).values({entityId:b.entityId,agentId:c.data.agentId,type:"cron",name:c.data.name,cronExpr:c.data.cronExpr,task:c.data.task,active:!0,nextRun:g,notifyOnSuccess:c.data.notifyOnSuccess}).returning({id:k.uQ.id});if(!h)return cU("db_error","Insert returned no row");return(0,e.revalidatePath)("/automations"),cT({id:h.id})}catch(a){return console.error("[createScheduleAction]",a),cU("db_error","Failed to create schedule")}}let ef=g.Ik({id:g.Yj().guid(),agentId:g.Yj().guid("Pick an agent"),name:g.Yj().min(1).max(120),cronExpr:g.Yj().min(1).max(100),task:g.Yj().min(1),notifyOnSuccess:g.zM().optional().default(!1)});async function eg(a){try{let b=await cV(),c=ef.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)(),[f]=await d.select({id:k.uQ.id}).from(k.uQ).where((0,k.Uo)((0,k.eq)(k.uQ.id,c.data.id),(0,k.eq)(k.uQ.entityId,b.entityId)));if(!f)return cU("not_found","Schedule not found");let[g]=await d.select({id:k.X6.id}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,c.data.agentId),(0,k.eq)(k.X6.entityId,b.entityId)));if(!g)return cU("not_found","Agent not found");let h=Q(c.data.cronExpr);if(!h)return cU("validation_failed","Invalid cron expression");return await d.update(k.uQ).set({agentId:c.data.agentId,name:c.data.name,cronExpr:c.data.cronExpr,task:c.data.task,nextRun:h,notifyOnSuccess:c.data.notifyOnSuccess,updatedAt:new Date}).where((0,k.eq)(k.uQ.id,c.data.id)),(0,e.revalidatePath)("/automations"),cT(void 0)}catch(a){return console.error("[updateScheduleAction]",a),cU("db_error","Failed to update schedule")}}async function eh(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid schedule id");let c=(0,y.Lf)(),[d]=await c.select({id:k.uQ.id,active:k.uQ.active}).from(k.uQ).where((0,k.Uo)((0,k.eq)(k.uQ.id,a),(0,k.eq)(k.uQ.entityId,b.entityId)));if(!d)return cU("not_found","Schedule not found");let f=!(d.active??!0);return await c.update(k.uQ).set({active:f,updatedAt:new Date}).where((0,k.eq)(k.uQ.id,a)),(0,e.revalidatePath)("/automations"),cT({active:f})}catch(a){return console.error("[toggleScheduleAction]",a),cU("db_error","Failed to toggle schedule")}}async function ei(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid schedule id");let c=(0,y.Lf)(),[d]=await c.select({id:k.uQ.id}).from(k.uQ).where((0,k.Uo)((0,k.eq)(k.uQ.id,a),(0,k.eq)(k.uQ.entityId,b.entityId)));if(!d)return cU("not_found","Schedule not found");return await c.delete(k.uQ).where((0,k.eq)(k.uQ.id,a)),(0,e.revalidatePath)("/automations"),cT(void 0)}catch(a){return console.error("[deleteScheduleAction]",a),cU("db_error","Failed to delete schedule")}}async function ej(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid schedule id");let c=(0,y.Lf)(),[d]=await c.select({agentId:k.uQ.agentId,task:k.uQ.task,chatId:k.uQ.chatId,notifyOnSuccess:k.uQ.notifyOnSuccess,agentChatId:k.X6.lastSeenChatIdTelegram}).from(k.uQ).leftJoin(k.X6,(0,k.eq)(k.X6.id,k.uQ.agentId)).where((0,k.Uo)((0,k.eq)(k.uQ.id,a),(0,k.eq)(k.uQ.entityId,b.entityId))).limit(1);if(!d)return cU("not_found","Schedule not found");if(!d.task)return cU("validation_failed","This automation has no task to run.");let f=d.notifyOnSuccess?d.chatId??d.agentChatId??null:null,[h]=await c.insert(k.ME).values({entityId:b.entityId,agentId:d.agentId,status:"pending",channel:"cron",task:d.task,messages:[{role:"user",content:d.task}],...f?{chatId:f}:{}}).returning({id:k.ME.id});if(!h)return cU("db_error","Failed to create job");return A._.WORKER_SECRET?fetch(`${A._.RUNNER_URL}/api/worker`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${A._.WORKER_SECRET}`},body:JSON.stringify({jobId:h.id})}).catch(a=>{console.error("[runScheduleNowAction] runner ping failed:",a)}):console.error("[runScheduleNowAction] WORKER_SECRET missing — cannot ping runner"),(0,e.revalidatePath)("/automations"),(0,e.revalidatePath)("/jobs"),cT({jobId:h.id})}catch(a){return console.error("[runScheduleNowAction]",a),cU("db_error","Failed to run schedule now")}}async function ek(){try{await cV();let a=function(){let a=D();if(!a)return{configuredMode:"local-trust",googleConfigured:!1,configPathExists:!1};let b=a.auth??null,c=a.bind;return{configuredMode:b?.mode??("lan"===c?"local-auth":"local-trust"),googleConfigured:!!(b?.googleClientId&&b?.googleClientSecret),configPathExists:!0}}();return cT({runtimeMode:A._.AUTH_MODE,configuredMode:a.configuredMode,googleConfigured:a.googleConfigured,googleAvailableInRuntime:!!(A._.GOOGLE_CLIENT_ID&&A._.GOOGLE_CLIENT_SECRET),configPathExists:a.configPathExists})}catch(a){return console.error("[getSecuritySettingsAction]",a),cU("db_error","Failed to load security settings")}}let el=g.Ik({mode:g.k5(["local-trust","local-auth"]),googleClientId:g.Yj().max(200).optional(),googleClientSecret:g.Yj().max(200).optional(),clearGoogle:g.zM().default(!1)});async function em(a){try{await cV();let b=el.safeParse(a);if(!b.success)return cU("validation_failed",b.error.issues[0]?.message??"Invalid input");let c=D();if(!c)return cU("cli_config_missing","Cannot find ~/.nodalai/config.json — run `nodal-agents init` first.");let d={...c.auth??{},mode:b.data.mode};b.data.clearGoogle?(delete d.googleClientId,delete d.googleClientSecret):(b.data.googleClientId&&b.data.googleClientId.trim().length>0&&(d.googleClientId=b.data.googleClientId.trim()),b.data.googleClientSecret&&b.data.googleClientSecret.trim().length>0&&(d.googleClientSecret=b.data.googleClientSecret.trim()));try{E({auth:d})}catch(b){let a=b instanceof Error?b.message:"";if("cli_config_missing"===a)return cU("cli_config_missing","Config file disappeared between read and write.");throw b}(0,e.revalidatePath)("/settings");let f=b.data.mode!==A._.AUTH_MODE;return cT({requiresRestart:f})}catch(a){return console.error("[updateAuthSettingsAction]",a),cU("db_error","Failed to update auth settings")}}async function en(){try{let a;await cV();let b=(a=D())?{configuredBind:"lan"===a.bind?"lan":"loopback",configPathExists:!0}:{configuredBind:"loopback",configPathExists:!1},c="0.0.0.0"===A._.BIND?"lan":"loopback";return cT({configuredBind:b.configuredBind,runtimeBind:c,lanAddresses:function(){let a=(0,x.networkInterfaces)(),b=[];for(let c of Object.values(a))if(c)for(let a of c)"IPv4"!==a.family||a.internal||b.push(a.address);return b}(),webPort:function(a){try{let b=new URL(a);if(b.port)return Number(b.port);return"https:"===b.protocol?443:80}catch{return 3e3}}(A._.NEXT_PUBLIC_APP_URL),configPathExists:b.configPathExists})}catch(a){return console.error("[getNetworkSettingsAction]",a),cU("db_error","Failed to load network settings")}}let eo=g.Ik({bind:g.k5(["loopback","lan"])});async function ep(a){try{await cV();let b=eo.safeParse(a);if(!b.success)return cU("validation_failed",b.error.issues[0]?.message??"Invalid input");try{E({bind:b.data.bind})}catch(b){let a=b instanceof Error?b.message:"";if("cli_config_missing"===a)return cU("cli_config_missing","Cannot find ~/.nodalai/config.json — run `nodal-agents init` first.");throw b}(0,e.revalidatePath)("/settings");let c="0.0.0.0"===A._.BIND?"lan":"loopback";return cT({requiresRestart:b.data.bind!==c})}catch(a){return console.error("[updateNetworkSettingsAction]",a),cU("db_error","Failed to update network settings")}}let eq=["anthropic","openai","openai-compatible","ollama","openrouter","google","mistral","groq"],er=g.Yj().optional().transform(a=>a&&a.length>0?a:null).pipe(g.Yj().url().nullable().or(g.ch())),es=g.Ik({provider:g.k5(eq),baseUrl:er,apiKey:g.Yj().optional(),nickname:g.Yj().max(120).nullish(),isActive:g.zM().default(!0)}),et=g.Ik({id:g.Yj().guid(),provider:g.k5(eq),baseUrl:er,apiKey:g.Yj().optional(),nickname:g.Yj().max(120).nullish(),isActive:g.zM()}),eu=g.Ik({provider:g.k5(eq),baseUrl:er,apiKey:g.Yj().optional(),model:g.Yj().optional(),keyId:g.Yj().guid().optional()});function ev(a,b){return b&&0!==b.length?a.replaceAll(b,"[REDACTED]"):a}async function ew(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.select({id:k.hG.id,provider:k.hG.provider,baseUrl:k.hG.baseUrl,nickname:k.hG.nickname,isActive:k.hG.isActive,hasApiKey:(0,k.ll)`(${k.hG.apiKey} <> '')`,apiKeyLast4:k.hG.apiKeyLast4}).from(k.hG).where((0,k.eq)(k.hG.entityId,a.entityId)).orderBy((0,k.i8)(k.hG.createdAt)),d=await b.select({llmKeyId:k.X6.llmKeyId,n:(0,k.ll)`count(*)`}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.entityId,a.entityId),(0,k.eq)(k.X6.active,!0))).groupBy(k.X6.llmKeyId),e=new Map;for(let a of d)a.llmKeyId&&e.set(a.llmKeyId,Number(a.n));return cT(c.map(a=>({id:a.id,provider:a.provider,baseUrl:a.baseUrl,nickname:a.nickname,isActive:a.isActive,hasApiKey:!!a.hasApiKey,apiKeyLast4:a.apiKeyLast4?a.apiKeyLast4:null,agentCount:e.get(a.id)??0})))}catch(a){return console.error("[listLlmKeysAction]",a),cU("db_error","Failed to load LLM providers")}}async function ex(a){try{let b=await cV(),c=es.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)(),[f]=await d.select({id:k.hG.id}).from(k.hG).where((0,k.Uo)((0,k.eq)(k.hG.entityId,b.entityId),(0,k.eq)(k.hG.provider,c.data.provider))).limit(1);if(f)return cU("provider_exists","This provider is already configured — edit the existing one.");let g=c.data.apiKey??"",[h]=await d.insert(k.hG).values({entityId:b.entityId,provider:c.data.provider,apiKey:(0,w.w)(g),apiKeyLast4:(0,w.nK)(g),baseUrl:c.data.baseUrl,nickname:c.data.nickname??null,isActive:c.data.isActive}).returning({id:k.hG.id});if(!h)return cU("db_error","Insert returned no row");return(0,e.revalidatePath)("/settings"),cT({id:h.id})}catch(a){return console.error("[createLlmKeyAction]",a),cU("db_error","Failed to create LLM provider")}}async function ey(a){try{let b=await cV(),c=et.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let{id:d,provider:f,baseUrl:g,apiKey:h,nickname:i,isActive:j}=c.data,l=(0,y.Lf)(),[m]=await l.select({id:k.hG.id}).from(k.hG).where((0,k.Uo)((0,k.eq)(k.hG.id,d),(0,k.eq)(k.hG.entityId,b.entityId)));if(!m)return cU("not_found","LLM provider not found");let n={provider:f,baseUrl:g,nickname:i??null,isActive:j,updatedAt:new Date};return h&&h.length>0&&(n.apiKey=(0,w.w)(h),n.apiKeyLast4=(0,w.nK)(h)),await l.update(k.hG).set(n).where((0,k.eq)(k.hG.id,d)),(0,e.revalidatePath)("/settings"),cT(void 0)}catch(a){return console.error("[updateLlmKeyAction]",a),cU("db_error","Failed to update LLM provider")}}async function ez(a,b){try{let c=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid LLM provider id");let d=(0,y.Lf)(),[f]=await d.select({id:k.hG.id}).from(k.hG).where((0,k.Uo)((0,k.eq)(k.hG.id,a),(0,k.eq)(k.hG.entityId,c.entityId)));if(!f)return cU("not_found","LLM provider not found");return await d.update(k.hG).set({isActive:b,updatedAt:new Date}).where((0,k.eq)(k.hG.id,a)),(0,e.revalidatePath)("/llm-providers"),cT(void 0)}catch(a){return console.error("[setLlmKeyActiveAction]",a),cU("db_error","Failed to update LLM provider")}}async function eA(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid LLM provider id");let c=(0,y.Lf)(),[d]=await c.select({id:k.hG.id}).from(k.hG).where((0,k.Uo)((0,k.eq)(k.hG.id,a),(0,k.eq)(k.hG.entityId,b.entityId)));if(!d)return cU("not_found","LLM provider not found");return await c.delete(k.hG).where((0,k.eq)(k.hG.id,a)),(0,e.revalidatePath)("/settings"),cT(void 0)}catch(a){return console.error("[deleteLlmKeyAction]",a),cU("db_error","Failed to delete LLM provider")}}async function eB(a){let b;try{let c=await cV(),d=eu.safeParse(a);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid input");let{provider:e,baseUrl:f}=d.data;if((!(b=d.data.apiKey)||0===b.length)&&d.data.keyId){let a=(0,y.Lf)(),[e]=await a.select({apiKey:k.hG.apiKey}).from(k.hG).where((0,k.Uo)((0,k.eq)(k.hG.id,d.data.keyId),(0,k.eq)(k.hG.entityId,c.entityId)));if(!e)return cU("not_found","LLM provider not found");b=e.apiKey?(0,w.Yc)(e.apiKey):void 0}if(d.data.keyId&&(!b||0===b.length))return cU("no_api_key_provided","API key is required to test");let g={anthropic:{canonicalBase:"https://api.anthropic.com/v1",path:"/models",auth:"x-api-key"},openai:{canonicalBase:"https://api.openai.com/v1",path:"/models",auth:"bearer"},openrouter:{canonicalBase:"https://openrouter.ai/api/v1",path:"/auth/key",auth:"bearer"},google:{canonicalBase:"https://generativelanguage.googleapis.com/v1beta",path:"/models",auth:"query"},mistral:{canonicalBase:"https://api.mistral.ai/v1",path:"/models",auth:"bearer"},groq:{canonicalBase:"https://api.groq.com/openai/v1",path:"/models",auth:"bearer"},"openai-compatible":{canonicalBase:null,path:"/models",auth:"bearer"},ollama:{canonicalBase:null,path:"/api/tags",auth:"none"}}[e],h=(f??"").replace(/\/$/,"")||g.canonicalBase;if(!h)return cU("validation_failed",`baseUrl is required for ${e}`);let i={Accept:"application/json"},j=`${h}${g.path}`;"bearer"===g.auth&&b&&(i.Authorization=`Bearer ${b}`),"x-api-key"===g.auth&&b&&(i["x-api-key"]=b,i["anthropic-version"]="2023-06-01"),"query"===g.auth&&(j=`${j}?key=${encodeURIComponent(b??"")}`);let l=await fetch(j,{method:"GET",headers:i});if(!l.ok){let a=(await l.text().catch(()=>"")).slice(0,200);return cU("connection_failed",ev(`${e} responded ${l.status}: ${a}`,b))}let m=null;try{let a=await l.json(),b=a.data??a.models;Array.isArray(b)&&(m=b.length)}catch{}return cT({message:null!==m?`Connected, ${m} models available`:"Connected"})}catch(a){return cU("connection_failed",ev(a instanceof Error?a.message:"Unknown error",b))}}async function eC(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid agent id");let c=(0,y.Lf)(),[d]=await c.select({id:k.X6.id}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,a),(0,k.eq)(k.X6.entityId,b.entityId)));if(!d)return cU("not_found","Agent not found");let e=await c.select({id:k.tK.id,slug:k.tK.slug,name:k.tK.name,credentialId:k.tK.credentialId,active:k.tK.active}).from(k.tK).where((0,k.Uo)((0,k.eq)(k.tK.entityId,b.entityId),(0,k.eq)(k.tK.active,!0)));if(0===e.length)return cT([]);let f=[...new Set(e.map(a=>a.credentialId).filter(a=>null!==a))],h=new Map;if(f.length>0)for(let a of(await c.select({id:k.z3.id,name:k.z3.name}).from(k.z3).where((0,k.RV)(k.z3.id,f))))h.set(a.id,a.name);let i=await c.select({connectorId:k.XT.connectorId,enabledOperations:k.XT.enabledOperations}).from(k.XT).where((0,k.eq)(k.XT.agentId,a)),j=new Map;for(let a of i)j.set(a.connectorId,{enabledOperations:a.enabledOperations??null});let l=[];for(let a of e){let b=cR[a.slug];if(!b)continue;let c=j.get(a.id);l.push({connectorId:a.id,slug:a.slug,label:a.name,credentialName:a.credentialId?h.get(a.credentialId)??null:null,assigned:void 0!==c,enabledOperations:c?.enabledOperations??null,availableOperations:b.operations})}return cT(l)}catch(a){return console.error("[listAgentConnectorsAction]",a),cU("db_error","Failed to load agent connectors")}}async function eD(a,b,c,d){try{let f=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid agent id");if(!g.Yj().guid().safeParse(b).success)return cU("validation_failed","Invalid connector id");let h=(0,y.Lf)(),[i]=await h.select({id:k.X6.id}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,a),(0,k.eq)(k.X6.entityId,f.entityId)));if(!i)return cU("not_found","Agent not found");let[j]=await h.select({id:k.tK.id}).from(k.tK).where((0,k.Uo)((0,k.eq)(k.tK.id,b),(0,k.eq)(k.tK.entityId,f.entityId)));if(!j)return cU("not_found","Connector not found");return c?await h.insert(k.XT).values({agentId:a,connectorId:b,entityId:f.entityId,enabledOperations:d??null}).onConflictDoUpdate({target:[k.XT.agentId,k.XT.connectorId],set:{enabledOperations:d??null,updatedAt:new Date}}):await h.delete(k.XT).where((0,k.Uo)((0,k.eq)(k.XT.agentId,a),(0,k.eq)(k.XT.connectorId,b))),(0,e.revalidatePath)("/agents"),cT(void 0)}catch(a){return console.error("[setAgentConnectorAssignmentAction]",a),cU("db_error","Failed to update connector assignment")}}async function eE(){try{let a=await cV(),b=(0,y.Lf)(),[c]=await b.select({rootAgentId:k.O5.rootAgentId,rootGrants:k.O5.rootGrants}).from(k.O5).where((0,k.eq)(k.O5.id,a.entityId));if(!c)return cU("not_found","Workspace not found");return cT({rootAgentId:c.rootAgentId??null,grants:(0,r.DI)(c.rootGrants)})}catch(a){return console.error("[getRootConfigAction]",a),cU("db_error","Failed to load ROOT agent config")}}let eF=g.Ik({grants:g.Ik({createAgent:g.zM(),createSkill:g.zM(),updateSkill:g.zM(),assignSkill:g.zM(),createMcp:g.zM(),createConnector:g.zM(),autonomy:g.k5(["propose_confirm","destructive_gate","fully_autonomous"])})});async function eG(a){try{let b=await cV(),c=eF.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let{grants:d}=c.data,f=(0,y.Lf)(),[g]=await f.select({role:k.V.role}).from(k.V).where((0,k.Uo)((0,k.eq)(k.V.userId,b.userId),(0,k.eq)(k.V.entityId,b.entityId)));if(!g)return cU("not_found","Workspace not found");let[h]=await f.select({rootAgentId:k.O5.rootAgentId}).from(k.O5).where((0,k.eq)(k.O5.id,b.entityId)),i=h?.rootAgentId??null;if(!i)return cU("not_found","No ROOT agent yet — create an orchestrator first");if(await f.update(k.O5).set({rootGrants:d,updatedAt:new Date}).where((0,k.eq)(k.O5.id,b.entityId)),await f.delete(k.bN).where((0,k.Uo)((0,k.eq)(k.bN.entityId,b.entityId),(0,k.RV)(k.bN.toolName,r.yO))),"propose_confirm"===d.autonomy){let a=(0,r.aT)(d);a.length>0&&await f.insert(k.bN).values(a.map(a=>({entityId:b.entityId,agentId:i,toolName:a,action:"require_approval"})))}return(0,e.revalidatePath)("/settings"),cT(void 0)}catch(a){return console.error("[setRootAgentAction]",a),cU("db_error","Failed to save ROOT agent config")}}async function eH(a,b){let[c]=await a.select({rootAgentId:k.O5.rootAgentId}).from(k.O5).where((0,k.eq)(k.O5.id,b)).limit(1),d=c?.rootAgentId??null;if(!d)return{rootAgentId:null,rootName:null};let[e]=await a.select({name:k.X6.name}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,d),(0,k.eq)(k.X6.entityId,b))).limit(1);return{rootAgentId:d,rootName:e?.name??null}}async function eI(){try{let a=await cV(),b=(0,y.Lf)(),{rootAgentId:c,rootName:d}=await eH(b,a.entityId);if(!c)return cT({rootAgentId:null,rootName:null,conversations:[]});let e=await b.select({id:k.NP.id,title:k.NP.title,updatedAt:k.NP.updatedAt}).from(k.NP).where((0,k.Uo)((0,k.eq)(k.NP.entityId,a.entityId),(0,k.eq)(k.NP.agentId,c))).orderBy((0,k.i8)(k.NP.updatedAt)).limit(200),f=e.map(a=>a.id),g=new Map;if(f.length>0)for(let a of(await b.select({conversationId:k.p$.conversationId,content:k.p$.content}).from(k.p$).where((0,k.RV)(k.p$.conversationId,f)).orderBy((0,k.i8)(k.p$.createdAt)).limit(1e3)))a.conversationId&&!g.has(a.conversationId)&&g.set(a.conversationId,a.content);let h=e.map(a=>({id:a.id,title:a.title,preview:g.get(a.id)??"",updatedAt:a.updatedAt}));return cT({rootAgentId:c,rootName:d,conversations:h})}catch(a){return console.error("[listConversationsAction]",a),cU("db_error","Failed to load conversations")}}async function eJ(){try{let a=await cV(),b=(0,y.Lf)(),{rootAgentId:c}=await eH(b,a.entityId);if(!c)return cU("no_root_agent","Designate a ROOT agent in Settings first.");let[d]=await b.insert(k.NP).values({entityId:a.entityId,agentId:c,title:""}).returning({id:k.NP.id});if(!d)return cU("db_error","Failed to create conversation");return(0,e.revalidatePath)("/chat"),cT({id:d.id})}catch(a){return console.error("[createConversationAction]",a),cU("db_error","Failed to create conversation")}}async function eK(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid conversation id");let c=(0,y.Lf)();return await c.delete(k.NP).where((0,k.Uo)((0,k.eq)(k.NP.id,a),(0,k.eq)(k.NP.entityId,b.entityId))),(0,e.revalidatePath)("/chat"),cT(void 0)}catch(a){return console.error("[deleteConversationAction]",a),cU("db_error","Failed to delete conversation")}}async function eL(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid conversation id");let c=(0,y.Lf)(),[d]=await c.select({id:k.NP.id}).from(k.NP).where((0,k.Uo)((0,k.eq)(k.NP.id,a),(0,k.eq)(k.NP.entityId,b.entityId))).limit(1);if(!d)return cU("not_found","Conversation not found");let e=(await c.select({id:k.p$.id,role:k.p$.role,content:k.p$.content,jobId:k.p$.jobId}).from(k.p$).where((0,k.eq)(k.p$.conversationId,a)).orderBy(k.p$.createdAt).limit(500)).map(a=>({id:a.id,role:a.role,content:a.content,jobId:a.jobId}));return cT({messages:e})}catch(a){return console.error("[listChatAction]",a),cU("db_error","Failed to load chat")}}let eM=g.Ik({conversationId:g.Yj().guid(),message:g.Yj().min(1,"Message is empty").max(1e4)});async function eN(a){try{let b,c=await cV(),d=eM.safeParse(a);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid input");let f=(0,y.Lf)(),{rootAgentId:g}=await eH(f,c.entityId);if(!g)return cU("no_root_agent","Designate a ROOT agent in Settings first.");if(!A._.WORKER_SECRET)return console.error("[sendChatMessageAction] WORKER_SECRET missing — cannot reach runner"),cU("runner_unreachable","Chat backend not configured");try{b=await fetch(`${A._.RUNNER_URL}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${A._.WORKER_SECRET}`},body:JSON.stringify({entityId:c.entityId,agentId:g,conversationId:d.data.conversationId,message:d.data.message})})}catch(a){return console.error("[sendChatMessageAction] runner unreachable:",a),cU("runner_unreachable","Could not reach the chat backend")}let h=await b.json().catch(()=>null);if(!b.ok)return cU("chat_failed",h?.error??"The agent did not reply");return(0,e.revalidatePath)("/chat"),cT({reply:h?.reply??""})}catch(a){return console.error("[sendChatMessageAction]",a),cU("db_error","Failed to send message")}}async function eO(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid job id");let c=(0,y.Lf)(),[d]=await c.select({status:k.ME.status,result:k.ME.result}).from(k.ME).where((0,k.Uo)((0,k.eq)(k.ME.id,a),(0,k.eq)(k.ME.entityId,b.entityId))).limit(1);if(!d)return cU("not_found","Job not found");let e=(await c.select({agentName:k.X6.name,agentSlug:k.X6.slug,status:k.ME.status}).from(k.ME).leftJoin(k.X6,(0,k.eq)(k.X6.id,k.ME.agentId)).where((0,k.eq)(k.ME.parentJobId,a)).orderBy(k.ME.createdAt)).map(a=>({agentName:a.agentName??a.agentSlug??"agent",status:a.status??"pending"}));return cT({status:d.status??"pending",result:d.result,children:e})}catch(a){return console.error("[getChatJobStatusAction]",a),cU("db_error","Failed to load job status")}}(0,cS.D)([cW,cX,cY,cZ,c$,c1,c2,c3,c4,c5,c8,c9,da,db,df,dg,dh,di,dj,dk,dl,dm,dp,dr,ds,dt,dv,dw,dx,dy,dz,dB,dC,dD,dF,dG,dH,dI,dK,dL,dM,dN,dO,dP,dQ,dR,dS,dU,dV,dX,dY,d$,d_,d1,d2,d3,d4,d6,d7,d8,d9,ea,eb,ec,ee,eg,eh,ei,ej,ek,em,en,ep,ew,ex,ey,ez,eA,eB,eC,eD,eE,eG,eI,eJ,eK,eL,eN,eO]),(0,d.A)(cW,"00f347a602753f7d10260f90aab34af24d59ebbd3e",null),(0,d.A)(cX,"40a2f99fceaa61fd4a74b0c6f3b01f599d36e2ea48",null),(0,d.A)(cY,"4052967950b494e22cd435b66a556d540a965df63a",null),(0,d.A)(cZ,"406439137cb7d4544c2b414e89282a6e3c5c373da2",null),(0,d.A)(c$,"4015389522a581e79a290ddf4ccda681da7e3e602f",null),(0,d.A)(c1,"0001a2098a01631f448f8e2e7256c342a70a4f8fce",null),(0,d.A)(c2,"003e18e0fad52d29deb751c8f661f19b7717fcff5c",null),(0,d.A)(c3,"4065c4f7485462878810b4367bb2071b5e7de6a367",null),(0,d.A)(c4,"401f4fb51c8eb3ebbb19cb59c5e23502c68a42d62a",null),(0,d.A)(c5,"4043fd062e51d792226e9aaa93a0578d2066285682",null),(0,d.A)(c8,"403841485f398c760228bf932338d55e8493d0332e",null),(0,d.A)(c9,"40d1bd442c90bc9723cf4f2cb23e3314c55dbe2835",null),(0,d.A)(da,"70d398e886e045c6741c5251cd841a4fb1b585f282",null),(0,d.A)(db,"403928f9cfca7ec3986ffae44cead3466612ae83fa",null),(0,d.A)(df,"70f2a9ff93ddc1531a5571077d2b2726ac5272e9d0",null),(0,d.A)(dg,"60fa3e1656cac7acb3b16deddc01305765d41851ec",null),(0,d.A)(dh,"7041fb86f0b54be1543e88faa8ae18ffff53082138",null),(0,d.A)(di,"40ae45fa762350801d0bbb6a81fbb26079b8b6cc00",null),(0,d.A)(dj,"403601917fce9df1a8214098418b6c880126a33bda",null),(0,d.A)(dk,"408b3de093f9bcf31d51e2be76356609e27b9322d5",null),(0,d.A)(dl,"405fccf8c384bb49d592d555a9d19562d33294a37e",null),(0,d.A)(dm,"400f1516aea326fe8ab6e2c07202680b0da997a3bf",null),(0,d.A)(dp,"402d1dae72e7231c36679c809c8d55365674695323",null),(0,d.A)(dr,"40a775f04cb3ac41b01717bea17e5125c7c323ca14",null),(0,d.A)(ds,"4047290d2ad6a981481bd95c915a26b2dd8b434896",null),(0,d.A)(dt,"40871f9e81ec4546f4f88b8550094fef7bfcd7a418",null),(0,d.A)(dv,"400a618371c75d32e73dfab28acb51b7db500aab1c",null),(0,d.A)(dw,"4052b64a6183fe248882f2c27441addf9e9e07bb4a",null),(0,d.A)(dx,"40d69a1ce58eda67b96c81a500c437e9107611b2d7",null),(0,d.A)(dy,"406bc57145dd20a43bf9eb44ad644423cd40feacc5",null),(0,d.A)(dz,"00724d8c4d22104172f7e88beedeaed018ddaa1b9a",null),(0,d.A)(dB,"4076fe837a437fc16fbfdf9ae42b8d01330ffd1cde",null),(0,d.A)(dC,"40edfa610d9f4f1799cc65a92742ab593c2dafa41b",null),(0,d.A)(dD,"007a4f71348b1fb8b20a43debd7f0814e67c62a266",null),(0,d.A)(dF,"40c2a1a8bbe7ffe80d3ff0c990a6c8654ded77d9a1",null),(0,d.A)(dG,"60e1dae0f6fcb459194ac6847f177cd7ea5167958d",null),(0,d.A)(dH,"60a525fb1a7d0371de2f00a8eb7c3bda7a31685ea6",null),(0,d.A)(dI,"4067a8d48830fe5172f84c37187e6a2383152974dc",null),(0,d.A)(dK,"60b2ec0fde8727e97be37bfe26f8a86ad2dcb409be",null),(0,d.A)(dL,"409c323309b6e0c70c7e5fa891476c4f8a5724ed85",null),(0,d.A)(dM,"4001dcf648a52984ff32bcc647ffa470fb68b09cec",null),(0,d.A)(dN,"788d516a7a7d59ef016aee06fe39b3a2fc32f50e6e",null),(0,d.A)(dO,"60943f6e65ce8746f79a517f650bb15ea55702262c",null),(0,d.A)(dP,"701da93c8522b797df48348b38d4619e704c151a4e",null),(0,d.A)(dQ,"60ec0d7acf6ae077de5c2f5dc3df9068481eac1087",null),(0,d.A)(dR,"60dd24aaaa22c1da2093cefa4bcd38555c7dbda203",null),(0,d.A)(dS,"407e027cfc6438bdd6aa0a116dd96d8b9f1aa95fdd",null),(0,d.A)(dU,"400cfdc41e4bf4ffb900586307c0e1b774f8b5393a",null),(0,d.A)(dV,"00cd03744442b23685f3832db6fb9ae765bd63dfcd",null),(0,d.A)(dX,"409ec0cda17508fdfbb081f36bb78f64a0cedcc1de",null),(0,d.A)(dY,"40cf6a26aa9acd16be3a0c9b353c8102210c884458",null),(0,d.A)(d$,"40633131ff7c417ddc94a2d111d4b7242174d7d3d5",null),(0,d.A)(d_,"40dc8a6b4278d8a81c973ba871e34e76afa12c60fb",null),(0,d.A)(d1,"40314db96cdaf34762dd2363662db4bee58982baf4",null),(0,d.A)(d2,"4092dc652d59fc1cd56ed109ecf08033028030b03b",null),(0,d.A)(d3,"40facb78698674673e654bfa0ef67e6b589d0ea3cc",null),(0,d.A)(d4,"40044cbfd30d3a380dfa65d1f1bac57af888684dfa",null),(0,d.A)(d6,"40d4438800367db8da074265f2947c1bf13285e37a",null),(0,d.A)(d7,"009b2aebb53c355ea693b72eb51ed2b79a06fe0fcb",null),(0,d.A)(d8,"003f32faa2479a4dce73325e1f0b3db3d1f544e270",null),(0,d.A)(d9,"00c5a58fca98e0b66a21c226cc3a16e7cc9ef9e046",null),(0,d.A)(ea,"00e93f5a30fbb4748e0f30addc55e311d26b3a1e21",null),(0,d.A)(eb,"0001eea186e7cab43bced1965c5bda7632b511f398",null),(0,d.A)(ec,"00c88254b0ab7e6527a14ab353f0354a93c22a8e66",null),(0,d.A)(ee,"404ae92a4884f24a9d0d96b484c9a0eb05289bdc1c",null),(0,d.A)(eg,"405441c5447e7f0cc99b8c935b54e903aa38a592ca",null),(0,d.A)(eh,"400ca4c91c055218dcdc663b53bc21d219783e16f2",null),(0,d.A)(ei,"4069f5841b60ff6b623370147903caf7970d85fc29",null),(0,d.A)(ej,"404912c6c805f1cee60f4f4fc38f2528b768406fb6",null),(0,d.A)(ek,"000357a4b97c621c792fba8213ef7ae7505018fcd3",null),(0,d.A)(em,"40de7de0d0c60c355737be884a0f4a3fb4344e7b12",null),(0,d.A)(en,"00728028b2eb4e67b0e2b874b03d370fe1d91bb338",null),(0,d.A)(ep,"4074fba9a9b77f695cae5c335f58c9cb06018ef143",null),(0,d.A)(ew,"0033cc88f3b3477b989e9df2edac4a6ce3e3f58250",null),(0,d.A)(ex,"405e6ab4f6b3f7d0ca79943dd7c850fefad7099fbe",null),(0,d.A)(ey,"4037207befca10bb542d700e5232bd286c98781d5e",null),(0,d.A)(ez,"6027df2597319ed4f15048c44cfae75dec92fd42fc",null),(0,d.A)(eA,"40de046de0bddf3387f259087a088306728aef5546",null),(0,d.A)(eB,"40162d8df2e52a907c99cd0a9d8d4bc05202f4d5e5",null),(0,d.A)(eC,"406e77ecff957cc585bcb26dd261255f9f2898d578",null),(0,d.A)(eD,"78098002e441d38ebd5b6eec9b95f9890febb3b6dd",null),(0,d.A)(eE,"0055a5e407a06696d0cd78161c2024a7dc0f865735",null),(0,d.A)(eG,"40ebde0ab3fe9c43462ac8e177421049003d8f251a",null),(0,d.A)(eI,"00471a08cbfe30783ae558daa3926bdd257abcca26",null),(0,d.A)(eJ,"00e380381f0bf9caafc2c162493236800179ff748d",null),(0,d.A)(eK,"402dd9b41913f4df0dc409b17a7f342badb27eda92",null),(0,d.A)(eL,"40bb25b856f502b069916be582ba5ba4b59f0fd377",null),(0,d.A)(eN,"40ae142f3021cbdd06d5717bdffcc1ad58e6031d04",null),(0,d.A)(eO,"40e7f8235ea05603b604a187b6856b07f20c86ca28",null)},7316:(a,b,c)=>{Promise.resolve().then(c.bind(c,55053))},17030:(a,b,c)=>{"use strict";c.d(b,{Y:()=>d.YT});var d=c(36535)},19259:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,67448,23)),Promise.resolve().then(c.t.bind(c,2667,23)),Promise.resolve().then(c.t.bind(c,10903,23)),Promise.resolve().then(c.t.bind(c,11162,23)),Promise.resolve().then(c.t.bind(c,23838,23)),Promise.resolve().then(c.t.bind(c,83466,23)),Promise.resolve().then(c.t.bind(c,12127,23)),Promise.resolve().then(c.bind(c,26698))},28659:(a,b,c)=>{"use strict";c.d(b,{default:()=>g});var d=c(10476),e=c(64565),f=c(44625);function g(){let[a,b]=(0,e.useState)(!1);async function c(){b(!0);try{let a=await fetch("/api/auth/sign-out",{method:"POST",headers:{"Content-Type":"application/json"},body:"{}",credentials:"same-origin"});a.ok||console.error("sign-out failed",a.status,await a.text().catch(()=>""))}catch(a){console.error("sign-out network error",a)}window.location.replace("/login")}return(0,d.jsx)("button",{type:"button",onClick:c,disabled:a,"data-testid":"user-menu-sign-out","aria-label":"Sign out",title:"Sign out",className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-ink-3 transition-colors hover:bg-hover hover:text-ink disabled:cursor-not-allowed disabled:opacity-40",children:(0,d.jsx)(f.M,{size:15})})}},36105:()=>{},42705:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>D});var d=c(99386),e=c(66402),f=c(95809),g=c(42112),h=c(62952),i=c(81590),j=c(35675),k=c(90454),l=c(95488),m=c(75224),n=c(97173);async function o(){let a=m._.AUTH_MODE;if("local-trust"===a)return(0,d.jsx)(q,{icon:(0,d.jsx)(i.o,{size:13,weight:"fill"}),label:"Local trust",hint:"No auth — single-user install"});if("bearer-token"===a)return(0,d.jsx)(q,{icon:(0,d.jsx)(i.o,{size:13,weight:"fill"}),label:"API token"});let b=await p();return b?(0,d.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border border-rule-2 bg-paper px-2.5 py-2",children:[(0,d.jsx)("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-hover text-ink-3",children:(0,d.jsx)(j.K,{size:13,weight:"fill"})}),(0,d.jsx)("div",{className:"min-w-0 flex-1","data-testid":"user-menu-email",children:(0,d.jsx)("p",{className:"truncate text-xs font-medium text-ink",title:b,children:b})}),(0,d.jsx)(n.default,{})]}):null}async function p(){try{let a=await (0,e.headers)(),b=new Request("http://localhost/",{headers:a}),c=await (0,l.sj)(b),d=await (0,l.Lf)().select({email:k.VV.email}).from(k.VV).where((0,k.eq)(k.VV.id,c.userId)).limit(1);return d[0]?.email??null}catch{return null}}function q({icon:a,label:b,hint:c}){return(0,d.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border border-rule-2 bg-paper px-2.5 py-2",children:[(0,d.jsx)("div",{className:"shrink-0 text-ok",children:a}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("p",{className:"text-xs font-medium leading-tight text-ink",children:b}),c&&(0,d.jsx)("p",{className:"mt-0.5 truncate text-[10px] text-ink-3",children:c})]})]})}var r=c(13579),s=c(36937),t=c(92002);function u({children:a,badge:b,size:c="md",className:e="",type:f="button",...g}){return(0,d.jsxs)("button",{type:f,className:`relative flex shrink-0 items-center justify-center border border-rule-2 bg-paper text-ink-2 transition-colors hover:text-ink ${"md"===c?"h-[34px] w-[34px] rounded-md":"h-[30px] w-[30px] rounded-[7px]"} ${e}`,...g,children:[a,b&&(0,d.jsx)("span",{className:"absolute top-[6px] right-[7px] h-1.5 w-1.5 rounded-full bg-skill-vivid"})]})}var v=c(88866),w=c(85598),x=c.n(w);let y={ink:"bg-ink text-canvas hover:brightness-[0.92]",coral:"bg-skill-vivid text-white hover:brightness-[0.94]",blue:"bg-conn-vivid text-white hover:brightness-[0.94]"};function z(a){let{children:b,variant:c="ink",size:e="md",className:f=""}=a,g=`inline-flex items-center justify-center gap-1.5 rounded-md font-medium leading-none border-0 cursor-pointer transition-[filter] ${"md"===e?"h-[34px] px-3.5 text-[13px]":"h-[30px] px-3 text-[12px]"} ${y[c]} ${f}`;if("href"in a&&a.href){let{href:c,variant:e,size:f,className:h,children:i,...j}=a;return(0,d.jsx)(x(),{href:c,className:g,...j,children:b})}let{variant:h,size:i,className:j,children:k,...l}=a;return(0,d.jsx)("button",{type:"button",className:g,...l,children:b})}function A({left:a,primaryHref:b="/agents",primaryLabel:c="New agent",showPrimary:e=!0,showSearch:f=!0}){return(0,d.jsxs)("div",{className:"flex h-[52px] shrink-0 items-center gap-2 px-4 md:gap-2.5 md:px-9",children:[a,(0,d.jsx)("div",{className:"flex-1"}),f&&(0,d.jsx)(t.default,{className:"hidden md:flex"}),(0,d.jsx)(u,{"aria-label":"Notifications",title:"Notifications",badge:!0,children:(0,d.jsx)(r.I,{size:15})}),(0,d.jsx)(v.default,{}),e&&(0,d.jsxs)(z,{variant:"ink",href:b,"aria-label":c,title:c,children:[(0,d.jsx)(s.F,{size:13,weight:"bold"}),(0,d.jsx)("span",{className:"hidden md:inline",children:c})]})]})}var B=c(93690),C=c(5786);async function D({children:a}){try{let a=await (0,e.headers)(),b=new Request("http://localhost/",{headers:a});await (0,l.sj)(b)}catch(a){throw a instanceof g.lR&&(0,f.redirect)("/login"),a instanceof g.vB&&(0,f.redirect)("/onboarding"),a}let b=[],c=await (0,C.zh)();return c.ok&&(b=c.data),(0,d.jsxs)("div",{className:"flex min-h-screen bg-canvas text-ink",children:[(0,d.jsx)(h.default,{workspaces:b,userMenu:(0,d.jsx)(o,{})}),(0,d.jsxs)("main",{className:"flex min-w-0 flex-1 flex-col pt-[58px] lg:ml-[220px] lg:pt-0",children:[(0,d.jsx)(A,{}),(0,d.jsx)("div",{className:"flex-1 overflow-x-hidden",children:(0,d.jsx)("div",{className:"max-w-6xl px-5 pb-10 sm:px-8 lg:px-9",children:a})})]}),(0,d.jsx)(B.default,{})]})}},43136:(a,b,c)=>{"use strict";c.d(b,{default:()=>h});var d=c(10476),e=c(64565),f=c(62515),g=c(2447);function h(){let[a,b]=(0,e.useState)("light"),[c,h]=(0,e.useState)(!1),i="dark"===a?f.b:g.A,j="dark"===a?"Switch to light theme":"Switch to dark theme";return(0,d.jsx)("button",{type:"button",onClick:()=>{let c="dark"===a?"light":"dark";document.documentElement.setAttribute("data-theme",c);try{localStorage.setItem("nodal.theme",c)}catch{}b(c)},"aria-label":j,title:j,className:"flex h-[34px] w-[34px] items-center justify-center rounded-md border border-rule-2 bg-paper text-ink-2 transition-colors hover:text-ink",suppressHydrationWarning:!0,children:c?(0,d.jsx)(i,{size:15}):(0,d.jsx)(g.A,{size:15})})}},43828:(a,b,c)=>{Promise.resolve().then(c.bind(c,86688)),Promise.resolve().then(c.bind(c,28659)),Promise.resolve().then(c.bind(c,3808)),Promise.resolve().then(c.bind(c,57712)),Promise.resolve().then(c.bind(c,43136)),Promise.resolve().then(c.t.bind(c,88831,23))},44100:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(10476);let e={ok:"bg-ok",lime:"bg-agent-vivid",coral:"bg-skill-vivid",blue:"bg-conn-vivid"},f={ok:"animate-[blip_1.4s_ease-out_infinite]",lime:"animate-[blip-lime_1.5s_ease-out_infinite]",coral:"animate-[blip-coral_1.4s_ease-out_infinite]",blue:"animate-[blip-blue_1.4s_ease-out_infinite]"};function g({variant:a="ok",size:b="sm",animate:c=!0,className:h=""}){return(0,d.jsx)("span",{className:`inline-block shrink-0 rounded-full ${"sm"===b?"h-[7px] w-[7px]":"h-2 w-2"} ${e[a]} ${c?f[a]:""} ${h}`})}},47101:(a,b,c)=>{"use strict";c.d(b,{O:()=>e});var d=c(47092);let e=(0,d.createServerReference)("40a2f99fceaa61fd4a74b0c6f3b01f599d36e2ea48",d.callServer,void 0,d.findSourceMapURL,"createWorkspaceAction")},49269:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(99386),e=c(85598),f=c.n(e);function g(){return(0,d.jsx)("div",{className:"flex min-h-screen w-full items-center justify-center bg-canvas px-4",children:(0,d.jsxs)("div",{className:"text-center space-y-4",children:[(0,d.jsx)("h1",{className:"text-2xl font-bold text-ink",children:"404 — Page not found"}),(0,d.jsx)("p",{className:"text-sm text-ink-3",children:"This page doesn't exist."}),(0,d.jsx)(f(),{href:"/",className:"inline-block rounded-lg bg-agent-vivid text-canvas px-4 py-2 text-sm font-semibold hover:bg-agent-vivid transition-colors",children:"Go to dashboard"})]})})}},53626:(a,b,c)=>{"use strict";c.d(b,{W:()=>e});var d=c(47092);let e=(0,d.createServerReference)("4052967950b494e22cd435b66a556d540a965df63a",d.callServer,void 0,d.findSourceMapURL,"switchWorkspaceAction")},54580:(a,b,c)=>{Promise.resolve().then(c.bind(c,84327))},54620:()=>{},54792:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,61186,23)),Promise.resolve().then(c.t.bind(c,6621,23)),Promise.resolve().then(c.t.bind(c,41837,23)),Promise.resolve().then(c.t.bind(c,85060,23)),Promise.resolve().then(c.t.bind(c,43484,23)),Promise.resolve().then(c.t.bind(c,8376,23)),Promise.resolve().then(c.t.bind(c,74625,23)),Promise.resolve().then(c.t.bind(c,51080,23))},55053:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(10476);function e({error:a,reset:b}){return(0,d.jsx)("div",{className:"flex min-h-screen w-full items-center justify-center bg-canvas px-4",children:(0,d.jsxs)("div",{className:"text-center space-y-4",children:[(0,d.jsx)("h1",{className:"text-2xl font-bold text-ink",children:"Something went wrong"}),(0,d.jsx)("p",{className:"text-sm text-ink-3",children:a.message}),(0,d.jsx)("button",{onClick:b,className:"rounded-lg bg-agent-vivid text-canvas px-4 py-2 text-sm font-semibold hover:bg-agent-vivid transition-colors",children:"Try again"})]})})}c(64565)},57712:(a,b,c)=>{"use strict";c.d(b,{default:()=>g});var d=c(10476),e=c(64565),f=c(48082);function g(){let[a,b]=(0,e.useState)("light");return(0,d.jsx)(f.l$,{theme:a,position:"bottom-right",richColors:!0,closeButton:!0})}},59166:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,88831,23))},59234:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,61186,23))},62952:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(49554).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\APPS\\\\NodalAI\\\\apps\\\\web\\\\src\\\\components\\\\Sidebar.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\APPS\\NodalAI\\apps\\web\\src\\components\\Sidebar.tsx","default")},63894:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,16385,23))},69679:(a,b,c)=>{"use strict";c.d(b,{A:()=>f,S:()=>e});var d=c(10476);let e=["\uD83D\uDDC2️","\uD83C\uDFE0","\uD83D\uDCBC","\uD83D\uDE80","\uD83E\uDDEA","\uD83C\uDFA8","\uD83D\uDCCA","\uD83D\uDEE0️","\uD83C\uDF10","⚡","\uD83E\uDD16","\uD83D\uDCE6"];function f({value:a,onChange:b,disabled:c}){return(0,d.jsx)("div",{className:"flex flex-wrap gap-1",children:e.map(e=>{let f=a===e;return(0,d.jsx)("button",{type:"button",disabled:c,"aria-pressed":f,onClick:()=>b(e),className:`flex h-8 w-8 items-center justify-center rounded-md border text-[15px] leading-none transition-colors disabled:opacity-50 ${f?"border-ink bg-hover-2":"border-rule-2 hover:bg-hover"}`,children:e},e)})})}},70615:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>j,metadata:()=>i});var d=c(99386),e=c(50277),f=c.n(e),g=c(80356),h=c.n(g);c(54620);let i={title:"Nodal-Agents",description:"Multi-agent platform"};function j({children:a}){return(0,d.jsxs)("html",{lang:"en",className:`${f().variable} ${h().variable}`,suppressHydrationWarning:!0,children:[(0,d.jsx)("head",{children:(0,d.jsx)("script",{dangerouslySetInnerHTML:{__html:"(function(){try{var t=localStorage.getItem('nodal.theme');if(t!=='dark'&&t!=='light')t='light';document.documentElement.setAttribute('data-theme',t);}catch(e){document.documentElement.setAttribute('data-theme','light');}})();"}})}),(0,d.jsx)("body",{children:a})]})}},70953:()=>{},77386:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,67448,23))},84327:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(49554).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\APPS\\\\NodalAI\\\\apps\\\\web\\\\src\\\\app\\\\error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\APPS\\NodalAI\\apps\\web\\src\\app\\error.tsx","default")},86688:(a,b,c)=>{"use strict";c.d(b,{default:()=>R});var d=c(10476),e=c(64565),f=c(12418),g=c(77568),h=c(3521),i=c(82271),j=c(13028),k=c(83588),l=c(92607),m=c(1282),n=c(73836),o=c(11145),p=c(66442),q=c(63473),r=c(84132),s=c(64945),t=c(8161),u=c(55234),v=c(11745),w=c(93720),x=c(4870);function y(){return(0,d.jsx)("div",{className:"px-4 pb-3.5",children:(0,d.jsxs)("div",{className:"flex items-center gap-2 text-[16px] font-medium leading-none tracking-[-0.005em] text-ink",children:[(0,d.jsx)("span",{className:"flex h-[22px] w-[22px] items-center justify-center rounded-md bg-ink text-[11px] font-semibold leading-none tracking-[0.04em] text-canvas font-mono",children:"N"}),(0,d.jsx)("span",{children:"Nodal-Agents"})]})})}function z({children:a}){return(0,d.jsx)("div",{className:"px-3.5 pt-3.5 pb-1 font-mono text-[9.5px] uppercase tracking-[0.14em] text-ink-4",children:a})}var A=c(88831),B=c.n(A);let C={agent:"bg-agent-vivid",skill:"bg-skill-vivid",conn:"bg-conn-vivid"};function D({href:a,label:b,icon:c,dot:e,count:g,isActive:h}){let i=(0,f.usePathname)(),j=h??(i===a||i.startsWith(a+"/"));return(0,d.jsxs)(B(),{href:a,className:`group mx-2 flex h-[30px] items-center gap-2.5 rounded-lg px-2.5 text-[12.5px] leading-none transition-colors ${j?"bg-paper text-ink font-medium shadow-[0_1px_2px_rgba(0,0,0,0.04)]":"text-ink-2 hover:bg-hover"}`,children:[e?(0,d.jsx)("span",{className:`h-2 w-2 shrink-0 rounded-full ${C[e]}`}):(0,d.jsx)("span",{className:`flex h-3.5 w-3.5 shrink-0 items-center justify-center ${j?"text-ink":"text-ink-3 group-hover:text-ink-2"}`,children:c}),(0,d.jsx)("span",{className:"flex-1 truncate",children:b}),void 0!==g&&(0,d.jsx)("span",{className:"font-mono text-[10px] tracking-[0.02em] text-ink-4",children:g})]})}var E=c(44100);function F({runningAgents:a,throughput:b,fill:c=.36}){if(void 0===a)return null;let e=100*Math.max(0,Math.min(1,c));return(0,d.jsxs)("div",{className:"mx-3 mt-2.5 rounded-[10px] border border-rule-2 bg-paper px-3 pt-2.5 pb-3",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5 font-mono text-[9.5px] uppercase leading-none tracking-[0.14em] text-ink-3",children:[(0,d.jsx)(E.A,{variant:"lime"}),"Live"]}),(0,d.jsxs)("div",{className:"mt-1.5 text-[12.5px] leading-[1.35] text-ink-2",children:[(0,d.jsxs)("b",{className:"font-semibold text-ink",children:[a," agents"]}),b?` running \xb7 ${b}`:" running"]}),(0,d.jsx)("div",{className:"mt-2.5 h-[3px] overflow-hidden rounded-[2px] bg-black/[0.06] dark:bg-white/[0.06]",children:(0,d.jsx)("i",{className:"block h-full bg-agent-vivid",style:{width:`${e}%`}})})]})}var G=c(48082),H=c(23586),I=c(42199);function J({fleets:a,activeId:b,disabled:c,onChange:f,onNewWorkspace:g}){let[h,i]=(0,e.useState)(!1),j=(0,e.useRef)(null),k=a.find(a=>a.id===b)??a[0];return k?(0,d.jsxs)("div",{ref:j,className:"relative mx-3.5 mt-3.5 mb-1",children:[(0,d.jsxs)("button",{type:"button",onClick:()=>!c&&i(a=>!a),"aria-haspopup":"listbox","aria-expanded":h,"aria-disabled":c||void 0,className:`flex h-[38px] w-full items-center gap-2.5 rounded-[9px] border border-rule-2 bg-paper px-2.5 text-[13px] leading-none text-ink ${c?"cursor-default":"cursor-pointer hover:bg-hover-2/40"}`,children:[(0,d.jsx)("span",{className:"flex h-[22px] w-[22px] shrink-0 items-center justify-center rounded-[5px] font-mono text-[10.5px] font-semibold leading-none tracking-[0.04em] text-[#0a0a0a]",style:{background:k.color},children:k.icon??k.tag.slice(0,2)}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate text-left text-[12.5px] font-medium text-ink",children:k.name}),!c&&(0,d.jsx)(H.a,{size:12,className:"shrink-0 text-ink-3"})]}),h&&!c&&(0,d.jsxs)("div",{role:"listbox",className:"absolute inset-x-0 top-[calc(100%+6px)] z-30 rounded-[9px] border border-rule-2 bg-paper p-1.5 shadow-[0_12px_32px_rgba(0,0,0,0.10)]",children:[a.map(a=>{let c=a.id===b;return(0,d.jsxs)("div",{role:"option","aria-selected":c,onClick:()=>{f?.(a.id),i(!1)},className:`flex cursor-pointer items-center gap-2.5 rounded-md px-2 py-1.5 text-[12.5px] leading-[1.2] text-ink-2 hover:bg-hover ${c?"bg-hover-2":""}`,children:[(0,d.jsx)("span",{className:"flex h-5 w-5 shrink-0 items-center justify-center rounded-[5px] font-mono text-[10px] font-semibold leading-none tracking-[0.04em] text-[#0a0a0a]",style:{background:a.color},children:a.icon??a.tag.slice(0,2)}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate font-medium text-ink",children:a.name}),(0,d.jsx)(I.J,{size:12,weight:"bold",className:`text-ink ${c?"opacity-100":"opacity-0"}`})]},a.id)}),g&&(0,d.jsxs)("button",{type:"button",onClick:()=>{i(!1),g()},className:"mt-1 flex w-full items-center gap-2 rounded-md border-t border-rule px-2 py-1.5 text-[12px] font-medium text-ink-3 hover:bg-hover hover:text-ink-2 transition-colors",children:[(0,d.jsx)("span",{className:"flex h-4 w-4 items-center justify-center rounded text-[12px] leading-none",children:"+"}),"New workspace"]})]})]}):null}var K=c(69679),L=c(53626),M=c(47101);let N=["#d4ff2e","#74b9ff","#a29bfe","#fd79a8","#55efc4","#fdcb6e","#e17055","#6c5ce7"];function O(a){return{id:a.id,name:a.name,tag:a.name.replace(/[^a-zA-Z0-9]/g,"").slice(0,3).toUpperCase()||"WS",color:function(a){let b=0;for(let c=0;c<a.length;c+=1)b=31*b+a.charCodeAt(c)>>>0;return N[b%N.length]??N[0]}(a.slug),icon:a.icon??void 0}}function P({workspaces:a}){let b=(0,f.useRouter)(),[c,g]=(0,e.useTransition)(),[h,i]=(0,e.useTransition)(),[j,k]=(0,e.useState)(!1),[l,m]=(0,e.useState)(""),[n,o]=(0,e.useState)(K.S[0]),p=(0,e.useRef)(null),q=a.map(O),r=a.find(a=>a.active),s=r?.id??q[0]?.id??"";return(0,d.jsxs)("div",{children:[(0,d.jsx)(J,{fleets:q,activeId:s,onChange:function(a){a===s||c||g(async()=>{let c=await (0,L.W)({id:a});c.ok?b.refresh():G.oR.error(c.message)})},disabled:c||0===q.length,onNewWorkspace:function(){k(!0),m(""),o(K.S[0]),requestAnimationFrame(()=>p.current?.focus())}}),j&&(0,d.jsxs)("form",{onSubmit:function(a){a.preventDefault();let c=l.trim();c&&i(async()=>{let a=await (0,M.O)({name:c,icon:n});if(!a.ok)return void G.oR.error(a.message);let d=await (0,L.W)({id:a.data.id});d.ok?(k(!1),m(""),G.oR.success(`Workspace "${c}" created`),b.refresh()):G.oR.error(d.message)})},className:"mx-3.5 mt-1 rounded-[9px] border border-rule-2 bg-paper p-2.5",children:[(0,d.jsx)("p",{className:"mb-1.5 font-mono text-[10px] uppercase tracking-[0.1em] text-ink-4",children:"New workspace"}),(0,d.jsx)("div",{className:"mb-2",children:(0,d.jsx)(K.A,{value:n,onChange:o,disabled:h})}),(0,d.jsxs)("div",{className:"flex gap-1.5",children:[(0,d.jsx)("input",{ref:p,type:"text",value:l,onChange:a=>m(a.target.value),placeholder:"Name…",maxLength:60,disabled:h,className:"min-w-0 flex-1 rounded-md border border-rule bg-canvas px-2.5 py-1.5 text-[12.5px] text-ink placeholder:text-ink-4 focus:border-ink-3 focus:outline-none disabled:opacity-50"}),(0,d.jsx)("button",{type:"submit",disabled:h||!l.trim(),className:"shrink-0 rounded-md bg-ink px-3 py-1.5 text-[12px] font-medium text-canvas hover:brightness-90 disabled:cursor-not-allowed disabled:opacity-50",children:h?"…":"Create"}),(0,d.jsx)("button",{type:"button",onClick:()=>k(!1),disabled:h,className:"shrink-0 rounded-md border border-rule px-2.5 py-1.5 text-[12px] text-ink-3 hover:border-rule-2 hover:text-ink-2 disabled:opacity-50",children:"✕"})]})]})]})}let Q=[{section:"Overview",items:[{href:"/",label:"Home",icon:g.t},{href:"/chat",label:"Chat",icon:h.x},{href:"/jobs",label:"Runs",icon:i.T},{href:"/llm-providers",label:"LLM Providers",icon:j.R}]},{section:"Build",items:[{href:"/agents",label:"Agents",icon:k.n,dot:"agent"},{href:"/skills",label:"Skills",icon:l.f,dot:"skill"},{href:"/connectors",label:"API Connectors",icon:m.F,dot:"conn"},{href:"/mcp",label:"MCP Connectors",icon:n.X,dot:"conn"},{href:"/credentials",label:"Credentials",icon:o.U},{href:"/memories",label:"Memory",icon:p.j}]},{section:"Operate",items:[{href:"/automations",label:"Automation",icon:q.E},{href:"/approvals",label:"Approvals",icon:r.o},{href:"/logs",label:"Logs",icon:s.m}]},{section:"Workspace",items:[{href:"https://discord.gg/7UZsvZPgU",label:"Join Discord",external:!0},{href:"/billing",label:"Billing",icon:t.S},{href:"/settings",label:"Settings",icon:u._}]}];function R({workspaces:a,userMenu:b}){let c=(0,f.usePathname)(),[g,h]=(0,e.useState)(!1);return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"fixed top-0 right-0 left-0 z-40 flex items-center justify-between border-b border-rule-2 bg-sidebar px-4 py-3.5 lg:hidden",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 text-[14px] font-medium tracking-[-0.005em] text-ink",children:[(0,d.jsx)("span",{className:"flex h-[20px] w-[20px] items-center justify-center rounded-md bg-ink font-mono text-[10px] font-semibold text-canvas",children:"N"}),(0,d.jsx)("span",{children:"Nodal-Agents"})]}),(0,d.jsx)("button",{type:"button",onClick:()=>h(a=>!a),className:"text-ink-3 transition-colors hover:text-ink","aria-label":g?"Close menu":"Open menu",children:g?(0,d.jsx)(v.X,{size:20}):(0,d.jsx)(w.B,{size:20})})]}),g&&(0,d.jsx)("div",{className:"fixed inset-0 z-30 bg-black/40 lg:hidden",onClick:()=>h(!1),"aria-hidden":!0}),(0,d.jsxs)("aside",{className:`fixed top-0 left-0 z-40 flex h-full w-[220px] flex-col border-r border-rule-2 bg-sidebar pt-4 pb-3 transition-transform duration-200 lg:translate-x-0 ${g?"translate-x-0":"-translate-x-full"}`,children:[(0,d.jsx)(y,{}),(0,d.jsx)(P,{workspaces:a??[]}),(0,d.jsx)("nav",{className:"flex flex-1 flex-col overflow-y-auto py-1.5",children:Q.map((a,b)=>(0,d.jsxs)("div",{children:[a.section&&(0,d.jsx)(z,{children:a.section}),a.items.map(a=>a.external?(0,d.jsxs)("a",{href:a.href,target:"_blank",rel:"noopener noreferrer",className:"group mx-2 flex h-[30px] items-center gap-2.5 rounded-lg bg-[#5865F2] px-2.5 text-[12.5px] font-medium leading-none text-white transition-[filter] hover:brightness-110",children:[(0,d.jsx)("span",{className:"flex h-3.5 w-3.5 shrink-0 items-center justify-center",children:(0,d.jsx)(x.B,{size:14,weight:"bold"})}),(0,d.jsx)("span",{className:"flex-1 truncate",children:a.label})]},a.href):(0,d.jsx)(D,{href:a.href,label:a.label,icon:a.icon?(0,d.jsx)(a.icon,{size:14}):void 0,dot:a.dot,count:a.count,isActive:"/"===a.href?"/"===c:c===a.href||c.startsWith(a.href+"/")},a.href))]},b))}),(0,d.jsx)(F,{runningAgents:void 0}),b&&(0,d.jsx)("div",{className:"mt-2 border-t border-rule-2 px-3 pt-3","data-testid":"user-menu",children:b})]})]})}},88866:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(49554).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\APPS\\\\NodalAI\\\\apps\\\\web\\\\src\\\\components\\\\ui\\\\ThemeToggle.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\APPS\\NodalAI\\apps\\web\\src\\components\\ui\\ThemeToggle.tsx","default")},91092:(a,b,c)=>{Promise.resolve().then(c.bind(c,62952)),Promise.resolve().then(c.bind(c,97173)),Promise.resolve().then(c.bind(c,92002)),Promise.resolve().then(c.bind(c,93690)),Promise.resolve().then(c.bind(c,88866)),Promise.resolve().then(c.t.bind(c,16385,23))},92002:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(49554).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\APPS\\\\NodalAI\\\\apps\\\\web\\\\src\\\\components\\\\ui\\\\SearchBox.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\APPS\\NodalAI\\apps\\web\\src\\components\\ui\\SearchBox.tsx","default")},93690:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(49554).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\APPS\\\\NodalAI\\\\apps\\\\web\\\\src\\\\components\\\\ui\\\\ThemedToaster.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\APPS\\NodalAI\\apps\\web\\src\\components\\ui\\ThemedToaster.tsx","default")},96591:(a,b,c)=>{"use strict";c.d(b,{ZH:()=>d.ZH,ip:()=>d.R3});var d=c(36535)},97173:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(49554).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\APPS\\\\NodalAI\\\\apps\\\\web\\\\src\\\\components\\\\SignOutButton.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\APPS\\NodalAI\\apps\\web\\src\\components\\SignOutButton.tsx","default")},99740:(a,b,c)=>{"use strict";c.d(b,{ApifyApiError:()=>d,G:()=>e});class d extends Error{constructor(a,b,c){super(b),this.name="ApifyApiError",this.code=a,this.status=c}}function e(a){if(a instanceof d)return a;if(null!==a&&"object"==typeof a&&"statusCode"in a&&"number"==typeof a.statusCode){let c,e=a.message??`Apify API error ${a.statusCode}`;var b=a.statusCode;switch(!0){case 401===b:c="apify_unauthorized";break;case 403===b:c="apify_forbidden";break;case 404===b:c="apify_not_found";break;case 422===b:c="apify_validation_error";break;case 429===b:c="apify_rate_limited";break;case b>=500:c="apify_transient";break;default:c="apify_client_error"}return new d(c,e,b)}return a instanceof Error?new d("apify_unknown",a.message):new d("apify_unknown",String(a))}}};
1223
+ `),(0,e.revalidatePath)("/jobs"),(0,e.revalidatePath)(`/jobs/${a}`),cT({status:"cancelled"})}catch(a){return console.error("[cancelJobAction]",a),cU("db_error","Failed to cancel job")}}let dq=g.Ik({agentId:g.Yj().guid(),botToken:g.Yj().min(20,"Token looks too short").max(200,"Token looks too long").regex(/^\d+:[A-Za-z0-9_-]+$/,"Token must look like 123456789:AAAAA...")});async function dr(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid agent id");let c=(0,y.Lf)(),[d]=await c.select({id:k.X6.id,slug:k.X6.slug,name:k.X6.name,botToken:k.X6.telegramBotToken,botUsername:k.X6.telegramBotUsername,lastSeenChatIdTelegram:k.X6.lastSeenChatIdTelegram}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,a),(0,k.eq)(k.X6.entityId,b.entityId)));if(!d)return cU("not_found","Agent not found");return cT({agentId:d.id,agentSlug:d.slug,agentName:d.name,status:d.botToken?"connected":"disconnected",botUsername:d.botUsername,lastSeenChatIdTelegram:d.lastSeenChatIdTelegram})}catch(a){return console.error("[getAgentTelegramConfigAction]",a),cU("db_error","Failed to load Telegram config")}}async function ds(a){try{let b,c=await cV(),d=dq.safeParse(a);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid input");let{agentId:f,botToken:g}=d.data,h=(0,y.Lf)(),[i]=await h.select({id:k.X6.id,slug:k.X6.slug,name:k.X6.name}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,f),(0,k.eq)(k.X6.entityId,c.entityId)));if(!i)return cU("not_found","Agent not found");try{b=await n(g)}catch(a){if(a instanceof l&&"telegram_invalid_token"===a.code)return cU("telegram_invalid_token","Telegram rejected this token. Double-check it from @BotFather.");throw a}let j=0;try{let a=await o({botToken:g,offset:-1,timeout:0,limit:1});a.length>0&&(j=Math.max(...a.map(a=>a.update_id))+1)}catch{}return await h.update(k.X6).set({telegramBotToken:g,telegramBotUsername:b.username,telegramOffset:j,updatedAt:new Date}).where((0,k.eq)(k.X6.id,f)),(0,e.revalidatePath)("/agents"),(0,e.revalidatePath)(`/agents/${f}/telegram`),cT({agentId:i.id,agentSlug:i.slug,agentName:i.name,status:"connected",botUsername:b.username,lastSeenChatIdTelegram:null})}catch(a){return console.error("[configureAgentTelegramAction]",a),cU("db_error","Failed to configure Telegram")}}async function dt(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid agent id");let c=(0,y.Lf)(),[d]=await c.select({id:k.X6.id}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,a),(0,k.eq)(k.X6.entityId,b.entityId)));if(!d)return cU("not_found","Agent not found");return await c.update(k.X6).set({telegramBotToken:null,telegramBotUsername:null,telegramOffset:null,updatedAt:new Date}).where((0,k.eq)(k.X6.id,a)),(0,e.revalidatePath)("/agents"),(0,e.revalidatePath)(`/agents/${a}/telegram`),cT(void 0)}catch(a){return console.error("[disconnectAgentTelegramAction]",a),cU("db_error","Failed to disconnect Telegram")}}let du=g.Ik({agentId:g.Yj().guid().optional(),category:g.k5(["preference","context","outcome","learned_rule"]).optional(),tag:g.Yj().min(1).max(80).optional(),archived:g.zM().default(!1),page:g.ai().int().min(1).default(1),pageSize:g.ai().int().min(1).max(200).default(50)});async function dv(a={}){try{let b=await cV(),c=du.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)(),e=await v(d,{entityId:b.entityId,agentId:c.data.agentId,category:c.data.category,tags:c.data.tag?[c.data.tag]:void 0,archived:c.data.archived,page:c.data.page,pageSize:c.data.pageSize,sort:"recent"}),f=Array.from(new Set(e.items.map(a=>a.agent_id).filter(a=>null!==a))),g=new Map;if(f.length>0)for(let a of(await d.select({id:k.X6.id,name:k.X6.name,slug:k.X6.slug}).from(k.X6).where((0,k.RV)(k.X6.id,f))))g.set(a.id,{name:a.name,slug:a.slug});let h=e.items.map(a=>{let b=a.agent_id?g.get(a.agent_id):null;return{...a,agentName:b?.name??null,agentSlug:b?.slug??null}});return cT({items:h,page:e.page,pageSize:e.pageSize,totalCount:e.totalCount,hasMore:e.hasMore})}catch(a){return console.error("[listMemoriesAction]",a),cU("db_error","Failed to load memories")}}async function dw(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid memory id");let c=(0,y.Lf)();return await s(c,a,b.entityId,{archived:!0}),(0,e.revalidatePath)("/memories"),cT(void 0)}catch(a){if(a instanceof q)return cU("not_found","Memory not found");return console.error("[archiveMemoryAction]",a),cU("db_error","Failed to archive memory")}}async function dx(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid memory id");let c=(0,y.Lf)();return await s(c,a,b.entityId,{archived:!1}),(0,e.revalidatePath)("/memories"),cT(void 0)}catch(a){if(a instanceof q)return cU("not_found","Memory not found");return console.error("[unarchiveMemoryAction]",a),cU("db_error","Failed to unarchive memory")}}async function dy(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid memory id");let c=(0,y.Lf)();return await t(c,a,b.entityId),(0,e.revalidatePath)("/memories"),cT(void 0)}catch(a){if(a instanceof q)return cU("not_found","Memory not found");return console.error("[deleteMemoryAction]",a),cU("db_error","Failed to delete memory")}}async function dz(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.select().from(k.tK).where((0,k.eq)(k.tK.entityId,a.entityId)),d=[...new Set(c.map(a=>a.credentialId).filter(a=>null!==a))],e=d.length>0?await b.select().from(k.z3).where((0,k.RV)(k.z3.id,d)):[],f=new Map;for(let a of e)f.set(a.id,a);let g=new Map;for(let a of e)try{let b=a.payload,c=b.startsWith("enc:v1:")?(0,w.Yc)(b):b,d=JSON.parse(c);g.set(a.id,{accountName:"string"==typeof d.accountName?d.accountName:null,expiresAt:"string"==typeof d.expiresAt&&d.expiresAt?new Date(d.expiresAt):null,scopes:"string"==typeof d.scopes?d.scopes:null})}catch{g.set(a.id,{accountName:null,expiresAt:null,scopes:null})}let h=c.map(a=>{let b=a.credentialId?f.get(a.credentialId):void 0,c=a.credentialId?g.get(a.credentialId)??null:null;return{id:a.id,slug:a.slug,name:a.name,authType:a.authType,active:a.active??!0,hasApiKey:!!a.apiKey,credentialId:a.credentialId??null,credentialName:b?.name??null,credentialType:b?b.type:null,credentialAccountName:c?.accountName??null,credentialExpiresAt:c?.expiresAt??null,credentialScopes:c?.scopes??null,createdAt:a.createdAt,updatedAt:a.updatedAt}}),i=F.Y.map(a=>({slug:a.slug,label:a.label,authType:a.authType,docsHint:a.docsHint,credentialType:a.credentialType??null}));return cT({instances:h,catalog:i})}catch(a){return console.error("[listConnectorsAction]",a),cU("db_error","Failed to load connectors")}}let dA=g.Ik({slug:g.Yj().min(1).max(80),name:g.Yj().min(1,"Name is required").max(120),apiKey:g.Yj().min(1,"API key is required")});async function dB(a){try{let b=await cV(),c=dA.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=F.Y.find(a=>a.slug===c.data.slug);if(!d)return cU("validation_failed","Unknown connector slug");if("api_key"!==d.authType)return cU("validation_failed",`Connector ${c.data.slug} uses ${d.authType}, not api_key`);let f=(0,y.Lf)(),g=(0,w.ph)(c.data.apiKey)?c.data.apiKey:(0,w.w)(c.data.apiKey),[h]=await f.insert(k.tK).values({entityId:b.entityId,slug:c.data.slug,name:c.data.name,apiKey:g,authType:"api_key",active:!0}).returning({id:k.tK.id});if(!h)return cU("db_error","Insert returned no row");return(0,e.revalidatePath)("/connectors"),cT({id:h.id})}catch(a){return console.error("[saveApiKeyConnectorAction]",a),cU("db_error","Failed to save connector")}}async function dC(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid connector id");let c=(0,y.Lf)(),[d]=await c.select({id:k.tK.id}).from(k.tK).where((0,k.Uo)((0,k.eq)(k.tK.id,a),(0,k.eq)(k.tK.entityId,b.entityId)));if(!d)return cU("not_found","Connector not found");return await c.delete(k.tK).where((0,k.eq)(k.tK.id,a)),(0,e.revalidatePath)("/connectors"),cT(void 0)}catch(a){return console.error("[deleteConnectorAction]",a),cU("db_error","Failed to delete connector")}}async function dD(){try{let a=await cV(),b=(0,y.Lf)(),c=(await b.select().from(k.h_).where((0,k.eq)(k.h_.entityId,a.entityId))).map(a=>({id:a.id,slug:a.slug,name:a.name,active:a.active??!0,hasApiKey:!!a.apiKey,apiKeyLast4:a.apiKeyLast4??null,toolCount:Array.isArray(a.availableTools)?a.availableTools.length:0,createdAt:a.createdAt})),d=I.map(a=>({slug:a.slug,label:a.label,description:a.description,docsHint:a.docsHint,keyPrefix:a.keyPrefix,serverUrl:a.serverUrl,transport:a.transport,command:a.command,args:a.args,envVarNames:a.envVarNames,status:a.status??"verified"}));return cT({instances:c,catalog:d})}catch(a){return console.error("[listMcpServersAction]",a),cU("db_error","Failed to load MCP connectors")}}let dE=g.Ik({slug:g.Yj().min(1).max(80),name:g.Yj().min(1,"Name is required").max(120),apiKey:g.Yj().max(2e3).optional(),url:g.Yj().url("Invalid URL").optional(),customSlug:g.Yj().min(2).max(30).regex(/^[a-z0-9-]+$/,"Slug must be lowercase letters, digits, dashes").optional(),customAuthScheme:g.k5(["header","query","bearer"]).optional(),customAuthParamName:g.Yj().min(1).max(100).optional(),customCommand:g.Yj().min(1).max(200).optional(),customArgs:g.YO(g.Yj().max(500)).max(20).optional(),customEnv:g.g1(g.Yj(),g.Yj().max(2e3)).optional()});async function dF(a){try{let b=await cV(),c=dE.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=I.find(a=>a.slug===c.data.slug);if(!d)return cU("validation_failed","Unknown MCP connector");let f="custom-http-mcp"===d.slug,g="custom-stdio-mcp"===d.slug,h=d.slug,i=d.transport,j=d.authScheme,l=d.authParamName;if(f){if(!c.data.customSlug)return cU("validation_failed","Server slug is required for custom MCP");if(!c.data.customAuthScheme)return cU("validation_failed","Auth scheme is required for custom MCP");if(h=c.data.customSlug,j=c.data.customAuthScheme,l="bearer"===c.data.customAuthScheme?"Authorization":c.data.customAuthParamName??"","bearer"!==j&&!l)return cU("validation_failed",`Auth param name is required for the "${j}" scheme`)}else if(g){if(!c.data.customSlug)return cU("validation_failed","Server slug is required for custom MCP");if(!c.data.customCommand)return cU("validation_failed","Command is required for stdio MCP");h=c.data.customSlug,i="stdio"}if(f||g){let a=(0,y.Lf)();if((await a.select({id:k.h_.id}).from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.entityId,b.entityId),(0,k.eq)(k.h_.slug,h)))).length>0)return cU("slug_taken",`Slug "${h}" is already used by another MCP server. Pick a different one.`)}if("http"===i){let a=(c.data.apiKey??"").trim();if(!a)return cU("validation_failed","API key is required");if(!f&&d.keyPrefix.length>0&&!d.keyPrefix.some(b=>a.startsWith(b))){let a=1===d.keyPrefix.length?`"${d.keyPrefix[0]}"`:`one of: ${d.keyPrefix.map(a=>`"${a}"`).join(", ")}`;return cU("validation_failed",`API key must start with ${a}`)}let g=d.serverUrl??c.data.url??null;if(!g)return cU("validation_failed",`${d.label} requires a server URL`);let i=[],m=null;try{if(m=await N({transport:"http",url:g,apiKey:a,authScheme:j,authParamName:l}),d.verifyToolName&&!f){let a=await m.client.callTool({name:d.verifyToolName,arguments:{}});if(!0===a.isError)return cU("mcp_connect_failed",`${d.label} rejected the API key.`)}i=m.tools.map(a=>({name:a.name,description:a.description??null}))}catch(b){let a=b instanceof Error?b.message:String(b);return cU("mcp_connect_failed",`Could not connect to ${d.label}: ${a}`)}finally{m&&await m.close().catch(()=>{})}let n=(0,y.Lf)(),o=(0,w.w)(a),[p]=await n.insert(k.h_).values({entityId:b.entityId,name:c.data.name,slug:h,transport:"http",url:g,apiKey:o,apiKeyLast4:(0,w.nK)(a),authScheme:j,authParamName:l,availableTools:i,active:!0}).returning({id:k.h_.id});if(!p)return cU("db_error","Insert returned no row");return(0,e.revalidatePath)("/mcp"),cT({id:p.id})}let m=g?c.data.customCommand:d.command??c.data.customCommand,n=c.data.customArgs??d.args??[],o=c.data.customEnv??{},p=[],q=null;try{p=(q=await N({transport:"stdio",command:m,args:n,env:o})).tools.map(a=>({name:a.name,description:a.description??null}))}catch(b){let a=b instanceof Error?b.message:String(b);return cU("mcp_connect_failed",`Could not start ${d.label} subprocess (${m}): ${a}`)}finally{q&&await q.close().catch(()=>{})}let r={};for(let[a,b]of Object.entries(o))r[a]=(0,w.w)(b);let s=(0,y.Lf)(),[t]=await s.insert(k.h_).values({entityId:b.entityId,name:c.data.name,slug:h,transport:"stdio",url:null,apiKey:null,apiKeyLast4:null,authScheme:null,authParamName:null,command:m,args:n,envVars:r,availableTools:p,active:!0}).returning({id:k.h_.id});if(!t)return cU("db_error","Insert returned no row");return(0,e.revalidatePath)("/mcp"),cT({id:t.id})}catch(a){return console.error("[createMcpServerFromCatalogAction]",a),cU("db_error","Failed to save MCP connector")}}async function dG(a,b){try{let c=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid MCP server id");let d=g.Yj().min(1,"Name is required").max(120).safeParse(b);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid name");let f=(0,y.Lf)(),[h]=await f.select({id:k.h_.id}).from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.id,a),(0,k.eq)(k.h_.entityId,c.entityId)));if(!h)return cU("not_found","MCP connector not found");return await f.update(k.h_).set({name:d.data,updatedAt:new Date}).where((0,k.eq)(k.h_.id,a)),(0,e.revalidatePath)("/mcp"),cT(void 0)}catch(a){return console.error("[renameMcpServerAction]",a),cU("db_error","Failed to rename MCP server")}}async function dH(a,b){try{let c=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid MCP server id");let d=g.Yj().min(1,"API key is required").max(2e3).safeParse(b);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid API key");let f=d.data.trim(),h=(0,y.Lf)(),[i]=await h.select({id:k.h_.id,slug:k.h_.slug,url:k.h_.url,authScheme:k.h_.authScheme,authParamName:k.h_.authParamName}).from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.id,a),(0,k.eq)(k.h_.entityId,c.entityId)));if(!i)return cU("not_found","MCP connector not found");let j=I.find(a=>a.slug===i.slug);if(j&&j.keyPrefix.length>0&&!j.keyPrefix.some(a=>f.startsWith(a))){let a=1===j.keyPrefix.length?`"${j.keyPrefix[0]}"`:`one of: ${j.keyPrefix.map(a=>`"${a}"`).join(", ")}`;return cU("validation_failed",`API key must start with ${a}`)}if(!i.url||!i.authScheme||!i.authParamName)return cU("validation_failed","MCP server has incomplete configuration");let l=[],m=null;try{m=await N({transport:"http",url:i.url,apiKey:f,authScheme:i.authScheme,authParamName:i.authParamName}),l=((await m.client.listTools()).tools??[]).map(a=>({name:a.name,description:a.description??null})),j?.verifyToolName&&await m.client.callTool({name:j.verifyToolName,arguments:{}})}catch(b){let a=b instanceof Error?b.message:"unknown error";return cU("mcp_connect_failed",`Couldn't verify the new key: ${a}`)}finally{m&&await m.close().catch(()=>{})}let n=(0,w.ph)(f)?f:(0,w.w)(f);return await h.update(k.h_).set({apiKey:n,apiKeyLast4:(0,w.nK)(f),availableTools:l,updatedAt:new Date}).where((0,k.eq)(k.h_.id,a)),(0,e.revalidatePath)("/mcp"),cT(void 0)}catch(a){return console.error("[updateMcpServerApiKeyAction]",a),cU("db_error","Failed to rotate MCP API key")}}async function dI(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid MCP server id");let c=(0,y.Lf)(),[d]=await c.select().from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.id,a),(0,k.eq)(k.h_.entityId,b.entityId)));if(!d)return cU("not_found","MCP connector not found");let e=d.envVars??{};return cT({id:d.id,name:d.name,slug:d.slug,transport:d.transport,url:d.url??null,authScheme:d.authScheme??null,authParamName:d.authParamName??null,command:d.command??null,args:Array.isArray(d.args)?d.args:[],envKeys:Object.keys(e),hasApiKey:!!d.apiKey,apiKeyLast4:d.apiKeyLast4??null})}catch(a){return console.error("[getMcpServerConfigAction]",a),cU("db_error","Failed to load MCP server config")}}let dJ=g.Ik({name:g.Yj().min(1,"Name is required").max(120),url:g.Yj().url("Invalid URL").optional(),authScheme:g.k5(["header","query","bearer"]).optional(),authParamName:g.Yj().max(100).optional(),apiKey:g.Yj().max(2e3).optional(),command:g.Yj().min(1).max(200).optional(),args:g.YO(g.Yj().max(500)).max(20).optional(),env:g.g1(g.Yj(),g.Yj().max(2e3)).optional()});async function dK(a,b){try{let c=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid MCP server id");let d=dJ.safeParse(b);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid input");let f=(0,y.Lf)(),[h]=await f.select().from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.id,a),(0,k.eq)(k.h_.entityId,c.entityId)));if(!h)return cU("not_found","MCP connector not found");let i=I.find(a=>a.slug===h.slug);if("http"===h.transport){let b,c=(d.data.url??h.url??"").trim();if(!c)return cU("validation_failed","Server URL is required");let g=d.data.authScheme??h.authScheme??"header",j="bearer"===g?"Authorization":(d.data.authParamName??h.authParamName??"").trim();if("bearer"!==g&&!j)return cU("validation_failed",`Auth param name is required for the "${g}" scheme`);let l=(d.data.apiKey??"").trim(),m=l.length>0;if(m){if(i&&i.keyPrefix.length>0&&!i.keyPrefix.some(a=>l.startsWith(a))){let a=1===i.keyPrefix.length?`"${i.keyPrefix[0]}"`:`one of: ${i.keyPrefix.map(a=>`"${a}"`).join(", ")}`;return cU("validation_failed",`API key must start with ${a}`)}b=l}else{if(!h.apiKey)return cU("validation_failed","No stored API key — provide one to connect");try{b=(0,w.Yc)(h.apiKey)}catch{return cU("validation_failed","Stored API key is unreadable — re-enter it")}}let n=[],o=null;try{n=(o=await N({transport:"http",url:c,apiKey:b,authScheme:g,authParamName:j})).tools.map(a=>({name:a.name,description:a.description??null}))}catch(b){let a=b instanceof Error?b.message:String(b);return cU("mcp_connect_failed",`Could not connect with the new config: ${a}`)}finally{o&&await o.close().catch(()=>{})}return await f.update(k.h_).set({name:d.data.name,url:c,authScheme:g,authParamName:j,availableTools:n,...m?{apiKey:(0,w.w)(b),apiKeyLast4:(0,w.nK)(b)}:{},updatedAt:new Date}).where((0,k.eq)(k.h_.id,a)),(0,e.revalidatePath)("/mcp"),cT(void 0)}let j=(d.data.command??h.command??"").trim();if(!j)return cU("validation_failed","Command is required");let l=d.data.args??(Array.isArray(h.args)?h.args:[]),m=h.envVars??{},n=d.data.env,o={},p={};for(let[a,b]of n?Object.entries(n):Object.entries(m).map(([a])=>[a,""]))if(b&&b.length>0)o[a]=b,p[a]=(0,w.w)(b);else if(void 0!==m[a]){try{o[a]=(0,w.Yc)(m[a])}catch{return cU("validation_failed",`Stored value for "${a}" is unreadable — re-enter it`)}p[a]=m[a]}let q=[],r=null;try{q=(r=await N({transport:"stdio",command:j,args:l,env:o})).tools.map(a=>({name:a.name,description:a.description??null}))}catch(b){let a=b instanceof Error?b.message:String(b);return cU("mcp_connect_failed",`Could not start the subprocess (${j}): ${a}`)}finally{r&&await r.close().catch(()=>{})}return await f.update(k.h_).set({name:d.data.name,command:j,args:l,envVars:p,availableTools:q,updatedAt:new Date}).where((0,k.eq)(k.h_.id,a)),(0,e.revalidatePath)("/mcp"),cT(void 0)}catch(a){return console.error("[updateMcpServerConfigAction]",a),cU("db_error","Failed to update MCP server")}}async function dL(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid MCP server id");let c=(0,y.Lf)(),[d]=await c.select({id:k.h_.id}).from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.id,a),(0,k.eq)(k.h_.entityId,b.entityId)));if(!d)return cU("not_found","MCP connector not found");return await c.delete(k.h_).where((0,k.eq)(k.h_.id,a)),(0,e.revalidatePath)("/mcp"),cT(void 0)}catch(a){return console.error("[deleteMcpServerAction]",a),cU("db_error","Failed to delete MCP connector")}}async function dM(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid agent id");let c=(0,y.Lf)(),[d]=await c.select({id:k.X6.id}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,a),(0,k.eq)(k.X6.entityId,b.entityId)));if(!d)return cU("not_found","Agent not found");let e=await c.select({id:k.h_.id,slug:k.h_.slug,name:k.h_.name,availableTools:k.h_.availableTools}).from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.entityId,b.entityId),(0,k.eq)(k.h_.active,!0)));if(0===e.length)return cT([]);let f=await c.select({mcpServerId:k.oS.mcpServerId,enabledTools:k.oS.enabledTools}).from(k.oS).where((0,k.eq)(k.oS.agentId,a)),h=new Map;for(let a of f)h.set(a.mcpServerId,{enabledTools:a.enabledTools??null});let i=e.map(a=>{let b=h.get(a.id);return{mcpServerId:a.id,slug:a.slug,label:a.name,assigned:void 0!==b,enabledTools:b?.enabledTools??null,availableTools:Array.isArray(a.availableTools)?a.availableTools:[]}});return cT(i)}catch(a){return console.error("[listAgentMcpServersAction]",a),cU("db_error","Failed to load agent MCP connectors")}}async function dN(a,b,c,d){try{let f=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid agent id");if(!g.Yj().guid().safeParse(b).success)return cU("validation_failed","Invalid MCP server id");let h=(0,y.Lf)(),[i]=await h.select({id:k.X6.id}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,a),(0,k.eq)(k.X6.entityId,f.entityId)));if(!i)return cU("not_found","Agent not found");let[j]=await h.select({id:k.h_.id}).from(k.h_).where((0,k.Uo)((0,k.eq)(k.h_.id,b),(0,k.eq)(k.h_.entityId,f.entityId)));if(!j)return cU("not_found","MCP connector not found");return c?await h.insert(k.oS).values({agentId:a,mcpServerId:b,entityId:f.entityId,enabledTools:d??null}).onConflictDoUpdate({target:[k.oS.agentId,k.oS.mcpServerId],set:{enabledTools:d??null,updatedAt:new Date}}):await h.delete(k.oS).where((0,k.Uo)((0,k.eq)(k.oS.agentId,a),(0,k.eq)(k.oS.mcpServerId,b))),(0,e.revalidatePath)("/agents"),cT(void 0)}catch(a){return console.error("[setAgentMcpServerAssignmentAction]",a),cU("db_error","Failed to update MCP assignment")}}async function dO(a,b){try{let c=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid connector id");if(null!==b&&!g.Yj().guid().safeParse(b).success)return cU("validation_failed","Invalid credential id");let d=(0,y.Lf)(),[f]=await d.select({id:k.tK.id,slug:k.tK.slug,authType:k.tK.authType}).from(k.tK).where((0,k.Uo)((0,k.eq)(k.tK.id,a),(0,k.eq)(k.tK.entityId,c.entityId)));if(!f)return cU("not_found","Connector not found");if("oauth2"!==f.authType)return cU("invalid_auth_type","Only OAuth2 connectors support credential assignment");if(null!==b){let[a]=await d.select({id:k.z3.id,ownerUserId:k.z3.ownerUserId,type:k.z3.type}).from(k.z3).where((0,k.eq)(k.z3.id,b));if(!a)return cU("not_found","Credential not found");if(a.ownerUserId!==c.userId)return cU("forbidden","Access denied");let e=(0,O.ZH)(f.slug);if(e&&e.credentialType!==a.type)return cU("type_mismatch",`Credential type '${a.type}' is not compatible with connector '${f.slug}' (expects '${e.credentialType}')`)}return await d.update(k.tK).set({credentialId:b,updatedAt:new Date}).where((0,k.eq)(k.tK.id,a)),(0,e.revalidatePath)("/connectors"),cT(void 0)}catch(b){console.error("[assignCredentialAction]",b);let a=b instanceof Error?b.message:String(b);return cU("db_error",`Failed to assign credential: ${a}`)}}async function dP(a,b,c){try{let d=await cV();if(!g.Yj().min(1).max(80).safeParse(a).success)return cU("validation_failed","Invalid connector slug");if(!g.Yj().guid().safeParse(b).success)return cU("validation_failed","Invalid credential id");if(void 0!==c&&!g.Yj().min(1).max(120).safeParse(c).success)return cU("validation_failed","Invalid connector name");let f=F.Y.find(b=>b.slug===a);if(!f)return cU("validation_failed","Unknown connector slug");if("oauth2"!==f.authType)return cU("invalid_auth_type","Only OAuth2 connectors support credential assignment");let h=(0,y.Lf)(),[i]=await h.select({id:k.z3.id,ownerUserId:k.z3.ownerUserId,type:k.z3.type,name:k.z3.name}).from(k.z3).where((0,k.eq)(k.z3.id,b));if(!i)return cU("not_found","Credential not found");if(i.ownerUserId!==d.userId)return cU("forbidden","Access denied");if(f.credentialType&&f.credentialType!==i.type)return cU("type_mismatch",`Credential type '${i.type}' is not compatible with connector '${a}' (expects '${f.credentialType}')`);let j=c??i.name??f.label,[l]=await h.insert(k.tK).values({entityId:d.entityId,slug:a,name:j,authType:"oauth2",credentialId:b,active:!0}).returning({id:k.tK.id});if(!l)return cU("db_error","Insert returned no row");return(0,e.revalidatePath)("/connectors"),cT({connectorId:l.id})}catch(b){console.error("[createOrAssignOAuthConnectorAction]",b);let a=b instanceof Error?b.message:String(b);return cU("db_error",`Failed to assign credential: ${a}`)}}async function dQ(a,b){try{let c=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid connector id");let d=g.Yj().min(1,"Name is required").max(120).safeParse(b);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid name");let f=(0,y.Lf)(),[h]=await f.select({id:k.tK.id}).from(k.tK).where((0,k.Uo)((0,k.eq)(k.tK.id,a),(0,k.eq)(k.tK.entityId,c.entityId)));if(!h)return cU("not_found","Connector not found");return await f.update(k.tK).set({name:d.data,updatedAt:new Date}).where((0,k.eq)(k.tK.id,a)),(0,e.revalidatePath)("/connectors"),cT(void 0)}catch(a){return console.error("[renameConnectorAction]",a),cU("db_error","Failed to rename connector")}}async function dR(a,b){try{let c=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid connector id");let d=g.Yj().min(1,"API key is required").max(2e3).safeParse(b);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid API key");let f=(0,y.Lf)(),[h]=await f.select({id:k.tK.id,authType:k.tK.authType}).from(k.tK).where((0,k.Uo)((0,k.eq)(k.tK.id,a),(0,k.eq)(k.tK.entityId,c.entityId)));if(!h)return cU("not_found","Connector not found");if("api_key"!==h.authType)return cU("validation_failed",`Connector uses ${h.authType??"unknown"} auth — key rotation only applies to api_key connectors.`);let i=(0,w.ph)(d.data)?d.data:(0,w.w)(d.data);return await f.update(k.tK).set({apiKey:i,updatedAt:new Date}).where((0,k.eq)(k.tK.id,a)),(0,e.revalidatePath)("/connectors"),cT(void 0)}catch(a){return console.error("[updateConnectorApiKeyAction]",a),cU("db_error","Failed to rotate API key")}}async function dS(a={}){try{let b=await cV(),c=(0,y.Lf)(),d=a.status??"pending",e=(0,k.eq)(k.MZ.entityId,b.entityId),f="all"===d?e:(0,k.Uo)(e,(0,k.eq)(k.MZ.status,d)),g=await c.select({id:k.MZ.id,jobId:k.MZ.jobId,agentId:k.MZ.agentId,agentName:k.X6.name,agentSlug:k.X6.slug,toolName:k.MZ.toolName,toolInput:k.MZ.toolInput,status:k.MZ.status,requestedAt:k.MZ.requestedAt,resolvedAt:k.MZ.resolvedAt,resolvedBy:k.MZ.resolvedBy,expiresAt:k.MZ.expiresAt,notes:k.MZ.notes,jobTask:k.ME.task}).from(k.MZ).leftJoin(k.X6,(0,k.eq)(k.X6.id,k.MZ.agentId)).leftJoin(k.ME,(0,k.eq)(k.ME.id,k.MZ.jobId)).where(f).orderBy((0,k.i8)(k.MZ.requestedAt)).limit(100);return cT(g.map(a=>({...a,status:a.status??"pending"})))}catch(a){return console.error("[listApprovalsAction]",a),cU("db_error","Failed to load approvals")}}let dT=g.Ik({approvalRequestId:g.Yj().guid(),decision:g.k5(["approve","reject"]),notes:g.Yj().max(5e3).optional()});async function dU(a){try{let b;await cV();let c=dT.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");if(!A._.WORKER_SECRET)return console.error("[resolveApprovalAction] WORKER_SECRET missing"),cU("config_error","WORKER_SECRET is not set");let d=`${A._.RUNNER_URL}/api/approve`;try{b=await fetch(d,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${A._.WORKER_SECRET}`},body:JSON.stringify(c.data)})}catch(a){return console.error("[resolveApprovalAction] fetch failed",a),cU("runner_unreachable","Runner did not respond")}if(!b.ok){let a=(await b.json().catch(()=>({}))).error??`runner_${b.status}`;return cU(a,`Runner rejected: ${a}`)}let f=await b.json();return(0,e.revalidatePath)("/approvals"),(0,e.revalidatePath)("/jobs"),(0,e.revalidatePath)(`/jobs/${f.jobId}`),cT({jobId:f.jobId,decision:f.decision})}catch(a){return console.error("[resolveApprovalAction]",a),cU("db_error","Failed to resolve approval")}}async function dV(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.select({id:k.eK.id,name:k.eK.name,slug:k.eK.slug,content:k.eK.content,defaultContent:k.eK.defaultContent,contentOverridden:k.eK.contentOverridden,description:k.eK.description,active:k.eK.active,requiredBuiltins:k.eK.requiredBuiltins,createdAt:k.eK.createdAt,updatedAt:k.eK.updatedAt}).from(k.eK).where((0,k.or)((0,k.eq)(k.eK.entityId,a.entityId),(0,k.RV)(k.eK.slug,J))).orderBy((0,k.i8)(k.eK.updatedAt));if(0===c.length)return cT([]);let d=await b.select({skillId:k.$m.skillId,c:(0,k.ll)`count(*)`}).from(k.$m).where((0,k.Uo)((0,k.eq)(k.$m.entityId,a.entityId),(0,k.RV)(k.$m.skillId,c.map(a=>a.id)))).groupBy(k.$m.skillId),e=new Map;for(let a of d)e.set(a.skillId,Number(a.c));let f=await b.select({skillId:k.$m.skillId,agentId:k.X6.id,agentName:k.X6.name,agentSlug:k.X6.slug,avatarUrl:k.X6.avatarUrl}).from(k.$m).innerJoin(k.X6,(0,k.eq)(k.X6.id,k.$m.agentId)).where((0,k.Uo)((0,k.eq)(k.$m.entityId,a.entityId),(0,k.RV)(k.$m.skillId,c.map(a=>a.id)))).orderBy(k.X6.name),g=new Map;for(let a of f){let b=g.get(a.skillId)??[];b.length<8&&(b.push({id:a.agentId,name:a.agentName,slug:a.agentSlug,avatarUrl:a.avatarUrl}),g.set(a.skillId,b))}return cT(c.map(a=>({id:a.id,name:a.name,slug:a.slug,isSystem:J.includes(a.slug),content:a.content,defaultContent:a.defaultContent,contentOverridden:a.contentOverridden??!1,description:a.description,active:a.active??!0,requiredBuiltins:a.requiredBuiltins??[],assignmentCount:e.get(a.id)??0,assignedAgents:g.get(a.id)??[],createdAt:a.createdAt,updatedAt:a.updatedAt})))}catch(a){return console.error("[listSkillsAction]",a),cU("db_error","Failed to load skills")}}let dW=g.Ik({slug:g.Yj().min(1).max(80).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with dashes"),name:g.Yj().min(1).max(120),content:g.Yj().min(1),description:g.Yj().max(500).optional()});async function dX(a){try{let b=await cV(),c=dW.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)(),f=await (0,k.qz)(d,b.entityId,{slug:c.data.slug,name:c.data.name,content:c.data.content,description:c.data.description??null});if("error"in f)return cU("conflict","A skill with this slug already exists");return(0,e.revalidatePath)("/skills"),cT({id:f.id})}catch(a){return console.error("[createSkillAction]",a),cU("db_error","Failed to create skill")}}async function dY(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid skill id");let c=(0,y.Lf)(),[d]=await c.select({id:k.eK.id}).from(k.eK).where((0,k.Uo)((0,k.eq)(k.eK.id,a),(0,k.eq)(k.eK.entityId,b.entityId)));if(!d)return cU("not_found","Skill not found");return await c.delete(k.eK).where((0,k.eq)(k.eK.id,a)),(0,e.revalidatePath)("/skills"),cT(void 0)}catch(a){return console.error("[deleteSkillAction]",a),cU("db_error","Failed to delete skill")}}let dZ=g.Ik({skillId:g.Yj().guid(),agentId:g.Yj().guid()});async function d$(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid skill id");let c=(0,y.Lf)(),[d]=await c.select({id:k.eK.id}).from(k.eK).where((0,k.Uo)((0,k.eq)(k.eK.id,a),(0,k.eq)(k.eK.entityId,b.entityId)));if(!d)return cU("not_found","Skill not found");let e=await c.select({id:k.X6.id,name:k.X6.name,slug:k.X6.slug}).from(k.X6).where((0,k.eq)(k.X6.entityId,b.entityId)).orderBy(k.X6.name),f=await c.select({agentId:k.$m.agentId}).from(k.$m).where((0,k.eq)(k.$m.skillId,a)),h=new Set(f.map(a=>a.agentId));return cT(e.map(a=>({agentId:a.id,agentName:a.name,agentSlug:a.slug,assigned:h.has(a.id)})))}catch(a){return console.error("[listSkillAssignmentsAction]",a),cU("db_error","Failed to load skill assignments")}}async function d_(a){try{let b=await cV(),c=dZ.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)(),f=await (0,k.ps)(d,b.entityId,c.data,J);if("error"in f){if("skill_not_found"===f.error)return cU("not_found","Skill not found");if("agent_not_found"===f.error)return cU("not_found","Agent not found")}return(0,e.revalidatePath)("/skills"),cT(void 0)}catch(a){return console.error("[assignSkillAction]",a),cU("db_error","Failed to assign skill")}}let d0=g.Ik({id:g.Yj().guid(),name:g.Yj().min(1).max(120),description:g.Yj().max(500).optional(),content:g.Yj().min(1),active:g.zM().optional()});async function d1(a){try{let b=await cV(),c=d0.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let{id:d,name:f,description:g,content:h,active:i}=c.data,j=(0,y.Lf)(),[l]=await j.select({id:k.eK.id,content:k.eK.content}).from(k.eK).where((0,k.Uo)((0,k.eq)(k.eK.id,d),(0,k.eq)(k.eK.entityId,b.entityId)));if(!l)return cU("not_found","Skill not found");let m={name:f,description:g??null,content:h,...void 0!==i?{active:i}:{},updatedAt:new Date};return h!==l.content&&(m.contentOverridden=!0),await j.update(k.eK).set(m).where((0,k.eq)(k.eK.id,d)),(0,e.revalidatePath)("/skills"),cT(void 0)}catch(a){return console.error("[updateSkillAction]",a),cU("db_error","Failed to update skill")}}async function d2(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid skill id");let c=(0,y.Lf)(),[d]=await c.select({id:k.eK.id,defaultContent:k.eK.defaultContent}).from(k.eK).where((0,k.Uo)((0,k.eq)(k.eK.id,a),(0,k.eq)(k.eK.entityId,b.entityId)));if(!d)return cU("not_found","Skill not found");if(null===d.defaultContent)return cU("not_applicable","No default available — this is a user-created skill");return await c.update(k.eK).set({content:d.defaultContent,contentOverridden:!1,updatedAt:new Date}).where((0,k.eq)(k.eK.id,a)),(0,e.revalidatePath)("/skills"),cT(void 0)}catch(a){return console.error("[resetSkillToDefaultAction]",a),cU("db_error","Failed to reset skill")}}async function d3(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid skill id");let c=(0,y.Lf)(),[d]=await c.select({id:k.eK.id,name:k.eK.name,slug:k.eK.slug,content:k.eK.content,defaultContent:k.eK.defaultContent,contentOverridden:k.eK.contentOverridden,description:k.eK.description,active:k.eK.active,requiredBuiltins:k.eK.requiredBuiltins,createdAt:k.eK.createdAt,updatedAt:k.eK.updatedAt}).from(k.eK).where((0,k.Uo)((0,k.eq)(k.eK.id,a),(0,k.or)((0,k.eq)(k.eK.entityId,b.entityId),(0,k.RV)(k.eK.slug,J))));if(!d)return cU("not_found","Skill not found");return cT({id:d.id,name:d.name,slug:d.slug,isSystem:J.includes(d.slug),content:d.content,defaultContent:d.defaultContent,contentOverridden:d.contentOverridden??!1,description:d.description,active:d.active??!0,requiredBuiltins:d.requiredBuiltins??[],assignmentCount:0,assignedAgents:[],createdAt:d.createdAt,updatedAt:d.updatedAt})}catch(a){return console.error("[getSkillByIdAction]",a),cU("db_error","Failed to load skill")}}async function d4(a){try{let b=await cV(),c=dZ.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)();return await d.delete(k.$m).where((0,k.Uo)((0,k.eq)(k.$m.skillId,c.data.skillId),(0,k.eq)(k.$m.agentId,c.data.agentId),(0,k.eq)(k.$m.entityId,b.entityId))),(0,e.revalidatePath)("/skills"),cT(void 0)}catch(a){return console.error("[unassignSkillAction]",a),cU("db_error","Failed to unassign skill")}}let d5=g.Ik({agentId:g.Yj().guid().optional(),toolName:g.Yj().min(1).max(120).optional(),jobId:g.Yj().guid().optional(),page:g.ai().int().min(1).default(1),pageSize:g.ai().int().min(1).max(200).default(50)});async function d6(a={}){try{let b=await cV(),c=d5.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)(),e=[(0,k.eq)(k.Ky.entityId,b.entityId)];c.data.toolName&&e.push((0,k.eq)(k.Ky.toolName,c.data.toolName)),c.data.jobId&&e.push((0,k.eq)(k.Ky.jobId,c.data.jobId));let f=(c.data.page-1)*c.data.pageSize,g=c.data.agentId?await d.select({id:k.Ky.id,jobId:k.Ky.jobId,agentId:k.ME.agentId,toolName:k.Ky.toolName,toolInput:k.Ky.toolInput,toolOutput:k.Ky.toolOutput,durationMs:k.Ky.durationMs,turn:k.Ky.turn,createdAt:k.Ky.createdAt}).from(k.Ky).leftJoin(k.ME,(0,k.eq)(k.ME.id,k.Ky.jobId)).where((0,k.Uo)(...e,(0,k.eq)(k.ME.agentId,c.data.agentId))).orderBy((0,k.i8)(k.Ky.createdAt)).limit(c.data.pageSize).offset(f):await d.select({id:k.Ky.id,jobId:k.Ky.jobId,agentId:k.ME.agentId,toolName:k.Ky.toolName,toolInput:k.Ky.toolInput,toolOutput:k.Ky.toolOutput,durationMs:k.Ky.durationMs,turn:k.Ky.turn,createdAt:k.Ky.createdAt}).from(k.Ky).leftJoin(k.ME,(0,k.eq)(k.ME.id,k.Ky.jobId)).where((0,k.Uo)(...e)).orderBy((0,k.i8)(k.Ky.createdAt)).limit(c.data.pageSize).offset(f),h=Array.from(new Set(g.map(a=>a.agentId).filter(a=>null!==a))),i=new Map;if(h.length>0)for(let a of(await d.select({id:k.X6.id,name:k.X6.name,slug:k.X6.slug}).from(k.X6).where((0,k.RV)(k.X6.id,h))))i.set(a.id,{name:a.name,slug:a.slug});let j=g.map(a=>{let b=a.agentId?i.get(a.agentId):null;return{id:a.id,jobId:a.jobId,agentId:a.agentId,agentName:b?.name??null,agentSlug:b?.slug??null,toolName:a.toolName,toolInput:a.toolInput,toolOutput:a.toolOutput,durationMs:a.durationMs,turn:a.turn,createdAt:a.createdAt}});return cT({items:j,page:c.data.page,pageSize:c.data.pageSize})}catch(a){return console.error("[listToolCallsAction]",a),cU("db_error","Failed to load tool calls")}}async function d7(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.selectDistinct({toolName:k.Ky.toolName}).from(k.Ky).where((0,k.eq)(k.Ky.entityId,a.entityId)).orderBy(k.Ky.toolName);return cT(c.map(a=>a.toolName))}catch(a){return console.error("[listToolNamesAction]",a),cU("db_error","Failed to load tool names")}}async function d8(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.select({status:k.ME.status,count:(0,k.ll)`count(*)`,inputTokens:(0,k.ll)`coalesce(sum(${k.ME.inputTokens}), 0)`,outputTokens:(0,k.ll)`coalesce(sum(${k.ME.outputTokens}), 0)`,durationMs:(0,k.ll)`coalesce(sum(${k.ME.totalDurationMs}), 0)`}).from(k.ME).where((0,k.eq)(k.ME.entityId,a.entityId)).groupBy(k.ME.status),d={},e=0,f=0,g=0,h=0;for(let a of c){let b=a.status??"unknown",c=Number(a.count);d[b]=(d[b]??0)+c,e+=c,f+=Number(a.inputTokens),g+=Number(a.outputTokens),h+=Number(a.durationMs)}let i=d.completed??0,j=i>0?h/i:null,[l]=await b.select({count:(0,k.ll)`count(*)`}).from(k.Ky).where((0,k.eq)(k.Ky.entityId,a.entityId)),m=Number(l?.count??0),n=(await b.select({agentId:k.ME.agentId,agentName:k.X6.name,agentSlug:k.X6.slug,jobCount:(0,k.ll)`count(*)`,inputTokens:(0,k.ll)`coalesce(sum(${k.ME.inputTokens}), 0)`,outputTokens:(0,k.ll)`coalesce(sum(${k.ME.outputTokens}), 0)`}).from(k.ME).leftJoin(k.X6,(0,k.eq)(k.X6.id,k.ME.agentId)).where((0,k.eq)(k.ME.entityId,a.entityId)).groupBy(k.ME.agentId,k.X6.name,k.X6.slug).orderBy((0,k.i8)((0,k.ll)`count(*)`))).filter(a=>!!(a.agentId&&a.agentName&&a.agentSlug)).map(a=>({agentId:a.agentId,agentName:a.agentName,agentSlug:a.agentSlug,jobCount:Number(a.jobCount),inputTokens:Number(a.inputTokens),outputTokens:Number(a.outputTokens)})),[o]=await b.select({count:(0,k.ll)`count(*)`}).from(k.X6).where((0,k.eq)(k.X6.entityId,a.entityId)),p=Number(o?.count??0);return cT({totalJobs:e,statusCounts:d,totalInputTokens:f,totalOutputTokens:g,totalDurationMs:h,avgDurationMs:j,totalToolCalls:m,agentCount:p,perAgent:n})}catch(a){return console.error("[getEntityStatsAction]",a),cU("db_error","Failed to load stats")}}async function d9(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.select({week:(0,k.ll)`to_char(date_trunc('week', ${k.ME.createdAt}), 'YYYY-MM-DD')`,status:k.ME.status,count:(0,k.ll)`count(*)`}).from(k.ME).where((0,k.Uo)((0,k.eq)(k.ME.entityId,a.entityId),(0,k.ll)`${k.ME.createdAt} > now() - interval '12 weeks'`)).groupBy((0,k.ll)`date_trunc('week', ${k.ME.createdAt})`,k.ME.status),d=new Map,e=new Date,f=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate())),g=f.getUTCDay();f.setUTCDate(f.getUTCDate()-(g+6)%7);for(let a=11;a>=0;a--){let b=new Date(f);b.setUTCDate(b.getUTCDate()-7*a);let c=b.toISOString().slice(0,10);d.set(c,{week:c,completed:0,failed:0,cancelled:0,awaiting:0,pending:0})}for(let a of c){let b=d.get(a.week);if(!b)continue;let c=Number(a.count),e=a.status??"";"completed"===e?b.completed+=c:"failed"===e?b.failed+=c:"cancelled"===e?b.cancelled+=c:"pending"===e?b.pending+=c:b.awaiting+=c}return cT(Array.from(d.values()))}catch(a){return console.error("[getWeeklyActivityAction]",a),cU("db_error","Failed to load weekly activity")}}async function ea(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.select({agentId:k.ME.agentId,agentName:k.X6.name,agentSlug:k.X6.slug,avatarUrl:k.X6.avatarUrl,status:k.ME.status,count:(0,k.ll)`count(*)`}).from(k.ME).innerJoin(k.X6,(0,k.eq)(k.X6.id,k.ME.agentId)).where((0,k.Uo)((0,k.eq)(k.ME.entityId,a.entityId),(0,k.ll)`${k.ME.status} IN ('pending', 'processing', 'awaiting_approval', 'awaiting_delegation')`)).groupBy(k.ME.agentId,k.X6.name,k.X6.slug,k.X6.avatarUrl,k.ME.status),d=new Map;for(let a of c){if(!a.agentId||!a.agentName||!a.agentSlug)continue;let b=d.get(a.agentId)??{agentId:a.agentId,agentName:a.agentName,agentSlug:a.agentSlug,avatarUrl:a.avatarUrl??null,processing:0,awaiting:0,pending:0,total:0},c=Number(a.count),e=a.status??"";"processing"===e?b.processing+=c:"awaiting_approval"===e||"awaiting_delegation"===e?b.awaiting+=c:"pending"===e&&(b.pending+=c),b.total+=c,d.set(a.agentId,b)}let e=Array.from(d.values()).sort((a,b)=>b.total!==a.total?b.total-a.total:a.agentName.localeCompare(b.agentName));return cT(e)}catch(a){return console.error("[getActiveJobsByAgentAction]",a),cU("db_error","Failed to load active jobs")}}async function eb(){try{let a=await cV();return cT({llm:{provider:A._.LLM_PROVIDER??null,model:A._.LLM_MODEL??null,baseURL:A._.LLM_BASE_URL??null},authMode:A._.AUTH_MODE,runnerUrl:A._.RUNNER_URL,appUrl:A._.NEXT_PUBLIC_APP_URL,workerSecretConfigured:!!A._.WORKER_SECRET,user:{userId:a.userId,entityId:a.entityId}})}catch(a){return console.error("[getSettingsAction]",a),cU("db_error","Failed to load settings")}}async function ec(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.select({id:k.uQ.id,agentId:k.uQ.agentId,agentName:k.X6.name,agentSlug:k.X6.slug,name:k.uQ.name,cronExpr:k.uQ.cronExpr,task:k.uQ.task,active:k.uQ.active,lastRun:k.uQ.lastRun,nextRun:k.uQ.nextRun,lastStatus:k.uQ.lastStatus,notifyOnSuccess:k.uQ.notifyOnSuccess,createdAt:k.uQ.createdAt,updatedAt:k.uQ.updatedAt}).from(k.uQ).leftJoin(k.X6,(0,k.eq)(k.X6.id,k.uQ.agentId)).where((0,k.eq)(k.uQ.entityId,a.entityId)).orderBy((0,k.i8)(k.uQ.updatedAt));return cT(c.map(a=>({...a,active:a.active??!0,notifyOnSuccess:a.notifyOnSuccess??!1})))}catch(a){return console.error("[listSchedulesAction]",a),cU("db_error","Failed to load schedules")}}let ed=g.Ik({agentId:g.Yj().guid("Pick an agent"),name:g.Yj().min(1).max(120),cronExpr:g.Yj().min(1).max(100),task:g.Yj().min(1),notifyOnSuccess:g.zM().optional().default(!1)});async function ee(a){try{let b=await cV(),c=ed.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)(),[f]=await d.select({id:k.X6.id}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,c.data.agentId),(0,k.eq)(k.X6.entityId,b.entityId)));if(!f)return cU("not_found","Agent not found");let g=Q(c.data.cronExpr);if(!g)return cU("validation_failed","Invalid cron expression");let[h]=await d.insert(k.uQ).values({entityId:b.entityId,agentId:c.data.agentId,type:"cron",name:c.data.name,cronExpr:c.data.cronExpr,task:c.data.task,active:!0,nextRun:g,notifyOnSuccess:c.data.notifyOnSuccess}).returning({id:k.uQ.id});if(!h)return cU("db_error","Insert returned no row");return(0,e.revalidatePath)("/automations"),cT({id:h.id})}catch(a){return console.error("[createScheduleAction]",a),cU("db_error","Failed to create schedule")}}let ef=g.Ik({id:g.Yj().guid(),agentId:g.Yj().guid("Pick an agent"),name:g.Yj().min(1).max(120),cronExpr:g.Yj().min(1).max(100),task:g.Yj().min(1),notifyOnSuccess:g.zM().optional().default(!1)});async function eg(a){try{let b=await cV(),c=ef.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)(),[f]=await d.select({id:k.uQ.id}).from(k.uQ).where((0,k.Uo)((0,k.eq)(k.uQ.id,c.data.id),(0,k.eq)(k.uQ.entityId,b.entityId)));if(!f)return cU("not_found","Schedule not found");let[g]=await d.select({id:k.X6.id}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,c.data.agentId),(0,k.eq)(k.X6.entityId,b.entityId)));if(!g)return cU("not_found","Agent not found");let h=Q(c.data.cronExpr);if(!h)return cU("validation_failed","Invalid cron expression");return await d.update(k.uQ).set({agentId:c.data.agentId,name:c.data.name,cronExpr:c.data.cronExpr,task:c.data.task,nextRun:h,notifyOnSuccess:c.data.notifyOnSuccess,updatedAt:new Date}).where((0,k.eq)(k.uQ.id,c.data.id)),(0,e.revalidatePath)("/automations"),cT(void 0)}catch(a){return console.error("[updateScheduleAction]",a),cU("db_error","Failed to update schedule")}}async function eh(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid schedule id");let c=(0,y.Lf)(),[d]=await c.select({id:k.uQ.id,active:k.uQ.active}).from(k.uQ).where((0,k.Uo)((0,k.eq)(k.uQ.id,a),(0,k.eq)(k.uQ.entityId,b.entityId)));if(!d)return cU("not_found","Schedule not found");let f=!(d.active??!0);return await c.update(k.uQ).set({active:f,updatedAt:new Date}).where((0,k.eq)(k.uQ.id,a)),(0,e.revalidatePath)("/automations"),cT({active:f})}catch(a){return console.error("[toggleScheduleAction]",a),cU("db_error","Failed to toggle schedule")}}async function ei(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid schedule id");let c=(0,y.Lf)(),[d]=await c.select({id:k.uQ.id}).from(k.uQ).where((0,k.Uo)((0,k.eq)(k.uQ.id,a),(0,k.eq)(k.uQ.entityId,b.entityId)));if(!d)return cU("not_found","Schedule not found");return await c.delete(k.uQ).where((0,k.eq)(k.uQ.id,a)),(0,e.revalidatePath)("/automations"),cT(void 0)}catch(a){return console.error("[deleteScheduleAction]",a),cU("db_error","Failed to delete schedule")}}async function ej(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid schedule id");let c=(0,y.Lf)(),[d]=await c.select({agentId:k.uQ.agentId,task:k.uQ.task,chatId:k.uQ.chatId,notifyOnSuccess:k.uQ.notifyOnSuccess,agentChatId:k.X6.lastSeenChatIdTelegram}).from(k.uQ).leftJoin(k.X6,(0,k.eq)(k.X6.id,k.uQ.agentId)).where((0,k.Uo)((0,k.eq)(k.uQ.id,a),(0,k.eq)(k.uQ.entityId,b.entityId))).limit(1);if(!d)return cU("not_found","Schedule not found");if(!d.task)return cU("validation_failed","This automation has no task to run.");let f=d.notifyOnSuccess?d.chatId??d.agentChatId??null:null,[h]=await c.insert(k.ME).values({entityId:b.entityId,agentId:d.agentId,status:"pending",channel:"cron",task:d.task,messages:[{role:"user",content:d.task}],...f?{chatId:f}:{}}).returning({id:k.ME.id});if(!h)return cU("db_error","Failed to create job");return A._.WORKER_SECRET?fetch(`${A._.RUNNER_URL}/api/worker`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${A._.WORKER_SECRET}`},body:JSON.stringify({jobId:h.id})}).catch(a=>{console.error("[runScheduleNowAction] runner ping failed:",a)}):console.error("[runScheduleNowAction] WORKER_SECRET missing — cannot ping runner"),(0,e.revalidatePath)("/automations"),(0,e.revalidatePath)("/jobs"),cT({jobId:h.id})}catch(a){return console.error("[runScheduleNowAction]",a),cU("db_error","Failed to run schedule now")}}async function ek(){try{await cV();let a=function(){let a=D();if(!a)return{configuredMode:"local-trust",googleConfigured:!1,configPathExists:!1};let b=a.auth??null,c=a.bind;return{configuredMode:b?.mode??("lan"===c?"local-auth":"local-trust"),googleConfigured:!!(b?.googleClientId&&b?.googleClientSecret),configPathExists:!0}}();return cT({runtimeMode:A._.AUTH_MODE,configuredMode:a.configuredMode,googleConfigured:a.googleConfigured,googleAvailableInRuntime:!!(A._.GOOGLE_CLIENT_ID&&A._.GOOGLE_CLIENT_SECRET),configPathExists:a.configPathExists})}catch(a){return console.error("[getSecuritySettingsAction]",a),cU("db_error","Failed to load security settings")}}let el=g.Ik({mode:g.k5(["local-trust","local-auth"]),googleClientId:g.Yj().max(200).optional(),googleClientSecret:g.Yj().max(200).optional(),clearGoogle:g.zM().default(!1)});async function em(a){try{await cV();let b=el.safeParse(a);if(!b.success)return cU("validation_failed",b.error.issues[0]?.message??"Invalid input");let c=D();if(!c)return cU("cli_config_missing","Cannot find ~/.nodalai/config.json — run `nodal-agents init` first.");let d={...c.auth??{},mode:b.data.mode};b.data.clearGoogle?(delete d.googleClientId,delete d.googleClientSecret):(b.data.googleClientId&&b.data.googleClientId.trim().length>0&&(d.googleClientId=b.data.googleClientId.trim()),b.data.googleClientSecret&&b.data.googleClientSecret.trim().length>0&&(d.googleClientSecret=b.data.googleClientSecret.trim()));try{E({auth:d})}catch(b){let a=b instanceof Error?b.message:"";if("cli_config_missing"===a)return cU("cli_config_missing","Config file disappeared between read and write.");throw b}(0,e.revalidatePath)("/settings");let f=b.data.mode!==A._.AUTH_MODE;return cT({requiresRestart:f})}catch(a){return console.error("[updateAuthSettingsAction]",a),cU("db_error","Failed to update auth settings")}}async function en(){try{let a;await cV();let b=(a=D())?{configuredBind:"lan"===a.bind?"lan":"loopback",configPathExists:!0}:{configuredBind:"loopback",configPathExists:!1},c="0.0.0.0"===A._.BIND?"lan":"loopback";return cT({configuredBind:b.configuredBind,runtimeBind:c,lanAddresses:function(){let a=(0,x.networkInterfaces)(),b=[];for(let c of Object.values(a))if(c)for(let a of c)"IPv4"!==a.family||a.internal||b.push(a.address);return b}(),webPort:function(a){try{let b=new URL(a);if(b.port)return Number(b.port);return"https:"===b.protocol?443:80}catch{return 3e3}}(A._.NEXT_PUBLIC_APP_URL),configPathExists:b.configPathExists})}catch(a){return console.error("[getNetworkSettingsAction]",a),cU("db_error","Failed to load network settings")}}let eo=g.Ik({bind:g.k5(["loopback","lan"])});async function ep(a){try{await cV();let b=eo.safeParse(a);if(!b.success)return cU("validation_failed",b.error.issues[0]?.message??"Invalid input");try{E({bind:b.data.bind})}catch(b){let a=b instanceof Error?b.message:"";if("cli_config_missing"===a)return cU("cli_config_missing","Cannot find ~/.nodalai/config.json — run `nodal-agents init` first.");throw b}(0,e.revalidatePath)("/settings");let c="0.0.0.0"===A._.BIND?"lan":"loopback";return cT({requiresRestart:b.data.bind!==c})}catch(a){return console.error("[updateNetworkSettingsAction]",a),cU("db_error","Failed to update network settings")}}let eq=["anthropic","openai","openai-compatible","ollama","openrouter","google","mistral","groq"],er=g.Yj().optional().transform(a=>a&&a.length>0?a:null).pipe(g.Yj().url().nullable().or(g.ch())),es=g.Ik({provider:g.k5(eq),baseUrl:er,apiKey:g.Yj().optional(),nickname:g.Yj().max(120).nullish(),isActive:g.zM().default(!0)}),et=g.Ik({id:g.Yj().guid(),provider:g.k5(eq),baseUrl:er,apiKey:g.Yj().optional(),nickname:g.Yj().max(120).nullish(),isActive:g.zM()}),eu=g.Ik({provider:g.k5(eq),baseUrl:er,apiKey:g.Yj().optional(),model:g.Yj().optional(),keyId:g.Yj().guid().optional()});function ev(a,b){return b&&0!==b.length?a.replaceAll(b,"[REDACTED]"):a}async function ew(){try{let a=await cV(),b=(0,y.Lf)(),c=await b.select({id:k.hG.id,provider:k.hG.provider,baseUrl:k.hG.baseUrl,nickname:k.hG.nickname,isActive:k.hG.isActive,hasApiKey:(0,k.ll)`(${k.hG.apiKey} <> '')`,apiKeyLast4:k.hG.apiKeyLast4}).from(k.hG).where((0,k.eq)(k.hG.entityId,a.entityId)).orderBy((0,k.i8)(k.hG.createdAt)),d=await b.select({llmKeyId:k.X6.llmKeyId,n:(0,k.ll)`count(*)`}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.entityId,a.entityId),(0,k.eq)(k.X6.active,!0))).groupBy(k.X6.llmKeyId),e=new Map;for(let a of d)a.llmKeyId&&e.set(a.llmKeyId,Number(a.n));return cT(c.map(a=>({id:a.id,provider:a.provider,baseUrl:a.baseUrl,nickname:a.nickname,isActive:a.isActive,hasApiKey:!!a.hasApiKey,apiKeyLast4:a.apiKeyLast4?a.apiKeyLast4:null,agentCount:e.get(a.id)??0})))}catch(a){return console.error("[listLlmKeysAction]",a),cU("db_error","Failed to load LLM providers")}}async function ex(a){try{let b=await cV(),c=es.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let d=(0,y.Lf)(),[f]=await d.select({id:k.hG.id}).from(k.hG).where((0,k.Uo)((0,k.eq)(k.hG.entityId,b.entityId),(0,k.eq)(k.hG.provider,c.data.provider))).limit(1);if(f)return cU("provider_exists","This provider is already configured — edit the existing one.");let g=c.data.apiKey??"",[h]=await d.insert(k.hG).values({entityId:b.entityId,provider:c.data.provider,apiKey:(0,w.w)(g),apiKeyLast4:(0,w.nK)(g),baseUrl:c.data.baseUrl,nickname:c.data.nickname??null,isActive:c.data.isActive}).returning({id:k.hG.id});if(!h)return cU("db_error","Insert returned no row");return(0,e.revalidatePath)("/settings"),cT({id:h.id})}catch(a){return console.error("[createLlmKeyAction]",a),cU("db_error","Failed to create LLM provider")}}async function ey(a){try{let b=await cV(),c=et.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let{id:d,provider:f,baseUrl:g,apiKey:h,nickname:i,isActive:j}=c.data,l=(0,y.Lf)(),[m]=await l.select({id:k.hG.id}).from(k.hG).where((0,k.Uo)((0,k.eq)(k.hG.id,d),(0,k.eq)(k.hG.entityId,b.entityId)));if(!m)return cU("not_found","LLM provider not found");let n={provider:f,baseUrl:g,nickname:i??null,isActive:j,updatedAt:new Date};return h&&h.length>0&&(n.apiKey=(0,w.w)(h),n.apiKeyLast4=(0,w.nK)(h)),await l.update(k.hG).set(n).where((0,k.eq)(k.hG.id,d)),(0,e.revalidatePath)("/settings"),cT(void 0)}catch(a){return console.error("[updateLlmKeyAction]",a),cU("db_error","Failed to update LLM provider")}}async function ez(a,b){try{let c=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid LLM provider id");let d=(0,y.Lf)(),[f]=await d.select({id:k.hG.id}).from(k.hG).where((0,k.Uo)((0,k.eq)(k.hG.id,a),(0,k.eq)(k.hG.entityId,c.entityId)));if(!f)return cU("not_found","LLM provider not found");return await d.update(k.hG).set({isActive:b,updatedAt:new Date}).where((0,k.eq)(k.hG.id,a)),(0,e.revalidatePath)("/llm-providers"),cT(void 0)}catch(a){return console.error("[setLlmKeyActiveAction]",a),cU("db_error","Failed to update LLM provider")}}async function eA(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid LLM provider id");let c=(0,y.Lf)(),[d]=await c.select({id:k.hG.id}).from(k.hG).where((0,k.Uo)((0,k.eq)(k.hG.id,a),(0,k.eq)(k.hG.entityId,b.entityId)));if(!d)return cU("not_found","LLM provider not found");return await c.delete(k.hG).where((0,k.eq)(k.hG.id,a)),(0,e.revalidatePath)("/settings"),cT(void 0)}catch(a){return console.error("[deleteLlmKeyAction]",a),cU("db_error","Failed to delete LLM provider")}}async function eB(a){let b;try{let c=await cV(),d=eu.safeParse(a);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid input");let{provider:e,baseUrl:f}=d.data;if((!(b=d.data.apiKey)||0===b.length)&&d.data.keyId){let a=(0,y.Lf)(),[e]=await a.select({apiKey:k.hG.apiKey}).from(k.hG).where((0,k.Uo)((0,k.eq)(k.hG.id,d.data.keyId),(0,k.eq)(k.hG.entityId,c.entityId)));if(!e)return cU("not_found","LLM provider not found");b=e.apiKey?(0,w.Yc)(e.apiKey):void 0}if(d.data.keyId&&(!b||0===b.length))return cU("no_api_key_provided","API key is required to test");let g={anthropic:{canonicalBase:"https://api.anthropic.com/v1",path:"/models",auth:"x-api-key"},openai:{canonicalBase:"https://api.openai.com/v1",path:"/models",auth:"bearer"},openrouter:{canonicalBase:"https://openrouter.ai/api/v1",path:"/auth/key",auth:"bearer"},google:{canonicalBase:"https://generativelanguage.googleapis.com/v1beta",path:"/models",auth:"query"},mistral:{canonicalBase:"https://api.mistral.ai/v1",path:"/models",auth:"bearer"},groq:{canonicalBase:"https://api.groq.com/openai/v1",path:"/models",auth:"bearer"},"openai-compatible":{canonicalBase:null,path:"/models",auth:"bearer"},ollama:{canonicalBase:null,path:"/api/tags",auth:"none"}}[e],h=(f??"").replace(/\/$/,"")||g.canonicalBase;if(!h)return cU("validation_failed",`baseUrl is required for ${e}`);let i={Accept:"application/json"},j=`${h}${g.path}`;"bearer"===g.auth&&b&&(i.Authorization=`Bearer ${b}`),"x-api-key"===g.auth&&b&&(i["x-api-key"]=b,i["anthropic-version"]="2023-06-01"),"query"===g.auth&&(j=`${j}?key=${encodeURIComponent(b??"")}`);let l=await fetch(j,{method:"GET",headers:i});if(!l.ok){let a=(await l.text().catch(()=>"")).slice(0,200);return cU("connection_failed",ev(`${e} responded ${l.status}: ${a}`,b))}let m=null;try{let a=await l.json(),b=a.data??a.models;Array.isArray(b)&&(m=b.length)}catch{}return cT({message:null!==m?`Connected, ${m} models available`:"Connected"})}catch(a){return cU("connection_failed",ev(a instanceof Error?a.message:"Unknown error",b))}}async function eC(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid agent id");let c=(0,y.Lf)(),[d]=await c.select({id:k.X6.id}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,a),(0,k.eq)(k.X6.entityId,b.entityId)));if(!d)return cU("not_found","Agent not found");let e=await c.select({id:k.tK.id,slug:k.tK.slug,name:k.tK.name,credentialId:k.tK.credentialId,active:k.tK.active}).from(k.tK).where((0,k.Uo)((0,k.eq)(k.tK.entityId,b.entityId),(0,k.eq)(k.tK.active,!0)));if(0===e.length)return cT([]);let f=[...new Set(e.map(a=>a.credentialId).filter(a=>null!==a))],h=new Map;if(f.length>0)for(let a of(await c.select({id:k.z3.id,name:k.z3.name}).from(k.z3).where((0,k.RV)(k.z3.id,f))))h.set(a.id,a.name);let i=await c.select({connectorId:k.XT.connectorId,enabledOperations:k.XT.enabledOperations}).from(k.XT).where((0,k.eq)(k.XT.agentId,a)),j=new Map;for(let a of i)j.set(a.connectorId,{enabledOperations:a.enabledOperations??null});let l=[];for(let a of e){let b=cR[a.slug];if(!b)continue;let c=j.get(a.id);l.push({connectorId:a.id,slug:a.slug,label:a.name,credentialName:a.credentialId?h.get(a.credentialId)??null:null,assigned:void 0!==c,enabledOperations:c?.enabledOperations??null,availableOperations:b.operations})}return cT(l)}catch(a){return console.error("[listAgentConnectorsAction]",a),cU("db_error","Failed to load agent connectors")}}async function eD(a,b,c,d){try{let f=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid agent id");if(!g.Yj().guid().safeParse(b).success)return cU("validation_failed","Invalid connector id");let h=(0,y.Lf)(),[i]=await h.select({id:k.X6.id}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,a),(0,k.eq)(k.X6.entityId,f.entityId)));if(!i)return cU("not_found","Agent not found");let[j]=await h.select({id:k.tK.id}).from(k.tK).where((0,k.Uo)((0,k.eq)(k.tK.id,b),(0,k.eq)(k.tK.entityId,f.entityId)));if(!j)return cU("not_found","Connector not found");return c?await h.insert(k.XT).values({agentId:a,connectorId:b,entityId:f.entityId,enabledOperations:d??null}).onConflictDoUpdate({target:[k.XT.agentId,k.XT.connectorId],set:{enabledOperations:d??null,updatedAt:new Date}}):await h.delete(k.XT).where((0,k.Uo)((0,k.eq)(k.XT.agentId,a),(0,k.eq)(k.XT.connectorId,b))),(0,e.revalidatePath)("/agents"),cT(void 0)}catch(a){return console.error("[setAgentConnectorAssignmentAction]",a),cU("db_error","Failed to update connector assignment")}}async function eE(){try{let a=await cV(),b=(0,y.Lf)(),[c]=await b.select({rootAgentId:k.O5.rootAgentId,rootGrants:k.O5.rootGrants}).from(k.O5).where((0,k.eq)(k.O5.id,a.entityId));if(!c)return cU("not_found","Workspace not found");return cT({rootAgentId:c.rootAgentId??null,grants:(0,r.DI)(c.rootGrants)})}catch(a){return console.error("[getRootConfigAction]",a),cU("db_error","Failed to load ROOT agent config")}}let eF=g.Ik({grants:g.Ik({createAgent:g.zM(),createSkill:g.zM(),updateSkill:g.zM(),assignSkill:g.zM(),createMcp:g.zM(),createConnector:g.zM(),autonomy:g.k5(["propose_confirm","destructive_gate","fully_autonomous"])})});async function eG(a){try{let b=await cV(),c=eF.safeParse(a);if(!c.success)return cU("validation_failed",c.error.issues[0]?.message??"Invalid input");let{grants:d}=c.data,f=(0,y.Lf)(),[g]=await f.select({role:k.V.role}).from(k.V).where((0,k.Uo)((0,k.eq)(k.V.userId,b.userId),(0,k.eq)(k.V.entityId,b.entityId)));if(!g)return cU("not_found","Workspace not found");let[h]=await f.select({rootAgentId:k.O5.rootAgentId}).from(k.O5).where((0,k.eq)(k.O5.id,b.entityId)),i=h?.rootAgentId??null;if(!i)return cU("not_found","No ROOT agent yet — create an orchestrator first");if(await f.update(k.O5).set({rootGrants:d,updatedAt:new Date}).where((0,k.eq)(k.O5.id,b.entityId)),await f.delete(k.bN).where((0,k.Uo)((0,k.eq)(k.bN.entityId,b.entityId),(0,k.RV)(k.bN.toolName,r.yO))),"propose_confirm"===d.autonomy){let a=(0,r.aT)(d);a.length>0&&await f.insert(k.bN).values(a.map(a=>({entityId:b.entityId,agentId:i,toolName:a,action:"require_approval"})))}return(0,e.revalidatePath)("/settings"),cT(void 0)}catch(a){return console.error("[setRootAgentAction]",a),cU("db_error","Failed to save ROOT agent config")}}async function eH(a,b){let[c]=await a.select({rootAgentId:k.O5.rootAgentId}).from(k.O5).where((0,k.eq)(k.O5.id,b)).limit(1),d=c?.rootAgentId??null;if(!d)return{rootAgentId:null,rootName:null};let[e]=await a.select({name:k.X6.name}).from(k.X6).where((0,k.Uo)((0,k.eq)(k.X6.id,d),(0,k.eq)(k.X6.entityId,b))).limit(1);return{rootAgentId:d,rootName:e?.name??null}}async function eI(){try{let a=await cV(),b=(0,y.Lf)(),{rootAgentId:c,rootName:d}=await eH(b,a.entityId);if(!c)return cT({rootAgentId:null,rootName:null,conversations:[]});let e=await b.select({id:k.NP.id,title:k.NP.title,updatedAt:k.NP.updatedAt}).from(k.NP).where((0,k.Uo)((0,k.eq)(k.NP.entityId,a.entityId),(0,k.eq)(k.NP.agentId,c))).orderBy((0,k.i8)(k.NP.updatedAt)).limit(200),f=e.map(a=>a.id),g=new Map;if(f.length>0)for(let a of(await b.select({conversationId:k.p$.conversationId,content:k.p$.content}).from(k.p$).where((0,k.RV)(k.p$.conversationId,f)).orderBy((0,k.i8)(k.p$.createdAt)).limit(1e3)))a.conversationId&&!g.has(a.conversationId)&&g.set(a.conversationId,a.content);let h=e.map(a=>({id:a.id,title:a.title,preview:g.get(a.id)??"",updatedAt:a.updatedAt}));return cT({rootAgentId:c,rootName:d,conversations:h})}catch(a){return console.error("[listConversationsAction]",a),cU("db_error","Failed to load conversations")}}async function eJ(){try{let a=await cV(),b=(0,y.Lf)(),{rootAgentId:c}=await eH(b,a.entityId);if(!c)return cU("no_root_agent","Designate a ROOT agent in Settings first.");let[d]=await b.insert(k.NP).values({entityId:a.entityId,agentId:c,title:""}).returning({id:k.NP.id});if(!d)return cU("db_error","Failed to create conversation");return(0,e.revalidatePath)("/chat"),cT({id:d.id})}catch(a){return console.error("[createConversationAction]",a),cU("db_error","Failed to create conversation")}}async function eK(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid conversation id");let c=(0,y.Lf)();return await c.delete(k.NP).where((0,k.Uo)((0,k.eq)(k.NP.id,a),(0,k.eq)(k.NP.entityId,b.entityId))),(0,e.revalidatePath)("/chat"),cT(void 0)}catch(a){return console.error("[deleteConversationAction]",a),cU("db_error","Failed to delete conversation")}}async function eL(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid conversation id");let c=(0,y.Lf)(),[d]=await c.select({id:k.NP.id}).from(k.NP).where((0,k.Uo)((0,k.eq)(k.NP.id,a),(0,k.eq)(k.NP.entityId,b.entityId))).limit(1);if(!d)return cU("not_found","Conversation not found");let e=(await c.select({id:k.p$.id,role:k.p$.role,content:k.p$.content,jobId:k.p$.jobId}).from(k.p$).where((0,k.eq)(k.p$.conversationId,a)).orderBy(k.p$.createdAt).limit(500)).map(a=>({id:a.id,role:a.role,content:a.content,jobId:a.jobId}));return cT({messages:e})}catch(a){return console.error("[listChatAction]",a),cU("db_error","Failed to load chat")}}let eM=g.Ik({conversationId:g.Yj().guid(),message:g.Yj().min(1,"Message is empty").max(1e4)});async function eN(a){try{let b,c=await cV(),d=eM.safeParse(a);if(!d.success)return cU("validation_failed",d.error.issues[0]?.message??"Invalid input");let f=(0,y.Lf)(),{rootAgentId:g}=await eH(f,c.entityId);if(!g)return cU("no_root_agent","Designate a ROOT agent in Settings first.");if(!A._.WORKER_SECRET)return console.error("[sendChatMessageAction] WORKER_SECRET missing — cannot reach runner"),cU("runner_unreachable","Chat backend not configured");try{b=await fetch(`${A._.RUNNER_URL}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${A._.WORKER_SECRET}`},body:JSON.stringify({entityId:c.entityId,agentId:g,conversationId:d.data.conversationId,message:d.data.message})})}catch(a){return console.error("[sendChatMessageAction] runner unreachable:",a),cU("runner_unreachable","Could not reach the chat backend")}let h=await b.json().catch(()=>null);if(!b.ok)return cU("chat_failed",h?.error??"The agent did not reply");return(0,e.revalidatePath)("/chat"),cT({reply:h?.reply??""})}catch(a){return console.error("[sendChatMessageAction]",a),cU("db_error","Failed to send message")}}async function eO(a){try{let b=await cV();if(!g.Yj().guid().safeParse(a).success)return cU("validation_failed","Invalid job id");let c=(0,y.Lf)(),[d]=await c.select({status:k.ME.status,result:k.ME.result}).from(k.ME).where((0,k.Uo)((0,k.eq)(k.ME.id,a),(0,k.eq)(k.ME.entityId,b.entityId))).limit(1);if(!d)return cU("not_found","Job not found");let e=(await c.select({agentName:k.X6.name,agentSlug:k.X6.slug,status:k.ME.status}).from(k.ME).leftJoin(k.X6,(0,k.eq)(k.X6.id,k.ME.agentId)).where((0,k.eq)(k.ME.parentJobId,a)).orderBy(k.ME.createdAt)).map(a=>({agentName:a.agentName??a.agentSlug??"agent",status:a.status??"pending"}));return cT({status:d.status??"pending",result:d.result,children:e})}catch(a){return console.error("[getChatJobStatusAction]",a),cU("db_error","Failed to load job status")}}(0,cS.D)([cW,cX,cY,cZ,c$,c1,c2,c3,c4,c5,c8,c9,da,db,df,dg,dh,di,dj,dk,dl,dm,dp,dr,ds,dt,dv,dw,dx,dy,dz,dB,dC,dD,dF,dG,dH,dI,dK,dL,dM,dN,dO,dP,dQ,dR,dS,dU,dV,dX,dY,d$,d_,d1,d2,d3,d4,d6,d7,d8,d9,ea,eb,ec,ee,eg,eh,ei,ej,ek,em,en,ep,ew,ex,ey,ez,eA,eB,eC,eD,eE,eG,eI,eJ,eK,eL,eN,eO]),(0,d.A)(cW,"002d53d8489f05c476e5f803a48c3614924142e2ad",null),(0,d.A)(cX,"404505375417085440a1ea853c50f33e5723dbbf0f",null),(0,d.A)(cY,"40cbf23b485b0477c2fbdcffc6fcd45c4e64dc7b69",null),(0,d.A)(cZ,"40372879d5da92091f87db2e88fc4d7cd3fa583f07",null),(0,d.A)(c$,"4003a311e8660fcf139991909c492b3bd2aad7fe7e",null),(0,d.A)(c1,"0048765ef4a5e8a333fbaa7a3760314bd20d23f015",null),(0,d.A)(c2,"006500fa84da35180ad8b9f3415bb706d7347ebb68",null),(0,d.A)(c3,"4011a0e49507079213b6ce631cd4903ec46942f9e1",null),(0,d.A)(c4,"408a1c1b6416b62e96523dd4e7ffcf5b12406ff7ce",null),(0,d.A)(c5,"40ecb72d2da458a2330753fee3e93712648aaccff0",null),(0,d.A)(c8,"408b4374239f76207d53f760182cb5fa1a0aa2c1b1",null),(0,d.A)(c9,"40dd345d903fe6038aa991e0d968ff178175882e76",null),(0,d.A)(da,"70ee6bc3c68327436b7c4c9a6a288eb852a0c29082",null),(0,d.A)(db,"403efba0f740b490b80e06367cb020a727cfe0efd9",null),(0,d.A)(df,"708a8804d4c430873c5b65db43c98c43242eedaa68",null),(0,d.A)(dg,"60d33abe965baee12ec705d093bdd07654d00f0e22",null),(0,d.A)(dh,"70c07e81341877e5e3d66c5a105d95552fec935b4b",null),(0,d.A)(di,"40966b799f3997fdc3e28e08a3b7528a040b60e561",null),(0,d.A)(dj,"4009f2c76b78aa07f023a9dc32a2473dd3e025cb58",null),(0,d.A)(dk,"40ed173541653487cad77e8d24aa71717dda4514fd",null),(0,d.A)(dl,"4060518a20de7e0d8a313a1b4a6bef1026af5fced1",null),(0,d.A)(dm,"406b65614d4cacc360468c40774fa06b20027069fe",null),(0,d.A)(dp,"40cf8c4d455e06e10c47377dcd0525b8b750528bf8",null),(0,d.A)(dr,"40ab6014ab962aa75535b730138f33a7c194212b24",null),(0,d.A)(ds,"40f886db2aa6738396c9820d79573481e8094556fe",null),(0,d.A)(dt,"4028e336e8831dd6916335467985f84baa9e94eab6",null),(0,d.A)(dv,"40d8a7cf9d32867c652a507e7e79627a989e33f8b7",null),(0,d.A)(dw,"40f9451906485ec5f95da3d81bbf331d881b1122f2",null),(0,d.A)(dx,"40a7f7bf4b0aeb563c1db894ceacea5e1dea08b2ce",null),(0,d.A)(dy,"40071f10ccaf7f47f1aff1afc670b23b607d4036f7",null),(0,d.A)(dz,"00aace867a6070eec006371aaaed42397c2785bfe6",null),(0,d.A)(dB,"402d0472dc019335cd4c5fe97bebaeb18ad96af5ee",null),(0,d.A)(dC,"4072660be3387fc94a2f35564292dc159448f98a7b",null),(0,d.A)(dD,"001118fec506a53ebafc1ac22aced98491da4c33fc",null),(0,d.A)(dF,"403f4b46d48174379803fe1c702be11cf63736ef46",null),(0,d.A)(dG,"60387ec0d39228d66c460aac5516bbad2b8106ba4e",null),(0,d.A)(dH,"604e81f2153543d44bfbe02554eee33fe9c7eb41b6",null),(0,d.A)(dI,"405da710852dfaf045979eb3bf4150d08015bfde18",null),(0,d.A)(dK,"602e220c0c1799f123879c32ef57a75671b75d54dc",null),(0,d.A)(dL,"4003fcb873df0181574d42fb4bea2505b54e5ed549",null),(0,d.A)(dM,"40590ff01cd1433bab93ae7eb66ebde0137b32b0a4",null),(0,d.A)(dN,"7804a10eab6db5a571bf689eb41c33f0ea7e323820",null),(0,d.A)(dO,"60828079bdf7ac1433de3e057d76fdc01ba138233a",null),(0,d.A)(dP,"70fc0d769386dec2ad11c3269f562ca2c1e2871493",null),(0,d.A)(dQ,"60aec87a5bf59e09f43f85105b3e58327f98feb9e8",null),(0,d.A)(dR,"60f81a329cff55c862f755a177ae79c649aa3918e9",null),(0,d.A)(dS,"40dfa1a88b09411e717b886e57790a314b93d531cb",null),(0,d.A)(dU,"40555201ad9b6108567fd1e445b41bb86aa9c548db",null),(0,d.A)(dV,"0076075a5351358daf5440c7f69c63cad833707b88",null),(0,d.A)(dX,"40b115e61af8fe747478744e8f07874837f936874b",null),(0,d.A)(dY,"40ada2c69823752e444b44b7c81e93fe8382e8c9ae",null),(0,d.A)(d$,"40b38a9c4fa75e580a3d3e1ebd8ba080128c87ec86",null),(0,d.A)(d_,"401fb2fc43a246b86d42f57b7c4be4b6c300a83665",null),(0,d.A)(d1,"402954a3df2b9ee001c5800e517d091e054d42326f",null),(0,d.A)(d2,"40c4d9f44c5c83d4d994cb041dc39a2032fa1a66f6",null),(0,d.A)(d3,"40065cb48ee796d72efbd9822168ea1e87a4cb36b6",null),(0,d.A)(d4,"409f4ab91df4d32671bf967344110ced9c96f10297",null),(0,d.A)(d6,"402c4f6416df32089c620b7f64b97ca1064e785d79",null),(0,d.A)(d7,"00bd01420b7cbef1105228a0534621bafacec7779b",null),(0,d.A)(d8,"00ac3cfbc9ad58456e1c96ee7bbed8abd374cb9fb1",null),(0,d.A)(d9,"00ebe221f142ec550145255224d88d2cb96b772d57",null),(0,d.A)(ea,"005448c2fdf7ea031fef0a9bb5d459d3f80ace4a01",null),(0,d.A)(eb,"00fc10be23e1699b25c4b506e5f22f8f4a8306e915",null),(0,d.A)(ec,"0019568f0902d6686eef0bddd170218a9cd13a17a4",null),(0,d.A)(ee,"40f91faf74d47eaf54ef1581686fdb3d9c75750615",null),(0,d.A)(eg,"40968376cf71f09beaceb5af45c00b88be86871e29",null),(0,d.A)(eh,"40636072bcb4efeb9d67f99498d3e984b1f52b51fc",null),(0,d.A)(ei,"40245a2e007dbf597e697c65a7beb167abca4eab76",null),(0,d.A)(ej,"405baecc1b1556260c43db88c1cbdea3f44aa47fea",null),(0,d.A)(ek,"0057a31536542015df37b9b6145037112758805486",null),(0,d.A)(em,"40ff895a5d4055dd297090905f6cc38c251f57f966",null),(0,d.A)(en,"00faeafbce3e40c7196643c0d91e31e27e7d0588bd",null),(0,d.A)(ep,"40db892b53bab82020950fb6c30d9c7508bd5ce3aa",null),(0,d.A)(ew,"00bb2c47dd550c0d9c909b5fb85756329ff7d9cea3",null),(0,d.A)(ex,"40357e9b617de7a42a00d52bfc453c33b6f103ba73",null),(0,d.A)(ey,"40106e1cae696378c9f7f89b4d0cc511df13c968d3",null),(0,d.A)(ez,"60524bd713205b07644a694f98b443e218cba53d69",null),(0,d.A)(eA,"401a9d0eede57ee72eff7a603fef0186534def2d16",null),(0,d.A)(eB,"40dc3ad156374b24f4932c45c207a6b5ded0fafe31",null),(0,d.A)(eC,"40973a7505dd99f7f4dacf03329c545e6232fdb414",null),(0,d.A)(eD,"78387ce7c2490d9e4084990b4dcfdc1611724686e5",null),(0,d.A)(eE,"00311575d69fa9b60cf1588f7fa53c6d2500242cc1",null),(0,d.A)(eG,"4093b63348b2c91afebb7d849fe8684cfab209c898",null),(0,d.A)(eI,"001bc4cd7d773c42f0abe430aa4938eb24e122f3ed",null),(0,d.A)(eJ,"006a72d5a5e11e139d3a629fbcceea11c7cd5c08da",null),(0,d.A)(eK,"40767bfec90d74a95e600d8e748e02d76eef253591",null),(0,d.A)(eL,"4068d449799d0839162c8c459eef6518ec3cec8eb1",null),(0,d.A)(eN,"400539c555b2a3f2f29167cb5dec3c4dcc8fc2d2b2",null),(0,d.A)(eO,"409f0187893df968935c2166f22e9dabae2abe4464",null)},7316:(a,b,c)=>{Promise.resolve().then(c.bind(c,55053))},17030:(a,b,c)=>{"use strict";c.d(b,{Y:()=>d.YT});var d=c(36535)},19259:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,67448,23)),Promise.resolve().then(c.t.bind(c,2667,23)),Promise.resolve().then(c.t.bind(c,10903,23)),Promise.resolve().then(c.t.bind(c,11162,23)),Promise.resolve().then(c.t.bind(c,23838,23)),Promise.resolve().then(c.t.bind(c,83466,23)),Promise.resolve().then(c.t.bind(c,12127,23)),Promise.resolve().then(c.bind(c,26698))},28659:(a,b,c)=>{"use strict";c.d(b,{default:()=>g});var d=c(10476),e=c(64565),f=c(44625);function g(){let[a,b]=(0,e.useState)(!1);async function c(){b(!0);try{let a=await fetch("/api/auth/sign-out",{method:"POST",headers:{"Content-Type":"application/json"},body:"{}",credentials:"same-origin"});a.ok||console.error("sign-out failed",a.status,await a.text().catch(()=>""))}catch(a){console.error("sign-out network error",a)}window.location.replace("/login")}return(0,d.jsx)("button",{type:"button",onClick:c,disabled:a,"data-testid":"user-menu-sign-out","aria-label":"Sign out",title:"Sign out",className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-ink-3 transition-colors hover:bg-hover hover:text-ink disabled:cursor-not-allowed disabled:opacity-40",children:(0,d.jsx)(f.M,{size:15})})}},36105:()=>{},42705:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>D});var d=c(99386),e=c(66402),f=c(95809),g=c(42112),h=c(62952),i=c(81590),j=c(35675),k=c(90454),l=c(95488),m=c(75224),n=c(97173);async function o(){let a=m._.AUTH_MODE;if("local-trust"===a)return(0,d.jsx)(q,{icon:(0,d.jsx)(i.o,{size:13,weight:"fill"}),label:"Local trust",hint:"No auth — single-user install"});if("bearer-token"===a)return(0,d.jsx)(q,{icon:(0,d.jsx)(i.o,{size:13,weight:"fill"}),label:"API token"});let b=await p();return b?(0,d.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border border-rule-2 bg-paper px-2.5 py-2",children:[(0,d.jsx)("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-hover text-ink-3",children:(0,d.jsx)(j.K,{size:13,weight:"fill"})}),(0,d.jsx)("div",{className:"min-w-0 flex-1","data-testid":"user-menu-email",children:(0,d.jsx)("p",{className:"truncate text-xs font-medium text-ink",title:b,children:b})}),(0,d.jsx)(n.default,{})]}):null}async function p(){try{let a=await (0,e.headers)(),b=new Request("http://localhost/",{headers:a}),c=await (0,l.sj)(b),d=await (0,l.Lf)().select({email:k.VV.email}).from(k.VV).where((0,k.eq)(k.VV.id,c.userId)).limit(1);return d[0]?.email??null}catch{return null}}function q({icon:a,label:b,hint:c}){return(0,d.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border border-rule-2 bg-paper px-2.5 py-2",children:[(0,d.jsx)("div",{className:"shrink-0 text-ok",children:a}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("p",{className:"text-xs font-medium leading-tight text-ink",children:b}),c&&(0,d.jsx)("p",{className:"mt-0.5 truncate text-[10px] text-ink-3",children:c})]})]})}var r=c(13579),s=c(36937),t=c(92002);function u({children:a,badge:b,size:c="md",className:e="",type:f="button",...g}){return(0,d.jsxs)("button",{type:f,className:`relative flex shrink-0 items-center justify-center border border-rule-2 bg-paper text-ink-2 transition-colors hover:text-ink ${"md"===c?"h-[34px] w-[34px] rounded-md":"h-[30px] w-[30px] rounded-[7px]"} ${e}`,...g,children:[a,b&&(0,d.jsx)("span",{className:"absolute top-[6px] right-[7px] h-1.5 w-1.5 rounded-full bg-skill-vivid"})]})}var v=c(88866),w=c(85598),x=c.n(w);let y={ink:"bg-ink text-canvas hover:brightness-[0.92]",coral:"bg-skill-vivid text-white hover:brightness-[0.94]",blue:"bg-conn-vivid text-white hover:brightness-[0.94]"};function z(a){let{children:b,variant:c="ink",size:e="md",className:f=""}=a,g=`inline-flex items-center justify-center gap-1.5 rounded-md font-medium leading-none border-0 cursor-pointer transition-[filter] ${"md"===e?"h-[34px] px-3.5 text-[13px]":"h-[30px] px-3 text-[12px]"} ${y[c]} ${f}`;if("href"in a&&a.href){let{href:c,variant:e,size:f,className:h,children:i,...j}=a;return(0,d.jsx)(x(),{href:c,className:g,...j,children:b})}let{variant:h,size:i,className:j,children:k,...l}=a;return(0,d.jsx)("button",{type:"button",className:g,...l,children:b})}function A({left:a,primaryHref:b="/agents",primaryLabel:c="New agent",showPrimary:e=!0,showSearch:f=!0}){return(0,d.jsxs)("div",{className:"flex h-[52px] shrink-0 items-center gap-2 px-4 md:gap-2.5 md:px-9",children:[a,(0,d.jsx)("div",{className:"flex-1"}),f&&(0,d.jsx)(t.default,{className:"hidden md:flex"}),(0,d.jsx)(u,{"aria-label":"Notifications",title:"Notifications",badge:!0,children:(0,d.jsx)(r.I,{size:15})}),(0,d.jsx)(v.default,{}),e&&(0,d.jsxs)(z,{variant:"ink",href:b,"aria-label":c,title:c,children:[(0,d.jsx)(s.F,{size:13,weight:"bold"}),(0,d.jsx)("span",{className:"hidden md:inline",children:c})]})]})}var B=c(93690),C=c(5786);async function D({children:a}){try{let a=await (0,e.headers)(),b=new Request("http://localhost/",{headers:a});await (0,l.sj)(b)}catch(a){throw a instanceof g.lR&&(0,f.redirect)("/login"),a instanceof g.vB&&(0,f.redirect)("/onboarding"),a}let b=[],c=await (0,C.zh)();return c.ok&&(b=c.data),(0,d.jsxs)("div",{className:"flex min-h-screen bg-canvas text-ink",children:[(0,d.jsx)(h.default,{workspaces:b,userMenu:(0,d.jsx)(o,{})}),(0,d.jsxs)("main",{className:"flex min-w-0 flex-1 flex-col pt-[58px] lg:ml-[220px] lg:pt-0",children:[(0,d.jsx)(A,{}),(0,d.jsx)("div",{className:"flex-1 overflow-x-hidden",children:(0,d.jsx)("div",{className:"max-w-6xl px-5 pb-10 sm:px-8 lg:px-9",children:a})})]}),(0,d.jsx)(B.default,{})]})}},43136:(a,b,c)=>{"use strict";c.d(b,{default:()=>h});var d=c(10476),e=c(64565),f=c(62515),g=c(2447);function h(){let[a,b]=(0,e.useState)("light"),[c,h]=(0,e.useState)(!1),i="dark"===a?f.b:g.A,j="dark"===a?"Switch to light theme":"Switch to dark theme";return(0,d.jsx)("button",{type:"button",onClick:()=>{let c="dark"===a?"light":"dark";document.documentElement.setAttribute("data-theme",c);try{localStorage.setItem("nodal.theme",c)}catch{}b(c)},"aria-label":j,title:j,className:"flex h-[34px] w-[34px] items-center justify-center rounded-md border border-rule-2 bg-paper text-ink-2 transition-colors hover:text-ink",suppressHydrationWarning:!0,children:c?(0,d.jsx)(i,{size:15}):(0,d.jsx)(g.A,{size:15})})}},43828:(a,b,c)=>{Promise.resolve().then(c.bind(c,86688)),Promise.resolve().then(c.bind(c,28659)),Promise.resolve().then(c.bind(c,3808)),Promise.resolve().then(c.bind(c,57712)),Promise.resolve().then(c.bind(c,43136)),Promise.resolve().then(c.t.bind(c,88831,23))},44100:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(10476);let e={ok:"bg-ok",lime:"bg-agent-vivid",coral:"bg-skill-vivid",blue:"bg-conn-vivid"},f={ok:"animate-[blip_1.4s_ease-out_infinite]",lime:"animate-[blip-lime_1.5s_ease-out_infinite]",coral:"animate-[blip-coral_1.4s_ease-out_infinite]",blue:"animate-[blip-blue_1.4s_ease-out_infinite]"};function g({variant:a="ok",size:b="sm",animate:c=!0,className:h=""}){return(0,d.jsx)("span",{className:`inline-block shrink-0 rounded-full ${"sm"===b?"h-[7px] w-[7px]":"h-2 w-2"} ${e[a]} ${c?f[a]:""} ${h}`})}},49269:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(99386),e=c(85598),f=c.n(e);function g(){return(0,d.jsx)("div",{className:"flex min-h-screen w-full items-center justify-center bg-canvas px-4",children:(0,d.jsxs)("div",{className:"text-center space-y-4",children:[(0,d.jsx)("h1",{className:"text-2xl font-bold text-ink",children:"404 — Page not found"}),(0,d.jsx)("p",{className:"text-sm text-ink-3",children:"This page doesn't exist."}),(0,d.jsx)(f(),{href:"/",className:"inline-block rounded-lg bg-agent-vivid text-canvas px-4 py-2 text-sm font-semibold hover:bg-agent-vivid transition-colors",children:"Go to dashboard"})]})})}},54580:(a,b,c)=>{Promise.resolve().then(c.bind(c,84327))},54620:()=>{},54792:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,61186,23)),Promise.resolve().then(c.t.bind(c,6621,23)),Promise.resolve().then(c.t.bind(c,41837,23)),Promise.resolve().then(c.t.bind(c,85060,23)),Promise.resolve().then(c.t.bind(c,43484,23)),Promise.resolve().then(c.t.bind(c,8376,23)),Promise.resolve().then(c.t.bind(c,74625,23)),Promise.resolve().then(c.t.bind(c,51080,23))},55053:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(10476);function e({error:a,reset:b}){return(0,d.jsx)("div",{className:"flex min-h-screen w-full items-center justify-center bg-canvas px-4",children:(0,d.jsxs)("div",{className:"text-center space-y-4",children:[(0,d.jsx)("h1",{className:"text-2xl font-bold text-ink",children:"Something went wrong"}),(0,d.jsx)("p",{className:"text-sm text-ink-3",children:a.message}),(0,d.jsx)("button",{onClick:b,className:"rounded-lg bg-agent-vivid text-canvas px-4 py-2 text-sm font-semibold hover:bg-agent-vivid transition-colors",children:"Try again"})]})})}c(64565)},56161:(a,b,c)=>{"use strict";c.d(b,{O:()=>e});var d=c(47092);let e=(0,d.createServerReference)("404505375417085440a1ea853c50f33e5723dbbf0f",d.callServer,void 0,d.findSourceMapURL,"createWorkspaceAction")},57238:(a,b,c)=>{"use strict";c.d(b,{W:()=>e});var d=c(47092);let e=(0,d.createServerReference)("40cbf23b485b0477c2fbdcffc6fcd45c4e64dc7b69",d.callServer,void 0,d.findSourceMapURL,"switchWorkspaceAction")},57712:(a,b,c)=>{"use strict";c.d(b,{default:()=>g});var d=c(10476),e=c(64565),f=c(48082);function g(){let[a,b]=(0,e.useState)("light");return(0,d.jsx)(f.l$,{theme:a,position:"bottom-right",richColors:!0,closeButton:!0})}},59166:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,88831,23))},59234:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,61186,23))},62952:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(49554).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\APPS\\\\NodalAI\\\\apps\\\\web\\\\src\\\\components\\\\Sidebar.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\APPS\\NodalAI\\apps\\web\\src\\components\\Sidebar.tsx","default")},63894:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,16385,23))},69679:(a,b,c)=>{"use strict";c.d(b,{A:()=>f,S:()=>e});var d=c(10476);let e=["\uD83D\uDDC2️","\uD83C\uDFE0","\uD83D\uDCBC","\uD83D\uDE80","\uD83E\uDDEA","\uD83C\uDFA8","\uD83D\uDCCA","\uD83D\uDEE0️","\uD83C\uDF10","⚡","\uD83E\uDD16","\uD83D\uDCE6"];function f({value:a,onChange:b,disabled:c}){return(0,d.jsx)("div",{className:"flex flex-wrap gap-1",children:e.map(e=>{let f=a===e;return(0,d.jsx)("button",{type:"button",disabled:c,"aria-pressed":f,onClick:()=>b(e),className:`flex h-8 w-8 items-center justify-center rounded-md border text-[15px] leading-none transition-colors disabled:opacity-50 ${f?"border-ink bg-hover-2":"border-rule-2 hover:bg-hover"}`,children:e},e)})})}},70615:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>j,metadata:()=>i});var d=c(99386),e=c(50277),f=c.n(e),g=c(80356),h=c.n(g);c(54620);let i={title:"Nodal-Agents",description:"Multi-agent platform"};function j({children:a}){return(0,d.jsxs)("html",{lang:"en",className:`${f().variable} ${h().variable}`,suppressHydrationWarning:!0,children:[(0,d.jsx)("head",{children:(0,d.jsx)("script",{dangerouslySetInnerHTML:{__html:"(function(){try{var t=localStorage.getItem('nodal.theme');if(t!=='dark'&&t!=='light')t='light';document.documentElement.setAttribute('data-theme',t);}catch(e){document.documentElement.setAttribute('data-theme','light');}})();"}})}),(0,d.jsx)("body",{children:a})]})}},70953:()=>{},77386:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,67448,23))},84327:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(49554).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\APPS\\\\NodalAI\\\\apps\\\\web\\\\src\\\\app\\\\error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\APPS\\NodalAI\\apps\\web\\src\\app\\error.tsx","default")},86688:(a,b,c)=>{"use strict";c.d(b,{default:()=>R});var d=c(10476),e=c(64565),f=c(12418),g=c(77568),h=c(3521),i=c(82271),j=c(13028),k=c(83588),l=c(92607),m=c(1282),n=c(73836),o=c(11145),p=c(66442),q=c(63473),r=c(84132),s=c(64945),t=c(8161),u=c(55234),v=c(11745),w=c(93720),x=c(4870);function y(){return(0,d.jsx)("div",{className:"px-4 pb-3.5",children:(0,d.jsxs)("div",{className:"flex items-center gap-2 text-[16px] font-medium leading-none tracking-[-0.005em] text-ink",children:[(0,d.jsx)("span",{className:"flex h-[22px] w-[22px] items-center justify-center rounded-md bg-ink text-[11px] font-semibold leading-none tracking-[0.04em] text-canvas font-mono",children:"N"}),(0,d.jsx)("span",{children:"Nodal-Agents"})]})})}function z({children:a}){return(0,d.jsx)("div",{className:"px-3.5 pt-3.5 pb-1 font-mono text-[9.5px] uppercase tracking-[0.14em] text-ink-4",children:a})}var A=c(88831),B=c.n(A);let C={agent:"bg-agent-vivid",skill:"bg-skill-vivid",conn:"bg-conn-vivid"};function D({href:a,label:b,icon:c,dot:e,count:g,isActive:h}){let i=(0,f.usePathname)(),j=h??(i===a||i.startsWith(a+"/"));return(0,d.jsxs)(B(),{href:a,className:`group mx-2 flex h-[30px] items-center gap-2.5 rounded-lg px-2.5 text-[12.5px] leading-none transition-colors ${j?"bg-paper text-ink font-medium shadow-[0_1px_2px_rgba(0,0,0,0.04)]":"text-ink-2 hover:bg-hover"}`,children:[e?(0,d.jsx)("span",{className:`h-2 w-2 shrink-0 rounded-full ${C[e]}`}):(0,d.jsx)("span",{className:`flex h-3.5 w-3.5 shrink-0 items-center justify-center ${j?"text-ink":"text-ink-3 group-hover:text-ink-2"}`,children:c}),(0,d.jsx)("span",{className:"flex-1 truncate",children:b}),void 0!==g&&(0,d.jsx)("span",{className:"font-mono text-[10px] tracking-[0.02em] text-ink-4",children:g})]})}var E=c(44100);function F({runningAgents:a,throughput:b,fill:c=.36}){if(void 0===a)return null;let e=100*Math.max(0,Math.min(1,c));return(0,d.jsxs)("div",{className:"mx-3 mt-2.5 rounded-[10px] border border-rule-2 bg-paper px-3 pt-2.5 pb-3",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5 font-mono text-[9.5px] uppercase leading-none tracking-[0.14em] text-ink-3",children:[(0,d.jsx)(E.A,{variant:"lime"}),"Live"]}),(0,d.jsxs)("div",{className:"mt-1.5 text-[12.5px] leading-[1.35] text-ink-2",children:[(0,d.jsxs)("b",{className:"font-semibold text-ink",children:[a," agents"]}),b?` running \xb7 ${b}`:" running"]}),(0,d.jsx)("div",{className:"mt-2.5 h-[3px] overflow-hidden rounded-[2px] bg-black/[0.06] dark:bg-white/[0.06]",children:(0,d.jsx)("i",{className:"block h-full bg-agent-vivid",style:{width:`${e}%`}})})]})}var G=c(48082),H=c(23586),I=c(42199);function J({fleets:a,activeId:b,disabled:c,onChange:f,onNewWorkspace:g}){let[h,i]=(0,e.useState)(!1),j=(0,e.useRef)(null),k=a.find(a=>a.id===b)??a[0];return k?(0,d.jsxs)("div",{ref:j,className:"relative mx-3.5 mt-3.5 mb-1",children:[(0,d.jsxs)("button",{type:"button",onClick:()=>!c&&i(a=>!a),"aria-haspopup":"listbox","aria-expanded":h,"aria-disabled":c||void 0,className:`flex h-[38px] w-full items-center gap-2.5 rounded-[9px] border border-rule-2 bg-paper px-2.5 text-[13px] leading-none text-ink ${c?"cursor-default":"cursor-pointer hover:bg-hover-2/40"}`,children:[(0,d.jsx)("span",{className:"flex h-[22px] w-[22px] shrink-0 items-center justify-center rounded-[5px] font-mono text-[10.5px] font-semibold leading-none tracking-[0.04em] text-[#0a0a0a]",style:{background:k.color},children:k.icon??k.tag.slice(0,2)}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate text-left text-[12.5px] font-medium text-ink",children:k.name}),!c&&(0,d.jsx)(H.a,{size:12,className:"shrink-0 text-ink-3"})]}),h&&!c&&(0,d.jsxs)("div",{role:"listbox",className:"absolute inset-x-0 top-[calc(100%+6px)] z-30 rounded-[9px] border border-rule-2 bg-paper p-1.5 shadow-[0_12px_32px_rgba(0,0,0,0.10)]",children:[a.map(a=>{let c=a.id===b;return(0,d.jsxs)("div",{role:"option","aria-selected":c,onClick:()=>{f?.(a.id),i(!1)},className:`flex cursor-pointer items-center gap-2.5 rounded-md px-2 py-1.5 text-[12.5px] leading-[1.2] text-ink-2 hover:bg-hover ${c?"bg-hover-2":""}`,children:[(0,d.jsx)("span",{className:"flex h-5 w-5 shrink-0 items-center justify-center rounded-[5px] font-mono text-[10px] font-semibold leading-none tracking-[0.04em] text-[#0a0a0a]",style:{background:a.color},children:a.icon??a.tag.slice(0,2)}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate font-medium text-ink",children:a.name}),(0,d.jsx)(I.J,{size:12,weight:"bold",className:`text-ink ${c?"opacity-100":"opacity-0"}`})]},a.id)}),g&&(0,d.jsxs)("button",{type:"button",onClick:()=>{i(!1),g()},className:"mt-1 flex w-full items-center gap-2 rounded-md border-t border-rule px-2 py-1.5 text-[12px] font-medium text-ink-3 hover:bg-hover hover:text-ink-2 transition-colors",children:[(0,d.jsx)("span",{className:"flex h-4 w-4 items-center justify-center rounded text-[12px] leading-none",children:"+"}),"New workspace"]})]})]}):null}var K=c(69679),L=c(57238),M=c(56161);let N=["#d4ff2e","#74b9ff","#a29bfe","#fd79a8","#55efc4","#fdcb6e","#e17055","#6c5ce7"];function O(a){return{id:a.id,name:a.name,tag:a.name.replace(/[^a-zA-Z0-9]/g,"").slice(0,3).toUpperCase()||"WS",color:function(a){let b=0;for(let c=0;c<a.length;c+=1)b=31*b+a.charCodeAt(c)>>>0;return N[b%N.length]??N[0]}(a.slug),icon:a.icon??void 0}}function P({workspaces:a}){let b=(0,f.useRouter)(),[c,g]=(0,e.useTransition)(),[h,i]=(0,e.useTransition)(),[j,k]=(0,e.useState)(!1),[l,m]=(0,e.useState)(""),[n,o]=(0,e.useState)(K.S[0]),p=(0,e.useRef)(null),q=a.map(O),r=a.find(a=>a.active),s=r?.id??q[0]?.id??"";return(0,d.jsxs)("div",{children:[(0,d.jsx)(J,{fleets:q,activeId:s,onChange:function(a){a===s||c||g(async()=>{let c=await (0,L.W)({id:a});c.ok?b.refresh():G.oR.error(c.message)})},disabled:c||0===q.length,onNewWorkspace:function(){k(!0),m(""),o(K.S[0]),requestAnimationFrame(()=>p.current?.focus())}}),j&&(0,d.jsxs)("form",{onSubmit:function(a){a.preventDefault();let c=l.trim();c&&i(async()=>{let a=await (0,M.O)({name:c,icon:n});if(!a.ok)return void G.oR.error(a.message);let d=await (0,L.W)({id:a.data.id});d.ok?(k(!1),m(""),G.oR.success(`Workspace "${c}" created`),b.refresh()):G.oR.error(d.message)})},className:"mx-3.5 mt-1 rounded-[9px] border border-rule-2 bg-paper p-2.5",children:[(0,d.jsx)("p",{className:"mb-1.5 font-mono text-[10px] uppercase tracking-[0.1em] text-ink-4",children:"New workspace"}),(0,d.jsx)("div",{className:"mb-2",children:(0,d.jsx)(K.A,{value:n,onChange:o,disabled:h})}),(0,d.jsxs)("div",{className:"flex gap-1.5",children:[(0,d.jsx)("input",{ref:p,type:"text",value:l,onChange:a=>m(a.target.value),placeholder:"Name…",maxLength:60,disabled:h,className:"min-w-0 flex-1 rounded-md border border-rule bg-canvas px-2.5 py-1.5 text-[12.5px] text-ink placeholder:text-ink-4 focus:border-ink-3 focus:outline-none disabled:opacity-50"}),(0,d.jsx)("button",{type:"submit",disabled:h||!l.trim(),className:"shrink-0 rounded-md bg-ink px-3 py-1.5 text-[12px] font-medium text-canvas hover:brightness-90 disabled:cursor-not-allowed disabled:opacity-50",children:h?"…":"Create"}),(0,d.jsx)("button",{type:"button",onClick:()=>k(!1),disabled:h,className:"shrink-0 rounded-md border border-rule px-2.5 py-1.5 text-[12px] text-ink-3 hover:border-rule-2 hover:text-ink-2 disabled:opacity-50",children:"✕"})]})]})]})}let Q=[{section:"Overview",items:[{href:"/",label:"Home",icon:g.t},{href:"/chat",label:"Chat",icon:h.x},{href:"/jobs",label:"Runs",icon:i.T},{href:"/llm-providers",label:"LLM Providers",icon:j.R}]},{section:"Build",items:[{href:"/agents",label:"Agents",icon:k.n,dot:"agent"},{href:"/skills",label:"Skills",icon:l.f,dot:"skill"},{href:"/connectors",label:"API Connectors",icon:m.F,dot:"conn"},{href:"/mcp",label:"MCP Connectors",icon:n.X,dot:"conn"},{href:"/credentials",label:"Credentials",icon:o.U},{href:"/memories",label:"Memory",icon:p.j}]},{section:"Operate",items:[{href:"/automations",label:"Automation",icon:q.E},{href:"/approvals",label:"Approvals",icon:r.o},{href:"/logs",label:"Logs",icon:s.m}]},{section:"Workspace",items:[{href:"https://discord.gg/7UZsvZPgU",label:"Join Discord",external:!0},{href:"/billing",label:"Billing",icon:t.S},{href:"/settings",label:"Settings",icon:u._}]}];function R({workspaces:a,userMenu:b}){let c=(0,f.usePathname)(),[g,h]=(0,e.useState)(!1);return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"fixed top-0 right-0 left-0 z-40 flex items-center justify-between border-b border-rule-2 bg-sidebar px-4 py-3.5 lg:hidden",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 text-[14px] font-medium tracking-[-0.005em] text-ink",children:[(0,d.jsx)("span",{className:"flex h-[20px] w-[20px] items-center justify-center rounded-md bg-ink font-mono text-[10px] font-semibold text-canvas",children:"N"}),(0,d.jsx)("span",{children:"Nodal-Agents"})]}),(0,d.jsx)("button",{type:"button",onClick:()=>h(a=>!a),className:"text-ink-3 transition-colors hover:text-ink","aria-label":g?"Close menu":"Open menu",children:g?(0,d.jsx)(v.X,{size:20}):(0,d.jsx)(w.B,{size:20})})]}),g&&(0,d.jsx)("div",{className:"fixed inset-0 z-30 bg-black/40 lg:hidden",onClick:()=>h(!1),"aria-hidden":!0}),(0,d.jsxs)("aside",{className:`fixed top-0 left-0 z-40 flex h-full w-[220px] flex-col border-r border-rule-2 bg-sidebar pt-4 pb-3 transition-transform duration-200 lg:translate-x-0 ${g?"translate-x-0":"-translate-x-full"}`,children:[(0,d.jsx)(y,{}),(0,d.jsx)(P,{workspaces:a??[]}),(0,d.jsx)("nav",{className:"flex flex-1 flex-col overflow-y-auto py-1.5",children:Q.map((a,b)=>(0,d.jsxs)("div",{children:[a.section&&(0,d.jsx)(z,{children:a.section}),a.items.map(a=>a.external?(0,d.jsxs)("a",{href:a.href,target:"_blank",rel:"noopener noreferrer",className:"group mx-2 flex h-[30px] items-center gap-2.5 rounded-lg bg-[#5865F2] px-2.5 text-[12.5px] font-medium leading-none text-white transition-[filter] hover:brightness-110",children:[(0,d.jsx)("span",{className:"flex h-3.5 w-3.5 shrink-0 items-center justify-center",children:(0,d.jsx)(x.B,{size:14,weight:"bold"})}),(0,d.jsx)("span",{className:"flex-1 truncate",children:a.label})]},a.href):(0,d.jsx)(D,{href:a.href,label:a.label,icon:a.icon?(0,d.jsx)(a.icon,{size:14}):void 0,dot:a.dot,count:a.count,isActive:"/"===a.href?"/"===c:c===a.href||c.startsWith(a.href+"/")},a.href))]},b))}),(0,d.jsx)(F,{runningAgents:void 0}),b&&(0,d.jsx)("div",{className:"mt-2 border-t border-rule-2 px-3 pt-3","data-testid":"user-menu",children:b})]})]})}},88866:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(49554).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\APPS\\\\NodalAI\\\\apps\\\\web\\\\src\\\\components\\\\ui\\\\ThemeToggle.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\APPS\\NodalAI\\apps\\web\\src\\components\\ui\\ThemeToggle.tsx","default")},91092:(a,b,c)=>{Promise.resolve().then(c.bind(c,62952)),Promise.resolve().then(c.bind(c,97173)),Promise.resolve().then(c.bind(c,92002)),Promise.resolve().then(c.bind(c,93690)),Promise.resolve().then(c.bind(c,88866)),Promise.resolve().then(c.t.bind(c,16385,23))},92002:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(49554).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\APPS\\\\NodalAI\\\\apps\\\\web\\\\src\\\\components\\\\ui\\\\SearchBox.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\APPS\\NodalAI\\apps\\web\\src\\components\\ui\\SearchBox.tsx","default")},93690:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(49554).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\APPS\\\\NodalAI\\\\apps\\\\web\\\\src\\\\components\\\\ui\\\\ThemedToaster.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\APPS\\NodalAI\\apps\\web\\src\\components\\ui\\ThemedToaster.tsx","default")},96591:(a,b,c)=>{"use strict";c.d(b,{ZH:()=>d.ZH,ip:()=>d.R3});var d=c(36535)},97173:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(49554).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\APPS\\\\NodalAI\\\\apps\\\\web\\\\src\\\\components\\\\SignOutButton.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"D:\\APPS\\NodalAI\\apps\\web\\src\\components\\SignOutButton.tsx","default")},99740:(a,b,c)=>{"use strict";c.d(b,{ApifyApiError:()=>d,G:()=>e});class d extends Error{constructor(a,b,c){super(b),this.name="ApifyApiError",this.code=a,this.status=c}}function e(a){if(a instanceof d)return a;if(null!==a&&"object"==typeof a&&"statusCode"in a&&"number"==typeof a.statusCode){let c,e=a.message??`Apify API error ${a.statusCode}`;var b=a.statusCode;switch(!0){case 401===b:c="apify_unauthorized";break;case 403===b:c="apify_forbidden";break;case 404===b:c="apify_not_found";break;case 422===b:c="apify_validation_error";break;case 429===b:c="apify_rate_limited";break;case b>=500:c="apify_transient";break;default:c="apify_client_error"}return new d(c,e,b)}return a instanceof Error?new d("apify_unknown",a.message):new d("apify_unknown",String(a))}}};
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/ZuUX-HBTQOhLf0tFI6JQI/_buildManifest.js","static/ZuUX-HBTQOhLf0tFI6JQI/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-3741bf0a7636d65e.js","static/chunks/a7a8b010-58892db2f7d6ed53.js","static/chunks/8724-fb5a98d16bfbb929.js","static/chunks/main-app-7c3f773b984d0067.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/PV5qpGylrVW3jZ7zKHuhE/_buildManifest.js","static/PV5qpGylrVW3jZ7zKHuhE/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-3741bf0a7636d65e.js","static/chunks/a7a8b010-58892db2f7d6ed53.js","static/chunks/8724-fb5a98d16bfbb929.js","static/chunks/main-app-7c3f773b984d0067.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" class="__variable_8b3a0b __variable_e896d9"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/78ead23854ab041e.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-3741bf0a7636d65e.js"/><script src="/_next/static/chunks/a7a8b010-58892db2f7d6ed53.js" async=""></script><script src="/_next/static/chunks/8724-fb5a98d16bfbb929.js" async=""></script><script src="/_next/static/chunks/main-app-7c3f773b984d0067.js" async=""></script><script src="/_next/static/chunks/app/error-61e58aa304e1b34e.js" async=""></script><script src="/_next/static/chunks/3363-1c6e608bcc76c1b2.js" async=""></script><script src="/_next/static/chunks/2575-e660568bd1a9bcb6.js" async=""></script><script src="/_next/static/chunks/269-dc034ed29e6c72ee.js" async=""></script><script src="/_next/static/chunks/3233-e6efb7fb1fa24591.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/page-fb50e1576a3ab2e4.js" async=""></script><meta name="robots" content="noindex"/><title>Nodal-Agents</title><meta name="description" content="Multi-agent platform"/><script>(function(){try{var t=localStorage.getItem('nodal.theme');if(t!=='dark'&&t!=='light')t='light';document.documentElement.setAttribute('data-theme',t);}catch(e){document.documentElement.setAttribute('data-theme','light');}})();</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="flex min-h-screen w-full items-center justify-center bg-canvas px-4"><div class="text-center space-y-4"><h1 class="text-2xl font-bold text-ink">404 — Page not found</h1><p class="text-sm text-ink-3">This page doesn&#x27;t exist.</p><a class="inline-block rounded-lg bg-agent-vivid text-canvas px-4 py-2 text-sm font-semibold hover:bg-agent-vivid transition-colors" href="/">Go to dashboard</a></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-3741bf0a7636d65e.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[29534,[],\"\"]\n3:I[16681,[\"8039\",\"static/chunks/app/error-61e58aa304e1b34e.js\"],\"default\"]\n4:I[55732,[],\"\"]\n5:I[63363,[\"3363\",\"static/chunks/3363-1c6e608bcc76c1b2.js\",\"2575\",\"static/chunks/2575-e660568bd1a9bcb6.js\",\"269\",\"static/chunks/269-dc034ed29e6c72ee.js\",\"3233\",\"static/chunks/3233-e6efb7fb1fa24591.js\",\"1966\",\"static/chunks/app/(dashboard)/page-fb50e1576a3ab2e4.js\"],\"\"]\n6:I[60407,[],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[60407,[],\"ViewportBoundary\"]\nc:I[60407,[],\"MetadataBoundary\"]\ne:I[73782,[],\"default\",1]\n:HL[\"/_next/static/css/78ead23854ab041e.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/78ead23854ab041e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"__variable_8b3a0b __variable_e896d9\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var t=localStorage.getItem('nodal.theme');if(t!=='dark'\u0026\u0026t!=='light')t='light';document.documentElement.setAttribute('data-theme',t);}catch(e){document.documentElement.setAttribute('data-theme','light');}})();\"}}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"flex min-h-screen w-full items-center justify-center bg-canvas px-4\",\"children\":[\"$\",\"div\",null,{\"className\":\"text-center space-y-4\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-2xl font-bold text-ink\",\"children\":\"404 — Page not found\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-ink-3\",\"children\":\"This page doesn't exist.\"}],[\"$\",\"$L5\",null,{\"href\":\"/\",\"className\":\"inline-block rounded-lg bg-agent-vivid text-canvas px-4 py-2 text-sm font-semibold hover:bg-agent-vivid transition-colors\",\"children\":\"Go to dashboard\"}]]}]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex min-h-screen w-full items-center justify-center bg-canvas px-4\",\"children\":[\"$\",\"div\",null,{\"className\":\"text-center space-y-4\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-2xl font-bold text-ink\",\"children\":\"404 — Page not found\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-ink-3\",\"children\":\"This page doesn't exist.\"}],[\"$\",\"$L5\",null,{\"href\":\"/\",\"className\":\"inline-block rounded-lg bg-agent-vivid text-canvas px-4 py-2 text-sm font-semibold hover:bg-agent-vivid transition-colors\",\"children\":\"Go to dashboard\"}]]}]}],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$@9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"ZuUX-HBTQOhLf0tFI6JQI\"}\n"])</script><script>self.__next_f.push([1,"f:[]\n9:\"$Wf\"\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"Nodal-Agents\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Multi-agent platform\"}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en" class="__variable_8b3a0b __variable_e896d9"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/78ead23854ab041e.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-3741bf0a7636d65e.js"/><script src="/_next/static/chunks/a7a8b010-58892db2f7d6ed53.js" async=""></script><script src="/_next/static/chunks/8724-fb5a98d16bfbb929.js" async=""></script><script src="/_next/static/chunks/main-app-7c3f773b984d0067.js" async=""></script><script src="/_next/static/chunks/app/error-61e58aa304e1b34e.js" async=""></script><script src="/_next/static/chunks/3363-1c6e608bcc76c1b2.js" async=""></script><script src="/_next/static/chunks/2575-e660568bd1a9bcb6.js" async=""></script><script src="/_next/static/chunks/269-dc034ed29e6c72ee.js" async=""></script><script src="/_next/static/chunks/3233-e6efb7fb1fa24591.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/page-29cfae3bf701076e.js" async=""></script><meta name="robots" content="noindex"/><title>Nodal-Agents</title><meta name="description" content="Multi-agent platform"/><script>(function(){try{var t=localStorage.getItem('nodal.theme');if(t!=='dark'&&t!=='light')t='light';document.documentElement.setAttribute('data-theme',t);}catch(e){document.documentElement.setAttribute('data-theme','light');}})();</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="flex min-h-screen w-full items-center justify-center bg-canvas px-4"><div class="text-center space-y-4"><h1 class="text-2xl font-bold text-ink">404 — Page not found</h1><p class="text-sm text-ink-3">This page doesn&#x27;t exist.</p><a class="inline-block rounded-lg bg-agent-vivid text-canvas px-4 py-2 text-sm font-semibold hover:bg-agent-vivid transition-colors" href="/">Go to dashboard</a></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-3741bf0a7636d65e.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[29534,[],\"\"]\n3:I[16681,[\"8039\",\"static/chunks/app/error-61e58aa304e1b34e.js\"],\"default\"]\n4:I[55732,[],\"\"]\n5:I[63363,[\"3363\",\"static/chunks/3363-1c6e608bcc76c1b2.js\",\"2575\",\"static/chunks/2575-e660568bd1a9bcb6.js\",\"269\",\"static/chunks/269-dc034ed29e6c72ee.js\",\"3233\",\"static/chunks/3233-e6efb7fb1fa24591.js\",\"1966\",\"static/chunks/app/(dashboard)/page-29cfae3bf701076e.js\"],\"\"]\n6:I[60407,[],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[60407,[],\"ViewportBoundary\"]\nc:I[60407,[],\"MetadataBoundary\"]\ne:I[73782,[],\"default\",1]\n:HL[\"/_next/static/css/78ead23854ab041e.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/78ead23854ab041e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"__variable_8b3a0b __variable_e896d9\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var t=localStorage.getItem('nodal.theme');if(t!=='dark'\u0026\u0026t!=='light')t='light';document.documentElement.setAttribute('data-theme',t);}catch(e){document.documentElement.setAttribute('data-theme','light');}})();\"}}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"flex min-h-screen w-full items-center justify-center bg-canvas px-4\",\"children\":[\"$\",\"div\",null,{\"className\":\"text-center space-y-4\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-2xl font-bold text-ink\",\"children\":\"404 — Page not found\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-ink-3\",\"children\":\"This page doesn't exist.\"}],[\"$\",\"$L5\",null,{\"href\":\"/\",\"className\":\"inline-block rounded-lg bg-agent-vivid text-canvas px-4 py-2 text-sm font-semibold hover:bg-agent-vivid transition-colors\",\"children\":\"Go to dashboard\"}]]}]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex min-h-screen w-full items-center justify-center bg-canvas px-4\",\"children\":[\"$\",\"div\",null,{\"className\":\"text-center space-y-4\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-2xl font-bold text-ink\",\"children\":\"404 — Page not found\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-ink-3\",\"children\":\"This page doesn't exist.\"}],[\"$\",\"$L5\",null,{\"href\":\"/\",\"className\":\"inline-block rounded-lg bg-agent-vivid text-canvas px-4 py-2 text-sm font-semibold hover:bg-agent-vivid transition-colors\",\"children\":\"Go to dashboard\"}]]}]}],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$@9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"PV5qpGylrVW3jZ7zKHuhE\"}\n"])</script><script>self.__next_f.push([1,"f:[]\n9:\"$Wf\"\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"Nodal-Agents\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Multi-agent platform\"}]]\n"])</script></body></html>