yaml-flow 8.11.4 → 8.11.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/adapters/firestore-storage.js +2 -2
- package/browser/adapters/localstorage-storage.js +3 -3
- package/browser/asset-integrity.json +7 -7
- package/browser/server-runtime-controlface.js +4 -4
- package/lib/board-live-cards-node.cjs +2 -2
- package/lib/board-live-cards-node.js +2 -2
- package/lib/board-live-cards-public.cjs +1 -1
- package/lib/board-live-cards-public.js +1 -1
- package/lib/board-live-cards-server-runtime.cjs +1 -1
- package/lib/board-live-cards-server-runtime.js +1 -1
- package/lib/board-livegraph-runtime/index.cjs +1 -1
- package/lib/board-livegraph-runtime/index.js +1 -1
- package/lib/board-sse-state.cjs +2 -0
- package/lib/board-sse-state.d.cts +19 -0
- package/lib/board-sse-state.d.ts +19 -0
- package/lib/board-sse-state.js +2 -0
- package/lib/board-state-reducer.cjs +1 -1
- package/lib/board-state-reducer.js +1 -1
- package/lib/card-store-public.cjs +1 -1
- package/lib/card-store-public.js +1 -1
- package/lib/{chunk-MEL5LKF7.js → chunk-23PEDGFN.js} +2 -2
- package/lib/{chunk-O65MSWUE.cjs → chunk-52XPRCZC.cjs} +2 -2
- package/lib/chunk-5RUSICUC.cjs +3 -0
- package/lib/chunk-7SBE7A6E.cjs +2 -0
- package/lib/chunk-7Y47QXMX.cjs +2 -0
- package/lib/chunk-AW3COGCI.cjs +3 -0
- package/lib/chunk-CAQHA4GK.js +2 -0
- package/lib/chunk-CJQEM63S.cjs +2 -0
- package/lib/chunk-CODPG5MY.js +3 -0
- package/lib/chunk-EHREWADE.js +2 -0
- package/lib/chunk-EOVTMJYZ.js +2 -0
- package/lib/chunk-FULAMLUU.js +3 -0
- package/lib/chunk-HOSD6UHA.js +3 -0
- package/lib/{chunk-37JSBRZO.js → chunk-I3ZOFU3F.js} +2 -2
- package/lib/chunk-IXZV5BS5.js +2 -0
- package/lib/chunk-J7KE7SPA.cjs +2 -0
- package/lib/{chunk-LRO5AL75.cjs → chunk-NOAERAOE.cjs} +2 -2
- package/lib/chunk-Q444D72R.js +2 -0
- package/lib/chunk-QKWQ4HRE.js +3 -0
- package/lib/chunk-R7SQQSDX.js +2 -0
- package/lib/chunk-SIPLKLWU.cjs +2 -0
- package/lib/{chunk-HLJH7LGW.js → chunk-SK2R5ILQ.js} +3 -3
- package/lib/chunk-VI36DRWG.cjs +2 -0
- package/lib/chunk-WE7JOO4T.cjs +3 -0
- package/lib/chunk-WGYS2L4V.js +2 -0
- package/lib/chunk-X5MLNGGM.cjs +16 -0
- package/lib/{chunk-Z26U6RSG.cjs → chunk-YAPTL2MP.cjs} +2 -2
- package/lib/{chunk-MQAVZUXB.cjs → chunk-ZWXZ5DBX.cjs} +3 -3
- package/lib/cloud-storage.cjs +1 -1
- package/lib/cloud-storage.js +1 -1
- package/lib/continuous-event-graph/index.cjs +1 -1
- package/lib/continuous-event-graph/index.js +1 -1
- package/lib/event-graph/index.cjs +1 -1
- package/lib/event-graph/index.js +1 -1
- package/lib/firestore-storage/index.cjs +1 -1
- package/lib/firestore-storage/index.js +1 -1
- package/lib/index.cjs +2 -2
- package/lib/index.js +1 -1
- package/lib/localstorage-storage/index.cjs +1 -1
- package/lib/localstorage-storage/index.js +1 -1
- package/lib/notification-consumer/index.cjs +1 -1
- package/lib/notification-consumer/index.js +1 -1
- package/lib/server-runtime/index.cjs +1 -1
- package/lib/server-runtime/index.js +1 -1
- package/lib/server-runtime-controlface/index.cjs +1 -1
- package/lib/server-runtime-controlface/index.js +1 -1
- package/lib/server-runtime-core/index.cjs +1 -1
- package/lib/server-runtime-core/index.js +1 -1
- package/package.json +6 -1
- package/lib/chunk-4BEQXKRF.js +0 -2
- package/lib/chunk-5EA2ESS4.cjs +0 -16
- package/lib/chunk-5VTIOM2U.js +0 -3
- package/lib/chunk-5XLFPPTY.cjs +0 -2
- package/lib/chunk-7QNEV5S3.js +0 -2
- package/lib/chunk-BAG7MHZP.cjs +0 -3
- package/lib/chunk-EZOXABJ2.js +0 -3
- package/lib/chunk-G4XXRHL2.cjs +0 -3
- package/lib/chunk-HVLWVMG6.cjs +0 -3
- package/lib/chunk-LODXIALE.cjs +0 -2
- package/lib/chunk-VGT3TRQG.js +0 -3
- package/lib/chunk-WDPOGXTY.js +0 -2
- package/lib/chunk-WHKT5HN4.js +0 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a as a$1}from'./chunk-FOFGEABN.js';import {a,c,d,e,b,f}from'./chunk-O7NOHKVR.js';import {b as b$1}from'./chunk-44L64VQ2.js';import {a as a$2}from'./chunk-6M3RIGUH.js';function M(a){if(!a||typeof a!="object")return false;let t=a;return typeof t.kind=="string"&&t.kind.length>0}function J(a){if(!a||typeof a!="object")return [];let t=a;return t.kind==="notification-batch"?Array.isArray(t.notifications)?t.notifications.filter(M):[]:M(a)?[a]:[]}function X(a,t,i){let c=0;return {accepted:a.filter(_=>{if(!M(_))return c++,false;let S=_;return typeof S.sentAtMs=="number"&&t-S.sentAtMs>i?(c++,false):true}),rejected:c}}function Q(){return {status:null,computedValues:{},dataObjects:{},cards:{}}}function z(a){if(!a||typeof a!="object")return false;let t=a.summary;return !t||typeof t!="object"?false:Number(t.card_count||0)>0}function W(a){if(!a||typeof a!="object")return false;let t=a;return t.kind==="notification-batch"&&Array.isArray(t.notifications)}function V(a,t){if(t.kind==="status"){z(t.status)&&(a.status=t.status);return}if(t.kind==="computed_values"){a.computedValues[t.cardId]=t.values;return}if(t.kind==="data_object"){a.dataObjects[t.key]=t.payload;return}if(t.kind==="card_refreshed"){a.cards[t.cardId]=t.card;return}t.kind==="card_removed"&&(delete a.cards[t.cardId],delete a.computedValues[t.cardId]);}function Y(a,t){if(W(t)){for(let i of t.notifications)M(i)&&V(a,i);return}M(t)&&V(a,t);}function j(a,t){if(a?.status==="success")return Object.prototype.hasOwnProperty.call(a,"data")?a.data:void 0;throw a?.status==="fail"||a?.status==="error"?Object.assign(new Error(a.error||`${t} failed`),{statusCode:400}):Object.assign(new Error(`${t} returned an unexpected response`),{statusCode:500})}async function N(a,t){return j(await a,t)}function T(a$1){let t=a(a$1,"key");if(!t)throw Object.assign(new Error("MCP tool requires key"),{statusCode:400});let i=t.split(".");if(!(i.length>=2&&i.every(g=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(g))))throw Object.assign(new Error("MCP tool requires a card private key with at least two identifier segments (e.g. chat.foundry_thread_id)"),{statusCode:400});return t}function q(a,t){let i=a.__private;for(let c of t.split(".")){if(!i||typeof i!="object"||Array.isArray(i)||!Object.prototype.hasOwnProperty.call(i,c))return {exists:false,value:null};i=i[c];}return {exists:true,value:i}}function ot(a$1){let{boardId:t,bootstrapBoard:i,sseHub:c,onChannelSubscribed:g,onChannelUnsubscribed:_,getMcpFacade:S,getMcpCardStoreFacade:n}=a$1;function f(s){let d=a(s,"board_id");if(!d)throw Object.assign(new Error("MCP tool requires board_id"),{statusCode:400});if(d!==t)throw Object.assign(new Error(`Unknown board_id: ${d}`),{statusCode:400})}function h(s){let d=a(s,"client_id");if(!d)throw Object.assign(new Error("MCP tool requires client_id"),{statusCode:400});return d}function w(s){f(s);let d=h(s),e=a(s,"channel_name"),r=a(s,"card_id")||void 0;if(!e)throw Object.assign(new Error("MCP tool requires channel_name"),{statusCode:400});return {clientId:d,channelName:e,...r?{cardId:r}:{}}}function R(s){f(s);let d=a(s,"card_id");if(!d)throw Object.assign(new Error("MCP tool requires card_id"),{statusCode:400});return {cardId:d}}async function I(s){await i();let{cardId:d}=R(s),e=h(s);if(!await c.subscribeChat(e,d))throw Object.assign(new Error(`SSE client not connected: ${e}`),{statusCode:404});return {status:"success",data:{boardId:t,cardId:d,clientId:e,subscribed:true}}}async function u(s){await i();let{cardId:d}=R(s),e=h(s);if(!c.unsubscribeChat(e,d))throw Object.assign(new Error(`SSE client not connected: ${e}`),{statusCode:404});return {status:"success",data:{boardId:t,cardId:d,clientId:e,subscribed:false}}}async function b(s,d){await i();let{clientId:e,channelName:r,cardId:o}=w(s);if(!c.has(e))throw Object.assign(new Error(`SSE client not connected: ${e}`),{statusCode:404});return d?(c.subscribeChannel(e,r,o),g?.(e,r,o?{cardId:o}:{})):(c.unsubscribeChannel(e,r,o),_?.(e,r,o?{cardId:o}:{})),{status:"success",data:{boardId:t,clientId:e,channelName:r,subscribed:d,...o?{cardId:o}:{}}}}async function m(s,d){let{cardId:e}=R(s);return await S().setChatProcessing({cardId:e,active:d}),{status:"success",data:{boardId:t,cardId:e,active:d}}}async function p(s){let{cardId:d}=R(s),e=await S().getChatProcessing({cardId:d});return {status:"success",data:{boardId:t,cardId:d,active:e.active}}}async function y(s){let{cardId:d}=R(s),e=T(s);if(!Object.prototype.hasOwnProperty.call(s,"value"))throw Object.assign(new Error("MCP tool requires value"),{statusCode:400});if(e.split(".").includes("visible_controlplane_only")){let r=await N(n().get({params:{id:d}}),"cardStore.get"),o=Array.isArray(r.cards)&&r.cards.length>0&&typeof r.cards[0]=="object"&&!Array.isArray(r.cards[0])?r.cards[0]:null,k=o?q(o,"visible_controlplane_only").value:void 0;if(s.value!==k)throw Object.assign(new Error("MCP tool cannot change the reserved private flag visible_controlplane_only"),{statusCode:403});return {status:"success",data:{boardId:t,cardId:d,key:e}}}return j(await n().patch({params:{id:d,path:`__private.${e}`},body:{value:s.value}}),"cardStore.patch"),{status:"success",data:{boardId:t,cardId:d,key:e}}}async function C(s){let{cardId:d}=R(s),e=T(s),r=await N(n().get({params:{id:d}}),"cardStore.get"),o=Array.isArray(r.cards)&&r.cards.length>0&&r.cards[0]&&typeof r.cards[0]=="object"&&!Array.isArray(r.cards[0])?r.cards[0]:null;if(!o)throw Object.assign(new Error(`Card "${d}" not found`),{statusCode:404});let k=q(o,e);return {status:"success",data:{boardId:t,cardId:d,key:e,exists:k.exists,value:k.value}}}return {requireCardArgs:R,subscribeChat:I,unsubscribeChat:u,watchChannel:b,setChatProcessing:m,getChatProcessing:p,setCardMeta:y,getCardMeta:C}}function it(a){let{boardId:t,boardContexts:i,readChatRecords:c,getChatProcessing:g}=a,_=Number.isInteger(a.chatBootstrapTailTurns)&&a.chatBootstrapTailTurns>0?a.chatBootstrapTailTurns:1;function S(u){return {role:String(u.role||"system"),text:String(u.text||""),files:Array.isArray(u.files)?u.files:[],...typeof u.turn=="string"&&u.turn?{turn:u.turn}:{}}}function n(u){if(u.length===0)return null;if(u.length===1)return u[0];let b=[],m=["completed","eligible","pending","blocked","unresolved","failed","in_progress","orphan_cards"],p={};for(let C of m)p[C]=0;for(let C of u){let s=C,d=Array.isArray(s.cards)?s.cards:[];b.push(...d);for(let e of m)p[e]+=Number(s?.summary?.[e]||0);}let y=u[0];return {...y,cards:b,summary:{...y.summary||{},card_count:b.length,...p}}}async function f(){let u=[];for(let b of i)try{let m=await b.boardOps.buildSseOneShotPayload({});m.status==="success"&&m.data&&u.push(m.data);}catch{}return u}async function h(){let b=(await f()).map(m=>m.statusSnapshot).filter(Boolean);if(b.length===0){let m=i.map(p=>p.notification.status).filter(Boolean);return n(m)}return n(b)}async function w(){let u={},b=await f();for(let m of b)Object.assign(u,m.cardRuntimeById||{});if(Object.keys(u).length>0)return u;for(let m of i)for(let[p,y]of Object.entries(m.notification.computedValues)){let C=m.notification.cards[p];u[p]={schema_version:"v1",card_id:p,card_data:C?.card_data??{},computed_values:y??{}};}return u}async function R(){let u={},b=await f();for(let m of b)Object.assign(u,m.dataObjectsByToken||{});if(Object.keys(u).length===0)for(let m of i)Object.assign(u,m.notification.dataObjects||{});return u}async function I(){let u=await f(),b=u.flatMap(C=>Array.isArray(C.cardDefinitions)?C.cardDefinitions:[]),m={},p={};for(let C of u)Object.assign(m,C.dataObjectsByToken||{}),Object.assign(p,C.cardRuntimeById||{});let y={};for(let C of b){if(!C?.id)continue;let s=C.id;try{let d=await c(s,{tailTurns:_}),e=await g(s);(d.length>0||e)&&(y[s]={messages:d.map(r=>S(r)),receiving:!1,processing:e});}catch{}}return {boardId:t,cardDefinitions:b,statusSnapshot:await h(),dataObjectsByToken:m,cardRuntimeById:p,cardChatsByCardId:y}}return {readStatusSnapshot:h,readCardRuntimeArtifacts:w,readDataObjectsByToken:R,buildPublishedRuntimePayload:I}}function K(a){let t=String(a||"").trim();if(!t)return "upload.bin";let i=Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\"));return (i>=0?t.slice(i+1):t)||"upload.bin"}function ct(a){let{safeCardId:t,artifactsStores:i,cardFileMetadataStore:c,readCardFromStore:g,updateCardLocalOnly:_,writeChatRecord:S}=a;async function n(w){let R=[];try{let I=await g(w);if(!I)return R;let u=c().read(I.card_data&&typeof I.card_data=="object"?I.card_data:null);for(let b of u)R.push(String(b.stored_name??""));}catch{}return R}async function f(w,R,I,u){let b=t(w),m=i(w),p=K(R),y=await n(w),s=`${String(y.length+1).padStart(3,"0")}-${p}`.slice(-36);if(!m.files)throw Object.assign(new Error(`artifactsStoreRef is not configured for card uploads: ${w}`),{statusCode:500});return await m.files.putBytes(`${b}/${s}`,new Uint8Array(u),I||"application/octet-stream"),{name:p,stored_name:s,size:u.length,mime_type:I||"application/octet-stream",uploaded_at:new Date().toISOString()}}async function h(w,R,I,u,b){if(!u.length)throw Object.assign(new Error("Empty upload body"),{statusCode:400});let m=b?.inChat===true,p=await f(w,R,I,u),y=null;if(await _(w,C=>{let s=new Date().toISOString(),d=C.card_data&&typeof C.card_data=="object"?C.card_data:{};C.card_data=d;let e=c().normalizeIncoming([{name:p.name,stored_name:p.stored_name,size:p.size,mime_type:p.mime_type,uploaded_at:p.uploaded_at||s,chat:m}],s);return y=c().merge(d,e).findIndex(o=>o.stored_name===p.stored_name),C}),m&&b?.suppressChatRecordWrite!==true){let C=typeof y=="number"&&y>=0?` #${y}`:"";await S(w,"system",`file uploaded: ${p.name} as ${p.stored_name}${C}`,[],b?.turnId??"");}return {ok:true,file:{...p,...typeof y=="number"&&y>=0?{file_idx:y}:{},chat:m},...typeof y=="number"&&y>=0?{file_idx:y}:{}}}return {uploadCardFile:h,readCardStoredFileNames:n}}function pt(a$1){return {"discover.source-kinds":()=>a$1.discoverSourceKinds(),"inspect.board-runtime-status":()=>a$1.inspectBoardRuntimeStatus(),"inspect.card-definition-and-runtime":t=>a$1.inspectCardDefinitionAndRuntime({cardId:a(t,"card_id")}),"inspect.chat-messages-on-cards":t=>{let i=b(t,"tail_turns"),c=b(t,"tail"),g=a(t,"turn_id"),_=t.all_turns===true,S=a(t,"tail_turns_before_id");return a$1.inspectChatMessagesOnCards({cardId:a(t,"card_id"),...i!==void 0?{lastUserTurns:i}:{},...c!==void 0?{tail:c}:{},...g?{turnId:g}:{},..._?{allTurns:true}:{},...S?{tailTurnsBeforeId:S}:{}})},"inspect.file-contents":t=>a$1.inspectFileContents({cardId:a(t,"card_id"),fileIdx:Number(b(t,"file_idx"))}),"preflight.validate-candidate-card-definition":t=>a$1.preflightValidateCandidateCardDefinition({candidateCardContent:d(t,"candidate_card_content","candidate_card_content")}),"preflight.materialize-candidate-card":t=>a$1.preflightMaterializeCandidateCard({candidateCardContent:d(t,"candidate_card_content","candidate_card_content"),mockRequires:d(t,"mock_requires","mock_requires"),mockFetchedSources:d(t,"mock_fetched_sources","mock_fetched_sources")}),"preflight.probe-single-source-in-candidate-card":t=>a$1.preflightProbeSingleSourceInCandidateCard({candidateCardContent:d(t,"candidate_card_content","candidate_card_content"),mockProjections:c(t,"mock_projections"),sourceIdx:e(t,"source_idx","source_idx")}),"preflight.run-single-source-in-candidate-card":t=>a$1.preflightRunSingleSourceInCandidateCard({candidateCardContent:d(t,"candidate_card_content","candidate_card_content"),mockProjections:c(t,"mock_projections"),sourceIdx:e(t,"source_idx","source_idx")}),"preflight.run-single-source-in-live-card":t=>a$1.preflightRunSingleSourceInLiveCard({cardId:a(t,"card_id"),sourceIdx:e(t,"source_idx","source_idx"),mockRequires:d(t,"mock_requires","mock_requires")}),"preflight.run-one-cycle-with-candidate-card":t=>a$1.preflightRunOneCycleWithCandidateCard({candidateCardContent:d(t,"candidate_card_content","candidate_card_content"),mockRequires:c(t,"mock_requires")}),"manage.read-card":t=>a$1.manageReadCard({cardId:a(t,"card_id")}),"stage-ai-response-and-any-attachments":t=>{let i=a(t,"turn_id");if(!i)throw Object.assign(new Error("stage-ai-response-and-any-attachments requires a non-empty turn_id"),{statusCode:400});return a$1.manageAddChatEntryAndAnyAttachments({cardId:a(t,"card_id"),role:"assistant",...typeof t.text=="string"?{text:t.text}:{},...i?{turn:i}:{},...Array.isArray(t.files)?{files:t.files}:{}})},"stage-ai-failure-message":t=>{let i=a(t,"turn_id"),c=a(t,"failure");if(!i)throw Object.assign(new Error("stage-ai-failure-message requires a non-empty turn_id"),{statusCode:400});if(!c)throw Object.assign(new Error("stage-ai-failure-message requires a non-empty failure"),{statusCode:400});return a$1.manageAddChatEntryAndAnyAttachments({cardId:a(t,"card_id"),role:"system",text:c,turn:i})},"manage.upsert-card":t=>a$1.manageUpsertCard({cardId:a(t,"card_id"),candidateCardContent:c(t,"candidate_card_content")}),"manage.remove-card":t=>a$1.manageRemoveCard({cardId:a(t,"card_id")})}}function mt(a$1){return {"webhook.process-accumulated":()=>a$1.webhookProcessAccumulated(),"webhook.source-fetch-done":t=>a$1.webhookSourceFetchDone({token:a(t,"token"),ref:a(t,"ref")}),"webhook.source-fetch-failed":t=>a$1.webhookSourceFetchFailed({token:a(t,"token"),reason:a(t,"reason")})}}function ft(a$1){let{boardId:t,uploadCardFile:i,getMcpFacade:c$1,controlplane:g}=a$1;function _(n,f){let h=a(n,"board_id");if(!h)throw Object.assign(new Error(`${f} requires board_id`),{statusCode:400});if(h!==t)throw Object.assign(new Error(`Unknown board_id: ${h}`),{statusCode:400})}function S(n,f){let{cardId:h}=g.requireCardArgs(n),w=a(n,"turn_id");return _(n,f),c$1().manageAddChatAttachment({cardId:h,role:a(n,"role")||"user",...w?{turn:w}:{},files:[{file_name:a(n,"file_name"),content_type:a(n,"content_type")||"application/octet-stream",...typeof n.text=="string"?{text:n.text}:{},...typeof n.base64=="string"?{base64:n.base64}:{},...Array.isArray(n.bytes)?{bytes:n.bytes}:{}}]})}return {"list-runtime-cards":n=>(_(n,"list-runtime-cards"),c$1().listRuntimeCards()),"sse.subscribe-chat":n=>g.subscribeChat(n),"sse.unsubscribe-chat":n=>g.unsubscribeChat(n),"sse.watch-channel":n=>g.watchChannel(n,true),"sse.unwatch-channel":n=>g.watchChannel(n,false),"getstate.is-chat-processing":n=>g.getChatProcessing(n),"setstate.chat-processing-started":n=>g.setChatProcessing(n,true),"setstate.chat-processing-done":n=>g.setChatProcessing(n,false),"getstate.card-private":n=>g.getCardMeta(n),"setstate.card-private":n=>g.setCardMeta(n),"manage.upload-card-file":n=>{let f$1=a(n,"card_id"),h=a(n,"file_name"),w=a(n,"content_type")||"application/octet-stream",R=f(n);if(_(n,"manage.upload-card-file"),!f$1)throw Object.assign(new Error("manage.upload-card-file requires card_id"),{statusCode:400});if(!h)throw Object.assign(new Error("manage.upload-card-file requires file_name"),{statusCode:400});if(!R)throw Object.assign(new Error("manage.upload-card-file requires args.bytes, args.text, or args.base64"),{statusCode:400});return i(f$1,h,w,R,{inChat:false})},"manage.add-chat-attachment":n=>S(n,"manage.add-chat-attachment"),"manage.add-chat-attachement":n=>S(n,"manage.add-chat-attachement"),"manage.add-chat-entry-and-any-attachments":n=>{let{cardId:f}=g.requireCardArgs(n),h=a(n,"role")||"user",w=a(n,"turn_id");return _(n,"manage.add-chat-entry-and-any-attachments"),c$1().manageAddChatEntryAndAnyAttachments({cardId:f,role:h,...typeof n.text=="string"?{text:n.text}:{},...w?{turn:w}:{},...Array.isArray(n.files)?{files:n.files}:{}})},"manage.patch-card":n=>{let{cardId:f}=g.requireCardArgs(n);return _(n,"manage.patch-card"),c$1().managePatchCard({cardId:f,patch:c(n,"patch")},{allowControlplaneOnlyCards:true})},"manage.upsert-card":n=>{let{cardId:f}=g.requireCardArgs(n);return _(n,"manage.upsert-card"),c$1().manageUpsertCard({cardId:f,candidateCardContent:c(n,"candidate_card_content")},{allowControlplaneOnlyCards:true})},"manage.remove-card":n=>{let{cardId:f}=g.requireCardArgs(n);return _(n,"manage.remove-card"),c$1().manageRemoveCard({cardId:f},{allowControlplaneOnlyCards:true})},"manage.admin-read-card":async n=>{let{cardId:f}=g.requireCardArgs(n);return {status:"success",data:{cards:await c$1().adminReadCard({cardId:f})}}},"manage.admin-upsert-card":n=>{let f=a(n,"board_id"),h=a(n,"card_id");if(!f)throw Object.assign(new Error("manage.admin-upsert-card requires board_id"),{statusCode:400});if(!h)throw Object.assign(new Error("manage.admin-upsert-card requires card_id"),{statusCode:400});if(f!==t)throw Object.assign(new Error(`Unknown board_id: ${f}`),{statusCode:400});return c$1().adminUpsertCard({cardId:h,candidateCardContent:c(n,"candidate_card_content")})}}}function yt(a){let{boardContexts:t,cardOwnerIndex:i,cardContextForCard:c,readStatusSnapshot:g,readDataObjectsByToken:_,readCardRuntimeArtifacts:S,readCardFromStore:n,readCardDefinitions:f,processAccumulatedLaneInternal:h,reportSourceFetched:w,reportSourceFetchFailure:R,uploadCardFile:I,chatStorePublic:u,serverUrl:b,apiBasePath:m}=a;function p(){return t[0]??null}function y(){return {async status(){let e=await g();return e==null?{status:"fail",error:"Board status is unavailable"}:{status:"success",data:e}},async getOutputsDataObject(e){let r=e?.params?.key;return r?{status:"success",data:(await _())[r]}:{status:"fail",error:"getOutputsDataObject requires params.key"}},async getOutputsComputedValues(e){let r=e?.params?.key;return r?{status:"success",data:(await S())[r]?.computed_values}:{status:"fail",error:"getOutputsComputedValues requires params.key"}},async getOutputsFetchedSources(e){let r=e?.params?.key;if(!r)return {status:"fail",error:"getOutputsFetchedSources requires params.key"};let o=c(r)??p();return o?o.boardOps.getOutputsFetchedSources({params:{key:r}}):{status:"fail",error:"Board context is unavailable"}},async removeCard(e){let r=e?.params?.id;if(!r)return {status:"fail",error:"removeCard requires params.id"};let o=c(r)??p();return o?o.boardOps.removeCard({params:{id:r}}):{status:"fail",error:"Board context is unavailable"}},async upsertCard(e){let r=e?.params?.cardId;if(!r)return {status:"fail",error:"upsertCard requires params.cardId"};let o=c(r)??p();if(!o)return {status:"fail",error:"Board context is unavailable"};let k=await o.boardOps.upsertCard({params:{cardId:r,restart:e.params.restart===true}});if(k.status!=="success")return k;if(a$1(o.boardAdapter)){let P=await h(true);if(P.status!=="success")return P}return k}}}function C(){let e=()=>{let r=p();if(!r?.nonCore)throw new Error("Board non-core adapter is not configured for MCP preflight/discovery tools");return r.nonCore};return {describeTaskExecutorCapabilities(r){return e().describeTaskExecutorCapabilities(r)},validateCardPreflight(r){return e().validateCardPreflight(r)},evalCardCompute(r){return e().evalCardCompute(r)},probeSourcePreflight(r){return e().probeSourcePreflight(r)},runSourcePreflight(r){return e().runSourcePreflight(r)},simulateCardCycle(r){return e().simulateCardCycle(r)}}}function s(){return {async get(e){let r=typeof e.params?.id=="string"?e.params.id:void 0;if(r){let o=await n(r);return o?{status:"success",data:{cards:[o]}}:{status:"success",data:{cards:[]}}}return {status:"success",data:{cards:await f()}}},async set(e){let r=e.body;if(r==null)return {status:"fail",error:"set requires a body (card object or array of cards)"};let o=Array.isArray(r)?r:[r];for(let k of o){let P=k,A=typeof P.id=="string"?P.id:"";if(!A)return {status:"fail",error:"each card must have a string `id` field"};let E=i.get(A)??0,D=t[E]??p();if(!D)return {status:"fail",error:"Board context is unavailable"};let L=await D.cardStoreOps.set({body:P});if(L.status!=="success")return L;i.set(A,E);}return {status:"success",data:{count:o.length}}},async del(e){let r=[e.params?.id,...e.body?.ids??[]].filter(o=>typeof o=="string"&&!!o);if(r.length===0)return {status:"fail",error:"del requires body.ids (string[]) or params.id"};for(let o of r){let k=c(o)??p();if(!k)return {status:"fail",error:"Board context is unavailable"};let P=await k.cardStoreOps.del({params:{id:o}});if(P.status!=="success")return P;i.delete(o);}return {status:"success",data:{count:r.length}}},async patch(e){let r=typeof e.params?.id=="string"?e.params.id:void 0,o=typeof e.params?.path=="string"?e.params.path:void 0;if(!r||!o)return {status:"fail",error:"patch requires params.id and params.path"};let k=c(r)??p();return k?k.cardStoreOps.patch(e):{status:"fail",error:"Board context is unavailable"}},async appendFiles(e){let r=typeof e.params?.id=="string"?e.params.id:void 0;if(!r)return {status:"fail",error:"appendFiles requires params.id"};let o=c(r)??p();return o?o.cardStoreOps.appendFiles(e):{status:"fail",error:"Board context is unavailable"}}}}function d(){return a$2({board:y(),nonCore:C(),cardStore:s(),chatStore:u,processAccumulated:()=>h(true),sourceFetchDone:({token:e,ref:r})=>w(e,r),sourceFetchFailed:({token:e,reason:r})=>R(e,r),uploadCardFile({cardId:e,fileName:r,contentType:o,bytes:k,suppressChatRecordWrite:P}){return I(e,r,o,k,{inChat:true,...P===true?{suppressChatRecordWrite:true}:{}})},buildFileDownloadUrl({cardId:e,fileIdx:r,storedName:o}){let k=`${b||""}${m}/cards/${encodeURIComponent(e)}/files/${r}`;return o?`${k}?sn=${encodeURIComponent(o)}`:k},readFetchedSourceJsonByRef({cardId:e,ref:r}){let o=c(e)??p();if(!o||a$1(o.boardAdapter))return null;let A=o.boardAdapter.resolveBlob(b$1(r)).trim();return A?JSON.parse(A):null}})}return {mcpBoardFacade:y,mcpNonCoreFacade:C,mcpCardStoreFacade:s,createMcpFacade:d}}export{J as a,X as b,Q as c,z as d,Y as e,j as f,N as g,T as h,q as i,ot as j,it as k,ct as l,pt as m,mt as n,ft as o,yt as p};//# sourceMappingURL=chunk-37JSBRZO.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a as a$1}from'./chunk-FOFGEABN.js';import {a,c,d,e,b,f}from'./chunk-O7NOHKVR.js';import {a as a$2}from'./chunk-6M3RIGUH.js';import {b as b$1}from'./chunk-44L64VQ2.js';function M(a){if(!a||typeof a!="object")return false;let t=a;return typeof t.kind=="string"&&t.kind.length>0}function J(a){if(!a||typeof a!="object")return [];let t=a;return t.kind==="notification-batch"?Array.isArray(t.notifications)?t.notifications.filter(M):[]:M(a)?[a]:[]}function X(a,t,i){let c=0;return {accepted:a.filter(_=>{if(!M(_))return c++,false;let S=_;return typeof S.sentAtMs=="number"&&t-S.sentAtMs>i?(c++,false):true}),rejected:c}}function Q(){return {status:null,computedValues:{},dataObjects:{},cards:{}}}function z(a){if(!a||typeof a!="object")return false;let t=a.summary;return !t||typeof t!="object"?false:Number(t.card_count||0)>0}function W(a){if(!a||typeof a!="object")return false;let t=a;return t.kind==="notification-batch"&&Array.isArray(t.notifications)}function V(a,t){if(t.kind==="status"){z(t.status)&&(a.status=t.status);return}if(t.kind==="computed_values"){a.computedValues[t.cardId]=t.values;return}if(t.kind==="data_object"){a.dataObjects[t.key]=t.payload;return}if(t.kind==="card_refreshed"){a.cards[t.cardId]=t.card;return}t.kind==="card_removed"&&(delete a.cards[t.cardId],delete a.computedValues[t.cardId]);}function Y(a,t){if(W(t)){for(let i of t.notifications)M(i)&&V(a,i);return}M(t)&&V(a,t);}function j(a,t){if(a?.status==="success")return Object.prototype.hasOwnProperty.call(a,"data")?a.data:void 0;throw a?.status==="fail"||a?.status==="error"?Object.assign(new Error(a.error||`${t} failed`),{statusCode:400}):Object.assign(new Error(`${t} returned an unexpected response`),{statusCode:500})}async function N(a,t){return j(await a,t)}function T(a$1){let t=a(a$1,"key");if(!t)throw Object.assign(new Error("MCP tool requires key"),{statusCode:400});let i=t.split(".");if(!(i.length>=2&&i.every(g=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(g))))throw Object.assign(new Error("MCP tool requires a card private key with at least two identifier segments (e.g. chat.foundry_thread_id)"),{statusCode:400});return t}function q(a,t){let i=a.__private;for(let c of t.split(".")){if(!i||typeof i!="object"||Array.isArray(i)||!Object.prototype.hasOwnProperty.call(i,c))return {exists:false,value:null};i=i[c];}return {exists:true,value:i}}function ot(a$1){let{boardId:t,bootstrapBoard:i,sseHub:c,onChannelSubscribed:g,onChannelUnsubscribed:_,getMcpFacade:S,getMcpCardStoreFacade:n}=a$1;function f(s){let d=a(s,"board_id");if(!d)throw Object.assign(new Error("MCP tool requires board_id"),{statusCode:400});if(d!==t)throw Object.assign(new Error(`Unknown board_id: ${d}`),{statusCode:400})}function h(s){let d=a(s,"client_id");if(!d)throw Object.assign(new Error("MCP tool requires client_id"),{statusCode:400});return d}function w(s){f(s);let d=h(s),e=a(s,"channel_name"),r=a(s,"card_id")||void 0;if(!e)throw Object.assign(new Error("MCP tool requires channel_name"),{statusCode:400});return {clientId:d,channelName:e,...r?{cardId:r}:{}}}function R(s){f(s);let d=a(s,"card_id");if(!d)throw Object.assign(new Error("MCP tool requires card_id"),{statusCode:400});return {cardId:d}}async function I(s){await i();let{cardId:d}=R(s),e=h(s);if(!await c.subscribeChat(e,d))throw Object.assign(new Error(`SSE client not connected: ${e}`),{statusCode:404});return {status:"success",data:{boardId:t,cardId:d,clientId:e,subscribed:true}}}async function u(s){await i();let{cardId:d}=R(s),e=h(s);if(!c.unsubscribeChat(e,d))throw Object.assign(new Error(`SSE client not connected: ${e}`),{statusCode:404});return {status:"success",data:{boardId:t,cardId:d,clientId:e,subscribed:false}}}async function b(s,d){await i();let{clientId:e,channelName:r,cardId:o}=w(s);if(!c.has(e))throw Object.assign(new Error(`SSE client not connected: ${e}`),{statusCode:404});return d?(c.subscribeChannel(e,r,o),g?.(e,r,o?{cardId:o}:{})):(c.unsubscribeChannel(e,r,o),_?.(e,r,o?{cardId:o}:{})),{status:"success",data:{boardId:t,clientId:e,channelName:r,subscribed:d,...o?{cardId:o}:{}}}}async function m(s,d){let{cardId:e}=R(s);return await S().setChatProcessing({cardId:e,active:d}),{status:"success",data:{boardId:t,cardId:e,active:d}}}async function p(s){let{cardId:d}=R(s),e=await S().getChatProcessing({cardId:d});return {status:"success",data:{boardId:t,cardId:d,active:e.active}}}async function y(s){let{cardId:d}=R(s),e=T(s);if(!Object.prototype.hasOwnProperty.call(s,"value"))throw Object.assign(new Error("MCP tool requires value"),{statusCode:400});if(e.split(".").includes("visible_controlplane_only")){let r=await N(n().get({params:{id:d}}),"cardStore.get"),o=Array.isArray(r.cards)&&r.cards.length>0&&typeof r.cards[0]=="object"&&!Array.isArray(r.cards[0])?r.cards[0]:null,k=o?q(o,"visible_controlplane_only").value:void 0;if(s.value!==k)throw Object.assign(new Error("MCP tool cannot change the reserved private flag visible_controlplane_only"),{statusCode:403});return {status:"success",data:{boardId:t,cardId:d,key:e}}}return j(await n().patch({params:{id:d,path:`__private.${e}`},body:{value:s.value}}),"cardStore.patch"),{status:"success",data:{boardId:t,cardId:d,key:e}}}async function C(s){let{cardId:d}=R(s),e=T(s),r=await N(n().get({params:{id:d}}),"cardStore.get"),o=Array.isArray(r.cards)&&r.cards.length>0&&r.cards[0]&&typeof r.cards[0]=="object"&&!Array.isArray(r.cards[0])?r.cards[0]:null;if(!o)throw Object.assign(new Error(`Card "${d}" not found`),{statusCode:404});let k=q(o,e);return {status:"success",data:{boardId:t,cardId:d,key:e,exists:k.exists,value:k.value}}}return {requireCardArgs:R,subscribeChat:I,unsubscribeChat:u,watchChannel:b,setChatProcessing:m,getChatProcessing:p,setCardMeta:y,getCardMeta:C}}function it(a){let{boardId:t,boardContexts:i,readChatRecords:c,getChatProcessing:g}=a,_=Number.isInteger(a.chatBootstrapTailTurns)&&a.chatBootstrapTailTurns>0?a.chatBootstrapTailTurns:1;function S(u){return {role:String(u.role||"system"),text:String(u.text||""),files:Array.isArray(u.files)?u.files:[],...typeof u.turn=="string"&&u.turn?{turn:u.turn}:{}}}function n(u){if(u.length===0)return null;if(u.length===1)return u[0];let b=[],m=["completed","eligible","pending","blocked","unresolved","failed","in_progress","orphan_cards"],p={};for(let C of m)p[C]=0;for(let C of u){let s=C,d=Array.isArray(s.cards)?s.cards:[];b.push(...d);for(let e of m)p[e]+=Number(s?.summary?.[e]||0);}let y=u[0];return {...y,cards:b,summary:{...y.summary||{},card_count:b.length,...p}}}async function f(){let u=[];for(let b of i)try{let m=await b.boardOps.buildSseOneShotPayload({});m.status==="success"&&m.data&&u.push(m.data);}catch{}return u}async function h(){let b=(await f()).map(m=>m.statusSnapshot).filter(Boolean);if(b.length===0){let m=i.map(p=>p.notification.status).filter(Boolean);return n(m)}return n(b)}async function w(){let u={},b=await f();for(let m of b)Object.assign(u,m.cardRuntimeById||{});if(Object.keys(u).length>0)return u;for(let m of i)for(let[p,y]of Object.entries(m.notification.computedValues)){let C=m.notification.cards[p];u[p]={schema_version:"v1",card_id:p,card_data:C?.card_data??{},computed_values:y??{}};}return u}async function R(){let u={},b=await f();for(let m of b)Object.assign(u,m.dataObjectsByToken||{});if(Object.keys(u).length===0)for(let m of i)Object.assign(u,m.notification.dataObjects||{});return u}async function I(){let u=await f(),b=u.flatMap(C=>Array.isArray(C.cardDefinitions)?C.cardDefinitions:[]),m={},p={};for(let C of u)Object.assign(m,C.dataObjectsByToken||{}),Object.assign(p,C.cardRuntimeById||{});let y={};for(let C of b){if(!C?.id)continue;let s=C.id;try{let d=await c(s,{tailTurns:_}),e=await g(s);(d.length>0||e)&&(y[s]={messages:d.map(r=>S(r)),receiving:!1,processing:e});}catch{}}return {boardId:t,cardDefinitions:b,statusSnapshot:await h(),dataObjectsByToken:m,cardRuntimeById:p,cardChatsByCardId:y}}return {readStatusSnapshot:h,readCardRuntimeArtifacts:w,readDataObjectsByToken:R,buildPublishedRuntimePayload:I}}function K(a){let t=String(a||"").trim();if(!t)return "upload.bin";let i=Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\"));return (i>=0?t.slice(i+1):t)||"upload.bin"}function ct(a){let{safeCardId:t,artifactsStores:i,cardFileMetadataStore:c,readCardFromStore:g,updateCardLocalOnly:_,writeChatRecord:S}=a;async function n(w){let R=[];try{let I=await g(w);if(!I)return R;let u=c().read(I.card_data&&typeof I.card_data=="object"?I.card_data:null);for(let b of u)R.push(String(b.stored_name??""));}catch{}return R}async function f(w,R,I,u){let b=t(w),m=i(w),p=K(R),y=await n(w),s=`${String(y.length+1).padStart(3,"0")}-${p}`.slice(-36);if(!m.files)throw Object.assign(new Error(`artifactsStoreRef is not configured for card uploads: ${w}`),{statusCode:500});return await m.files.putBytes(`${b}/${s}`,new Uint8Array(u),I||"application/octet-stream"),{name:p,stored_name:s,size:u.length,mime_type:I||"application/octet-stream",uploaded_at:new Date().toISOString()}}async function h(w,R,I,u,b){if(!u.length)throw Object.assign(new Error("Empty upload body"),{statusCode:400});let m=b?.inChat===true,p=await f(w,R,I,u),y=null;if(await _(w,C=>{let s=new Date().toISOString(),d=C.card_data&&typeof C.card_data=="object"?C.card_data:{};C.card_data=d;let e=c().normalizeIncoming([{name:p.name,stored_name:p.stored_name,size:p.size,mime_type:p.mime_type,uploaded_at:p.uploaded_at||s,chat:m}],s);return y=c().merge(d,e).findIndex(o=>o.stored_name===p.stored_name),C}),m&&b?.suppressChatRecordWrite!==true){let C=typeof y=="number"&&y>=0?` #${y}`:"";await S(w,"system",`file uploaded: ${p.name} as ${p.stored_name}${C}`,[],b?.turnId??"");}return {ok:true,file:{...p,...typeof y=="number"&&y>=0?{file_idx:y}:{},chat:m},...typeof y=="number"&&y>=0?{file_idx:y}:{}}}return {uploadCardFile:h,readCardStoredFileNames:n}}function pt(a$1){return {"discover.source-kinds":()=>a$1.discoverSourceKinds(),"inspect.board-runtime-status":()=>a$1.inspectBoardRuntimeStatus(),"inspect.card-definition-and-runtime":t=>a$1.inspectCardDefinitionAndRuntime({cardId:a(t,"card_id")}),"inspect.chat-messages-on-cards":t=>{let i=b(t,"tail_turns"),c=b(t,"tail"),g=a(t,"turn_id"),_=t.all_turns===true,S=a(t,"tail_turns_before_id");return a$1.inspectChatMessagesOnCards({cardId:a(t,"card_id"),...i!==void 0?{lastUserTurns:i}:{},...c!==void 0?{tail:c}:{},...g?{turnId:g}:{},..._?{allTurns:true}:{},...S?{tailTurnsBeforeId:S}:{}})},"inspect.file-contents":t=>a$1.inspectFileContents({cardId:a(t,"card_id"),fileIdx:Number(b(t,"file_idx"))}),"preflight.validate-candidate-card-definition":t=>a$1.preflightValidateCandidateCardDefinition({candidateCardContent:d(t,"candidate_card_content","candidate_card_content")}),"preflight.materialize-candidate-card":t=>a$1.preflightMaterializeCandidateCard({candidateCardContent:d(t,"candidate_card_content","candidate_card_content"),mockRequires:d(t,"mock_requires","mock_requires"),mockFetchedSources:d(t,"mock_fetched_sources","mock_fetched_sources")}),"preflight.probe-single-source-in-candidate-card":t=>a$1.preflightProbeSingleSourceInCandidateCard({candidateCardContent:d(t,"candidate_card_content","candidate_card_content"),mockProjections:c(t,"mock_projections"),sourceIdx:e(t,"source_idx","source_idx")}),"preflight.run-single-source-in-candidate-card":t=>a$1.preflightRunSingleSourceInCandidateCard({candidateCardContent:d(t,"candidate_card_content","candidate_card_content"),mockProjections:c(t,"mock_projections"),sourceIdx:e(t,"source_idx","source_idx")}),"preflight.run-single-source-in-live-card":t=>a$1.preflightRunSingleSourceInLiveCard({cardId:a(t,"card_id"),sourceIdx:e(t,"source_idx","source_idx"),mockRequires:d(t,"mock_requires","mock_requires")}),"preflight.run-one-cycle-with-candidate-card":t=>a$1.preflightRunOneCycleWithCandidateCard({candidateCardContent:d(t,"candidate_card_content","candidate_card_content"),mockRequires:c(t,"mock_requires")}),"manage.read-card":t=>a$1.manageReadCard({cardId:a(t,"card_id")}),"stage-ai-response-and-any-attachments":t=>{let i=a(t,"turn_id");if(!i)throw Object.assign(new Error("stage-ai-response-and-any-attachments requires a non-empty turn_id"),{statusCode:400});return a$1.manageAddChatEntryAndAnyAttachments({cardId:a(t,"card_id"),role:"assistant",...typeof t.text=="string"?{text:t.text}:{},...i?{turn:i}:{},...Array.isArray(t.files)?{files:t.files}:{}})},"stage-ai-failure-message":t=>{let i=a(t,"turn_id"),c=a(t,"failure");if(!i)throw Object.assign(new Error("stage-ai-failure-message requires a non-empty turn_id"),{statusCode:400});if(!c)throw Object.assign(new Error("stage-ai-failure-message requires a non-empty failure"),{statusCode:400});return a$1.manageAddChatEntryAndAnyAttachments({cardId:a(t,"card_id"),role:"system",text:c,turn:i})},"manage.upsert-card":t=>a$1.manageUpsertCard({cardId:a(t,"card_id"),candidateCardContent:c(t,"candidate_card_content")}),"manage.remove-card":t=>a$1.manageRemoveCard({cardId:a(t,"card_id")})}}function mt(a$1){return {"webhook.process-accumulated":()=>a$1.webhookProcessAccumulated(),"webhook.source-fetch-done":t=>a$1.webhookSourceFetchDone({token:a(t,"token"),ref:a(t,"ref")}),"webhook.source-fetch-failed":t=>a$1.webhookSourceFetchFailed({token:a(t,"token"),reason:a(t,"reason")})}}function ft(a$1){let{boardId:t,uploadCardFile:i,getMcpFacade:c$1,controlplane:g}=a$1;function _(n,f){let h=a(n,"board_id");if(!h)throw Object.assign(new Error(`${f} requires board_id`),{statusCode:400});if(h!==t)throw Object.assign(new Error(`Unknown board_id: ${h}`),{statusCode:400})}function S(n,f){let{cardId:h}=g.requireCardArgs(n),w=a(n,"turn_id");return _(n,f),c$1().manageAddChatAttachment({cardId:h,role:a(n,"role")||"user",...w?{turn:w}:{},files:[{file_name:a(n,"file_name"),content_type:a(n,"content_type")||"application/octet-stream",...typeof n.text=="string"?{text:n.text}:{},...typeof n.base64=="string"?{base64:n.base64}:{},...Array.isArray(n.bytes)?{bytes:n.bytes}:{}}]})}return {"list-runtime-cards":n=>(_(n,"list-runtime-cards"),c$1().listRuntimeCards()),"sse.subscribe-chat":n=>g.subscribeChat(n),"sse.unsubscribe-chat":n=>g.unsubscribeChat(n),"sse.watch-channel":n=>g.watchChannel(n,true),"sse.unwatch-channel":n=>g.watchChannel(n,false),"getstate.is-chat-processing":n=>g.getChatProcessing(n),"setstate.chat-processing-started":n=>g.setChatProcessing(n,true),"setstate.chat-processing-done":n=>g.setChatProcessing(n,false),"getstate.card-private":n=>g.getCardMeta(n),"setstate.card-private":n=>g.setCardMeta(n),"manage.upload-card-file":n=>{let f$1=a(n,"card_id"),h=a(n,"file_name"),w=a(n,"content_type")||"application/octet-stream",R=f(n);if(_(n,"manage.upload-card-file"),!f$1)throw Object.assign(new Error("manage.upload-card-file requires card_id"),{statusCode:400});if(!h)throw Object.assign(new Error("manage.upload-card-file requires file_name"),{statusCode:400});if(!R)throw Object.assign(new Error("manage.upload-card-file requires args.bytes, args.text, or args.base64"),{statusCode:400});return i(f$1,h,w,R,{inChat:false})},"manage.add-chat-attachment":n=>S(n,"manage.add-chat-attachment"),"manage.add-chat-attachement":n=>S(n,"manage.add-chat-attachement"),"manage.add-chat-entry-and-any-attachments":n=>{let{cardId:f}=g.requireCardArgs(n),h=a(n,"role")||"user",w=a(n,"turn_id");return _(n,"manage.add-chat-entry-and-any-attachments"),c$1().manageAddChatEntryAndAnyAttachments({cardId:f,role:h,...typeof n.text=="string"?{text:n.text}:{},...w?{turn:w}:{},...Array.isArray(n.files)?{files:n.files}:{}})},"manage.patch-card":n=>{let{cardId:f}=g.requireCardArgs(n);return _(n,"manage.patch-card"),c$1().managePatchCard({cardId:f,patch:c(n,"patch")},{allowControlplaneOnlyCards:true})},"manage.upsert-card":n=>{let{cardId:f}=g.requireCardArgs(n);return _(n,"manage.upsert-card"),c$1().manageUpsertCard({cardId:f,candidateCardContent:c(n,"candidate_card_content")},{allowControlplaneOnlyCards:true})},"manage.remove-card":n=>{let{cardId:f}=g.requireCardArgs(n);return _(n,"manage.remove-card"),c$1().manageRemoveCard({cardId:f},{allowControlplaneOnlyCards:true})},"manage.admin-read-card":async n=>{let{cardId:f}=g.requireCardArgs(n);return {status:"success",data:{cards:await c$1().adminReadCard({cardId:f})}}},"manage.admin-upsert-card":n=>{let f=a(n,"board_id"),h=a(n,"card_id");if(!f)throw Object.assign(new Error("manage.admin-upsert-card requires board_id"),{statusCode:400});if(!h)throw Object.assign(new Error("manage.admin-upsert-card requires card_id"),{statusCode:400});if(f!==t)throw Object.assign(new Error(`Unknown board_id: ${f}`),{statusCode:400});return c$1().adminUpsertCard({cardId:h,candidateCardContent:c(n,"candidate_card_content")})}}}function yt(a){let{boardContexts:t,cardOwnerIndex:i,cardContextForCard:c,readStatusSnapshot:g,readDataObjectsByToken:_,readCardRuntimeArtifacts:S,readCardFromStore:n,readCardDefinitions:f,processAccumulatedLaneInternal:h,reportSourceFetched:w,reportSourceFetchFailure:R,uploadCardFile:I,chatStorePublic:u,serverUrl:b,apiBasePath:m}=a;function p(){return t[0]??null}function y(){return {async status(){let e=await g();return e==null?{status:"fail",error:"Board status is unavailable"}:{status:"success",data:e}},async getOutputsDataObject(e){let r=e?.params?.key;return r?{status:"success",data:(await _())[r]}:{status:"fail",error:"getOutputsDataObject requires params.key"}},async getOutputsComputedValues(e){let r=e?.params?.key;return r?{status:"success",data:(await S())[r]?.computed_values}:{status:"fail",error:"getOutputsComputedValues requires params.key"}},async getOutputsFetchedSources(e){let r=e?.params?.key;if(!r)return {status:"fail",error:"getOutputsFetchedSources requires params.key"};let o=c(r)??p();return o?o.boardOps.getOutputsFetchedSources({params:{key:r}}):{status:"fail",error:"Board context is unavailable"}},async removeCard(e){let r=e?.params?.id;if(!r)return {status:"fail",error:"removeCard requires params.id"};let o=c(r)??p();return o?o.boardOps.removeCard({params:{id:r}}):{status:"fail",error:"Board context is unavailable"}},async upsertCard(e){let r=e?.params?.cardId;if(!r)return {status:"fail",error:"upsertCard requires params.cardId"};let o=c(r)??p();if(!o)return {status:"fail",error:"Board context is unavailable"};let k=await o.boardOps.upsertCard({params:{cardId:r,restart:e.params.restart===true}});if(k.status!=="success")return k;if(a$1(o.boardAdapter)){let P=await h(true);if(P.status!=="success")return P}return k}}}function C(){let e=()=>{let r=p();if(!r?.nonCore)throw new Error("Board non-core adapter is not configured for MCP preflight/discovery tools");return r.nonCore};return {describeTaskExecutorCapabilities(r){return e().describeTaskExecutorCapabilities(r)},validateCardPreflight(r){return e().validateCardPreflight(r)},evalCardCompute(r){return e().evalCardCompute(r)},probeSourcePreflight(r){return e().probeSourcePreflight(r)},runSourcePreflight(r){return e().runSourcePreflight(r)},simulateCardCycle(r){return e().simulateCardCycle(r)}}}function s(){return {async get(e){let r=typeof e.params?.id=="string"?e.params.id:void 0;if(r){let o=await n(r);return o?{status:"success",data:{cards:[o]}}:{status:"success",data:{cards:[]}}}return {status:"success",data:{cards:await f()}}},async set(e){let r=e.body;if(r==null)return {status:"fail",error:"set requires a body (card object or array of cards)"};let o=Array.isArray(r)?r:[r];for(let k of o){let P=k,A=typeof P.id=="string"?P.id:"";if(!A)return {status:"fail",error:"each card must have a string `id` field"};let E=i.get(A)??0,D=t[E]??p();if(!D)return {status:"fail",error:"Board context is unavailable"};let L=await D.cardStoreOps.set({body:P});if(L.status!=="success")return L;i.set(A,E);}return {status:"success",data:{count:o.length}}},async del(e){let r=[e.params?.id,...e.body?.ids??[]].filter(o=>typeof o=="string"&&!!o);if(r.length===0)return {status:"fail",error:"del requires body.ids (string[]) or params.id"};for(let o of r){let k=c(o)??p();if(!k)return {status:"fail",error:"Board context is unavailable"};let P=await k.cardStoreOps.del({params:{id:o}});if(P.status!=="success")return P;i.delete(o);}return {status:"success",data:{count:r.length}}},async patch(e){let r=typeof e.params?.id=="string"?e.params.id:void 0,o=typeof e.params?.path=="string"?e.params.path:void 0;if(!r||!o)return {status:"fail",error:"patch requires params.id and params.path"};let k=c(r)??p();return k?k.cardStoreOps.patch(e):{status:"fail",error:"Board context is unavailable"}},async appendFiles(e){let r=typeof e.params?.id=="string"?e.params.id:void 0;if(!r)return {status:"fail",error:"appendFiles requires params.id"};let o=c(r)??p();return o?o.cardStoreOps.appendFiles(e):{status:"fail",error:"Board context is unavailable"}}}}function d(){return a$2({board:y(),nonCore:C(),cardStore:s(),chatStore:u,processAccumulated:()=>h(true),sourceFetchDone:({token:e,ref:r})=>w(e,r),sourceFetchFailed:({token:e,reason:r})=>R(e,r),uploadCardFile({cardId:e,fileName:r,contentType:o,bytes:k,suppressChatRecordWrite:P}){return I(e,r,o,k,{inChat:true,...P===true?{suppressChatRecordWrite:true}:{}})},buildFileDownloadUrl({cardId:e,fileIdx:r,storedName:o}){let k=`${b||""}${m}/cards/${encodeURIComponent(e)}/files/${r}`;return o?`${k}?sn=${encodeURIComponent(o)}`:k},readFetchedSourceJsonByRef({cardId:e,ref:r}){let o=c(e)??p();if(!o||a$1(o.boardAdapter))return null;let A=o.boardAdapter.resolveBlob(b$1(r)).trim();return A?JSON.parse(A):null}})}return {mcpBoardFacade:y,mcpNonCoreFacade:C,mcpCardStoreFacade:s,createMcpFacade:d}}export{J as a,X as b,Q as c,z as d,Y as e,j as f,N as g,T as h,q as i,ot as j,it as k,ct as l,pt as m,mt as n,ft as o,yt as p};//# sourceMappingURL=chunk-I3ZOFU3F.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-I3ZOFU3F.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {c,b as b$1}from'./chunk-UGB7PC4P.js';function b(n){return JSON.parse(JSON.stringify(n))}function k(n,i){if(n===i)return n;try{if(JSON.stringify(n)===JSON.stringify(i))return n}catch{}return i}function m(n,i){if(n===i)return true;try{return JSON.stringify(n)===JSON.stringify(i)}catch{return false}}function B(n){return n==="running"||n==="in-progress"?"loading":n==="failed"?"error":"fresh"}function O(n,i,C){let v=n,f=(v&&Array.isArray(v.cardDefinitions)?v.cardDefinitions:[]).map(p=>p.id),g=i&&i.modelsById||{},o={};for(let p of f){let t=C(n,p),a=g[p];if(!a){o[p]=t;continue}let e=t.card_chats!=null?k(a.card_chats,t.card_chats??null):a.card_chats??null,r={id:t.id,card:k(a.card,t.card),card_data:k(a.card_data,t.card_data),requires:k(a.requires,t.requires),computed_values:k(a.computed_values,t.computed_values),runtime_state:k(a.runtime_state,t.runtime_state),card_chats:e};o[p]=r.card===a.card&&r.card_data===a.card_data&&r.requires===a.requires&&r.computed_values===a.computed_values&&r.runtime_state===a.runtime_state&&r.card_chats===a.card_chats?a:r;}let y=i?.cardWatchParties||{},l=Object.fromEntries(f.filter(p=>Object.prototype.hasOwnProperty.call(y,p)).map(p=>[p,y[p]])),_=i?.pendingComputedValues||{},h=Object.fromEntries(Object.entries(_).filter(([p])=>!f.includes(p)));return {payload:n,cardIds:f,modelsById:o,cardWatchParties:l,pendingComputedValues:h}}function N(n,i={}){if(!n)return n;let C=typeof i.includeCard=="function"?i.includeCard:(()=>true),v=typeof i.mapCard=="function"?i.mapCard:(y=>y),d=false,f=[],g={};for(let y of n.cardIds){let l=n.modelsById[y];if(!l){d=true;continue}if(!C(l,n)){d=true;continue}let _=v(l,n);if(!_||_.id!==y)throw new Error(`deriveBoardState: mapped card must preserve id "${y}"`);_!==l&&(d=true),f.push(y),g[y]=_;}let o=typeof i.mapPayload=="function"?i.mapPayload(n.payload,{sourceState:n,cardIds:f,modelsById:g}):n.payload;return o!==n.payload&&(d=true),!d&&f.length===n.cardIds.length?n:{payload:o,cardIds:f,modelsById:g,cardWatchParties:n.cardWatchParties,pendingComputedValues:n.pendingComputedValues}}function j(n,i,C,v){if(!n||!Array.isArray(i)||i.length===0)return n;let d=n.modelsById,f=n.cardIds,g=n.cardWatchParties||{},o=n.pendingComputedValues||{},y=false,l=false,_={};for(let t of f){let a=d[t],e=a&&a.requires;if(e&&typeof e=="object")for(let r of Object.keys(e))(_[r]=_[r]||[]).push(t);}function h(){y||(d={...d},y=true);}function p(t){if(t.kind!=="card_watchparty"||!t.cardId||!t.channel)return;let a=g[t.cardId]||{},e=Array.isArray(a[t.channel])?a[t.channel]:[],r=e;if(t.clear){if(e.length===0)return;r=[];}else if(t.replace){let c=Number.isFinite(Number(t.sentAtMs))?Number(t.sentAtMs):0,u={payload:t.payload,ts:c};if(e.length===1&&e[0]?.ts===u.ts&&m(e[0]?.payload,u.payload))return;r=[u];}else {let c={payload:t.payload,ts:Number.isFinite(Number(t.sentAtMs))?Number(t.sentAtMs):0};r=[...e,c];}g={...g,[t.cardId]:{...a,[t.channel]:r}},l=true;}for(let t of i)if(!(!t||!t.kind)){if(t.kind==="card_watchparty"){p(t);continue}if(c(t)){if(t.kind==="card_chats"){let a=t.cardId,e=d[a];if(!e)continue;let r=Array.isArray(t.messages)?t.messages:e.card_chats?.messages??[],c=typeof t.receiving=="boolean"?t.receiving:e.card_chats?.receiving??false,u=typeof t.processing=="boolean"?t.processing:e.card_chats?.processing??false,s={messages:r,receiving:c,processing:u};if(m(e.card_chats,s))continue;h(),d[a]={...e,card_chats:s},l=true;}else if(t.kind==="chat_messages"){let a=t.cardId,e=d[a];if(!e)continue;let r=Array.isArray(t.messages)?t.messages:[],c=e.card_chats||{receiving:false,processing:false},u={messages:r,receiving:c.receiving,processing:!!c.processing};if(m(e.card_chats,u))continue;h(),d[a]={...e,card_chats:u},l=true;}else if(t.kind==="chat_processing"){let a=t.cardId,e=d[a];if(!e)continue;let r=e.card_chats||{messages:[],receiving:false},c={messages:r.messages,receiving:r.receiving,processing:t.active===true};if(m(e.card_chats,c))continue;h(),d[a]={...e,card_chats:c},l=true;}continue}if(b$1(t)){if(t.kind==="computed_values"){let a=t.cardId,e=d[a],r=t.values||{};if(!e){let c=o[a];if(m(c,r))continue;o={...o,[a]:b(r)},l=true;continue}if(m(e.computed_values,r))continue;h(),d[a]={...e,computed_values:r},l=true;}else if(t.kind==="data_object"){let a=t.key,e=t.payload,r=_[a]||[];for(let c of r){let u=d[c];if(!u)continue;let s=u.requires||{};m(s[a],e)||(h(),d[c]={...u,requires:{...s,[a]:e}},l=true);}}else if(t.kind==="card_refreshed"){let a=t.cardId,e=null,r=d[a],c=t.card;if(r&&c&&typeof c=="object"&&!Array.isArray(c)){let s=c,w=s.card_data&&typeof s.card_data=="object"&&!Array.isArray(s.card_data)?s.card_data:r.card_data,M=s.requires&&typeof s.requires=="object"&&!Array.isArray(s.requires)?s.requires:r.requires,P=s.computed_values&&typeof s.computed_values=="object"&&!Array.isArray(s.computed_values)?s.computed_values:r.computed_values,q=s.runtime_state&&typeof s.runtime_state=="object"&&!Array.isArray(s.runtime_state)?s.runtime_state:r.runtime_state;e={...r,card:c,card_data:w,requires:M,computed_values:P,runtime_state:q};}if(!e)try{let s=v();s&&(e=C(s,a));}catch{}if(!e)continue;let u=o[a];if(u!==void 0&&!m(e.computed_values,u)&&(e={...e,computed_values:b(u)}),r&&m(r.card,e.card)&&m(r.card_data,e.card_data)&&m(r.requires,e.requires)&&m(r.computed_values,e.computed_values)&&m(r.runtime_state,e.runtime_state))continue;h(),d[a]=e,f.includes(a)||(f=[...f,a]),Object.prototype.hasOwnProperty.call(o,a)&&(o={...o},delete o[a]),l=true;}else if(t.kind==="card_removed"){let a=t.cardId;if(!d[a])continue;if(h(),delete d[a],f=f.filter(e=>e!==a),Object.prototype.hasOwnProperty.call(g,a)){let e={...g};delete e[a],g=e;}Object.prototype.hasOwnProperty.call(o,a)&&(o={...o},delete o[a]),l=true;}else if(t.kind==="status"){let a=t.status?.cards??[];for(let e of a){let r=e?.name;if(!r||!d[r])continue;let c=d[r],u=B(e.status),s={...c.card_data||{},status:u,lastRun:e.runtime?.last_transition_at??null,...e.error?.message?{error:e.error.message}:{}};e.error?.message||delete s.error;let w={task_status:e.status??null,card_status:u,runtime:e.runtime?b(e.runtime):{},error:e.error?b(e.error):null,blocked_by:Array.isArray(e.blocked_by)?b(e.blocked_by):[],requires_missing:Array.isArray(e.requires_missing)?b(e.requires_missing):[]};m(c.card_data,s)&&m(c.runtime_state,w)||(h(),d[r]={...c,card_data:s,runtime_state:w},l=true);}}}}return l?{payload:n.payload,cardIds:f,modelsById:d,cardWatchParties:g,pendingComputedValues:o}:n}export{O as a,N as b,j as c};//# sourceMappingURL=chunk-IXZV5BS5.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-IXZV5BS5.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunk7JVHYHT2_cjs=require('./chunk-7JVHYHT2.cjs'),chunkVQCIOKJV_cjs=require('./chunk-VQCIOKJV.cjs'),chunkVI36DRWG_cjs=require('./chunk-VI36DRWG.cjs'),chunkQBEQL4TL_cjs=require('./chunk-QBEQL4TL.cjs'),chunk2RIHC5TZ_cjs=require('./chunk-2RIHC5TZ.cjs');function L(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}function J(e,r){return L(e)?e.then(r):r(e)}function Z(e,r){let t={...e};for(let o of r.deleteKeys)delete t[o];return {...t,...r.shallowMerge}}function Re(e,r){return {readValues(o){let n=e(o);return J(n.listKeys(),s=>{let a=[...s].sort();if(a.length===0)return {version:null,values:{}};let i={},c=null;for(let g of a){let d=n.read(g);L(d)?c=(c??Promise.resolve()).then(async()=>{i[g]=await d;}):i[g]=d;}return c?c.then(()=>({version:r(i),values:i})):{version:r(i),values:i}})},writeValues(o,n,s){let a=e(o),i=null;for(let c of s){let g=a.delete(c);L(g)&&(i=(i??Promise.resolve()).then(()=>g).then(()=>{}));}for(let[c,g]of Object.entries(n)){let d=a.write(c,g);L(d)&&(i=(i??Promise.resolve()).then(()=>d).then(()=>{}));}return i?i.then(()=>r(n)):r(n)}}}function ee(e,r){return {readSnapshot(t){return e.readValues(t)},commitSnapshot(t,o){if(o.schemaVersion!==r)throw new Error(`Unsupported snapshot schema version: ${o.schemaVersion}`);return J(e.readValues(t),n=>{if(n.version!==o.expectedVersion)return {ok:false,reason:"version-mismatch",currentVersion:n.version};let s=Z(n.values,o);return J(e.writeValues(t,s,o.deleteKeys),a=>({ok:true,newVersion:a}))})}}}function X(e,r){if(!r)return e;let t=e.findIndex(o=>o.id===r);return t===-1?e:e.slice(t+1)}function te(e){return {readEntriesAfterCursor(r){let t=X(e.readAllEntries(),r);return t.length===0?{events:[],newCursor:r}:{events:t.map(o=>o.event),newCursor:t[t.length-1].id}},pendingCount(r){return X(e.readAllEntries(),r).length},appendEvent(r){e.appendEntry({id:e.generateId(),event:r});}}}function ve(e){return {appendEvent(r){return e.append(r).then(()=>{})},async readEntriesAfterCursor(r){let t=await e.readAfter(r||null);return {events:t.entries.map(o=>o.payload),newCursor:t.newCursor??r}}}}function j(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}function v(e,r){return j(e)?e.then(r):r(e)}function M(e,r){let t=null;for(let o of e){if(t){t=t.then(()=>r(o)).then(()=>{});continue}let n=r(o);j(n)&&(t=Promise.resolve(n).then(()=>{}));}return t??void 0}function le(e){if(e==null)return null;let r=e.trim();if(!r)return null;try{return JSON.parse(r)}catch{return r}}function pe(e,r){let t=e.match(r);return t?t[1]:null}function re(e,r,t){let o={},n=M(e,s=>{let a=t(s);if(a)return v(r(s),i=>{o[a]=i;})});return j(n)?n.then(()=>o):o}function ne(e,r){return {readSourceData(t,o){return v(e.read(`${t}/${o}`),le)},ingestSourceDataStaged(t,o,n,s){return v(r(n),a=>e.write(`${t}/.staged/${s}/${o}`,a))},commitSourceData(t,o,n){let s=`${t}/.staged/${n}/${o}`,a=`${t}/${o}`;return e.renameKey(s,a)},hasSource(t,o){return e.exists(`${t}/${o}`)},listSources(t){return v(e.listKeys(`${t}/`),o=>o.filter(n=>!n.includes("/.staged/")).map(n=>n.slice(`${t}/`.length)))}}}function ge(e,r){let t=(o,n)=>{try{let s=n(o);return j(s)?s.catch(a=>r(o,a instanceof Error?a.message:String(a))):void 0}catch(s){try{return r(o,s instanceof Error?s.message:String(s))}catch{return}}};return {appendEntries(o,n){if(!(!o||n.length===0))return v(e.read(o),s=>e.write(o,[...s??[],...n]))},dispatchEntriesForJournalId(o,n){if(o)return v(e.read(o),s=>{let a=s;if(!(!a||a.length===0))return v(M(a,i=>t(i,n)),()=>e.delete(o))})}}}function fe(e,r,t){return {readRuntime(o){return v(e.read(r(o)),n=>n??t())},writeRuntime(o,n){return e.write(r(o),n)}}}function oe(e){return {writeComputedValues(r,t){return e.write(`cards/${r}/computed_values`,t)},readComputedValues(r){return e.read(`cards/${r}/computed_values`)},readAllComputedValues(){return v(e.listKeys("cards/"),r=>re(r,t=>e.read(t),t=>pe(t,/^cards\/([^/]+)\/computed_values$/)))},writeDataObjects(r){return M(Object.entries(r),([t,o])=>{if(t)return o===void 0?e.delete(`data-objects/${t}`):e.write(`data-objects/${t}`,o)})},readDataObject(r){return e.read(`data-objects/${r}`)},readAllDataObjects(){return v(e.listKeys("data-objects/"),r=>re(r,t=>e.read(t),t=>t.slice(13)))},writeStatusSnapshot(r){return e.write("status",r)},readStatusSnapshot(){return e.read("status")}}}var _="sys_keys_board_state",I="__sys_keys_board_state_init";function de(e){if(!e||typeof e!="object"||Array.isArray(e))return false;let r=e.__private;return !!r&&typeof r=="object"&&!Array.isArray(r)&&r.visible_controlplane_only===true}function me(e){let r=e.filter(n=>!de(n)),t=[...new Set(r.map(n=>n.id).filter(n=>typeof n=="string"&&n.length>0))].sort(),o=[...new Set(r.flatMap(n=>Array.isArray(n.provides)?n.provides:[]).map(n=>n&&typeof n=="object"&&!Array.isArray(n)?n.bindTo:void 0).filter(n=>typeof n=="string"&&n.length>0&&n!==_))].sort();return {card_ids:t,data_object_keys:o}}function Se(e,r){let t=e.filter(s=>!de(s)),o=[...new Set(t.map(s=>s.id).filter(s=>typeof s=="string"&&s.length>0))].sort(),n=[...new Set(Object.entries(r).filter(([s])=>s!==I).flatMap(([,s])=>Array.isArray(s.provides)?s.provides:[]).filter(s=>typeof s=="string"&&s.length>0&&s!==_))].sort();return {card_ids:o,data_object_keys:n}}function Fe(){return {id:I,meta:{title:"System Keys Board State",synthetic:true},provides:[{bindTo:_,ref:`card_data.${_}`}],card_data:{[_]:{card_ids:[],data_object_keys:[]}},__private:{visible_controlplane_only:true}}}function Ve(e,r){function t(){return e.readIndex()??{}}function o(n,s,a){let i=String(s||"").split(".").filter(Boolean);if(i.length===0)return a&&typeof a=="object"&&!Array.isArray(a)?a:{value:a};let c={...n},g=c;for(let d=0;d<i.length-1;d++){let u=i[d],l=g[u],y=l&&typeof l=="object"&&!Array.isArray(l)?{...l}:{};g[u]=y,g=y;}return g[i[i.length-1]]=a,c}return {readCard(n){let s=t()[n];return !s||!e.cardExists(s.key)?null:e.readCard(s.key)},readCardKey(n){return t()[n]?.key??null},readAllCards(){let n=[];for(let[s,a]of Object.entries(t())){if(!e.cardExists(a.key))continue;let i=e.readCard(a.key);i?n.push(i):r?.(`[card-store] could not read card "${s}" at key "${a.key}"`);}return n},readChecksumIndex(){let n={};for(let[s,a]of Object.entries(t()))n[s]=a.checksum;return n},changedSince(n){let s=t(),a=[];for(let[i,c]of Object.entries(s))n[i]!==c.checksum&&a.push(i);for(let i of Object.keys(n))s[i]||a.push(i);return a},validateUpsert(n,s){let a=t(),i=a[n],c=Object.entries(a).find(([,g])=>g.key===s);return i&&i.key!==s?{ok:false,error:`Card id "${n}" is already mapped to key "${i.key}", cannot remap to "${s}"`}:c&&c[0]!==n?{ok:false,error:`Key "${s}" is already mapped to card id "${c[0]}", cannot remap to "${n}"`}:{ok:true}},writeCard(n,s,a){let i=t(),c=a??i[n]?.key??e.defaultCardKey(n),g=e.writeCard(c,s);i[n]={key:c,checksum:g,updatedAt:new Date().toISOString()},e.writeIndex(i);},patchCard(n,s,a){let i=t(),c=i[n];if(!c||!e.cardExists(c.key))throw new Error(`card "${n}" not found`);let g=e.readCard(c.key);if(!g||typeof g!="object"||Array.isArray(g))throw new Error(`card "${n}" is not patchable`);let d=o(g,s,a),u=e.writeCard(c.key,d);i[n]={key:c.key,checksum:u,updatedAt:new Date().toISOString()},e.writeIndex(i);},removeCard(n){let s=t(),a=s[n];a&&(e.removeCard(a.key),delete s[n],e.writeIndex(s));},readIndex(){return t()}}}function Pe(e,r){return ne(e,r)}function Ke(e){return te(e)}var ye="v1",U="board/graph",ue="board/lastJournalProcessedId";function qe(e){return `cards/${e}/runtime`}function Be(e){return ee(e,ye)}function Le(e){function r(t){let o=e.read(t);return o==null?null:typeof o=="string"?o:JSON.stringify(o)}return {readTaskExecutorRef(){let t=r("task-executor");if(t?.trim())return chunk7JVHYHT2_cjs.c(t.trim())},writeTaskExecutorRef(t){e.write("task-executor",chunk7JVHYHT2_cjs.b(t));},readChatHandlerFlow(){return e.read("chat-handler-flow")},writeChatHandlerFlow(t){e.write("chat-handler-flow",t);},readBoardRuntimeStoreRef(){return r("board-runtime-store-ref")},writeBoardRuntimeStoreRef(t){e.write("board-runtime-store-ref",t);},readCardStoreRef(){return r("card-store-ref")},writeCardStoreRef(t){e.write("card-store-ref",t);},readOutputsStoreRef(){return r("outputs-store-ref")},writeOutputsStoreRef(t){e.write("outputs-store-ref",t);},readQueueStoreRef(){return r("queue-store-ref")},writeQueueStoreRef(t){e.write("queue-store-ref",t);},readScratchStoreRef(){return r("scratch-store-ref")},writeScratchStoreRef(t){e.write("scratch-store-ref",t);},readChatStoreRef(){return r("chat-store-ref")},writeChatStoreRef(t){e.write("chat-store-ref",t);},readArtifactsStoreRef(){return r("artifacts-store-ref")},writeArtifactsStoreRef(t){e.write("artifacts-store-ref",t);},readFetchedSourcesStoreRef(){return r("fetched-sources-store-ref")},writeFetchedSourcesStoreRef(t){e.write("fetched-sources-store-ref",t);}}}function je(e){return oe(e)}function se(e){return e?{lastRequestedToken:e.lastRequestedToken,lastCompletedToken:e.lastCompletedToken,lastCompletionStatus:e.lastCompletionStatus??(e.lastCompletedToken?"success":"not-started"),queueRequestedToken:e.queueRequestedToken}:{lastCompletionStatus:"not-started"}}function he(e){return e?.lastRequestedToken?e.lastCompletedToken!==e.lastRequestedToken:false}function ie(e,r){return e?.lastRequestedToken?he(e)?"in-flight":!e.lastCompletedToken||e.lastCompletedToken<r?"dispatch":"idle":"dispatch"}function ke(e,r){return {...e,lastCompletedToken:r,lastCompletionStatus:"success"}}function ae(e,r){return {...e,lastCompletedToken:r,lastCompletionStatus:"failure"}}function De(e){let r=e.cards.filter(i=>i.name!==I);if(r.length===e.cards.length)return e;let t=new Set;for(let i of r)for(let c of i.requires)t.add(c);let o=r.map(i=>({name:i.name,fanOut:i.unblocks.length})).sort((i,c)=>c.fanOut-i.fanOut||i.name.localeCompare(c.name)),n=o.length>0?o[0]:{name:null,fanOut:0},s=i=>r.filter(c=>c.status===i).length,a=r.filter(i=>i.requires.length===0&&i.unblocks.length===0).length;return {...e,summary:{...e.summary,card_count:r.length,completed:s("completed"),eligible:s("eligible"),pending:s("pending"),blocked:s("blocked"),unresolved:s("unresolved"),failed:s("failed"),in_progress:s("in-progress"),orphan_cards:a,topology:{edge_count:t.size,max_fan_out_card:n.name,max_fan_out:n.fanOut}},cards:r}}function $e(e){let{[_]:r,...t}=e;return t}function Ne(e,r){let t=r.state.tasks,o=r.config.tasks,n=Object.keys(t),s=chunkVI36DRWG_cjs.a(r),a={completed:0,failed:0,in_progress:0,pending:0,blocked:0,unresolved:0},i=new Map;for(let p of s.pending)i.set(p.taskName,p.waitingOn);for(let p of s.unresolved)i.set(p.taskName,p.missingTokens);for(let p of s.blocked)i.set(p.taskName,p.failedTokens);let c=new Map;for(let[p,f]of Object.entries(o))for(let w of f.requires??[]){let C=c.get(w)??[];C.push(p),c.set(w,C);}let g=n.sort().map(p=>{let f=t[p],w=o[p]??{requires:[],provides:[]};f.status==="completed"?a.completed+=1:f.status==="failed"?a.failed+=1:f.status==="in-progress"&&(a.in_progress+=1);let C=w.requires??[],R=w.provides??[],b=Object.keys(f.data??{}).sort(),O=C.filter(T=>r.state.availableOutputs.includes(T)),F=C.filter(T=>!r.state.availableOutputs.includes(T)),V=i.get(p)??F,E=new Set;for(let T of R)for(let x of c.get(T)??[])x!==p&&E.add(x);let q=f.failedAt,P=f.error?{message:f.error,code:"TASK_FAILED",at:q,source:"task-runtime"}:void 0;return {name:p,status:f.status,error:P,requires:C,requires_satisfied:O,requires_missing:F,provides_declared:R,provides_runtime:b,blocked_by:V,unblocks:Array.from(E).sort(),runtime:{attempt_count:f.executionCount??0,restart_count:f.retryCount??0,in_progress_since:f.status==="in-progress"?f.startedAt??null:null,last_transition_at:f.lastUpdated??null,last_completed_at:f.completedAt??null,last_restarted_at:f.startedAt??null,status_age_ms:f.lastUpdated?0:null}}});a.pending=s.pending.length,a.blocked=s.blocked.length,a.unresolved=s.unresolved.length;let d=g.map(p=>({name:p.name,fanOut:p.unblocks.length})).sort((p,f)=>f.fanOut-p.fanOut||p.name.localeCompare(f.name)),u=d.length>0?d[0]:{name:null,fanOut:0},l=new Set;for(let p of Object.values(o))for(let f of p.requires??[])l.add(f);let y=0;for(let[p,f]of Object.entries(o)){let w=(f.requires??[]).length===0,R=(f.provides??[]).some(b=>(c.get(b)??[]).some(O=>O!==p));w&&!R&&(y+=1);}return {schema_version:"v1",meta:{board:{path:e}},summary:{card_count:n.length,completed:a.completed,eligible:s.eligible.length,pending:a.pending,blocked:a.blocked,unresolved:a.unresolved,failed:a.failed,in_progress:a.in_progress,orphan_cards:y,topology:{edge_count:Array.from(l).length,max_fan_out_card:u.name,max_fan_out:u.fanOut}},cards:g}}function Ce(){return new Date().toISOString()}function Je(e,r,t,o,n,s,a){return async i=>{let c=[],g=t.cardStore.readCard(i.nodeId);if(!g)return "task-initiate-failure";let d=g.id;if(d===I){let m=t.activeTaskConfigs?.(),S={[_]:m?Se(Object.keys(m).filter(h=>h!==I).map(h=>t.cardStore.readCard(h)).filter(h=>!!h),m):me(t.cardStore.readAllCards())};return (a??t.outputStore.writeDataObjects.bind(t.outputStore))(S),o(i.nodeId,S),"task-initiated"}let u=g.card_data??{},l=g.source_defs??[],y=l,p=t.cardRuntimeStore.readRuntime(d),f=false,w=()=>{f&&(t.cardRuntimeStore.writeRuntime(d,p),f=false);},C=m=>se(p._sources[m]),R=(m,S)=>{p._sources[m]=se(S),f=true;},b=i.taskState?.executionCount??0;if(p._lastExecutionCount!==b&&(p._sources={},p._lastExecutionCount=b,f=true),i.update){let m=i.update,S=m.outputFile;if(S){let h=C(S);if(m.failure){let k=m.rqt??h.lastRequestedToken??h.queueRequestedToken;k&&R(S,ae(h,k));}else {let k=m.rqt;if(!h.lastCompletedToken||k>h.lastCompletedToken){let A=typeof m.deliveryToken=="string"?m.deliveryToken:void 0,K=false;A&&(K=t.fetchedSourcesStore.commitSourceData(d,S,A)),K?R(S,ke(h,k)):R(S,ae(h,k));}}w();}}let F={};for(let m of l)if(m.outputFile){let S=t.fetchedSourcesStore.readSourceData(d,m.outputFile);S!==null&&(F[m.bindTo]=S);}let V={};for(let[m,S]of Object.entries(i.state??{}))if(S!==null&&typeof S=="object"&&!Array.isArray(S)){let h=S[m];V[m]=h!==void 0?h:S;}else V[m]=S;let E={id:d,card_data:{...u},requires:V,source_defs:l,compute:g.compute};E._sourcesData=F,g.compute&&chunkQBEQL4TL_cjs.a.runSync(E,{sourcesData:F}),(s??t.outputStore.writeComputedValues.bind(t.outputStore))(d,E.computed_values??{});let q={...g},P=chunkQBEQL4TL_cjs.a.enrichSourcesSync(Array.isArray(g.source_defs)?g.source_defs:void 0,{card_data:g.card_data,requires:V}),T=e.value;q.source_defs=Array.isArray(P)?P.map(m=>({...m,boardDir:typeof m.boardDir=="string"&&m.boardDir?m.boardDir:T})):P;let x=Ce(),H=i.update?void 0:x,G=y.filter(m=>{let S=m.outputFile;if(typeof S!="string"||!S)return true;let h=C(S);H&&(h={...h,queueRequestedToken:H},R(S,h));let k=h.queueRequestedToken??h.lastRequestedToken??x,A=ie(h,k);return A==="in-flight"?false:A==="dispatch"});if(w(),G.length>0){let m=false,S=x;for(let h of G){let k=h.outputFile;if(typeof k!="string"||!k)continue;let A=C(k),K=A.queueRequestedToken??x;R(k,{...A,lastRequestedToken:K}),S=K,m=true;}return m&&w(),m&&(c.push({taskKind:"source-fetch",payload:{boardRef:chunkVQCIOKJV_cjs.a(e),enrichedCard:q,callbackToken:i.callbackToken,rqt:S}}),t.executionRequestStore.appendEntries(r,c)),"task-initiated"}if(y.some(m=>{let S=m.outputFile;if(typeof S!="string"||!S)return false;let h=C(S),k=h.queueRequestedToken??h.lastRequestedToken??x;return ie(h,k)==="in-flight"}))return "task-initiated";let ce=g.provides??[],D={};for(let{bindTo:m,ref:S}of ce)D[m]=chunkQBEQL4TL_cjs.a.resolve(E,S);return (a??t.outputStore.writeDataObjects.bind(t.outputStore))(D),o(i.nodeId,D),c.length>0&&t.executionRequestStore.appendEntries(r,c),"task-initiated"}}var Me={settings:{completion:"manual",refreshStrategy:"data-changed"},tasks:{}};function Ue(e){return {[U]:e.graph,[ue]:e.lastDrainedJournalId,board:{runtimeByCardId:e.runtimeByCardId}}}function He(e){let r=e[U],t=e[ue],n=e.board?.runtimeByCardId;if(!r||typeof r!="object")throw new Error(`State snapshot is missing required key: ${U}`);return {graph:r,lastDrainedJournalId:typeof t=="string"?t:"",runtimeByCardId:n&&typeof n=="object"?n:{}}}function Ge(e){let r=e.requires;return {provides:e.provides?.map(o=>o.bindTo)??[],taskHandlers:["card-handler"],description:e.meta?.title??e.id,...r&&r.length>0?{requires:r}:{}}}function We(e,r={}){function t(d){return {status:"success",data:d}}function o(d){return {status:"fail",error:d}}function n(d){return {status:"error",error:d instanceof Error?d.message:String(d)}}function s(d){return d===I}async function a(d){let u=r.emitNotification;if(!u||d.length===0)return;let l=chunk2RIHC5TZ_cjs.e(d.filter(y=>y.kind!=="card_refreshed"?true:!s(y.cardId)));if(l.length!==0){if(l.length===1){await u(l[0]);return}await u(chunk2RIHC5TZ_cjs.f({kind:"notification-batch",notifications:l}));}}function i(d){let u=d.params?.id;if(u){if(s(u))throw new Error(`card "${u}" not found`);let l=e.readCard(u);if(!l)throw new Error(`card "${u}" not found`);return [l]}return e.readAllCards().filter(l=>!s(l.id))}function c(d){let u=d.filter(l=>!s(l.id));return chunk2RIHC5TZ_cjs.f({kind:"notification-batch",notifications:chunk2RIHC5TZ_cjs.e(u.map(l=>({kind:"card_refreshed",cardId:l.id,card:l})))})}function g(d){if(Array.isArray(d))return d;if(d&&typeof d=="object"){let u=d;return Array.isArray(u.files)?u.files:[d]}return null}return {get(d){try{return t({cards:i(d)})}catch(u){return n(u)}},buildNotificationBatch(d){try{return t(c(i(d)))}catch(u){return n(u)}},set(d){try{let u=d.body;if(u==null)return o("set requires a body (card object or array of cards)");let l=Array.isArray(u)?u:[u];for(let y of l){if(typeof y.id!="string")return o("each card must have a string `id` field");e.writeCard(y.id,y);}return a(l.map(y=>({kind:"card_refreshed",cardId:y.id,card:y}))),t({count:l.length})}catch(u){return n(u)}},del(d){try{let u=d.body?.ids??[],l=d.params?.id,y=l?[...u,l]:u;if(y.length===0)return o("del requires body.ids (string[]) or params.id");for(let p of y)e.removeCard(p);return a(y.map(p=>({kind:"card_removed",cardId:p}))),t({count:y.length})}catch(u){return n(u)}},patch(d){try{let u=d.params?.id,l=d.params?.path;if(!u)return o("patch requires params.id");if(!l)return o("patch requires params.path");let y=d.body,p=y&&Object.prototype.hasOwnProperty.call(y,"value")?y.value:d.body;e.patchCard(u,l,p);let f=e.readCard(u);return f?(a([{kind:"card_refreshed",cardId:u,card:f}]),t({count:1})):o(`card "${u}" not found`)}catch(u){return n(u)}},appendFiles(d){try{let u=d.params?.id;if(!u)return o("appendFiles requires params.id");let l=e.readCard(u);if(!l)return o(`card "${u}" not found`);let y=g(d.body);if(!y||y.length===0)return o("appendFiles requires a file metadata object, array, or body.files array");let p=l.card_data&&typeof l.card_data=="object"&&!Array.isArray(l.card_data)?l.card_data:{},f=Array.isArray(p.files)?p.files:[],w=[...f,...y],C=y.map((b,O)=>({idx:f.length+O,entry:b})),R=this.patch({params:{id:u,path:"card_data.files"},body:{value:w}});return R.status!=="success"?R:t({files_added:C})}catch(u){return n(u)}}}}exports.A=$e;exports.B=Ne;exports.C=Je;exports.D=Me;exports.E=Ue;exports.F=He;exports.G=Ge;exports.H=We;exports.a=Re;exports.b=ee;exports.c=ve;exports.d=ne;exports.e=ge;exports.f=fe;exports.g=oe;exports.h=_;exports.i=I;exports.j=me;exports.k=Se;exports.l=Fe;exports.m=Ve;exports.n=Pe;exports.o=Ke;exports.p=ye;exports.q=U;exports.r=qe;exports.s=Be;exports.t=Le;exports.u=je;exports.v=se;exports.w=ie;exports.x=ke;exports.y=ae;exports.z=De;//# sourceMappingURL=chunk-J7KE7SPA.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-J7KE7SPA.cjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var chunkBQUQTOPB_cjs=require('./chunk-BQUQTOPB.cjs'),chunkLPXVVMQT_cjs=require('./chunk-LPXVVMQT.cjs'),chunkVQCIOKJV_cjs=require('./chunk-VQCIOKJV.cjs'),chunkGHUW6P4G_cjs=require('./chunk-GHUW6P4G.cjs');function M(a){if(!a||typeof a!="object")return false;let t=a;return typeof t.kind=="string"&&t.kind.length>0}function J(a){if(!a||typeof a!="object")return [];let t=a;return t.kind==="notification-batch"?Array.isArray(t.notifications)?t.notifications.filter(M):[]:M(a)?[a]:[]}function X(a,t,i){let c=0;return {accepted:a.filter(_=>{if(!M(_))return c++,false;let S=_;return typeof S.sentAtMs=="number"&&t-S.sentAtMs>i?(c++,false):true}),rejected:c}}function Q(){return {status:null,computedValues:{},dataObjects:{},cards:{}}}function z(a){if(!a||typeof a!="object")return false;let t=a.summary;return !t||typeof t!="object"?false:Number(t.card_count||0)>0}function W(a){if(!a||typeof a!="object")return false;let t=a;return t.kind==="notification-batch"&&Array.isArray(t.notifications)}function V(a,t){if(t.kind==="status"){z(t.status)&&(a.status=t.status);return}if(t.kind==="computed_values"){a.computedValues[t.cardId]=t.values;return}if(t.kind==="data_object"){a.dataObjects[t.key]=t.payload;return}if(t.kind==="card_refreshed"){a.cards[t.cardId]=t.card;return}t.kind==="card_removed"&&(delete a.cards[t.cardId],delete a.computedValues[t.cardId]);}function Y(a,t){if(W(t)){for(let i of t.notifications)M(i)&&V(a,i);return}M(t)&&V(a,t);}function j(a,t){if(a?.status==="success")return Object.prototype.hasOwnProperty.call(a,"data")?a.data:void 0;throw a?.status==="fail"||a?.status==="error"?Object.assign(new Error(a.error||`${t} failed`),{statusCode:400}):Object.assign(new Error(`${t} returned an unexpected response`),{statusCode:500})}async function N(a,t){return j(await a,t)}function T(a){let t=chunkLPXVVMQT_cjs.a(a,"key");if(!t)throw Object.assign(new Error("MCP tool requires key"),{statusCode:400});let i=t.split(".");if(!(i.length>=2&&i.every(g=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(g))))throw Object.assign(new Error("MCP tool requires a card private key with at least two identifier segments (e.g. chat.foundry_thread_id)"),{statusCode:400});return t}function q(a,t){let i=a.__private;for(let c of t.split(".")){if(!i||typeof i!="object"||Array.isArray(i)||!Object.prototype.hasOwnProperty.call(i,c))return {exists:false,value:null};i=i[c];}return {exists:true,value:i}}function ot(a){let{boardId:t,bootstrapBoard:i,sseHub:c,onChannelSubscribed:g,onChannelUnsubscribed:_,getMcpFacade:S,getMcpCardStoreFacade:n}=a;function f(s){let d=chunkLPXVVMQT_cjs.a(s,"board_id");if(!d)throw Object.assign(new Error("MCP tool requires board_id"),{statusCode:400});if(d!==t)throw Object.assign(new Error(`Unknown board_id: ${d}`),{statusCode:400})}function h(s){let d=chunkLPXVVMQT_cjs.a(s,"client_id");if(!d)throw Object.assign(new Error("MCP tool requires client_id"),{statusCode:400});return d}function w(s){f(s);let d=h(s),e=chunkLPXVVMQT_cjs.a(s,"channel_name"),r=chunkLPXVVMQT_cjs.a(s,"card_id")||void 0;if(!e)throw Object.assign(new Error("MCP tool requires channel_name"),{statusCode:400});return {clientId:d,channelName:e,...r?{cardId:r}:{}}}function R(s){f(s);let d=chunkLPXVVMQT_cjs.a(s,"card_id");if(!d)throw Object.assign(new Error("MCP tool requires card_id"),{statusCode:400});return {cardId:d}}async function I(s){await i();let{cardId:d}=R(s),e=h(s);if(!await c.subscribeChat(e,d))throw Object.assign(new Error(`SSE client not connected: ${e}`),{statusCode:404});return {status:"success",data:{boardId:t,cardId:d,clientId:e,subscribed:true}}}async function u(s){await i();let{cardId:d}=R(s),e=h(s);if(!c.unsubscribeChat(e,d))throw Object.assign(new Error(`SSE client not connected: ${e}`),{statusCode:404});return {status:"success",data:{boardId:t,cardId:d,clientId:e,subscribed:false}}}async function b(s,d){await i();let{clientId:e,channelName:r,cardId:o}=w(s);if(!c.has(e))throw Object.assign(new Error(`SSE client not connected: ${e}`),{statusCode:404});return d?(c.subscribeChannel(e,r,o),g?.(e,r,o?{cardId:o}:{})):(c.unsubscribeChannel(e,r,o),_?.(e,r,o?{cardId:o}:{})),{status:"success",data:{boardId:t,clientId:e,channelName:r,subscribed:d,...o?{cardId:o}:{}}}}async function m(s,d){let{cardId:e}=R(s);return await S().setChatProcessing({cardId:e,active:d}),{status:"success",data:{boardId:t,cardId:e,active:d}}}async function p(s){let{cardId:d}=R(s),e=await S().getChatProcessing({cardId:d});return {status:"success",data:{boardId:t,cardId:d,active:e.active}}}async function y(s){let{cardId:d}=R(s),e=T(s);if(!Object.prototype.hasOwnProperty.call(s,"value"))throw Object.assign(new Error("MCP tool requires value"),{statusCode:400});if(e.split(".").includes("visible_controlplane_only")){let r=await N(n().get({params:{id:d}}),"cardStore.get"),o=Array.isArray(r.cards)&&r.cards.length>0&&typeof r.cards[0]=="object"&&!Array.isArray(r.cards[0])?r.cards[0]:null,k=o?q(o,"visible_controlplane_only").value:void 0;if(s.value!==k)throw Object.assign(new Error("MCP tool cannot change the reserved private flag visible_controlplane_only"),{statusCode:403});return {status:"success",data:{boardId:t,cardId:d,key:e}}}return j(await n().patch({params:{id:d,path:`__private.${e}`},body:{value:s.value}}),"cardStore.patch"),{status:"success",data:{boardId:t,cardId:d,key:e}}}async function C(s){let{cardId:d}=R(s),e=T(s),r=await N(n().get({params:{id:d}}),"cardStore.get"),o=Array.isArray(r.cards)&&r.cards.length>0&&r.cards[0]&&typeof r.cards[0]=="object"&&!Array.isArray(r.cards[0])?r.cards[0]:null;if(!o)throw Object.assign(new Error(`Card "${d}" not found`),{statusCode:404});let k=q(o,e);return {status:"success",data:{boardId:t,cardId:d,key:e,exists:k.exists,value:k.value}}}return {requireCardArgs:R,subscribeChat:I,unsubscribeChat:u,watchChannel:b,setChatProcessing:m,getChatProcessing:p,setCardMeta:y,getCardMeta:C}}function it(a){let{boardId:t,boardContexts:i,readChatRecords:c,getChatProcessing:g}=a,_=Number.isInteger(a.chatBootstrapTailTurns)&&a.chatBootstrapTailTurns>0?a.chatBootstrapTailTurns:1;function S(u){return {role:String(u.role||"system"),text:String(u.text||""),files:Array.isArray(u.files)?u.files:[],...typeof u.turn=="string"&&u.turn?{turn:u.turn}:{}}}function n(u){if(u.length===0)return null;if(u.length===1)return u[0];let b=[],m=["completed","eligible","pending","blocked","unresolved","failed","in_progress","orphan_cards"],p={};for(let C of m)p[C]=0;for(let C of u){let s=C,d=Array.isArray(s.cards)?s.cards:[];b.push(...d);for(let e of m)p[e]+=Number(s?.summary?.[e]||0);}let y=u[0];return {...y,cards:b,summary:{...y.summary||{},card_count:b.length,...p}}}async function f(){let u=[];for(let b of i)try{let m=await b.boardOps.buildSseOneShotPayload({});m.status==="success"&&m.data&&u.push(m.data);}catch{}return u}async function h(){let b=(await f()).map(m=>m.statusSnapshot).filter(Boolean);if(b.length===0){let m=i.map(p=>p.notification.status).filter(Boolean);return n(m)}return n(b)}async function w(){let u={},b=await f();for(let m of b)Object.assign(u,m.cardRuntimeById||{});if(Object.keys(u).length>0)return u;for(let m of i)for(let[p,y]of Object.entries(m.notification.computedValues)){let C=m.notification.cards[p];u[p]={schema_version:"v1",card_id:p,card_data:C?.card_data??{},computed_values:y??{}};}return u}async function R(){let u={},b=await f();for(let m of b)Object.assign(u,m.dataObjectsByToken||{});if(Object.keys(u).length===0)for(let m of i)Object.assign(u,m.notification.dataObjects||{});return u}async function I(){let u=await f(),b=u.flatMap(C=>Array.isArray(C.cardDefinitions)?C.cardDefinitions:[]),m={},p={};for(let C of u)Object.assign(m,C.dataObjectsByToken||{}),Object.assign(p,C.cardRuntimeById||{});let y={};for(let C of b){if(!C?.id)continue;let s=C.id;try{let d=await c(s,{tailTurns:_}),e=await g(s);(d.length>0||e)&&(y[s]={messages:d.map(r=>S(r)),receiving:!1,processing:e});}catch{}}return {boardId:t,cardDefinitions:b,statusSnapshot:await h(),dataObjectsByToken:m,cardRuntimeById:p,cardChatsByCardId:y}}return {readStatusSnapshot:h,readCardRuntimeArtifacts:w,readDataObjectsByToken:R,buildPublishedRuntimePayload:I}}function K(a){let t=String(a||"").trim();if(!t)return "upload.bin";let i=Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\"));return (i>=0?t.slice(i+1):t)||"upload.bin"}function ct(a){let{safeCardId:t,artifactsStores:i,cardFileMetadataStore:c,readCardFromStore:g,updateCardLocalOnly:_,writeChatRecord:S}=a;async function n(w){let R=[];try{let I=await g(w);if(!I)return R;let u=c().read(I.card_data&&typeof I.card_data=="object"?I.card_data:null);for(let b of u)R.push(String(b.stored_name??""));}catch{}return R}async function f(w,R,I,u){let b=t(w),m=i(w),p=K(R),y=await n(w),s=`${String(y.length+1).padStart(3,"0")}-${p}`.slice(-36);if(!m.files)throw Object.assign(new Error(`artifactsStoreRef is not configured for card uploads: ${w}`),{statusCode:500});return await m.files.putBytes(`${b}/${s}`,new Uint8Array(u),I||"application/octet-stream"),{name:p,stored_name:s,size:u.length,mime_type:I||"application/octet-stream",uploaded_at:new Date().toISOString()}}async function h(w,R,I,u,b){if(!u.length)throw Object.assign(new Error("Empty upload body"),{statusCode:400});let m=b?.inChat===true,p=await f(w,R,I,u),y=null;if(await _(w,C=>{let s=new Date().toISOString(),d=C.card_data&&typeof C.card_data=="object"?C.card_data:{};C.card_data=d;let e=c().normalizeIncoming([{name:p.name,stored_name:p.stored_name,size:p.size,mime_type:p.mime_type,uploaded_at:p.uploaded_at||s,chat:m}],s);return y=c().merge(d,e).findIndex(o=>o.stored_name===p.stored_name),C}),m&&b?.suppressChatRecordWrite!==true){let C=typeof y=="number"&&y>=0?` #${y}`:"";await S(w,"system",`file uploaded: ${p.name} as ${p.stored_name}${C}`,[],b?.turnId??"");}return {ok:true,file:{...p,...typeof y=="number"&&y>=0?{file_idx:y}:{},chat:m},...typeof y=="number"&&y>=0?{file_idx:y}:{}}}return {uploadCardFile:h,readCardStoredFileNames:n}}function pt(a){return {"discover.source-kinds":()=>a.discoverSourceKinds(),"inspect.board-runtime-status":()=>a.inspectBoardRuntimeStatus(),"inspect.card-definition-and-runtime":t=>a.inspectCardDefinitionAndRuntime({cardId:chunkLPXVVMQT_cjs.a(t,"card_id")}),"inspect.chat-messages-on-cards":t=>{let i=chunkLPXVVMQT_cjs.b(t,"tail_turns"),c=chunkLPXVVMQT_cjs.b(t,"tail"),g=chunkLPXVVMQT_cjs.a(t,"turn_id"),_=t.all_turns===true,S=chunkLPXVVMQT_cjs.a(t,"tail_turns_before_id");return a.inspectChatMessagesOnCards({cardId:chunkLPXVVMQT_cjs.a(t,"card_id"),...i!==void 0?{lastUserTurns:i}:{},...c!==void 0?{tail:c}:{},...g?{turnId:g}:{},..._?{allTurns:true}:{},...S?{tailTurnsBeforeId:S}:{}})},"inspect.file-contents":t=>a.inspectFileContents({cardId:chunkLPXVVMQT_cjs.a(t,"card_id"),fileIdx:Number(chunkLPXVVMQT_cjs.b(t,"file_idx"))}),"preflight.validate-candidate-card-definition":t=>a.preflightValidateCandidateCardDefinition({candidateCardContent:chunkLPXVVMQT_cjs.d(t,"candidate_card_content","candidate_card_content")}),"preflight.materialize-candidate-card":t=>a.preflightMaterializeCandidateCard({candidateCardContent:chunkLPXVVMQT_cjs.d(t,"candidate_card_content","candidate_card_content"),mockRequires:chunkLPXVVMQT_cjs.d(t,"mock_requires","mock_requires"),mockFetchedSources:chunkLPXVVMQT_cjs.d(t,"mock_fetched_sources","mock_fetched_sources")}),"preflight.probe-single-source-in-candidate-card":t=>a.preflightProbeSingleSourceInCandidateCard({candidateCardContent:chunkLPXVVMQT_cjs.d(t,"candidate_card_content","candidate_card_content"),mockProjections:chunkLPXVVMQT_cjs.c(t,"mock_projections"),sourceIdx:chunkLPXVVMQT_cjs.e(t,"source_idx","source_idx")}),"preflight.run-single-source-in-candidate-card":t=>a.preflightRunSingleSourceInCandidateCard({candidateCardContent:chunkLPXVVMQT_cjs.d(t,"candidate_card_content","candidate_card_content"),mockProjections:chunkLPXVVMQT_cjs.c(t,"mock_projections"),sourceIdx:chunkLPXVVMQT_cjs.e(t,"source_idx","source_idx")}),"preflight.run-single-source-in-live-card":t=>a.preflightRunSingleSourceInLiveCard({cardId:chunkLPXVVMQT_cjs.a(t,"card_id"),sourceIdx:chunkLPXVVMQT_cjs.e(t,"source_idx","source_idx"),mockRequires:chunkLPXVVMQT_cjs.d(t,"mock_requires","mock_requires")}),"preflight.run-one-cycle-with-candidate-card":t=>a.preflightRunOneCycleWithCandidateCard({candidateCardContent:chunkLPXVVMQT_cjs.d(t,"candidate_card_content","candidate_card_content"),mockRequires:chunkLPXVVMQT_cjs.c(t,"mock_requires")}),"manage.read-card":t=>a.manageReadCard({cardId:chunkLPXVVMQT_cjs.a(t,"card_id")}),"stage-ai-response-and-any-attachments":t=>{let i=chunkLPXVVMQT_cjs.a(t,"turn_id");if(!i)throw Object.assign(new Error("stage-ai-response-and-any-attachments requires a non-empty turn_id"),{statusCode:400});return a.manageAddChatEntryAndAnyAttachments({cardId:chunkLPXVVMQT_cjs.a(t,"card_id"),role:"assistant",...typeof t.text=="string"?{text:t.text}:{},...i?{turn:i}:{},...Array.isArray(t.files)?{files:t.files}:{}})},"stage-ai-failure-message":t=>{let i=chunkLPXVVMQT_cjs.a(t,"turn_id"),c=chunkLPXVVMQT_cjs.a(t,"failure");if(!i)throw Object.assign(new Error("stage-ai-failure-message requires a non-empty turn_id"),{statusCode:400});if(!c)throw Object.assign(new Error("stage-ai-failure-message requires a non-empty failure"),{statusCode:400});return a.manageAddChatEntryAndAnyAttachments({cardId:chunkLPXVVMQT_cjs.a(t,"card_id"),role:"system",text:c,turn:i})},"manage.upsert-card":t=>a.manageUpsertCard({cardId:chunkLPXVVMQT_cjs.a(t,"card_id"),candidateCardContent:chunkLPXVVMQT_cjs.c(t,"candidate_card_content")}),"manage.remove-card":t=>a.manageRemoveCard({cardId:chunkLPXVVMQT_cjs.a(t,"card_id")})}}function mt(a){return {"webhook.process-accumulated":()=>a.webhookProcessAccumulated(),"webhook.source-fetch-done":t=>a.webhookSourceFetchDone({token:chunkLPXVVMQT_cjs.a(t,"token"),ref:chunkLPXVVMQT_cjs.a(t,"ref")}),"webhook.source-fetch-failed":t=>a.webhookSourceFetchFailed({token:chunkLPXVVMQT_cjs.a(t,"token"),reason:chunkLPXVVMQT_cjs.a(t,"reason")})}}function ft(a){let{boardId:t,uploadCardFile:i,getMcpFacade:c,controlplane:g}=a;function _(n,f){let h=chunkLPXVVMQT_cjs.a(n,"board_id");if(!h)throw Object.assign(new Error(`${f} requires board_id`),{statusCode:400});if(h!==t)throw Object.assign(new Error(`Unknown board_id: ${h}`),{statusCode:400})}function S(n,f){let{cardId:h}=g.requireCardArgs(n),w=chunkLPXVVMQT_cjs.a(n,"turn_id");return _(n,f),c().manageAddChatAttachment({cardId:h,role:chunkLPXVVMQT_cjs.a(n,"role")||"user",...w?{turn:w}:{},files:[{file_name:chunkLPXVVMQT_cjs.a(n,"file_name"),content_type:chunkLPXVVMQT_cjs.a(n,"content_type")||"application/octet-stream",...typeof n.text=="string"?{text:n.text}:{},...typeof n.base64=="string"?{base64:n.base64}:{},...Array.isArray(n.bytes)?{bytes:n.bytes}:{}}]})}return {"list-runtime-cards":n=>(_(n,"list-runtime-cards"),c().listRuntimeCards()),"sse.subscribe-chat":n=>g.subscribeChat(n),"sse.unsubscribe-chat":n=>g.unsubscribeChat(n),"sse.watch-channel":n=>g.watchChannel(n,true),"sse.unwatch-channel":n=>g.watchChannel(n,false),"getstate.is-chat-processing":n=>g.getChatProcessing(n),"setstate.chat-processing-started":n=>g.setChatProcessing(n,true),"setstate.chat-processing-done":n=>g.setChatProcessing(n,false),"getstate.card-private":n=>g.getCardMeta(n),"setstate.card-private":n=>g.setCardMeta(n),"manage.upload-card-file":n=>{let f=chunkLPXVVMQT_cjs.a(n,"card_id"),h=chunkLPXVVMQT_cjs.a(n,"file_name"),w=chunkLPXVVMQT_cjs.a(n,"content_type")||"application/octet-stream",R=chunkLPXVVMQT_cjs.f(n);if(_(n,"manage.upload-card-file"),!f)throw Object.assign(new Error("manage.upload-card-file requires card_id"),{statusCode:400});if(!h)throw Object.assign(new Error("manage.upload-card-file requires file_name"),{statusCode:400});if(!R)throw Object.assign(new Error("manage.upload-card-file requires args.bytes, args.text, or args.base64"),{statusCode:400});return i(f,h,w,R,{inChat:false})},"manage.add-chat-attachment":n=>S(n,"manage.add-chat-attachment"),"manage.add-chat-attachement":n=>S(n,"manage.add-chat-attachement"),"manage.add-chat-entry-and-any-attachments":n=>{let{cardId:f}=g.requireCardArgs(n),h=chunkLPXVVMQT_cjs.a(n,"role")||"user",w=chunkLPXVVMQT_cjs.a(n,"turn_id");return _(n,"manage.add-chat-entry-and-any-attachments"),c().manageAddChatEntryAndAnyAttachments({cardId:f,role:h,...typeof n.text=="string"?{text:n.text}:{},...w?{turn:w}:{},...Array.isArray(n.files)?{files:n.files}:{}})},"manage.patch-card":n=>{let{cardId:f}=g.requireCardArgs(n);return _(n,"manage.patch-card"),c().managePatchCard({cardId:f,patch:chunkLPXVVMQT_cjs.c(n,"patch")},{allowControlplaneOnlyCards:true})},"manage.upsert-card":n=>{let{cardId:f}=g.requireCardArgs(n);return _(n,"manage.upsert-card"),c().manageUpsertCard({cardId:f,candidateCardContent:chunkLPXVVMQT_cjs.c(n,"candidate_card_content")},{allowControlplaneOnlyCards:true})},"manage.remove-card":n=>{let{cardId:f}=g.requireCardArgs(n);return _(n,"manage.remove-card"),c().manageRemoveCard({cardId:f},{allowControlplaneOnlyCards:true})},"manage.admin-read-card":async n=>{let{cardId:f}=g.requireCardArgs(n);return {status:"success",data:{cards:await c().adminReadCard({cardId:f})}}},"manage.admin-upsert-card":n=>{let f=chunkLPXVVMQT_cjs.a(n,"board_id"),h=chunkLPXVVMQT_cjs.a(n,"card_id");if(!f)throw Object.assign(new Error("manage.admin-upsert-card requires board_id"),{statusCode:400});if(!h)throw Object.assign(new Error("manage.admin-upsert-card requires card_id"),{statusCode:400});if(f!==t)throw Object.assign(new Error(`Unknown board_id: ${f}`),{statusCode:400});return c().adminUpsertCard({cardId:h,candidateCardContent:chunkLPXVVMQT_cjs.c(n,"candidate_card_content")})}}}function yt(a){let{boardContexts:t,cardOwnerIndex:i,cardContextForCard:c,readStatusSnapshot:g,readDataObjectsByToken:_,readCardRuntimeArtifacts:S,readCardFromStore:n,readCardDefinitions:f,processAccumulatedLaneInternal:h,reportSourceFetched:w,reportSourceFetchFailure:R,uploadCardFile:I,chatStorePublic:u,serverUrl:b,apiBasePath:m}=a;function p(){return t[0]??null}function y(){return {async status(){let e=await g();return e==null?{status:"fail",error:"Board status is unavailable"}:{status:"success",data:e}},async getOutputsDataObject(e){let r=e?.params?.key;return r?{status:"success",data:(await _())[r]}:{status:"fail",error:"getOutputsDataObject requires params.key"}},async getOutputsComputedValues(e){let r=e?.params?.key;return r?{status:"success",data:(await S())[r]?.computed_values}:{status:"fail",error:"getOutputsComputedValues requires params.key"}},async getOutputsFetchedSources(e){let r=e?.params?.key;if(!r)return {status:"fail",error:"getOutputsFetchedSources requires params.key"};let o=c(r)??p();return o?o.boardOps.getOutputsFetchedSources({params:{key:r}}):{status:"fail",error:"Board context is unavailable"}},async removeCard(e){let r=e?.params?.id;if(!r)return {status:"fail",error:"removeCard requires params.id"};let o=c(r)??p();return o?o.boardOps.removeCard({params:{id:r}}):{status:"fail",error:"Board context is unavailable"}},async upsertCard(e){let r=e?.params?.cardId;if(!r)return {status:"fail",error:"upsertCard requires params.cardId"};let o=c(r)??p();if(!o)return {status:"fail",error:"Board context is unavailable"};let k=await o.boardOps.upsertCard({params:{cardId:r,restart:e.params.restart===true}});if(k.status!=="success")return k;if(chunkBQUQTOPB_cjs.a(o.boardAdapter)){let P=await h(true);if(P.status!=="success")return P}return k}}}function C(){let e=()=>{let r=p();if(!r?.nonCore)throw new Error("Board non-core adapter is not configured for MCP preflight/discovery tools");return r.nonCore};return {describeTaskExecutorCapabilities(r){return e().describeTaskExecutorCapabilities(r)},validateCardPreflight(r){return e().validateCardPreflight(r)},evalCardCompute(r){return e().evalCardCompute(r)},probeSourcePreflight(r){return e().probeSourcePreflight(r)},runSourcePreflight(r){return e().runSourcePreflight(r)},simulateCardCycle(r){return e().simulateCardCycle(r)}}}function s(){return {async get(e){let r=typeof e.params?.id=="string"?e.params.id:void 0;if(r){let o=await n(r);return o?{status:"success",data:{cards:[o]}}:{status:"success",data:{cards:[]}}}return {status:"success",data:{cards:await f()}}},async set(e){let r=e.body;if(r==null)return {status:"fail",error:"set requires a body (card object or array of cards)"};let o=Array.isArray(r)?r:[r];for(let k of o){let P=k,A=typeof P.id=="string"?P.id:"";if(!A)return {status:"fail",error:"each card must have a string `id` field"};let E=i.get(A)??0,D=t[E]??p();if(!D)return {status:"fail",error:"Board context is unavailable"};let L=await D.cardStoreOps.set({body:P});if(L.status!=="success")return L;i.set(A,E);}return {status:"success",data:{count:o.length}}},async del(e){let r=[e.params?.id,...e.body?.ids??[]].filter(o=>typeof o=="string"&&!!o);if(r.length===0)return {status:"fail",error:"del requires body.ids (string[]) or params.id"};for(let o of r){let k=c(o)??p();if(!k)return {status:"fail",error:"Board context is unavailable"};let P=await k.cardStoreOps.del({params:{id:o}});if(P.status!=="success")return P;i.delete(o);}return {status:"success",data:{count:r.length}}},async patch(e){let r=typeof e.params?.id=="string"?e.params.id:void 0,o=typeof e.params?.path=="string"?e.params.path:void 0;if(!r||!o)return {status:"fail",error:"patch requires params.id and params.path"};let k=c(r)??p();return k?k.cardStoreOps.patch(e):{status:"fail",error:"Board context is unavailable"}},async appendFiles(e){let r=typeof e.params?.id=="string"?e.params.id:void 0;if(!r)return {status:"fail",error:"appendFiles requires params.id"};let o=c(r)??p();return o?o.cardStoreOps.appendFiles(e):{status:"fail",error:"Board context is unavailable"}}}}function d(){return chunkGHUW6P4G_cjs.a({board:y(),nonCore:C(),cardStore:s(),chatStore:u,processAccumulated:()=>h(true),sourceFetchDone:({token:e,ref:r})=>w(e,r),sourceFetchFailed:({token:e,reason:r})=>R(e,r),uploadCardFile({cardId:e,fileName:r,contentType:o,bytes:k,suppressChatRecordWrite:P}){return I(e,r,o,k,{inChat:true,...P===true?{suppressChatRecordWrite:true}:{}})},buildFileDownloadUrl({cardId:e,fileIdx:r,storedName:o}){let k=`${b||""}${m}/cards/${encodeURIComponent(e)}/files/${r}`;return o?`${k}?sn=${encodeURIComponent(o)}`:k},readFetchedSourceJsonByRef({cardId:e,ref:r}){let o=c(e)??p();if(!o||chunkBQUQTOPB_cjs.a(o.boardAdapter))return null;let A=o.boardAdapter.resolveBlob(chunkVQCIOKJV_cjs.b(r)).trim();return A?JSON.parse(A):null}})}return {mcpBoardFacade:y,mcpNonCoreFacade:C,mcpCardStoreFacade:s,createMcpFacade:d}}exports.a=J;exports.b=X;exports.c=Q;exports.d=z;exports.e=Y;exports.f=j;exports.g=N;exports.h=T;exports.i=q;exports.j=ot;exports.k=it;exports.l=ct;exports.m=pt;exports.n=mt;exports.o=ft;exports.p=yt;//# sourceMappingURL=chunk-LRO5AL75.cjs.map
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunkBQUQTOPB_cjs=require('./chunk-BQUQTOPB.cjs'),chunkLPXVVMQT_cjs=require('./chunk-LPXVVMQT.cjs'),chunkGHUW6P4G_cjs=require('./chunk-GHUW6P4G.cjs'),chunkVQCIOKJV_cjs=require('./chunk-VQCIOKJV.cjs');function M(a){if(!a||typeof a!="object")return false;let t=a;return typeof t.kind=="string"&&t.kind.length>0}function J(a){if(!a||typeof a!="object")return [];let t=a;return t.kind==="notification-batch"?Array.isArray(t.notifications)?t.notifications.filter(M):[]:M(a)?[a]:[]}function X(a,t,i){let c=0;return {accepted:a.filter(_=>{if(!M(_))return c++,false;let S=_;return typeof S.sentAtMs=="number"&&t-S.sentAtMs>i?(c++,false):true}),rejected:c}}function Q(){return {status:null,computedValues:{},dataObjects:{},cards:{}}}function z(a){if(!a||typeof a!="object")return false;let t=a.summary;return !t||typeof t!="object"?false:Number(t.card_count||0)>0}function W(a){if(!a||typeof a!="object")return false;let t=a;return t.kind==="notification-batch"&&Array.isArray(t.notifications)}function V(a,t){if(t.kind==="status"){z(t.status)&&(a.status=t.status);return}if(t.kind==="computed_values"){a.computedValues[t.cardId]=t.values;return}if(t.kind==="data_object"){a.dataObjects[t.key]=t.payload;return}if(t.kind==="card_refreshed"){a.cards[t.cardId]=t.card;return}t.kind==="card_removed"&&(delete a.cards[t.cardId],delete a.computedValues[t.cardId]);}function Y(a,t){if(W(t)){for(let i of t.notifications)M(i)&&V(a,i);return}M(t)&&V(a,t);}function j(a,t){if(a?.status==="success")return Object.prototype.hasOwnProperty.call(a,"data")?a.data:void 0;throw a?.status==="fail"||a?.status==="error"?Object.assign(new Error(a.error||`${t} failed`),{statusCode:400}):Object.assign(new Error(`${t} returned an unexpected response`),{statusCode:500})}async function N(a,t){return j(await a,t)}function T(a){let t=chunkLPXVVMQT_cjs.a(a,"key");if(!t)throw Object.assign(new Error("MCP tool requires key"),{statusCode:400});let i=t.split(".");if(!(i.length>=2&&i.every(g=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(g))))throw Object.assign(new Error("MCP tool requires a card private key with at least two identifier segments (e.g. chat.foundry_thread_id)"),{statusCode:400});return t}function q(a,t){let i=a.__private;for(let c of t.split(".")){if(!i||typeof i!="object"||Array.isArray(i)||!Object.prototype.hasOwnProperty.call(i,c))return {exists:false,value:null};i=i[c];}return {exists:true,value:i}}function ot(a){let{boardId:t,bootstrapBoard:i,sseHub:c,onChannelSubscribed:g,onChannelUnsubscribed:_,getMcpFacade:S,getMcpCardStoreFacade:n}=a;function f(s){let d=chunkLPXVVMQT_cjs.a(s,"board_id");if(!d)throw Object.assign(new Error("MCP tool requires board_id"),{statusCode:400});if(d!==t)throw Object.assign(new Error(`Unknown board_id: ${d}`),{statusCode:400})}function h(s){let d=chunkLPXVVMQT_cjs.a(s,"client_id");if(!d)throw Object.assign(new Error("MCP tool requires client_id"),{statusCode:400});return d}function w(s){f(s);let d=h(s),e=chunkLPXVVMQT_cjs.a(s,"channel_name"),r=chunkLPXVVMQT_cjs.a(s,"card_id")||void 0;if(!e)throw Object.assign(new Error("MCP tool requires channel_name"),{statusCode:400});return {clientId:d,channelName:e,...r?{cardId:r}:{}}}function R(s){f(s);let d=chunkLPXVVMQT_cjs.a(s,"card_id");if(!d)throw Object.assign(new Error("MCP tool requires card_id"),{statusCode:400});return {cardId:d}}async function I(s){await i();let{cardId:d}=R(s),e=h(s);if(!await c.subscribeChat(e,d))throw Object.assign(new Error(`SSE client not connected: ${e}`),{statusCode:404});return {status:"success",data:{boardId:t,cardId:d,clientId:e,subscribed:true}}}async function u(s){await i();let{cardId:d}=R(s),e=h(s);if(!c.unsubscribeChat(e,d))throw Object.assign(new Error(`SSE client not connected: ${e}`),{statusCode:404});return {status:"success",data:{boardId:t,cardId:d,clientId:e,subscribed:false}}}async function b(s,d){await i();let{clientId:e,channelName:r,cardId:o}=w(s);if(!c.has(e))throw Object.assign(new Error(`SSE client not connected: ${e}`),{statusCode:404});return d?(c.subscribeChannel(e,r,o),g?.(e,r,o?{cardId:o}:{})):(c.unsubscribeChannel(e,r,o),_?.(e,r,o?{cardId:o}:{})),{status:"success",data:{boardId:t,clientId:e,channelName:r,subscribed:d,...o?{cardId:o}:{}}}}async function m(s,d){let{cardId:e}=R(s);return await S().setChatProcessing({cardId:e,active:d}),{status:"success",data:{boardId:t,cardId:e,active:d}}}async function p(s){let{cardId:d}=R(s),e=await S().getChatProcessing({cardId:d});return {status:"success",data:{boardId:t,cardId:d,active:e.active}}}async function y(s){let{cardId:d}=R(s),e=T(s);if(!Object.prototype.hasOwnProperty.call(s,"value"))throw Object.assign(new Error("MCP tool requires value"),{statusCode:400});if(e.split(".").includes("visible_controlplane_only")){let r=await N(n().get({params:{id:d}}),"cardStore.get"),o=Array.isArray(r.cards)&&r.cards.length>0&&typeof r.cards[0]=="object"&&!Array.isArray(r.cards[0])?r.cards[0]:null,k=o?q(o,"visible_controlplane_only").value:void 0;if(s.value!==k)throw Object.assign(new Error("MCP tool cannot change the reserved private flag visible_controlplane_only"),{statusCode:403});return {status:"success",data:{boardId:t,cardId:d,key:e}}}return j(await n().patch({params:{id:d,path:`__private.${e}`},body:{value:s.value}}),"cardStore.patch"),{status:"success",data:{boardId:t,cardId:d,key:e}}}async function C(s){let{cardId:d}=R(s),e=T(s),r=await N(n().get({params:{id:d}}),"cardStore.get"),o=Array.isArray(r.cards)&&r.cards.length>0&&r.cards[0]&&typeof r.cards[0]=="object"&&!Array.isArray(r.cards[0])?r.cards[0]:null;if(!o)throw Object.assign(new Error(`Card "${d}" not found`),{statusCode:404});let k=q(o,e);return {status:"success",data:{boardId:t,cardId:d,key:e,exists:k.exists,value:k.value}}}return {requireCardArgs:R,subscribeChat:I,unsubscribeChat:u,watchChannel:b,setChatProcessing:m,getChatProcessing:p,setCardMeta:y,getCardMeta:C}}function it(a){let{boardId:t,boardContexts:i,readChatRecords:c,getChatProcessing:g}=a,_=Number.isInteger(a.chatBootstrapTailTurns)&&a.chatBootstrapTailTurns>0?a.chatBootstrapTailTurns:1;function S(u){return {role:String(u.role||"system"),text:String(u.text||""),files:Array.isArray(u.files)?u.files:[],...typeof u.turn=="string"&&u.turn?{turn:u.turn}:{}}}function n(u){if(u.length===0)return null;if(u.length===1)return u[0];let b=[],m=["completed","eligible","pending","blocked","unresolved","failed","in_progress","orphan_cards"],p={};for(let C of m)p[C]=0;for(let C of u){let s=C,d=Array.isArray(s.cards)?s.cards:[];b.push(...d);for(let e of m)p[e]+=Number(s?.summary?.[e]||0);}let y=u[0];return {...y,cards:b,summary:{...y.summary||{},card_count:b.length,...p}}}async function f(){let u=[];for(let b of i)try{let m=await b.boardOps.buildSseOneShotPayload({});m.status==="success"&&m.data&&u.push(m.data);}catch{}return u}async function h(){let b=(await f()).map(m=>m.statusSnapshot).filter(Boolean);if(b.length===0){let m=i.map(p=>p.notification.status).filter(Boolean);return n(m)}return n(b)}async function w(){let u={},b=await f();for(let m of b)Object.assign(u,m.cardRuntimeById||{});if(Object.keys(u).length>0)return u;for(let m of i)for(let[p,y]of Object.entries(m.notification.computedValues)){let C=m.notification.cards[p];u[p]={schema_version:"v1",card_id:p,card_data:C?.card_data??{},computed_values:y??{}};}return u}async function R(){let u={},b=await f();for(let m of b)Object.assign(u,m.dataObjectsByToken||{});if(Object.keys(u).length===0)for(let m of i)Object.assign(u,m.notification.dataObjects||{});return u}async function I(){let u=await f(),b=u.flatMap(C=>Array.isArray(C.cardDefinitions)?C.cardDefinitions:[]),m={},p={};for(let C of u)Object.assign(m,C.dataObjectsByToken||{}),Object.assign(p,C.cardRuntimeById||{});let y={};for(let C of b){if(!C?.id)continue;let s=C.id;try{let d=await c(s,{tailTurns:_}),e=await g(s);(d.length>0||e)&&(y[s]={messages:d.map(r=>S(r)),receiving:!1,processing:e});}catch{}}return {boardId:t,cardDefinitions:b,statusSnapshot:await h(),dataObjectsByToken:m,cardRuntimeById:p,cardChatsByCardId:y}}return {readStatusSnapshot:h,readCardRuntimeArtifacts:w,readDataObjectsByToken:R,buildPublishedRuntimePayload:I}}function K(a){let t=String(a||"").trim();if(!t)return "upload.bin";let i=Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\"));return (i>=0?t.slice(i+1):t)||"upload.bin"}function ct(a){let{safeCardId:t,artifactsStores:i,cardFileMetadataStore:c,readCardFromStore:g,updateCardLocalOnly:_,writeChatRecord:S}=a;async function n(w){let R=[];try{let I=await g(w);if(!I)return R;let u=c().read(I.card_data&&typeof I.card_data=="object"?I.card_data:null);for(let b of u)R.push(String(b.stored_name??""));}catch{}return R}async function f(w,R,I,u){let b=t(w),m=i(w),p=K(R),y=await n(w),s=`${String(y.length+1).padStart(3,"0")}-${p}`.slice(-36);if(!m.files)throw Object.assign(new Error(`artifactsStoreRef is not configured for card uploads: ${w}`),{statusCode:500});return await m.files.putBytes(`${b}/${s}`,new Uint8Array(u),I||"application/octet-stream"),{name:p,stored_name:s,size:u.length,mime_type:I||"application/octet-stream",uploaded_at:new Date().toISOString()}}async function h(w,R,I,u,b){if(!u.length)throw Object.assign(new Error("Empty upload body"),{statusCode:400});let m=b?.inChat===true,p=await f(w,R,I,u),y=null;if(await _(w,C=>{let s=new Date().toISOString(),d=C.card_data&&typeof C.card_data=="object"?C.card_data:{};C.card_data=d;let e=c().normalizeIncoming([{name:p.name,stored_name:p.stored_name,size:p.size,mime_type:p.mime_type,uploaded_at:p.uploaded_at||s,chat:m}],s);return y=c().merge(d,e).findIndex(o=>o.stored_name===p.stored_name),C}),m&&b?.suppressChatRecordWrite!==true){let C=typeof y=="number"&&y>=0?` #${y}`:"";await S(w,"system",`file uploaded: ${p.name} as ${p.stored_name}${C}`,[],b?.turnId??"");}return {ok:true,file:{...p,...typeof y=="number"&&y>=0?{file_idx:y}:{},chat:m},...typeof y=="number"&&y>=0?{file_idx:y}:{}}}return {uploadCardFile:h,readCardStoredFileNames:n}}function pt(a){return {"discover.source-kinds":()=>a.discoverSourceKinds(),"inspect.board-runtime-status":()=>a.inspectBoardRuntimeStatus(),"inspect.card-definition-and-runtime":t=>a.inspectCardDefinitionAndRuntime({cardId:chunkLPXVVMQT_cjs.a(t,"card_id")}),"inspect.chat-messages-on-cards":t=>{let i=chunkLPXVVMQT_cjs.b(t,"tail_turns"),c=chunkLPXVVMQT_cjs.b(t,"tail"),g=chunkLPXVVMQT_cjs.a(t,"turn_id"),_=t.all_turns===true,S=chunkLPXVVMQT_cjs.a(t,"tail_turns_before_id");return a.inspectChatMessagesOnCards({cardId:chunkLPXVVMQT_cjs.a(t,"card_id"),...i!==void 0?{lastUserTurns:i}:{},...c!==void 0?{tail:c}:{},...g?{turnId:g}:{},..._?{allTurns:true}:{},...S?{tailTurnsBeforeId:S}:{}})},"inspect.file-contents":t=>a.inspectFileContents({cardId:chunkLPXVVMQT_cjs.a(t,"card_id"),fileIdx:Number(chunkLPXVVMQT_cjs.b(t,"file_idx"))}),"preflight.validate-candidate-card-definition":t=>a.preflightValidateCandidateCardDefinition({candidateCardContent:chunkLPXVVMQT_cjs.d(t,"candidate_card_content","candidate_card_content")}),"preflight.materialize-candidate-card":t=>a.preflightMaterializeCandidateCard({candidateCardContent:chunkLPXVVMQT_cjs.d(t,"candidate_card_content","candidate_card_content"),mockRequires:chunkLPXVVMQT_cjs.d(t,"mock_requires","mock_requires"),mockFetchedSources:chunkLPXVVMQT_cjs.d(t,"mock_fetched_sources","mock_fetched_sources")}),"preflight.probe-single-source-in-candidate-card":t=>a.preflightProbeSingleSourceInCandidateCard({candidateCardContent:chunkLPXVVMQT_cjs.d(t,"candidate_card_content","candidate_card_content"),mockProjections:chunkLPXVVMQT_cjs.c(t,"mock_projections"),sourceIdx:chunkLPXVVMQT_cjs.e(t,"source_idx","source_idx")}),"preflight.run-single-source-in-candidate-card":t=>a.preflightRunSingleSourceInCandidateCard({candidateCardContent:chunkLPXVVMQT_cjs.d(t,"candidate_card_content","candidate_card_content"),mockProjections:chunkLPXVVMQT_cjs.c(t,"mock_projections"),sourceIdx:chunkLPXVVMQT_cjs.e(t,"source_idx","source_idx")}),"preflight.run-single-source-in-live-card":t=>a.preflightRunSingleSourceInLiveCard({cardId:chunkLPXVVMQT_cjs.a(t,"card_id"),sourceIdx:chunkLPXVVMQT_cjs.e(t,"source_idx","source_idx"),mockRequires:chunkLPXVVMQT_cjs.d(t,"mock_requires","mock_requires")}),"preflight.run-one-cycle-with-candidate-card":t=>a.preflightRunOneCycleWithCandidateCard({candidateCardContent:chunkLPXVVMQT_cjs.d(t,"candidate_card_content","candidate_card_content"),mockRequires:chunkLPXVVMQT_cjs.c(t,"mock_requires")}),"manage.read-card":t=>a.manageReadCard({cardId:chunkLPXVVMQT_cjs.a(t,"card_id")}),"stage-ai-response-and-any-attachments":t=>{let i=chunkLPXVVMQT_cjs.a(t,"turn_id");if(!i)throw Object.assign(new Error("stage-ai-response-and-any-attachments requires a non-empty turn_id"),{statusCode:400});return a.manageAddChatEntryAndAnyAttachments({cardId:chunkLPXVVMQT_cjs.a(t,"card_id"),role:"assistant",...typeof t.text=="string"?{text:t.text}:{},...i?{turn:i}:{},...Array.isArray(t.files)?{files:t.files}:{}})},"stage-ai-failure-message":t=>{let i=chunkLPXVVMQT_cjs.a(t,"turn_id"),c=chunkLPXVVMQT_cjs.a(t,"failure");if(!i)throw Object.assign(new Error("stage-ai-failure-message requires a non-empty turn_id"),{statusCode:400});if(!c)throw Object.assign(new Error("stage-ai-failure-message requires a non-empty failure"),{statusCode:400});return a.manageAddChatEntryAndAnyAttachments({cardId:chunkLPXVVMQT_cjs.a(t,"card_id"),role:"system",text:c,turn:i})},"manage.upsert-card":t=>a.manageUpsertCard({cardId:chunkLPXVVMQT_cjs.a(t,"card_id"),candidateCardContent:chunkLPXVVMQT_cjs.c(t,"candidate_card_content")}),"manage.remove-card":t=>a.manageRemoveCard({cardId:chunkLPXVVMQT_cjs.a(t,"card_id")})}}function mt(a){return {"webhook.process-accumulated":()=>a.webhookProcessAccumulated(),"webhook.source-fetch-done":t=>a.webhookSourceFetchDone({token:chunkLPXVVMQT_cjs.a(t,"token"),ref:chunkLPXVVMQT_cjs.a(t,"ref")}),"webhook.source-fetch-failed":t=>a.webhookSourceFetchFailed({token:chunkLPXVVMQT_cjs.a(t,"token"),reason:chunkLPXVVMQT_cjs.a(t,"reason")})}}function ft(a){let{boardId:t,uploadCardFile:i,getMcpFacade:c,controlplane:g}=a;function _(n,f){let h=chunkLPXVVMQT_cjs.a(n,"board_id");if(!h)throw Object.assign(new Error(`${f} requires board_id`),{statusCode:400});if(h!==t)throw Object.assign(new Error(`Unknown board_id: ${h}`),{statusCode:400})}function S(n,f){let{cardId:h}=g.requireCardArgs(n),w=chunkLPXVVMQT_cjs.a(n,"turn_id");return _(n,f),c().manageAddChatAttachment({cardId:h,role:chunkLPXVVMQT_cjs.a(n,"role")||"user",...w?{turn:w}:{},files:[{file_name:chunkLPXVVMQT_cjs.a(n,"file_name"),content_type:chunkLPXVVMQT_cjs.a(n,"content_type")||"application/octet-stream",...typeof n.text=="string"?{text:n.text}:{},...typeof n.base64=="string"?{base64:n.base64}:{},...Array.isArray(n.bytes)?{bytes:n.bytes}:{}}]})}return {"list-runtime-cards":n=>(_(n,"list-runtime-cards"),c().listRuntimeCards()),"sse.subscribe-chat":n=>g.subscribeChat(n),"sse.unsubscribe-chat":n=>g.unsubscribeChat(n),"sse.watch-channel":n=>g.watchChannel(n,true),"sse.unwatch-channel":n=>g.watchChannel(n,false),"getstate.is-chat-processing":n=>g.getChatProcessing(n),"setstate.chat-processing-started":n=>g.setChatProcessing(n,true),"setstate.chat-processing-done":n=>g.setChatProcessing(n,false),"getstate.card-private":n=>g.getCardMeta(n),"setstate.card-private":n=>g.setCardMeta(n),"manage.upload-card-file":n=>{let f=chunkLPXVVMQT_cjs.a(n,"card_id"),h=chunkLPXVVMQT_cjs.a(n,"file_name"),w=chunkLPXVVMQT_cjs.a(n,"content_type")||"application/octet-stream",R=chunkLPXVVMQT_cjs.f(n);if(_(n,"manage.upload-card-file"),!f)throw Object.assign(new Error("manage.upload-card-file requires card_id"),{statusCode:400});if(!h)throw Object.assign(new Error("manage.upload-card-file requires file_name"),{statusCode:400});if(!R)throw Object.assign(new Error("manage.upload-card-file requires args.bytes, args.text, or args.base64"),{statusCode:400});return i(f,h,w,R,{inChat:false})},"manage.add-chat-attachment":n=>S(n,"manage.add-chat-attachment"),"manage.add-chat-attachement":n=>S(n,"manage.add-chat-attachement"),"manage.add-chat-entry-and-any-attachments":n=>{let{cardId:f}=g.requireCardArgs(n),h=chunkLPXVVMQT_cjs.a(n,"role")||"user",w=chunkLPXVVMQT_cjs.a(n,"turn_id");return _(n,"manage.add-chat-entry-and-any-attachments"),c().manageAddChatEntryAndAnyAttachments({cardId:f,role:h,...typeof n.text=="string"?{text:n.text}:{},...w?{turn:w}:{},...Array.isArray(n.files)?{files:n.files}:{}})},"manage.patch-card":n=>{let{cardId:f}=g.requireCardArgs(n);return _(n,"manage.patch-card"),c().managePatchCard({cardId:f,patch:chunkLPXVVMQT_cjs.c(n,"patch")},{allowControlplaneOnlyCards:true})},"manage.upsert-card":n=>{let{cardId:f}=g.requireCardArgs(n);return _(n,"manage.upsert-card"),c().manageUpsertCard({cardId:f,candidateCardContent:chunkLPXVVMQT_cjs.c(n,"candidate_card_content")},{allowControlplaneOnlyCards:true})},"manage.remove-card":n=>{let{cardId:f}=g.requireCardArgs(n);return _(n,"manage.remove-card"),c().manageRemoveCard({cardId:f},{allowControlplaneOnlyCards:true})},"manage.admin-read-card":async n=>{let{cardId:f}=g.requireCardArgs(n);return {status:"success",data:{cards:await c().adminReadCard({cardId:f})}}},"manage.admin-upsert-card":n=>{let f=chunkLPXVVMQT_cjs.a(n,"board_id"),h=chunkLPXVVMQT_cjs.a(n,"card_id");if(!f)throw Object.assign(new Error("manage.admin-upsert-card requires board_id"),{statusCode:400});if(!h)throw Object.assign(new Error("manage.admin-upsert-card requires card_id"),{statusCode:400});if(f!==t)throw Object.assign(new Error(`Unknown board_id: ${f}`),{statusCode:400});return c().adminUpsertCard({cardId:h,candidateCardContent:chunkLPXVVMQT_cjs.c(n,"candidate_card_content")})}}}function yt(a){let{boardContexts:t,cardOwnerIndex:i,cardContextForCard:c,readStatusSnapshot:g,readDataObjectsByToken:_,readCardRuntimeArtifacts:S,readCardFromStore:n,readCardDefinitions:f,processAccumulatedLaneInternal:h,reportSourceFetched:w,reportSourceFetchFailure:R,uploadCardFile:I,chatStorePublic:u,serverUrl:b,apiBasePath:m}=a;function p(){return t[0]??null}function y(){return {async status(){let e=await g();return e==null?{status:"fail",error:"Board status is unavailable"}:{status:"success",data:e}},async getOutputsDataObject(e){let r=e?.params?.key;return r?{status:"success",data:(await _())[r]}:{status:"fail",error:"getOutputsDataObject requires params.key"}},async getOutputsComputedValues(e){let r=e?.params?.key;return r?{status:"success",data:(await S())[r]?.computed_values}:{status:"fail",error:"getOutputsComputedValues requires params.key"}},async getOutputsFetchedSources(e){let r=e?.params?.key;if(!r)return {status:"fail",error:"getOutputsFetchedSources requires params.key"};let o=c(r)??p();return o?o.boardOps.getOutputsFetchedSources({params:{key:r}}):{status:"fail",error:"Board context is unavailable"}},async removeCard(e){let r=e?.params?.id;if(!r)return {status:"fail",error:"removeCard requires params.id"};let o=c(r)??p();return o?o.boardOps.removeCard({params:{id:r}}):{status:"fail",error:"Board context is unavailable"}},async upsertCard(e){let r=e?.params?.cardId;if(!r)return {status:"fail",error:"upsertCard requires params.cardId"};let o=c(r)??p();if(!o)return {status:"fail",error:"Board context is unavailable"};let k=await o.boardOps.upsertCard({params:{cardId:r,restart:e.params.restart===true}});if(k.status!=="success")return k;if(chunkBQUQTOPB_cjs.a(o.boardAdapter)){let P=await h(true);if(P.status!=="success")return P}return k}}}function C(){let e=()=>{let r=p();if(!r?.nonCore)throw new Error("Board non-core adapter is not configured for MCP preflight/discovery tools");return r.nonCore};return {describeTaskExecutorCapabilities(r){return e().describeTaskExecutorCapabilities(r)},validateCardPreflight(r){return e().validateCardPreflight(r)},evalCardCompute(r){return e().evalCardCompute(r)},probeSourcePreflight(r){return e().probeSourcePreflight(r)},runSourcePreflight(r){return e().runSourcePreflight(r)},simulateCardCycle(r){return e().simulateCardCycle(r)}}}function s(){return {async get(e){let r=typeof e.params?.id=="string"?e.params.id:void 0;if(r){let o=await n(r);return o?{status:"success",data:{cards:[o]}}:{status:"success",data:{cards:[]}}}return {status:"success",data:{cards:await f()}}},async set(e){let r=e.body;if(r==null)return {status:"fail",error:"set requires a body (card object or array of cards)"};let o=Array.isArray(r)?r:[r];for(let k of o){let P=k,A=typeof P.id=="string"?P.id:"";if(!A)return {status:"fail",error:"each card must have a string `id` field"};let E=i.get(A)??0,D=t[E]??p();if(!D)return {status:"fail",error:"Board context is unavailable"};let L=await D.cardStoreOps.set({body:P});if(L.status!=="success")return L;i.set(A,E);}return {status:"success",data:{count:o.length}}},async del(e){let r=[e.params?.id,...e.body?.ids??[]].filter(o=>typeof o=="string"&&!!o);if(r.length===0)return {status:"fail",error:"del requires body.ids (string[]) or params.id"};for(let o of r){let k=c(o)??p();if(!k)return {status:"fail",error:"Board context is unavailable"};let P=await k.cardStoreOps.del({params:{id:o}});if(P.status!=="success")return P;i.delete(o);}return {status:"success",data:{count:r.length}}},async patch(e){let r=typeof e.params?.id=="string"?e.params.id:void 0,o=typeof e.params?.path=="string"?e.params.path:void 0;if(!r||!o)return {status:"fail",error:"patch requires params.id and params.path"};let k=c(r)??p();return k?k.cardStoreOps.patch(e):{status:"fail",error:"Board context is unavailable"}},async appendFiles(e){let r=typeof e.params?.id=="string"?e.params.id:void 0;if(!r)return {status:"fail",error:"appendFiles requires params.id"};let o=c(r)??p();return o?o.cardStoreOps.appendFiles(e):{status:"fail",error:"Board context is unavailable"}}}}function d(){return chunkGHUW6P4G_cjs.a({board:y(),nonCore:C(),cardStore:s(),chatStore:u,processAccumulated:()=>h(true),sourceFetchDone:({token:e,ref:r})=>w(e,r),sourceFetchFailed:({token:e,reason:r})=>R(e,r),uploadCardFile({cardId:e,fileName:r,contentType:o,bytes:k,suppressChatRecordWrite:P}){return I(e,r,o,k,{inChat:true,...P===true?{suppressChatRecordWrite:true}:{}})},buildFileDownloadUrl({cardId:e,fileIdx:r,storedName:o}){let k=`${b||""}${m}/cards/${encodeURIComponent(e)}/files/${r}`;return o?`${k}?sn=${encodeURIComponent(o)}`:k},readFetchedSourceJsonByRef({cardId:e,ref:r}){let o=c(e)??p();if(!o||chunkBQUQTOPB_cjs.a(o.boardAdapter))return null;let A=o.boardAdapter.resolveBlob(chunkVQCIOKJV_cjs.b(r)).trim();return A?JSON.parse(A):null}})}return {mcpBoardFacade:y,mcpNonCoreFacade:C,mcpCardStoreFacade:s,createMcpFacade:d}}exports.a=J;exports.b=X;exports.c=Q;exports.d=z;exports.e=Y;exports.f=j;exports.g=N;exports.h=T;exports.i=q;exports.j=ot;exports.k=it;exports.l=ct;exports.m=pt;exports.n=mt;exports.o=ft;exports.p=yt;//# sourceMappingURL=chunk-NOAERAOE.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-NOAERAOE.cjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {i,r,o,a,l,q,h,g,s}from'./chunk-R7SQQSDX.js';function F(b){let{config:e,state:o$1}=b,i$1=i(e);if(Object.keys(i$1).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let l$1=H(i$1),L=r(e,o$1.tasks),U=new Set([...L,...o$1.availableOutputs]),d=[],x=[],y=[],P=[];for(let[u,a$1]of Object.entries(i$1)){let t=o$1.tasks[u],D=o(a$1,e.settings),j=D!=="once";if(t?.status===a.RUNNING||l(t))continue;let N=q(a$1);if(N!==void 0&&t&&t.executionCount>=N||a$1.circuit_breaker&&t&&t.executionCount>=a$1.circuit_breaker.max_executions||!j&&t?.status===a.COMPLETED)continue;if(j&&t?.status===a.COMPLETED){let s=h(a$1),n=false;switch(D){case "data-changed":{s.length>0&&s.some(c=>{for(let[g$1,O]of Object.entries(i$1))if(g(O).includes(c)){let f=o$1.tasks[g$1];if(!f)continue;let B=t.lastConsumedHashes?.[c];return f.lastDataHash==null?f.executionCount>t.lastEpoch:f.lastDataHash!==B}return false})||(n=true);break}case "epoch-changed":{s.length>0&&s.some(c=>{for(let[g$1,O]of Object.entries(i$1))if(g(O).includes(c)){let f=o$1.tasks[g$1];if(f&&f.executionCount>t.lastEpoch)return true}return false})||(n=true);break}case "time-based":{let h=a$1.refreshInterval??0;if(h<=0){n=true;break}let c=t.completedAt;if(!c){n=true;break}(Date.now()-Date.parse(c))/1e3<h&&(n=true);break}case "manual":n=true;break}if(n)continue}let E=h(a$1);if(E.length===0){d.push(u);continue}let T=[],v=[],p=[];for(let s of E){if(U.has(s))continue;let n=l$1[s]||[];n.length===0?T.push(s):n.every(c=>l(o$1.tasks[c]))?p.push({token:s,failedProducer:n[0]}):v.push(s);}T.length>0?y.push({taskName:u,missingTokens:T}):p.length>0?P.push({taskName:u,failedTokens:p.map(s=>s.token),failedProducers:[...new Set(p.map(s=>s.failedProducer))]}):v.length>0?x.push({taskName:u,waitingOn:v}):d.push(u);}let R={};if(d.length>1){let u=s(d,i$1);for(let[a,t]of Object.entries(u))t.length>1&&(R[a]=t);}return {eligible:d,pending:x,unresolved:y,blocked:P,conflicts:R}}function H(b){let e={};for(let[o,i]of Object.entries(b)){for(let r of g(i))e[r]||(e[r]=[]),e[r].push(o);if(i.on)for(let r of Object.values(i.on))for(let l of r)e[l]||(e[l]=[]),e[l].includes(o)||e[l].push(o);if(i.on_failure)for(let r of i.on_failure)e[r]||(e[r]=[]),e[r].includes(o)||e[r].push(o);}return e}export{F as a};//# sourceMappingURL=chunk-Q444D72R.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-Q444D72R.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {b as b$2}from'./chunk-6MD6FVE3.js';import {a as a$1}from'./chunk-HOSD6UHA.js';import {q as q$1,p,a as a$3,t}from'./chunk-FULAMLUU.js';import {a,G,i,h,z,B,D,l,q as q$2,F,E,A,g,b as b$3,c,d,e as e$1,f as f$1,r,k,j,y,x,w,v}from'./chunk-WGYS2L4V.js';import {a as a$2,b as b$1}from'./chunk-44L64VQ2.js';import {a as a$4}from'./chunk-ATOQP3BD.js';import {e,f}from'./chunk-UGB7PC4P.js';async function mt(e,o,a){let r=await e.tryAcquire();if(!r)return false;try{await o();}finally{await r();}return await a?.(),true}function Pt(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}function Pe(e,o){return Pt(e)?e.then(o):o(e)}function lt(e,o){let a={...e};for(let[r,s]of Object.entries(o))s!==null&&typeof s=="object"&&!Array.isArray(s)&&a[r]!==null&&typeof a[r]=="object"&&!Array.isArray(a[r])?a[r]=lt(a[r],s):a[r]=s;return a}function ve(e,o,a){if(o.length===0)return e;let[r,...s]=o;if(s.length===0)return {...e,[r]:a};let d=e[r]!==null&&typeof e[r]=="object"&&!Array.isArray(e[r])?e[r]:{};return {...e,[r]:ve(d,s,a)}}function ft(e){return {read:a=>e.read(a),get(a,r){return Pe(e.read(a),s=>{if(s===null)return null;let d=s;for(let f of r.split(".").filter(Boolean)){if(d===null||typeof d!="object"||Array.isArray(d))return null;d=d[f]??null;}return d??null})},write:(a,r)=>e.write(a,r),delete:a=>e.delete(a),listKeys:a=>e.listKeys(a),shallowMerge(a,r){return Pe(e.read(a),s=>e.write(a,{...s??{},...r}))},deepMerge(a,r){return Pe(e.read(a),s=>e.write(a,lt(s??{},r)))},patch(a,r,s){return Pe(e.read(a),d=>{let f=r.split(".").filter(Boolean);return e.write(a,ve(d??{},f,s))})}}}function gt(e){return ft(e)}function pt(e,o){return {async readIndex(){return await e.read("_index")},writeIndex(a){return e.write("_index",a)},async readCard(a){return await e.read(a)},async writeCard(a,r){return await e.write(a,r),o(r)},removeCard(a){return e.delete(a)},async cardExists(a){return await e.read(a)!==null},defaultCardKey(a){return a}}}function yt(e,o){async function a(){return await e.readIndex()??{}}return {async readCard(r){let s=(await a())[r];return !s||!await e.cardExists(s.key)?null:await e.readCard(s.key)},async readCardKey(r){return (await a())[r]?.key??null},async readAllCards(){let r=[];for(let[s,d]of Object.entries(await a())){if(!await e.cardExists(d.key))continue;let f=await e.readCard(d.key);f?r.push(f):o?.(`[card-store] could not read card "${s}" at key "${d.key}"`);}return r},async readChecksumIndex(){let r={};for(let[s,d]of Object.entries(await a()))r[s]=d.checksum;return r},async changedSince(r){let s=await a(),d=[];for(let[f,v]of Object.entries(s))r[f]!==v.checksum&&d.push(f);for(let f of Object.keys(r))s[f]||d.push(f);return d},async validateUpsert(r,s){let d=await a(),f=d[r],v=Object.entries(d).find(([,w])=>w.key===s);return f&&f.key!==s?{ok:false,error:`Card id "${r}" is already mapped to key "${f.key}", cannot remap to "${s}"`}:v&&v[0]!==r?{ok:false,error:`Key "${s}" is already mapped to card id "${v[0]}", cannot remap to "${r}"`}:{ok:true}},async writeCard(r,s,d){let f=await a(),v=d??f[r]?.key??e.defaultCardKey(r),w=await e.writeCard(v,s);f[r]={key:v,checksum:w,updatedAt:new Date().toISOString()},await e.writeIndex(f);},async patchCard(r,s,d){let f=await a(),v=f[r];if(!v||!await e.cardExists(v.key))throw new Error(`card "${r}" not found`);let w=await e.readCard(v.key);if(!w||typeof w!="object"||Array.isArray(w))throw new Error(`card "${r}" is not patchable`);let m=String(s||"").split(".").filter(Boolean),l=ve(w,m,d),S=await e.writeCard(v.key,l);f[r]={key:v.key,checksum:S,updatedAt:new Date().toISOString()},await e.writeIndex(f);},async removeCard(r){let s=await a(),d=s[r];d&&(await e.removeCard(d.key),delete s[r],await e.writeIndex(s));},readIndex(){return a()}}}function Nt(e,o){return a(e,o)}function _t(e,o,a){return {blob:e,kv:o,journal:a}}function St(e$1,o={}){function a(m){return {status:"success",data:m}}function r(m){return {status:"fail",error:m}}function s(m){return {status:"error",error:m instanceof Error?m.message:String(m)}}async function d(m){let l=o.emitNotification;if(!l||m.length===0)return;let S=e(m);if(S.length===1){await l(S[0]);return}await l(f({kind:"notification-batch",notifications:S}));}async function f$1(m){let l=m.params?.id;if(l){let S=await e$1.readCard(l);if(!S)throw new Error(`card "${l}" not found`);return [S]}return await e$1.readAllCards()}function v(m){return f({kind:"notification-batch",notifications:e(m.map(l=>({kind:"card_refreshed",cardId:l.id,card:l})))})}function w(m){if(Array.isArray(m))return m;if(m&&typeof m=="object"){let l=m;return Array.isArray(l.files)?l.files:[m]}return null}return {async get(m){try{return a({cards:await f$1(m)})}catch(l){return s(l)}},async buildNotificationBatch(m){try{return a(v(await f$1(m)))}catch(l){return s(l)}},async set(m){try{let l=m.body;if(l==null)return r("set requires a body (card object or array of cards)");let S=Array.isArray(l)?l:[l];for(let h of S){if(typeof h.id!="string")return r("each card must have a string `id` field");await e$1.writeCard(h.id,h);}return await d(S.map(h=>({kind:"card_refreshed",cardId:h.id,card:h}))),a({count:S.length})}catch(l){return s(l)}},async del(m){try{let l=m.body?.ids??[],S=m.params?.id,h=S?[...l,S]:l;if(h.length===0)return r("del requires body.ids (string[]) or params.id");for(let N of h)await e$1.removeCard(N);return await d(h.map(N=>({kind:"card_removed",cardId:N}))),a({count:h.length})}catch(l){return s(l)}},async patch(m){try{let l=m.params?.id,S=m.params?.path;if(!l)return r("patch requires params.id");if(!S)return r("patch requires params.path");let h=m.body,N=h&&Object.prototype.hasOwnProperty.call(h,"value")?h.value:m.body;await e$1.patchCard(l,S,N);let O=await e$1.readCard(l);return O?(await d([{kind:"card_refreshed",cardId:l,card:O}]),a({count:1})):r(`card "${l}" not found`)}catch(l){return s(l)}},async appendFiles(m){try{let l=m.params?.id;if(!l)return r("appendFiles requires params.id");let S=await e$1.readCard(l);if(!S)return r(`card "${l}" not found`);let h=w(m.body);if(!h||h.length===0)return r("appendFiles requires a file metadata object, array, or body.files array");let N=S.card_data&&typeof S.card_data=="object"&&!Array.isArray(S.card_data)?S.card_data:{},O=Array.isArray(N.files)?N.files:[],M=[...O,...h],V=h.map(($,Z)=>({idx:O.length+Z,entry:$})),K=await this.patch({params:{id:l,path:"card_data.files"},body:{value:M}});return K.status!=="success"?K:a({files_added:V})}catch(l){return s(l)}}}}async function vt(e,o){return (await e.peekActive()).find(a=>a.id===o)}function $t(e$1,o={}){async function a(r){let s=o.emitNotification;if(!s||r.length===0)return;let d=e(r);if(d.length===1){await s(d[0]);return}await s(f({kind:"notification-batch",notifications:d}));}return {async enqueue(r){let s=await e$1.enqueue(r);return await a([{kind:"message_enqueued",lane:o.lane,message:s}]),s},async enqueueMany(r){let s=await e$1.enqueueMany(r);return await a(s.map(d=>({kind:"message_enqueued",lane:o.lane,message:d}))),s},enqueueIfAbsent:e$1.enqueueIfAbsent?async(r,s)=>{let d=await e$1.enqueueIfAbsent(r,s);return d&&await a([{kind:"message_enqueued",lane:o.lane,message:d}]),d}:void 0,lease(r){return e$1.lease(r)},ack(r,s){return e$1.ack(r,s)},nack(r,s,d){return e$1.nack(r,s,d)},peekActive(r){return e$1.peekActive(r)},peekDeadLetter(r){return e$1.peekDeadLetter(r)},async stage(r,s){return e$1.stage(r,s)},async commitStaged(r){let s=await e$1.commitStaged(r);if(s){let d=await vt(e$1,r);d&&await a([{kind:"message_enqueued",lane:o.lane,message:d}]);}return s},async discardStaged(r,s){return e$1.discardStaged(r,s)},peekStaged(r){return e$1.peekStaged(r)}}}function b(e){return e!==void 0?{status:"success",data:e}:{status:"success"}}function R(e){return {status:"fail",error:e}}function T(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function q(){return new Date().toISOString()}function bt(e){let o=new TextEncoder().encode(e),a=Array.from(o,r=>String.fromCharCode(r)).join("");return btoa(a).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Rt(e){let o=e.replace(/-/g,"+").replace(/_/g,"/"),a=o+"=".repeat((4-o.length%4)%4),r=atob(a),s=Uint8Array.from(r,d=>d.charCodeAt(0));return new TextDecoder().decode(s)}function be(e){try{let o=JSON.parse(Rt(e));return typeof o?.t=="string"?{taskName:o.t}:null}catch{return null}}function kt(e){return bt(JSON.stringify(e))}function Ct(e){try{let o=JSON.parse(Rt(e));return typeof o?.cbk=="string"&&typeof o?.cid=="string"&&typeof o?.b=="string"&&typeof o?.d=="string"?o:null}catch{return null}}function At(e){return f$1(e,r,()=>({_sources:{}}))}function It(e,o){return d(e,o)}function xt(e){return g(e)}function Tt(e,o){return e$1(e,o)}function Ot(e,o,a,r,s,d){return async f=>{let v$1=[],w$1=await a.cardStore.readCard(f.nodeId);if(!w$1)return "task-initiate-failure";let m=w$1.id;if(m===i){let p=a.activeTaskConfigs?.(),y={[h]:p?k((await Promise.all(Object.keys(p).filter(k=>k!==i).map(k=>a.cardStore.readCard(k)))).filter(k=>!!k),p):await j(await a.cardStore.readAllCards())};return (d??(()=>{}))(y),r(f.nodeId,y),"task-initiated"}let l=w$1.card_data??{},S=w$1.source_defs??[],h$1=S,N=await a.cardRuntimeStore.readRuntime(m),O=false,M=async()=>{O&&(await a.cardRuntimeStore.writeRuntime(m,N),O=false);},V=p=>v(N._sources[p]),K=(p,y)=>{N._sources[p]=v(y),O=true;},$=f.taskState?.executionCount??0;if(N._lastExecutionCount!==$&&(N._sources={},N._lastExecutionCount=$,O=true),f.update){let p=f.update.outputFile;if(p){let y$1=V(p);if(f.update.failure){let k=f.update.rqt??y$1.lastRequestedToken??y$1.queueRequestedToken;k&&K(p,y(y$1,k));}else {let k=f.update.rqt;if(!y$1.lastCompletedToken||k>y$1.lastCompletedToken){let j=typeof f.update.deliveryToken=="string"?f.update.deliveryToken:void 0,re=j?await a.fetchedSourcesStore.commitSourceData(m,p,j):false;K(p,re?x(y$1,k):y(y$1,k));}}await M();}}let Z={};for(let p of S){if(!p.outputFile)continue;let y=await a.fetchedSourcesStore.readSourceData(m,p.outputFile);y!==null&&(Z[p.bindTo]=y);}let H={};for(let[p,y]of Object.entries(f.state??{}))if(y!==null&&typeof y=="object"&&!Array.isArray(y)){let k=y[p];H[p]=k!==void 0?k:y;}else H[p]=y;let ee={id:m,card_data:{...l},requires:H,source_defs:S,compute:w$1.compute};ee._sourcesData=Z,w$1.compute&&a$4.runSync(ee,{sourcesData:Z}),(s??(()=>{}))(m,ee.computed_values??{});let te=a$4.enrichSourcesSync(Array.isArray(w$1.source_defs)?w$1.source_defs:void 0,{card_data:w$1.card_data,requires:H}),Ae={...w$1,source_defs:Array.isArray(te)?te.map(p=>({...p,boardDir:typeof p.boardDir=="string"&&p.boardDir?p.boardDir:e.value})):te},W=q(),E=f.update?void 0:W,ge=h$1.filter(p=>{let y=p.outputFile;if(typeof y!="string"||!y)return true;let k=V(y);E&&(k={...k,queueRequestedToken:E},K(y,k));let j=k.queueRequestedToken??k.lastRequestedToken??W;return w(k,j)==="dispatch"});if(await M(),ge.length>0){let p=false,y=W;for(let k of ge){let j=k.outputFile;if(typeof j!="string"||!j)continue;let re=V(j),L=re.queueRequestedToken??W;K(j,{...re,lastRequestedToken:L}),y=L,p=true;}return p&&await M(),p&&(v$1.push({taskKind:"source-fetch",payload:{boardRef:a$2(e),enrichedCard:Ae,callbackToken:f.callbackToken,rqt:y}}),await a.executionRequestStore.appendEntries(o,v$1)),"task-initiated"}if(h$1.some(p=>{let y=p.outputFile;if(typeof y!="string"||!y)return false;let k=V(y),j=k.queueRequestedToken??k.lastRequestedToken??W;return w(k,j)==="in-flight"}))return "task-initiated";let ie=w$1.provides??[],ue={};for(let{bindTo:p,ref:y}of ie)ue[p]=a$4.resolve(ee,y);return (d??(()=>{}))(ue),r(f.nodeId,ue),v$1.length>0&&await a.executionRequestStore.appendEntries(o,v$1),"task-initiated"}}function nr(e$1,o,a$4={}){a$1(o.callbackTransport,"createAsyncBoardLiveCardsPublic");let r=o.callbackTransport,s=o.warn??(()=>{}),d=a$2(e$1),f$1=a$4.emitNotification??(n=>{if(!o.publishBoardChangeNotifications)return;let t=n.kind==="notification-batch"?n.notifications:[n];return o.publishBoardChangeNotifications(t)}),v=null,w=a$4.boardRuntimeStoreRef,m=a$4.scratchStoreRef,l$1=a$4.taskExecutorRef,S=a$4.chatHandlerFlow;function h$1(){if(!w)throw new Error(`Board at ${e$1.value} has no board runtime store configured. Pass boardRuntimeStoreRef at construction or init.`);return w}function N(n){if(n.length!==0)try{let t=e(n),c=f({kind:"notification-batch",notifications:t});return Promise.resolve(f$1(c)).catch(i=>{s(`[async-board-live-cards-public] emitNotification failed: ${i instanceof Error?i.message:String(i)}`);})}catch(t){s(`[async-board-live-cards-public] emitNotification failed: ${t instanceof Error?t.message:String(t)}`);return}}let O=()=>b$2(o.kvStorageForRef(h$1())),M=e$1.value,V=()=>b$3(a(()=>o.kvStorageForRef(h$1()),o.hashFn),"v1"),K=async()=>{let n=await O().readOutputsStoreRef();if(!n)throw new Error(`Board at ${e$1.value} has no outputs store configured.`);return xt(o.kvStorageForRef(n))},$=async()=>{let n=await O().readCardStoreRef();if(!n)throw new Error(`Board at ${e$1.value} has no card store configured.`);let t=o.kvStorageForRef(n);return yt(pt(gt(t),o.hashFn),s)};async function Z(){return !!(await V().readSnapshot(M)).values[q$2]}async function H(){let n=await V().readSnapshot(M);if(!n.values[q$2])throw new Error(`Board not initialized at ${e$1.value}`);return F(n.values)}async function ee(n,t){let c=await V().commitSnapshot(M,{schemaVersion:"v1",expectedVersion:t,deleteKeys:[],shallowMerge:E(n)});if(!c.ok)throw new Error(`Snapshot commit failed (version mismatch): expected=${t??"null"} current=${c.currentVersion??"null"}`)}let te=()=>c(o.journalStorageForRef(h$1()));async function Ae(){return l$1??await O().readTaskExecutorRef()}async function W(){return A(await(await K()).readAllDataObjects())}async function E$1(n){await te().appendEvent(n);}async function ge(){let n=await O().readFetchedSourcesStoreRef();if(!n)throw new Error(`Board at ${e$1.value} has no fetched sources store configured. Run: init --fetched-sources-store-ref <b64-ref>`);return n}async function le(){return o.blobStorageForRef(await ge())}async function ie(){return It(await le(),n=>o.resolveBlob(n))}async function ue(n){let t=(await le()).keyRef?.(n);if(!t)throw new Error("configured fetched-sources store does not support keyRef");let c=await Promise.resolve(t);return a$2(c)}async function p$1(){let n=Tt(o.kvStorageForRef(h$1()),async(u,g)=>{let P=u.payload,B=(P.enrichedCard??{}).id??P.cardId??"unknown";await E$1({type:"task-failed",taskName:B,error:g,timestamp:q()});}),t$1=At(o.kvStorageForRef(h$1())),c=await le(),i$1=await ie(),A=await $(),I=await K(),F=new Map,C=new Map,x=[],Q=[],G=[],X=new Map,de=new Set,ce={async readRuntime(u){return F.get(u)??await t$1.readRuntime(u)},async writeRuntime(u,g){F.set(u,g),Te[u]=g;}},Ie={async readSourceData(u,g){let P=`${u}/${g}`;return C.has(P)?C.get(P):await i$1.readSourceData(u,g)},ingestSourceDataStaged(u,g,P,D){return i$1.ingestSourceDataStaged(u,g,P,D)},async commitSourceData(u,g,P){let D=`${u}/.staged/${P}/${g}`,B=await c.read(D);if(B==null){let z=await Promise.resolve(c.keyRef?.(D));z&&(B=await o.resolveBlob(z));}if(B==null)return false;let U=`${u}/${g}`,ae=B.trim();try{C.set(U,JSON.parse(ae));}catch{C.set(U,ae);}return x.push({cardId:u,outputFile:g,deliveryToken:P}),true},async hasSource(u,g){let P=`${u}/${g}`;return C.has(P)||await i$1.hasSource(u,g)},async listSources(u){let g=await i$1.listSources(u),P=[...C.keys()].filter(D=>D.startsWith(`${u}/`)).map(D=>D.slice(`${u}/`.length));return [...new Set([...g,...P])]}},xe=await H(),De=q$1(xe.graph),Te={...xe.runtimeByCardId},{events:wt,newCursor:Oe}=await te().readEntriesAfterCursor(xe.lastDrainedJournalId),pe=wt,Ve=()=>De.config.tasks,fe=t(De,{handlers:{"card-handler":Ot(e$1,Oe,{cardStore:A,cardRuntimeStore:ce,fetchedSourcesStore:Ie,outputStore:I,executionRequestStore:n,activeTaskConfigs:()=>Ve()},(u,g)=>{pe.push({type:"task-completed",taskName:u,data:g,timestamp:q()});},(u,g)=>{Q.push({cardId:u,values:g});},u=>{G.push(u);})},onNodeRemoved:u=>{X.delete(u),F.delete(u),delete Te[u],de.add(u);}});for(Ve=()=>fe.getState().config.tasks;pe.length>0;){let u=pe;pe=[];for(let g of u)if(g.type==="task-restart"){let P=await A.readCard(g.taskName);P&&X.set(g.taskName,P);}fe.pushAll(u),await fe.waitForHandlers();}let $e=fe.getState();await fe.dispose({wait:true}),await ee({lastDrainedJournalId:Oe,graph:p($e),runtimeByCardId:Te},(await V().readSnapshot(M)).version);for(let{cardId:u,values:g}of Q)await I.writeComputedValues(u,g);for(let u of G)await I.writeDataObjects(u);for(let[u,g]of F)await t$1.writeRuntime(u,g);for(let u of x)await i$1.commitSourceData(u.cardId,u.outputFile,u.deliveryToken);let Le=z(B(d,$e));await I.writeStatusSnapshot(Le);let me=[];for(let{cardId:u,values:g}of Q)me.push({kind:"computed_values",cardId:u,values:g});for(let u of G)for(let[g,P]of Object.entries(u))me.push({kind:"data_object",key:g,payload:P});for(let[u,g]of X)u!==i&&me.push({kind:"card_refreshed",cardId:u,card:g});for(let u of de)me.push({kind:"card_removed",cardId:u});me.push({kind:"status",status:Le}),await N(me);let ne=await Ae();if(!ne)return;let Je=o.supportsDirectSourceOutput?.(ne)===true;await n.dispatchEntriesForJournalId(Oe,async u=>{if(u.taskKind!=="source-fetch"){s(`[async-process-accumulated-events] unknown taskKind "${u.taskKind}" \u2014 skipping`);return}let g=u.payload,P=g.enrichedCard?.id??"unknown",D=g.enrichedCard?.source_defs??[];if(ne.howToRun==="queue-storage"&&Je){try{let B=await O().readQueueStoreRef();if(!B)throw new Error(`Board at ${e$1.value} has no queue store configured. Run: init --queue-store-ref <b64-ref>`);let U=o.queueStorageForRef(B,"task-executor"),ae=typeof ne.extra?.boardId=="string"?ne.extra.boardId:void 0,z=[];for(let Y of D){if(!Y.outputFile)continue;let ye=o.genId(),Se=`${P}/.staged/${ye}/${Y.outputFile}`,Me=await Promise.resolve(c.keyRef?.(Se));if(!Me)continue;let Qe={ref:a$2(Me),deliveryToken:ye,outputFile:Y.outputFile,cardId:P},ht=kt({cbk:g.callbackToken,rg:e$1.value,br:a$2(e$1),cid:P,b:Y.bindTo,d:Y.outputFile,cs:void 0,rqt:g.rqt,dt:Qe.deliveryToken});z.push({...ae?{boardId:ae}:{},ref:ne,args:{source_def:Y,base_ref:a$2(e$1),callback:r.createCallback(ht),output:Qe}});}z.length>0&&await U.enqueueMany(z);}catch(B){await E$1({type:"task-failed",taskName:P,error:B instanceof Error?B.message:String(B),timestamp:q()});}return}for(let B of D){if(!B.outputFile)continue;let U;if(Je){let Y=o.genId(),ye=`${P}/.staged/${Y}/${B.outputFile}`,Se=await Promise.resolve(c.keyRef?.(ye));Se&&(U={ref:a$2(Se),deliveryToken:Y,outputFile:B.outputFile,cardId:P});}let ae=kt({cbk:g.callbackToken,rg:e$1.value,br:a$2(e$1),cid:P,b:B.bindTo,d:B.outputFile,cs:void 0,rqt:g.rqt,...U?{dt:U.deliveryToken}:{}}),z=await o.dispatchExecution(ne,{source_def:B,base_ref:a$2(e$1),callback:r.createCallback(ae),...U?{output:U}:{}});z.dispatched||await E$1({type:"task-failed",taskName:P,error:z.error??"dispatch failed",timestamp:q()});}});}async function y(){try{let n=async()=>{let c=await H(),{events:i}=await te().readEntriesAfterCursor(c.lastDrainedJournalId);i.length>0&&await j();},t=await mt(o.lock,p$1,n);return b({ran:t!==!1})}catch(n){return T(n)}}async function k(){return v||(v=y().finally(()=>{v=null;}),v)}async function j(){let n=await O().readQueueStoreRef();if(!n)throw new Error(`Board at ${e$1.value} has no queue store configured. Run: init --queue-store-ref <b64-ref>`);await o.queueStorageForRef(n,"process-accumulated").enqueue({boardRef:a$2(e$1)}),await o.requestProcessAccumulated?.();}async function re(){let n=await O().readQueueStoreRef();if(!n)throw new Error(`Board at ${e$1.value} has no queue store configured. Run: init --queue-store-ref <b64-ref>`);let t=o.queueStorageForRef(n,"process-accumulated");for(;;){let c=await t.lease({max:64,visibilityMs:1e3});if(c.length<=0)return;for(let i of c)await t.ack(i.id,i.leaseToken);if(c.length<64)return}}function L(){j();}return {async init(n){try{let t=n.params?.cardStoreRef;if(!t)return R("init requires params.cardStoreRef");if(w=n.params?.boardRuntimeStoreRef,!w)return R("init requires params.boardRuntimeStoreRef");let c=n.params?.outputsStoreRef;if(!c)return R("init requires params.outputsStoreRef");let i$1=n.params?.queueStoreRef;if(!i$1)return R("init requires params.queueStoreRef");let A=n.params?.fetchedSourcesStoreRef;if(!A)return R("init requires params.fetchedSourcesStoreRef");m=n.params?.scratchStoreRef;let I=n.params?.chatStoreRef;if(!I)return R("init requires params.chatStoreRef");let F=n.params?.artifactsStoreRef;if(!F)return R("init requires params.artifactsStoreRef");await Z()||await ee({lastDrainedJournalId:"",graph:p(a$3(D)),runtimeByCardId:{}},null);let C=O();await C.writeBoardRuntimeStoreRef(w),await C.writeCardStoreRef(t),await C.writeOutputsStoreRef(c),await C.writeQueueStoreRef(i$1),await C.writeFetchedSourcesStoreRef(A),await C.writeChatStoreRef(I),await C.writeArtifactsStoreRef(F),await(await $()).writeCard(i,l());let x=o.kvStorage("card-upsert"),Q=l(),G$1=G(Q),X=o.hashFn(G$1),ce=(await x.read(i))?.blobRef??await(await $()).readCardKey(i)??i;return await E$1({type:"task-upsert",taskName:i,taskConfig:G$1,timestamp:q()}),await x.write(i,{blobRef:ce,taskConfigHash:X,updatedAt:q()}),await E$1({type:"task-restart",taskName:i,timestamp:q()}),L(),await(await K()).writeStatusSnapshot(z(B(d,q$1((await H()).graph)))),b()}catch(t){return T(t)}},async status(n){try{let t=await K(),c=await t.readStatusSnapshot();return c||(c=z(B(d,q$1((await H()).graph))),await t.writeStatusSnapshot(c)),b(c)}catch(t){return T(t)}},async getCardStoreRef(n){try{let t=await O().readCardStoreRef();return t?b({storeRef:t}):R(`Board at ${e$1.value} has no card store configured`)}catch(t){return T(t)}},async getBoardRuntimeStoreRef(n){try{return b({storeRef:w??null})}catch(t){return T(t)}},async getOutputsStoreRef(n){try{let t=await O().readOutputsStoreRef();return t?b({storeRef:t}):R(`Board at ${e$1.value} has no outputs store configured`)}catch(t){return T(t)}},async getScratchStoreRef(n){try{return b({storeRef:m??null})}catch(t){return T(t)}},async getChatStoreRef(n){try{return b({storeRef:await O().readChatStoreRef()})}catch(t){return T(t)}},async getArtifactsStoreRef(n){try{return b({storeRef:await O().readArtifactsStoreRef()})}catch(t){return T(t)}},async getFetchedSourcesStoreRef(n){try{return b({storeRef:await O().readFetchedSourcesStoreRef()})}catch(t){return T(t)}},async getConfig(n){try{let t=n.params?.key;if(!t)return R("getConfig requires params.key");let c=O(),i;switch(t){case "task-executor":i=l$1??null;break;case "chat-handler-flow":i=S??null;break;case "board-runtime-store-ref":i=await c.readBoardRuntimeStoreRef();break;case "card-store-ref":i=await c.readCardStoreRef();break;case "outputs-store-ref":i=await c.readOutputsStoreRef();break;case "scratch-store-ref":i=m??null;break;case "chat-store-ref":i=await c.readChatStoreRef();break;case "artifacts-store-ref":i=await c.readArtifactsStoreRef();break;case "fetched-sources-store-ref":i=await c.readFetchedSourcesStoreRef();break;default:return R(`getConfig: unknown key "${t}"`)}return b({value:i})}catch(t){return T(t)}},async getOutputsDataObject(n){try{let t=n.params?.key;if(!t)return R("getOutputsDataObject requires params.key");if(t===h)return b(null);let c=await W();return b(c[t]??null)}catch(t){return T(t)}},async getAllOutputsDataObjects(n){try{return b(await W())}catch(t){return T(t)}},async getOutputsComputedValues(n){try{let t=n.params?.key;return t?b(await(await K()).readComputedValues(t)):R("getOutputsComputedValues requires params.key")}catch(t){return T(t)}},async getAllOutputsComputedValues(n){try{return b(await(await K()).readAllComputedValues())}catch(t){return T(t)}},async getOutputsFetchedSources(n){try{let t=n.params?.key;if(!t)return R("getOutputsFetchedSources requires params.key");let c=await(await ie()).listSources(t),i={};for(let A of c)i[A]=await ue(`${t}/${A}`);return b(i)}catch(t){return T(t)}},async getAllOutputsFetchedSources(n){try{let t=await ie(),c=await(await le()).listKeys(),i=new Set;for(let I of c){let F=I.indexOf("/");F>0&&!I.includes("/.staged/")&&i.add(I.slice(0,F));}let A={};for(let I of i){let F=await t.listSources(I);if(F.length!==0){A[I]={};for(let C of F)A[I][C]=await ue(`${I}/${C}`);}}return b(A)}catch(t){return T(t)}},async buildSseOneShotPayload(n){try{let t=(await(await $()).readAllCards()).filter(C=>C.id!==i),c=await this.status({});if(c.status!=="success")return c;let i$1=await this.getAllOutputsDataObjects({});if(i$1.status!=="success")return i$1;let A=await this.getAllOutputsComputedValues({});if(A.status!=="success")return A;let I=A.data,F={};for(let C of t){let x=typeof C?.id=="string"?C.id:null;if(!x)continue;let Q=C.card_data&&typeof C.card_data=="object"&&!Array.isArray(C.card_data)?C.card_data:{};F[x]={schema_version:"v1",card_id:x,card_data:{...Q},computed_values:I[x]&&typeof I[x]=="object"?I[x]:{}};}return b({cardDefinitions:t,statusSnapshot:c.data,dataObjectsByToken:i$1.data,cardRuntimeById:F})}catch(t){return T(t)}},async addCardFiles(n){try{let t=n.params?.cardId;if(!t)return R("addCardFiles requires params.cardId");let i=await St(await $(),{emitNotification:f$1}).appendFiles({params:{id:t},body:n.body});return i.status!=="success"?i:b({cardId:t,files_added:i.data.files_added,notified:!0})}catch(t){return T(t)}},async removeCard(n){try{let t=n.params?.id;if(!t)return R("removeCard requires params.id");try{await o.kvStorage("card-upsert").delete(t);}catch{}return await E$1({type:"task-removal",taskName:t,timestamp:q()}),t!==i&&await E$1({type:"task-restart",taskName:i,timestamp:q()}),L(),b()}catch(t){return T(t)}},async retrigger(n){try{let t=n.params?.id;return t?(await E$1({type:"task-restart",taskName:t,timestamp:q()}),L(),b()):R("retrigger requires params.id")}catch(t){return T(t)}},async processAccumulatedEvents(n){return await re(),k()},async upsertCard(n){try{let t=n.params?.cardId,c=n.params?.all,i$1=!!n.params?.restart;if(!t&&!c)return R("upsertCard requires --card-id <id> or --all");let A=await $(),I=c?(await A.readAllCards()).map(x=>x.id):[t];for(let x of I)if(!await A.readCard(x))return R(`Card "${x}" not found in board at ${e$1.value}`);let F=o.kvStorage("card-upsert"),C=!1;for(let x of I){let Q=await A.readCard(x);if(!Q)continue;let G$1=G(Q),X=o.hashFn(G$1),de=await F.read(x),ce=de?.taskConfigHash!==X;if(!(!ce&&!i$1)){if(ce){let Ie=de?.blobRef??await A.readCardKey(x)??x;await E$1({type:"task-upsert",taskName:x,taskConfig:G$1,timestamp:q()}),await F.write(x,{blobRef:Ie,taskConfigHash:X,updatedAt:q()}),C=C||x!==i;}i$1&&await E$1({type:"task-restart",taskName:x,timestamp:q()});}}return C&&await E$1({type:"task-restart",taskName:i,timestamp:q()}),L(),b()}catch(t){return T(t)}},async taskFailed(n){try{let t=n.params?.token;if(!t)return R("taskFailed requires params.token");let c=n.params?.error??"unknown error",i=be(t);return i?(await E$1({type:"task-failed",taskName:i.taskName,error:c,timestamp:q()}),L(),b()):R("Invalid callback token")}catch(t){return T(t)}},async taskProgress(n){try{let t=n.params?.token;if(!t)return R("taskProgress requires params.token");let c=(n.body??{}).update??{},i=be(t);return i?(await E$1({type:"task-progress",taskName:i.taskName,update:c,timestamp:q()}),L(),b()):R("Invalid callback token")}catch(t){return T(t)}},async sourceDataFetched(n){try{let t=n.params?.token,c=n.params?.ref;if(!t)return R("sourceDataFetched requires params.token");if(!c)return R("sourceDataFetched requires params.ref");let i=Ct(t);if(!i)return R("Invalid source token");let A=await ie(),I=i.dt||o.genId();i.dt||await A.ingestSourceDataStaged(i.cid,i.d,b$1(c),I);let F=be(i.cbk);return F?(await E$1({type:"task-progress",taskName:F.taskName,update:{bindTo:i.b,outputFile:i.d,fetchedAt:q(),deliveryToken:I,sourceChecksum:i.cs,rqt:i.rqt},timestamp:q()}),L(),b()):R("Invalid callback token embedded in source token")}catch(t){return T(t)}},async sourceDataFetchFailure(n){try{let t=n.params?.token,c=n.params?.reason??"unknown";if(!t)return R("sourceDataFetchFailure requires params.token");let i=Ct(t);if(!i)return R("Invalid source token");let A=be(i.cbk);return A?(await E$1({type:"task-progress",taskName:A.taskName,update:{bindTo:i.b,outputFile:i.d,failure:!0,reason:c,sourceChecksum:i.cs,rqt:i.rqt},timestamp:q()}),L(),b()):R("Invalid callback token embedded in source token")}catch(t){return T(t)}}}}
|
|
2
|
+
export{mt as a,gt as b,pt as c,yt as d,Nt as e,_t as f,St as g,$t as h,nr as i};//# sourceMappingURL=chunk-QKWQ4HRE.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-QKWQ4HRE.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var s={NOT_STARTED:"not-started",RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"},d={CREATED:"created",RUNNING:"running",PAUSED:"paused",STOPPED:"stopped",COMPLETED:"completed",FAILED:"failed"},T={ALL_TASKS_DONE:"all-tasks-done",ALL_OUTPUTS_DONE:"all-outputs-done",ONLY_RESOLVED:"only-resolved",GOAL_REACHED:"goal-reached",MANUAL:"manual"},E={DEPENDENCY_MODE:"dependency-mode",ELIGIBILITY_MODE:"eligibility-mode"},l={ALPHABETICAL:"alphabetical",PRIORITY_FIRST:"priority-first",DURATION_FIRST:"duration-first",COST_OPTIMIZED:"cost-optimized",RESOURCE_AWARE:"resource-aware",RANDOM_SELECT:"random-select",USER_CHOICE:"user-choice",PARALLEL_ALL:"parallel-all",SKIP_CONFLICTS:"skip-conflicts",ROUND_ROBIN:"round-robin"},S={EXECUTION_MODE:"eligibility-mode",CONFLICT_STRATEGY:"alphabetical",COMPLETION_STRATEGY:"all-outputs-done",MAX_ITERATIONS:1e3};function u(t){return t?Array.isArray(t.provides)?t.provides:[]:[]}function f(t){return t?Array.isArray(t.requires)?t.requires:[]:[]}function R(t){return t.tasks??{}}function x(t,e){return t.tasks[e]}function O(t,e){return e in t.tasks}function y(t){return t?t.status===s.FAILED||t.status===s.INACTIVATED:false}function I(t){return t?.status===s.COMPLETED}function h(t){return t?.status===s.RUNNING}function g(t,e){return t.refreshStrategy??e?.refreshStrategy??"data-changed"}function k(t,e){return g(t,e)!=="once"}function m(t){return t.maxExecutions}function N(t,e){let n=new Set;for(let[r,o]of Object.entries(e))if(o.status===s.COMPLETED){let i=t.tasks[r];i&&u(i).forEach(c=>n.add(c));}return Array.from(n)}function _(t,e){let n={};return t.forEach(r=>{let o=e[r];if(!o)return;u(o).forEach(a=>{n[a]||(n[a]=[]),n[a].push(r);});}),n}function D(t,e,n,r){for(let o of n){if(o===t)continue;let i=u(r[o]);if(e.some(c=>i.includes(c)))return true}return false}function L(t,e){let n=u(t);return n.includes(e)?t:{...t,provides:[...n,e]}}function G(t,e){let n=u(t);return {...t,provides:n.filter(r=>r!==e)}}function v(t,e){let n=f(t);return n.includes(e)?t:{...t,requires:[...n,e]}}function b(t,e){let n=f(t);return {...t,requires:n.filter(r=>r!==e)}}function P(t,e,n){return {...t,tasks:{...t.tasks,[e]:n}}}function p(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function M(t,e){let n={};for(let r of Object.keys(t.tasks))n[r]=p();return {status:"running",tasks:n,availableOutputs:[],stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},lastUpdated:new Date().toISOString(),executionId:e,executionConfig:{executionMode:t.settings.execution_mode??"eligibility-mode",conflictStrategy:t.settings.conflict_strategy??"alphabetical",completionStrategy:t.settings.completion}}}export{M as A,s as a,d as b,T as c,E as d,l as e,S as f,u as g,f as h,R as i,x as j,O as k,y as l,I as m,h as n,g as o,k as p,m as q,N as r,_ as s,D as t,L as u,G as v,v as w,b as x,P as y,p as z};//# sourceMappingURL=chunk-R7SQQSDX.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-R7SQQSDX.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunk7Y47QXMX_cjs=require('./chunk-7Y47QXMX.cjs');function w(t,n,e){let o=t.tasks[n]??g(),s={};if(e){let i=e.tasks[n],r=chunk7Y47QXMX_cjs.h(i);for(let u of r)for(let[d,S]of Object.entries(e.tasks))if(chunk7Y47QXMX_cjs.g(S).includes(u)){let c=t.tasks[d];c?.lastDataHash&&(s[u]=c.lastDataHash);break}}let a={...o,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:s};return {...t,tasks:{...t.tasks,[n]:a},lastUpdated:new Date().toISOString()}}function E(t,n,e,o,s,a){let i=t.tasks[e]??g(),r=n.tasks[e];if(!r)throw new Error(`Task "${e}" not found in graph`);let u;o&&r.on&&r.on[o]?u=r.on[o]:u=chunk7Y47QXMX_cjs.g(r);let d=i.startConsumedHashes?{...i.startConsumedHashes}:{...i.lastConsumedHashes};if(!i.startConsumedHashes){let h=r.requires??[];for(let l of h)for(let[x,C]of Object.entries(n.tasks))if(chunk7Y47QXMX_cjs.g(C).includes(l)){let f=t.tasks[x];f?.lastDataHash&&(d[l]=f.lastDataHash);break}}let S={...i,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:i.executionCount+1,lastEpoch:i.executionCount+1,lastDataHash:s,data:a,lastConsumedHashes:d,error:void 0},c=[...new Set([...t.availableOutputs,...u])];return {...t,tasks:{...t.tasks,[e]:S},availableOutputs:c,lastUpdated:new Date().toISOString()}}function D(t,n,e,o){let s=t.tasks[e]??g(),a=n.tasks[e];if(a?.retry){let u=s.retryCount+1;if(u<=a.retry.max_attempts){let d={...s,status:"not-started",retryCount:u,lastUpdated:new Date().toISOString(),error:o};return {...t,tasks:{...t.tasks,[e]:d},lastUpdated:new Date().toISOString()}}}let i={...s,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:o,executionCount:s.executionCount+1},r=t.availableOutputs;if(a?.on_failure&&a.on_failure.length>0&&(r=[...new Set([...t.availableOutputs,...a.on_failure])]),a?.circuit_breaker&&i.executionCount>=a.circuit_breaker.max_executions){let u=a.circuit_breaker.on_break;r=[...new Set([...r,...u])];}return {...t,tasks:{...t.tasks,[e]:i},availableOutputs:r,lastUpdated:new Date().toISOString()}}function T(t,n,e,o){let s=t.tasks[n]??g(),a={...s,progress:typeof o=="number"?o:s.progress,messages:[...s.messages??[],...e?[{message:e,timestamp:new Date().toISOString(),status:s.status}]:[]],lastUpdated:new Date().toISOString()};return {...t,tasks:{...t.tasks,[n]:a},lastUpdated:new Date().toISOString()}}function b(t,n){let e=t.tasks[n];if(!e)return t;let o={...e,status:"not-started",startedAt:void 0,completedAt:void 0,failedAt:void 0,error:void 0,data:void 0,progress:null,lastUpdated:new Date().toISOString()};return {...t,tasks:{...t.tasks,[n]:o},lastUpdated:new Date().toISOString()}}function g(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}exports.a=w;exports.b=E;exports.c=D;exports.d=T;exports.e=b;//# sourceMappingURL=chunk-SIPLKLWU.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-SIPLKLWU.cjs.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {g,t,s,i,a,l,r,h,o,q as q$1,F as F$1,E,D,C,B,A as A$1,z}from'./chunk-WDPOGXTY.js';import {q}from'./chunk-MNEOJWPS.js';import {b}from'./chunk-FW4363Y4.js';import Pe from'ajv-formats';function F(t,e,n,s){switch(s){case "alphabetical":return Y(t);case "priority-first":return ie(t,e);case "duration-first":return ae(t,e);case "cost-optimized":return ce(t,e);case "resource-aware":return ue(t,e);case "round-robin":return le(t,n);default:return Y(t)}}function Y(t){return [...t].sort((e,n)=>e.localeCompare(n))[0]}function ie(t,e){return [...t].sort((n,s)=>{let o=e[n]?.priority??0,r=e[s]?.priority??0;if(o!==r)return r-o;let i=A(e[n]),a=A(e[s]);return i!==a?i-a:n.localeCompare(s)})[0]}function ae(t,e){return [...t].sort((n,s)=>{let o=A(e[n]),r=A(e[s]);if(o!==r)return o-r;let i=e[n]?.priority??0,a=e[s]?.priority??0;return i!==a?a-i:n.localeCompare(s)})[0]}function ce(t,e){return [...t].sort((n,s)=>{let o=e[n]?.estimatedCost??0,r=e[s]?.estimatedCost??0;if(o!==r)return o-r;let i=e[n]?.priority??0,a=e[s]?.priority??0;return i!==a?a-i:n.localeCompare(s)})[0]}function ue(t,e){return [...t].sort((n,s)=>{let o=e[n]?.estimatedResources?.cpu??1,r=e[s]?.estimatedResources?.cpu??1;if(o!==r)return o-r;let i=e[n]?.priority??0,a=e[s]?.priority??0;return i!==a?a-i:n.localeCompare(s)})[0]}function le(t,e){let n=Object.values(e.tasks).reduce((o,r)=>o+r.executionCount,0),s=[...t].sort();return s[n%s.length]}function A(t){return t?.estimatedDuration??1/0}function j(t$1,e){return t$1.filter(n=>{let s=g(e[n]);return !t(n,s,t$1,e)})}function U(t,e){let n=s(t,e),s$1=[];for(let r of Object.values(n))if(r.length===1)s$1.push(...r);else {let i=Math.floor(Math.random()*r.length);s$1.push(r[i]);}return j(t,e).forEach(r=>{s$1.includes(r)||s$1.push(r);}),s$1}function W(t,e){switch(e.executionConfig.completionStrategy){case "all-tasks-done":return pe(t,e);case "all-outputs-done":return K(t,e);case "only-resolved":return fe(t,e);case "goal-reached":return de(t,e);case "manual":return {isComplete:false,expectedCompletion:{taskNames:[],outputs:[]}};default:return K(t,e)}}function pe(t,e){let n=i(t),s=Object.keys(n);return s.length===0?{isComplete:true,expectedCompletion:{taskNames:[],outputs:[]}}:{isComplete:s.every(r=>{let i=e.tasks[r];return i?.status===a.COMPLETED||l(i)}),expectedCompletion:{taskNames:s,outputs:[]}}}function K(t,e){let n=i(t),s=new Set;for(let i of Object.values(n))g(i).forEach(a=>s.add(a));let o=r(t,e.tasks);return {isComplete:[...s].every(i=>o.includes(i)),expectedCompletion:{taskNames:[],outputs:[...s]}}}function fe(t,e){let n=i(t),s=r(t,e.tasks),o=new Set,r$1={};for(let[c,u]of Object.entries(n))g(u).forEach(p=>{o.add(p),r$1[p]||(r$1[p]=[]),r$1[p].push(c);});for(let c of o){if(s.includes(c))continue;if((r$1[c]??[]).some(p=>{let g=e.tasks[p];if(g?.status===a.COMPLETED||l(g))return false;let l$1=n[p];return h(l$1).every(m=>s.includes(m))}))return {isComplete:false,expectedCompletion:{taskNames:[],outputs:[]}}}let i$1=ge(t,e);return i$1.length>0?{isComplete:false,expectedCompletion:{taskNames:i$1,outputs:[]}}:{isComplete:Object.values(e.tasks).filter(c=>c.status===a.COMPLETED).length>0||s.length>0,expectedCompletion:{taskNames:[],outputs:[]}}}function de(t,e){let n=t.settings.goal??[];if(n.length===0)return K(t,e);let s=r(t,e.tasks);return {isComplete:n.every(r=>s.includes(r)),expectedCompletion:{taskNames:[],outputs:n}}}function ge(t,e){let n=i(t),s=r(t,e.tasks),o=[];for(let[r,i]of Object.entries(n)){let a$1=e.tasks[r];if(a$1?.status===a.COMPLETED||a$1?.status===a.RUNNING||l(a$1))continue;if(h(i).every(u=>s.includes(u))){let u=g(i);u.length>0&&u.every(p=>s.includes(p))||o.push(r);}}return o}function H(t){let{graph:e,state:n,eligibleTasks:s,completionResult:o}=t,r$1=n.tasks,i$1=i(e),a$1=r(e,r$1);if(s.length>0)return {is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]};if(Object.values(r$1).some(p=>p.status===a.RUNNING))return {is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]};if(o?.expectedCompletion){let{taskNames:p=[],outputs:g$1=[]}=o.expectedCompletion;if(p.length>0){let l$1=p.filter(f=>l(r$1[f]));if(l$1.length>0&&l$1.length===p.length)return {is_stuck:true,stuck_description:`Completion expects tasks ${p.join(", ")} but all are failed`,tasks_blocked:l$1,outputs_unresolvable:g$1}}if(g$1.length>0&&n.executionConfig.completionStrategy!=="only-resolved"){let l$1=g$1.filter(f=>!a$1.includes(f));if(l$1.length>0){let f=[];for(let m of l$1)Object.entries(i$1).filter(([,C])=>g(C).includes(m)).map(([C])=>C).filter(C=>!l(r$1[C])).length===0&&f.push(m);if(f.length>0)return {is_stuck:true,stuck_description:`Completion expects outputs '${f.join("', '")}' but no viable tasks can provide them`,tasks_blocked:[],outputs_unresolvable:f}}}}let u=[],d=new Set;for(let[p,g$1]of Object.entries(i$1)){let l$1=r$1[p];if(l$1?.status===a.COMPLETED||l(l$1)||l$1?.status===a.RUNNING)continue;let m=h(g$1).filter(k=>!a$1.includes(k));m.length>0&&(m.every(x=>Object.entries(i$1).filter(([,v])=>g(v).includes(x)).map(([v])=>v).some(v=>!l(r$1[v])&&r$1[v]?.status!==a.COMPLETED))||(u.push(p),m.forEach(x=>d.add(x))));}return u.length>0?{is_stuck:true,stuck_description:`Tasks [${u.join(", ")}] blocked by unresolvable dependencies: ${[...d].join(", ")}`,tasks_blocked:u,outputs_unresolvable:[...d]}:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]}}function me(t,e){let n=[],s=i(t);if(Object.keys(s).length===0)return {eligibleTasks:[],isComplete:true,stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},hasConflicts:false,conflicts:{},strategy:e.executionConfig.conflictStrategy,processingLog:["No tasks defined"]};let o=e.executionConfig.executionMode,r=e.executionConfig.conflictStrategy,i$1=J(t,e);n.push(`Found ${i$1.length} candidate tasks: ${i$1.join(", ")||"none"}`);let a,c=false,u={};if(o==="dependency-mode")a=i$1;else {let g=he(i$1,t,e,r);a=g.eligibleTasks,c=g.hasConflicts,u=g.conflicts;}n.push(`Eligible after conflict resolution: ${a.join(", ")||"none"}`);let d=W(t,e);n.push(`Execution complete: ${d.isComplete}`);let p=H({graph:t,state:e,eligibleTasks:a,completionResult:d});return p.is_stuck&&n.push(`STUCK: ${p.stuck_description}`),{eligibleTasks:a,isComplete:d.isComplete,stuckDetection:p,hasConflicts:c,conflicts:u,strategy:r,processingLog:n}}function J(t,e){let n=i(t),s=r(t,e.tasks),o$1=[...new Set([...s,...e.availableOutputs])],r$1=[];for(let[i,a$1]of Object.entries(n)){let c=e.tasks[i],u=o(a$1,t.settings),d=u!=="once";if(c?.status===a.RUNNING||l(c))continue;let p=q$1(a$1);if(p!==void 0&&c&&c.executionCount>=p||a$1.circuit_breaker&&c&&c.executionCount>=a$1.circuit_breaker.max_executions||!d&&c?.status===a.COMPLETED)continue;if(d&&c?.status===a.COMPLETED){let l=h(a$1);switch(u){case "data-changed":{if(l.length>0){if(!l.some(m=>{for(let[k,x]of Object.entries(n))if(g(x).includes(m)){let C=e.tasks[k];if(!C)continue;let v=c.lastConsumedHashes?.[m];return C.lastDataHash==null?C.executionCount>c.lastEpoch:C.lastDataHash!==v}return false}))continue}else continue;break}case "epoch-changed":{if(l.length>0){if(!l.some(m=>{for(let[k,x]of Object.entries(n))if(g(x).includes(m)){let C=e.tasks[k];if(C&&C.executionCount>c.lastEpoch)return true}return false}))continue}else continue;break}case "time-based":{let f=a$1.refreshInterval??0;if(f<=0)continue;let m=c.completedAt;if(!m||(Date.now()-Date.parse(m))/1e3<f)continue;break}case "manual":continue;default:continue}}if(h(a$1).every(l=>o$1.includes(l))){if(!d){let l=g(a$1);if(l.length>0&&l.every(m=>o$1.includes(m)))continue}r$1.push(i);}}return r$1}function he(t,e,n,s$1){let o={eligibleTasks:[],hasConflicts:false,conflicts:{}};if(t.length===0)return o;let r=i(e);switch(s$1){case "parallel-all":return o.eligibleTasks=t,o;case "user-choice":{if(o.eligibleTasks=t,t.length>1){let p=s(t,r);for(let[g,l]of Object.entries(p))l.length>1&&(o.conflicts[g]=l,o.hasConflicts=true);}return o}case "skip-conflicts":return o.eligibleTasks=j(t,r),o;case "random-select":return o.eligibleTasks=U(t,r),o}let i$1=s(t,r),a$1=new Set;for(let[p,g$1]of Object.entries(n.tasks))if(g$1.status===a.RUNNING){let l=e.tasks[p];l&&g(l).forEach(f=>a$1.add(f));}let c=[],u=new Set;for(let[p,g]of Object.entries(i$1))if(!a$1.has(p)){if(g.length===1)c.push(g[0]);else {let l=F(g,r,n,s$1);c.push(l);}g.forEach(l=>u.add(l));}return t.filter(p=>!u.has(p)).forEach(p=>{c.includes(p)||c.push(p);}),o.eligibleTasks=c,o}function X(t,e,n){if("executionId"in e&&e.executionId&&e.executionId!==t.executionId)return t;switch(e.type){case "task-started":return B(t,e.taskName,n);case "task-completed":return C(t,n,e.taskName,e.result,e.dataHash,e.data);case "task-failed":return D(t,n,e.taskName,e.error);case "task-progress":return E(t,e.taskName,e.message,e.progress);case "task-restart":return F$1(t,e.taskName);case "inject-tokens":return ye(t,e.tokens);case "agent-action":return Ce(t,e.action,n,e.config);case "task-upsert":return be(t,e.taskName,e.taskConfig);default:return t}}function ke(t,e,n){return e.reduce((s,o)=>X(s,o,n),t)}function ye(t,e){return {...t,availableOutputs:[...new Set([...t.availableOutputs,...e])],lastUpdated:new Date().toISOString()}}function Ce(t,e,n,s){let o=new Date().toISOString();switch(e){case "start":{let r=`exec-${Date.now()}`,i=A$1(n,r);return s&&(s.executionMode&&(i.executionConfig.executionMode=s.executionMode),s.conflictStrategy&&(i.executionConfig.conflictStrategy=s.conflictStrategy),s.completionStrategy&&(i.executionConfig.completionStrategy=s.completionStrategy)),i}case "stop":return {...t,status:"stopped",executionId:null,lastUpdated:o};case "pause":return {...t,status:"paused",lastUpdated:o};case "resume":return {...t,status:"running",lastUpdated:o};default:return t}}function be(t,e,n){return !e||!n||!Array.isArray(n.provides)?t:{...t,tasks:{...t.tasks,[e]:t.tasks[e]??z()},lastUpdated:new Date().toISOString()}}function Te(t){let e={};for(let[n,s]of Object.entries(t)){for(let o of g(s))e[o]||(e[o]=[]),e[o].push(n);if(s.on)for(let o of Object.values(s.on))for(let r of o)e[r]||(e[r]=[]),e[r].includes(n)||e[r].push(n);if(s.on_failure)for(let o of s.on_failure)e[o]||(e[o]=[]),e[o].includes(n)||e[o].push(n);}return e}function xe(t,e){let n={};for(let[s,o]of Object.entries(t)){let r=h(o),i=new Set;for(let a of r){let c=e[a]||[];for(let u of c)u!==s&&i.add(u);}n[s]=[...i];}return n}function Se(t,e){let n=new Set(t),s={},o={};for(let a of t)s[a]=0,o[a]=[];for(let a of t)for(let c of e[a]||[])n.has(c)&&(s[a]++,o[c].push(a));let r=[],i=new Set(t);for(;i.size>0;){let a=[];for(let c of i)s[c]===0&&a.push(c);if(a.length===0){r.push([...i]);break}a.sort(),r.push(a);for(let c of a){i.delete(c);for(let u of o[c]||[])i.has(u)&&s[u]--;}}return r}function ve(t){let e=i(t),n=Object.keys(e);if(n.length===0)return {phases:[],dependencies:{},conflicts:{},entryPoints:[],leafTasks:[],unreachableTokens:[],blockedTasks:[],depth:0,maxParallelism:0};let s=Te(e),o=xe(e,s),r={};for(let[f,m]of Object.entries(s))m.length>1&&(r[f]=m);let i$1=n.filter(f=>h(e[f]).length===0),a=new Set;for(let f of Object.values(o))for(let m of f)a.add(m);let c=n.filter(f=>!a.has(f)),u=new Set;for(let f of Object.values(e))for(let m of h(f))u.add(m);let d=[...u].filter(f=>!s[f]),p=new Set(d),g=n.filter(f=>h(e[f]).some(m=>p.has(m))),l=Se(n,o);return {phases:l,dependencies:o,conflicts:r,entryPoints:i$1,leafTasks:c.sort(),unreachableTokens:d.sort(),blockedTasks:g.sort(),depth:l.length,maxParallelism:Math.max(0,...l.map(f=>f.length))}}function R(t){return t.replace(/[^a-zA-Z0-9_]/g,"_")}function Ee(t,e={}){let{direction:n="TD",showTokens:s=true,title:o}=e,r=i(t),i$1=Object.keys(r);if(i$1.length===0)return `graph ${n}
|
|
1
|
+
import {e,d,c,b as b$1,a as a$1}from'./chunk-EOVTMJYZ.js';import {g,t,s,i,a,l,r,h,o,q as q$1,A as A$1,z}from'./chunk-R7SQQSDX.js';import {q}from'./chunk-MNEOJWPS.js';import {b}from'./chunk-FW4363Y4.js';import Pe from'ajv-formats';function F(t,e,n,s){switch(s){case "alphabetical":return Y(t);case "priority-first":return ie(t,e);case "duration-first":return ae(t,e);case "cost-optimized":return ce(t,e);case "resource-aware":return ue(t,e);case "round-robin":return le(t,n);default:return Y(t)}}function Y(t){return [...t].sort((e,n)=>e.localeCompare(n))[0]}function ie(t,e){return [...t].sort((n,s)=>{let o=e[n]?.priority??0,r=e[s]?.priority??0;if(o!==r)return r-o;let i=A(e[n]),a=A(e[s]);return i!==a?i-a:n.localeCompare(s)})[0]}function ae(t,e){return [...t].sort((n,s)=>{let o=A(e[n]),r=A(e[s]);if(o!==r)return o-r;let i=e[n]?.priority??0,a=e[s]?.priority??0;return i!==a?a-i:n.localeCompare(s)})[0]}function ce(t,e){return [...t].sort((n,s)=>{let o=e[n]?.estimatedCost??0,r=e[s]?.estimatedCost??0;if(o!==r)return o-r;let i=e[n]?.priority??0,a=e[s]?.priority??0;return i!==a?a-i:n.localeCompare(s)})[0]}function ue(t,e){return [...t].sort((n,s)=>{let o=e[n]?.estimatedResources?.cpu??1,r=e[s]?.estimatedResources?.cpu??1;if(o!==r)return o-r;let i=e[n]?.priority??0,a=e[s]?.priority??0;return i!==a?a-i:n.localeCompare(s)})[0]}function le(t,e){let n=Object.values(e.tasks).reduce((o,r)=>o+r.executionCount,0),s=[...t].sort();return s[n%s.length]}function A(t){return t?.estimatedDuration??1/0}function j(t$1,e){return t$1.filter(n=>{let s=g(e[n]);return !t(n,s,t$1,e)})}function U(t,e){let n=s(t,e),s$1=[];for(let r of Object.values(n))if(r.length===1)s$1.push(...r);else {let i=Math.floor(Math.random()*r.length);s$1.push(r[i]);}return j(t,e).forEach(r=>{s$1.includes(r)||s$1.push(r);}),s$1}function W(t,e){switch(e.executionConfig.completionStrategy){case "all-tasks-done":return pe(t,e);case "all-outputs-done":return K(t,e);case "only-resolved":return fe(t,e);case "goal-reached":return de(t,e);case "manual":return {isComplete:false,expectedCompletion:{taskNames:[],outputs:[]}};default:return K(t,e)}}function pe(t,e){let n=i(t),s=Object.keys(n);return s.length===0?{isComplete:true,expectedCompletion:{taskNames:[],outputs:[]}}:{isComplete:s.every(r=>{let i=e.tasks[r];return i?.status===a.COMPLETED||l(i)}),expectedCompletion:{taskNames:s,outputs:[]}}}function K(t,e){let n=i(t),s=new Set;for(let i of Object.values(n))g(i).forEach(a=>s.add(a));let o=r(t,e.tasks);return {isComplete:[...s].every(i=>o.includes(i)),expectedCompletion:{taskNames:[],outputs:[...s]}}}function fe(t,e){let n=i(t),s=r(t,e.tasks),o=new Set,r$1={};for(let[c,u]of Object.entries(n))g(u).forEach(p=>{o.add(p),r$1[p]||(r$1[p]=[]),r$1[p].push(c);});for(let c of o){if(s.includes(c))continue;if((r$1[c]??[]).some(p=>{let g=e.tasks[p];if(g?.status===a.COMPLETED||l(g))return false;let l$1=n[p];return h(l$1).every(m=>s.includes(m))}))return {isComplete:false,expectedCompletion:{taskNames:[],outputs:[]}}}let i$1=ge(t,e);return i$1.length>0?{isComplete:false,expectedCompletion:{taskNames:i$1,outputs:[]}}:{isComplete:Object.values(e.tasks).filter(c=>c.status===a.COMPLETED).length>0||s.length>0,expectedCompletion:{taskNames:[],outputs:[]}}}function de(t,e){let n=t.settings.goal??[];if(n.length===0)return K(t,e);let s=r(t,e.tasks);return {isComplete:n.every(r=>s.includes(r)),expectedCompletion:{taskNames:[],outputs:n}}}function ge(t,e){let n=i(t),s=r(t,e.tasks),o=[];for(let[r,i]of Object.entries(n)){let a$1=e.tasks[r];if(a$1?.status===a.COMPLETED||a$1?.status===a.RUNNING||l(a$1))continue;if(h(i).every(u=>s.includes(u))){let u=g(i);u.length>0&&u.every(p=>s.includes(p))||o.push(r);}}return o}function H(t){let{graph:e,state:n,eligibleTasks:s,completionResult:o}=t,r$1=n.tasks,i$1=i(e),a$1=r(e,r$1);if(s.length>0)return {is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]};if(Object.values(r$1).some(p=>p.status===a.RUNNING))return {is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]};if(o?.expectedCompletion){let{taskNames:p=[],outputs:g$1=[]}=o.expectedCompletion;if(p.length>0){let l$1=p.filter(f=>l(r$1[f]));if(l$1.length>0&&l$1.length===p.length)return {is_stuck:true,stuck_description:`Completion expects tasks ${p.join(", ")} but all are failed`,tasks_blocked:l$1,outputs_unresolvable:g$1}}if(g$1.length>0&&n.executionConfig.completionStrategy!=="only-resolved"){let l$1=g$1.filter(f=>!a$1.includes(f));if(l$1.length>0){let f=[];for(let m of l$1)Object.entries(i$1).filter(([,C])=>g(C).includes(m)).map(([C])=>C).filter(C=>!l(r$1[C])).length===0&&f.push(m);if(f.length>0)return {is_stuck:true,stuck_description:`Completion expects outputs '${f.join("', '")}' but no viable tasks can provide them`,tasks_blocked:[],outputs_unresolvable:f}}}}let u=[],d=new Set;for(let[p,g$1]of Object.entries(i$1)){let l$1=r$1[p];if(l$1?.status===a.COMPLETED||l(l$1)||l$1?.status===a.RUNNING)continue;let m=h(g$1).filter(k=>!a$1.includes(k));m.length>0&&(m.every(x=>Object.entries(i$1).filter(([,v])=>g(v).includes(x)).map(([v])=>v).some(v=>!l(r$1[v])&&r$1[v]?.status!==a.COMPLETED))||(u.push(p),m.forEach(x=>d.add(x))));}return u.length>0?{is_stuck:true,stuck_description:`Tasks [${u.join(", ")}] blocked by unresolvable dependencies: ${[...d].join(", ")}`,tasks_blocked:u,outputs_unresolvable:[...d]}:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]}}function me(t,e){let n=[],s=i(t);if(Object.keys(s).length===0)return {eligibleTasks:[],isComplete:true,stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},hasConflicts:false,conflicts:{},strategy:e.executionConfig.conflictStrategy,processingLog:["No tasks defined"]};let o=e.executionConfig.executionMode,r=e.executionConfig.conflictStrategy,i$1=J(t,e);n.push(`Found ${i$1.length} candidate tasks: ${i$1.join(", ")||"none"}`);let a,c=false,u={};if(o==="dependency-mode")a=i$1;else {let g=he(i$1,t,e,r);a=g.eligibleTasks,c=g.hasConflicts,u=g.conflicts;}n.push(`Eligible after conflict resolution: ${a.join(", ")||"none"}`);let d=W(t,e);n.push(`Execution complete: ${d.isComplete}`);let p=H({graph:t,state:e,eligibleTasks:a,completionResult:d});return p.is_stuck&&n.push(`STUCK: ${p.stuck_description}`),{eligibleTasks:a,isComplete:d.isComplete,stuckDetection:p,hasConflicts:c,conflicts:u,strategy:r,processingLog:n}}function J(t,e){let n=i(t),s=r(t,e.tasks),o$1=[...new Set([...s,...e.availableOutputs])],r$1=[];for(let[i,a$1]of Object.entries(n)){let c=e.tasks[i],u=o(a$1,t.settings),d=u!=="once";if(c?.status===a.RUNNING||l(c))continue;let p=q$1(a$1);if(p!==void 0&&c&&c.executionCount>=p||a$1.circuit_breaker&&c&&c.executionCount>=a$1.circuit_breaker.max_executions||!d&&c?.status===a.COMPLETED)continue;if(d&&c?.status===a.COMPLETED){let l=h(a$1);switch(u){case "data-changed":{if(l.length>0){if(!l.some(m=>{for(let[k,x]of Object.entries(n))if(g(x).includes(m)){let C=e.tasks[k];if(!C)continue;let v=c.lastConsumedHashes?.[m];return C.lastDataHash==null?C.executionCount>c.lastEpoch:C.lastDataHash!==v}return false}))continue}else continue;break}case "epoch-changed":{if(l.length>0){if(!l.some(m=>{for(let[k,x]of Object.entries(n))if(g(x).includes(m)){let C=e.tasks[k];if(C&&C.executionCount>c.lastEpoch)return true}return false}))continue}else continue;break}case "time-based":{let f=a$1.refreshInterval??0;if(f<=0)continue;let m=c.completedAt;if(!m||(Date.now()-Date.parse(m))/1e3<f)continue;break}case "manual":continue;default:continue}}if(h(a$1).every(l=>o$1.includes(l))){if(!d){let l=g(a$1);if(l.length>0&&l.every(m=>o$1.includes(m)))continue}r$1.push(i);}}return r$1}function he(t,e,n,s$1){let o={eligibleTasks:[],hasConflicts:false,conflicts:{}};if(t.length===0)return o;let r=i(e);switch(s$1){case "parallel-all":return o.eligibleTasks=t,o;case "user-choice":{if(o.eligibleTasks=t,t.length>1){let p=s(t,r);for(let[g,l]of Object.entries(p))l.length>1&&(o.conflicts[g]=l,o.hasConflicts=true);}return o}case "skip-conflicts":return o.eligibleTasks=j(t,r),o;case "random-select":return o.eligibleTasks=U(t,r),o}let i$1=s(t,r),a$1=new Set;for(let[p,g$1]of Object.entries(n.tasks))if(g$1.status===a.RUNNING){let l=e.tasks[p];l&&g(l).forEach(f=>a$1.add(f));}let c=[],u=new Set;for(let[p,g]of Object.entries(i$1))if(!a$1.has(p)){if(g.length===1)c.push(g[0]);else {let l=F(g,r,n,s$1);c.push(l);}g.forEach(l=>u.add(l));}return t.filter(p=>!u.has(p)).forEach(p=>{c.includes(p)||c.push(p);}),o.eligibleTasks=c,o}function X(t,e$1,n){if("executionId"in e$1&&e$1.executionId&&e$1.executionId!==t.executionId)return t;switch(e$1.type){case "task-started":return a$1(t,e$1.taskName,n);case "task-completed":return b$1(t,n,e$1.taskName,e$1.result,e$1.dataHash,e$1.data);case "task-failed":return c(t,n,e$1.taskName,e$1.error);case "task-progress":return d(t,e$1.taskName,e$1.message,e$1.progress);case "task-restart":return e(t,e$1.taskName);case "inject-tokens":return ye(t,e$1.tokens);case "agent-action":return Ce(t,e$1.action,n,e$1.config);case "task-upsert":return be(t,e$1.taskName,e$1.taskConfig);default:return t}}function ke(t,e,n){return e.reduce((s,o)=>X(s,o,n),t)}function ye(t,e){return {...t,availableOutputs:[...new Set([...t.availableOutputs,...e])],lastUpdated:new Date().toISOString()}}function Ce(t,e,n,s){let o=new Date().toISOString();switch(e){case "start":{let r=`exec-${Date.now()}`,i=A$1(n,r);return s&&(s.executionMode&&(i.executionConfig.executionMode=s.executionMode),s.conflictStrategy&&(i.executionConfig.conflictStrategy=s.conflictStrategy),s.completionStrategy&&(i.executionConfig.completionStrategy=s.completionStrategy)),i}case "stop":return {...t,status:"stopped",executionId:null,lastUpdated:o};case "pause":return {...t,status:"paused",lastUpdated:o};case "resume":return {...t,status:"running",lastUpdated:o};default:return t}}function be(t,e,n){return !e||!n||!Array.isArray(n.provides)?t:{...t,tasks:{...t.tasks,[e]:t.tasks[e]??z()},lastUpdated:new Date().toISOString()}}function Te(t){let e={};for(let[n,s]of Object.entries(t)){for(let o of g(s))e[o]||(e[o]=[]),e[o].push(n);if(s.on)for(let o of Object.values(s.on))for(let r of o)e[r]||(e[r]=[]),e[r].includes(n)||e[r].push(n);if(s.on_failure)for(let o of s.on_failure)e[o]||(e[o]=[]),e[o].includes(n)||e[o].push(n);}return e}function xe(t,e){let n={};for(let[s,o]of Object.entries(t)){let r=h(o),i=new Set;for(let a of r){let c=e[a]||[];for(let u of c)u!==s&&i.add(u);}n[s]=[...i];}return n}function Se(t,e){let n=new Set(t),s={},o={};for(let a of t)s[a]=0,o[a]=[];for(let a of t)for(let c of e[a]||[])n.has(c)&&(s[a]++,o[c].push(a));let r=[],i=new Set(t);for(;i.size>0;){let a=[];for(let c of i)s[c]===0&&a.push(c);if(a.length===0){r.push([...i]);break}a.sort(),r.push(a);for(let c of a){i.delete(c);for(let u of o[c]||[])i.has(u)&&s[u]--;}}return r}function ve(t){let e=i(t),n=Object.keys(e);if(n.length===0)return {phases:[],dependencies:{},conflicts:{},entryPoints:[],leafTasks:[],unreachableTokens:[],blockedTasks:[],depth:0,maxParallelism:0};let s=Te(e),o=xe(e,s),r={};for(let[f,m]of Object.entries(s))m.length>1&&(r[f]=m);let i$1=n.filter(f=>h(e[f]).length===0),a=new Set;for(let f of Object.values(o))for(let m of f)a.add(m);let c=n.filter(f=>!a.has(f)),u=new Set;for(let f of Object.values(e))for(let m of h(f))u.add(m);let d=[...u].filter(f=>!s[f]),p=new Set(d),g=n.filter(f=>h(e[f]).some(m=>p.has(m))),l=Se(n,o);return {phases:l,dependencies:o,conflicts:r,entryPoints:i$1,leafTasks:c.sort(),unreachableTokens:d.sort(),blockedTasks:g.sort(),depth:l.length,maxParallelism:Math.max(0,...l.map(f=>f.length))}}function R(t){return t.replace(/[^a-zA-Z0-9_]/g,"_")}function Ee(t,e={}){let{direction:n="TD",showTokens:s=true,title:o}=e,r=i(t),i$1=Object.keys(r);if(i$1.length===0)return `graph ${n}
|
|
2
2
|
empty[No tasks defined]`;let a={};for(let[l,f]of Object.entries(r)){for(let m of g(f))a[m]||(a[m]=[]),a[m].push(l);if(f.on)for(let m of Object.values(f.on))for(let k of m)a[k]||(a[k]=[]),a[k].includes(l)||a[k].push(l);}let c=[],u=o||t.id||"Event Graph";c.push(`%% ${u}`),c.push(`graph ${n}`);let d=new Set;for(let l of Object.values(r))for(let f of h(l))d.add(f);let p=new Set(i$1.filter(l=>{let f=g(r[l]);return f.length===0||f.every(m=>!d.has(m))}));for(let l of i$1){let f=R(l);h(r[l]).length===0?c.push(` ${f}([${l}])`):p.has(l)?c.push(` ${f}[[${l}]]`):c.push(` ${f}[${l}]`);}let g$1=new Set;for(let[l,f]of Object.entries(r)){let m=h(f);for(let k of m){let x=a[k]||[];for(let C of x){if(C===l)continue;let v=`${C}->${l}:${k}`;if(g$1.has(v))continue;g$1.add(v);let V=R(C),z=R(l);s?c.push(` ${V} -->|${k}| ${z}`):c.push(` ${V} --> ${z}`);}}for(let k of m)if(!a[k]){let x=`warn_${R(k)}`,C=R(l);c.push(` ${x}{{\u26A0 ${k}}} -.->|missing| ${C}`);}}return c.join(`
|
|
3
3
|
`)}function Re(t,e={}){let{direction:n="TD",title:s}=e,o=t.steps,r=t.terminal_states,i=t.settings.start_step,a=[],c=s||t.id||"Step Machine";a.push(`%% ${c}`),a.push(`graph ${n}`),a.push(" START(( ))"),a.push(` START --> ${R(i)}`);for(let u of Object.keys(o)){let d=R(u);a.push(` ${d}[${u}]`);}for(let[u,d]of Object.entries(r)){let p=R(u);a.push(` ${p}([${u}: ${d.return_intent}])`);}for(let[u,d]of Object.entries(o)){let p=R(u);for(let[g,l]of Object.entries(d.transitions)){let f=R(l);a.push(` ${p} -->|${g}| ${f}`);}}return a.join(`
|
|
4
4
|
`)}function Z(t){let e=[];if(!t||typeof t!="object")return ["Graph config must be an object"];let n=t;if(!n.settings||typeof n.settings!="object")e.push('Graph config must have a "settings" object');else {let s=n.settings;(!s.completion||typeof s.completion!="string")&&e.push("settings.completion must be a string"),s.completion==="goal-reached"&&(!Array.isArray(s.goal)||s.goal.length===0)&&e.push('settings.goal must be a non-empty array when completion is "goal-reached"');}if(!n.tasks||typeof n.tasks!="object")e.push('Graph config must have a "tasks" object');else {let s=n.tasks;Object.keys(s).length===0&&e.push("Graph config must have at least one task");for(let[o,r]of Object.entries(s)){if(!r||typeof r!="object"){e.push(`Task "${o}" must be an object`);continue}let i=r;if(Array.isArray(i.provides)||e.push(`Task "${o}" must have a "provides" array`),i.requires!==void 0&&!Array.isArray(i.requires)&&e.push(`Task "${o}".requires must be an array if present`),i.on!==void 0)if(typeof i.on!="object"||Array.isArray(i.on))e.push(`Task "${o}".on must be an object mapping result keys to token arrays`);else for(let[a,c]of Object.entries(i.on))Array.isArray(c)||e.push(`Task "${o}".on.${a} must be an array of tokens`);}}return e}async function Q(t){return (await import('yaml')).parse(t)}async function Oe(t){let e;if(typeof t=="string")if(t.startsWith("http://")||t.startsWith("https://")){let s=await fetch(t);if(!s.ok)throw new Error(`Failed to load graph config from ${t}: ${s.statusText}`);let o=await s.text();(s.headers.get("content-type")??"").includes("json")||t.endsWith(".json")?e=JSON.parse(o):e=await Q(o);}else if(t.includes("{"))e=JSON.parse(t);else {let o=await(await import('fs/promises')).readFile(t,"utf-8");t.endsWith(".json")?e=JSON.parse(o):e=await Q(o);}else e=t;let n=Z(e);if(n.length>0)throw new Error(`Invalid graph configuration:
|
|
@@ -12,5 +12,5 @@ ${i.slice(1).map(a=>`${s} ${a.trimStart()?a:""}`).filter(Boolean).join(`
|
|
|
12
12
|
${a}`:Array.isArray(i)&&i.length>0&&!i.every(c=>typeof c=="string"||typeof c=="number"||typeof c=="boolean")?`${s}${r}:
|
|
13
13
|
${a}`:`${s}${r}: ${a}`}).filter(Boolean).join(`
|
|
14
14
|
`)}return String(t)}function je(t){let e={};for(let[n,s]of Object.entries(t)){for(let o of g(s))e[o]||(e[o]=[]),e[o].push(n);if(s.on)for(let o of Object.values(s.on))for(let r of o)e[r]||(e[r]=[]),e[r].includes(n)||e[r].push(n);if(s.on_failure)for(let o of s.on_failure)e[o]||(e[o]=[]),e[o].includes(n)||e[o].push(n);}return e}function Ge(t,e){let n={};for(let[s,o]of Object.entries(t)){n[s]=new Set;for(let r of h(o))for(let i of e[r]||[])i!==s&&n[s].add(i);}return n}function _e(t,e){let r={},i={},a=[];for(let u of t)r[u]=0,i[u]=null;function c(u){r[u]=1;for(let d of e[u]||[])if(r[d]===1){let p=[d],g=u;for(;g!==d;)p.push(g),g=i[g];p.push(d),p.reverse(),a.push(p);}else r[d]===0&&(i[d]=u,c(d));r[u]=2;}for(let u of t)r[u]===0&&c(u);return a}function $e(t){let e=[],n=i(t),s=Object.keys(n);if(s.length===0)return e.push({severity:"error",code:"EMPTY_GRAPH",message:"Graph has no tasks"}),te(e);let o=je(n),r=Ge(n,o);for(let[c,u]of Object.entries(n))for(let d of h(u))o[d]||e.push({severity:"error",code:"DANGLING_REQUIRES",message:`Task "${c}" requires token "${d}" but no task produces it`,tasks:[c],tokens:[d]});let i$1=_e(s,r);for(let c of i$1)e.push({severity:"error",code:"CIRCULAR_DEPENDENCY",message:`Circular dependency: ${c.join(" \u2192 ")}`,tasks:c.filter((u,d)=>d<c.length-1)});for(let[c,u]of Object.entries(n)){let d=h(u),p=g(u),g$1=d.filter(l=>p.includes(l));g$1.length>0&&e.push({severity:"error",code:"SELF_DEPENDENCY",message:`Task "${c}" requires tokens it provides itself: [${g$1.join(", ")}]`,tasks:[c],tokens:g$1});}for(let[c,u]of Object.entries(o))u.length>1&&e.push({severity:"warning",code:"PROVIDE_CONFLICT",message:`Token "${c}" is produced by multiple tasks: [${u.join(", ")}]. This requires a conflict strategy.`,tasks:u,tokens:[c]});if(t.settings.completion==="goal-reached"&&t.settings.goal)for(let c of t.settings.goal)o[c]||e.push({severity:"error",code:"UNREACHABLE_GOAL",message:`Goal token "${c}" cannot be produced by any task`,tokens:[c]});if(s.length>1)for(let[c,u]of Object.entries(n)){let d=g(u),p=u.on?Object.values(u.on).flat():[],g$1=u.on_failure||[];d.length===0&&p.length===0&&g$1.length===0&&e.push({severity:"warning",code:"DEAD_END_TASK",message:`Task "${c}" has no provides \u2014 it cannot unblock any downstream task`,tasks:[c]});}let a=new Set;for(let c of Object.values(n))for(let u of h(c))a.add(u);for(let[c,u]of Object.entries(n)){let d=h(u),p=g(u),g$1=u.on?Object.values(u.on).flat():[],l=[...p,...g$1],f=d.length===0,m=l.some(k=>a.has(k));f&&!m&&s.length>1&&(t.settings.completion==="goal-reached"&&t.settings.goal?.some(x=>l.includes(x))||e.push({severity:"info",code:"ISOLATED_TASK",message:`Task "${c}" is disconnected \u2014 it has no requires and nothing depends on its provides`,tasks:[c]}));}return t.settings.completion==="goal-reached"&&!t.settings.goal&&e.push({severity:"error",code:"MISSING_GOAL",message:'Completion strategy is "goal-reached" but no goal tokens are defined'}),te(e)}function te(t){let e=t.filter(s=>s.severity==="error"),n=t.filter(s=>s.severity==="warning");return {valid:e.length===0,issues:t,errors:e,warnings:n}}var se={$schema:"http://json-schema.org/draft-07/schema#",$id:"https://github.com/yaml-flow/schema/event-graph.json",title:"Event Graph Configuration",description:"Schema for stateless event-graph (DAG) workflow definitions in yaml-flow",type:"object",required:["settings","tasks"],additionalProperties:false,properties:{id:{type:"string",description:"Optional graph identifier"},settings:{$ref:"#/definitions/settings"},tasks:{type:"object",description:"Task definitions keyed by name",minProperties:1,additionalProperties:{$ref:"#/definitions/task"}}},definitions:{settings:{type:"object",required:["completion"],properties:{completion:{type:"string",enum:["all-tasks-done","all-outputs-done","only-resolved","goal-reached","manual"],description:"Completion strategy"},conflict_strategy:{type:"string",enum:["alphabetical","priority-first","duration-first","cost-optimized","resource-aware","random-select","user-choice","parallel-all","skip-conflicts","round-robin"],description:"Conflict resolution strategy"},execution_mode:{type:"string",enum:["dependency-mode","eligibility-mode"],description:"Execution mode"},goal:{type:"array",items:{type:"string"},minItems:1,description:"Goal outputs \u2014 required when completion is 'goal-reached'"},max_iterations:{type:"integer",minimum:1,description:"Max scheduler iterations (safety limit, default: 1000)"},timeout_ms:{type:"integer",minimum:0,description:"Timeout in ms (declared for drivers, not enforced by pure engine)"},refreshStrategy:{$ref:"#/definitions/refresh_strategy",description:"Default refresh strategy for all tasks (default: 'data-changed')"}},additionalProperties:false,if:{properties:{completion:{const:"goal-reached"}}},then:{required:["completion","goal"]}},task:{type:"object",required:["provides"],properties:{requires:{type:"array",items:{type:"string"},description:"Tokens this task needs to become eligible"},provides:{type:"array",items:{type:"string"},description:"Tokens this task produces on successful completion"},on:{type:"object",description:"Conditional provides based on handler result key",additionalProperties:{type:"array",items:{type:"string"}}},on_failure:{type:"array",items:{type:"string"},description:"Tokens to inject when this task fails"},method:{type:"string",description:"Task execution method (informational \u2014 driver concern)"},config:{type:"object",description:"Arbitrary task configuration (driver concern)"},priority:{type:"number",description:"Higher = preferred in conflict resolution"},estimatedDuration:{type:"number",minimum:0,description:"Estimated duration in ms (used by duration-first strategy)"},estimatedCost:{type:"number",minimum:0,description:"Estimated cost (used by cost-optimized strategy)"},estimatedResources:{type:"object",additionalProperties:{type:"number"},description:"Resource requirements (used by resource-aware strategy)"},retry:{$ref:"#/definitions/task_retry"},refreshStrategy:{$ref:"#/definitions/refresh_strategy",description:"Task-level refresh strategy (overrides settings default)"},refreshInterval:{type:"number",minimum:0,description:"Interval in seconds for time-based refresh strategy"},maxExecutions:{type:"integer",minimum:1,description:"Maximum number of times this task can execute"},circuit_breaker:{$ref:"#/definitions/task_circuit_breaker"},description:{type:"string",description:"Human-readable description"},inference:{$ref:"#/definitions/inference_hints"}},additionalProperties:false},task_retry:{type:"object",required:["max_attempts"],properties:{max_attempts:{type:"integer",minimum:1,description:"Maximum retry attempts"},delay_ms:{type:"integer",minimum:0,description:"Delay between retries in ms"},backoff_multiplier:{type:"number",minimum:1,description:"Backoff multiplier (e.g., 2 for exponential)"}},additionalProperties:false},refresh_strategy:{type:"string",enum:["data-changed","epoch-changed","time-based","manual","once"],description:"Strategy for determining when a completed task should re-run"},task_circuit_breaker:{type:"object",required:["max_executions","on_break"],properties:{max_executions:{type:"integer",minimum:1,description:"Max executions before breaker trips"},on_break:{type:"array",items:{type:"string"},minItems:1,description:"Tokens to inject when breaker trips"}},additionalProperties:false},inference_hints:{type:"object",description:"LLM inference hints \u2014 opt-in metadata for AI-assisted completion detection",properties:{criteria:{type:"string",description:"Human-readable completion criteria"},keywords:{type:"array",items:{type:"string"},description:"Keywords to help the LLM understand the domain"},suggestedChecks:{type:"array",items:{type:"string"},description:"Suggested checks for verification"},autoDetectable:{type:"boolean",description:"Whether the LLM should attempt to auto-detect completion (default: false)"}},additionalProperties:false}}};var ne=b(q(),1);var _=null;function Ie(){if(_)return _;let t=new ne.default({allErrors:true});return Pe(t),_=t.compile(se),_}function Ne(t){let e=Ie();return e(t)?{ok:true,errors:[]}:{ok:false,errors:(e.errors??[]).map(o=>`${o.instancePath||"/"}: ${o.message??"unknown error"}`)}}
|
|
15
|
-
export{F as a,j as b,U as c,W as d,H as e,me as f,J as g,X as h,ke as i,ve as j,Ee as k,Re as l,Z as m,Oe as n,ee as o,Ae as p,$e as q,Ne as r};//# sourceMappingURL=chunk-
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
15
|
+
export{F as a,j as b,U as c,W as d,H as e,me as f,J as g,X as h,ke as i,ve as j,Ee as k,Re as l,Z as m,Oe as n,ee as o,Ae as p,$e as q,Ne as r};//# sourceMappingURL=chunk-SK2R5ILQ.js.map
|
|
16
|
+
//# sourceMappingURL=chunk-SK2R5ILQ.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunk7Y47QXMX_cjs=require('./chunk-7Y47QXMX.cjs');function F(b){let{config:e,state:o}=b,i=chunk7Y47QXMX_cjs.i(e);if(Object.keys(i).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let l=H(i),L=chunk7Y47QXMX_cjs.r(e,o.tasks),U=new Set([...L,...o.availableOutputs]),d=[],x=[],y=[],P=[];for(let[u,a]of Object.entries(i)){let t=o.tasks[u],D=chunk7Y47QXMX_cjs.o(a,e.settings),j=D!=="once";if(t?.status===chunk7Y47QXMX_cjs.a.RUNNING||chunk7Y47QXMX_cjs.l(t))continue;let N=chunk7Y47QXMX_cjs.q(a);if(N!==void 0&&t&&t.executionCount>=N||a.circuit_breaker&&t&&t.executionCount>=a.circuit_breaker.max_executions||!j&&t?.status===chunk7Y47QXMX_cjs.a.COMPLETED)continue;if(j&&t?.status===chunk7Y47QXMX_cjs.a.COMPLETED){let s=chunk7Y47QXMX_cjs.h(a),n=false;switch(D){case "data-changed":{s.length>0&&s.some(c=>{for(let[g,O]of Object.entries(i))if(chunk7Y47QXMX_cjs.g(O).includes(c)){let f=o.tasks[g];if(!f)continue;let B=t.lastConsumedHashes?.[c];return f.lastDataHash==null?f.executionCount>t.lastEpoch:f.lastDataHash!==B}return false})||(n=true);break}case "epoch-changed":{s.length>0&&s.some(c=>{for(let[g,O]of Object.entries(i))if(chunk7Y47QXMX_cjs.g(O).includes(c)){let f=o.tasks[g];if(f&&f.executionCount>t.lastEpoch)return true}return false})||(n=true);break}case "time-based":{let h=a.refreshInterval??0;if(h<=0){n=true;break}let c=t.completedAt;if(!c){n=true;break}(Date.now()-Date.parse(c))/1e3<h&&(n=true);break}case "manual":n=true;break}if(n)continue}let E=chunk7Y47QXMX_cjs.h(a);if(E.length===0){d.push(u);continue}let T=[],v=[],p=[];for(let s of E){if(U.has(s))continue;let n=l[s]||[];n.length===0?T.push(s):n.every(c=>chunk7Y47QXMX_cjs.l(o.tasks[c]))?p.push({token:s,failedProducer:n[0]}):v.push(s);}T.length>0?y.push({taskName:u,missingTokens:T}):p.length>0?P.push({taskName:u,failedTokens:p.map(s=>s.token),failedProducers:[...new Set(p.map(s=>s.failedProducer))]}):v.length>0?x.push({taskName:u,waitingOn:v}):d.push(u);}let R={};if(d.length>1){let u=chunk7Y47QXMX_cjs.s(d,i);for(let[a,t]of Object.entries(u))t.length>1&&(R[a]=t);}return {eligible:d,pending:x,unresolved:y,blocked:P,conflicts:R}}function H(b){let e={};for(let[o,i]of Object.entries(b)){for(let r of chunk7Y47QXMX_cjs.g(i))e[r]||(e[r]=[]),e[r].push(o);if(i.on)for(let r of Object.values(i.on))for(let l of r)e[l]||(e[l]=[]),e[l].includes(o)||e[l].push(o);if(i.on_failure)for(let r of i.on_failure)e[r]||(e[r]=[]),e[r].includes(o)||e[r].push(o);}return e}exports.a=F;//# sourceMappingURL=chunk-VI36DRWG.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-VI36DRWG.cjs.map
|