@frumu/tandem-panel 0.5.4 → 0.5.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/bin/setup.js +1 -0
- package/dist/assets/AutomationsPage-BGqpmilp.js +946 -0
- package/dist/assets/BugMonitorPage-BVzdj9y-.js +4 -0
- package/dist/assets/ChannelsPage-B-InJ4Yh.js +1 -0
- package/dist/assets/ChatInterfacePanel-BrMo4cXg.js +1 -0
- package/dist/assets/ChatPage-Bc-BfOG1.js +1 -0
- package/dist/assets/CodingWorkflowsPage-xgfwLRlt.js +8 -0
- package/dist/assets/ControlPanelDialogs-yFfCht3Y.js +1 -0
- package/dist/assets/DashboardPage-CrA1itFc.js +1 -0
- package/dist/assets/ExperimentsPage-Bkg1_6rw.js +84 -0
- package/dist/assets/FilesPage-DChyHlO_.js +1 -0
- package/dist/assets/IntentPlannerPage-Dti1h8Tm.js +5 -0
- package/dist/assets/LazyJson-vfWw7G9F.js +1 -0
- package/dist/assets/MarketplacePage-90fAVNGg.js +1 -0
- package/dist/assets/McpToolAllowlistEditor-BzQ64HrZ.js +1 -0
- package/dist/assets/MemoryImportDialog-DSpS1JF5.js +1 -0
- package/dist/assets/MemoryPage-DRRLgoc0.js +1 -0
- package/dist/assets/OrchestratorPage-CYU-ESPI.js +3 -0
- package/dist/assets/PacksPage-dRmjjdKD.js +3 -0
- package/dist/assets/PlannerDiagnosticsPanel-C1uIuRIx.js +1 -0
- package/dist/assets/ProviderModelSelector-BdtOpkJR.js +1 -0
- package/dist/assets/RunsPage-DEy8vbRT.js +1 -0
- package/dist/assets/SettingsPage-CwH_FzOs.js +5 -0
- package/dist/assets/TaskBoard-CCY_Qy5S.js +1 -0
- package/dist/assets/TeamsPage-Dn81V0EB.js +4472 -0
- package/dist/assets/TimezoneField-B5i---lF.js +1 -0
- package/dist/assets/WorkflowStudioPage-yFhlA4KV.js +1854 -0
- package/dist/assets/WorkflowsPage-vmaKHFox.js +2 -0
- package/dist/assets/chatPageHelpers-Dmb4waDk.js +1 -0
- package/dist/assets/explorerHandoff-BPKxMR82.js +1 -0
- package/dist/assets/format-DyX5imzJ.js +1 -0
- package/dist/assets/fullcalendar-Bn75j0xM.js +1 -0
- package/dist/assets/index-C8Bjo7hU.css +1 -0
- package/dist/assets/index-TvymvGva.js +3 -0
- package/dist/assets/messages-uD0aB_MZ.js +3 -0
- package/dist/assets/motion-B3ZE8SGR.js +9 -0
- package/dist/assets/plannerShared-Dx7-Sxpc.js +1 -0
- package/dist/assets/preact-vendor-DaCG_P2o.js +1 -0
- package/dist/assets/react-query-BIbNygEJ.js +1 -0
- package/dist/assets/sse-B4A2m-Nk.js +2 -0
- package/dist/assets/useEngineStream-Diqri33l.js +1 -0
- package/dist/assets/vendor-DSaYtO9f.js +156 -0
- package/dist/assets/workflowStability-C8USyGOY.js +2 -0
- package/dist/index.html +8 -7
- package/lib/automations/workflow-list.js +147 -0
- package/lib/setup/control-panel-preferences.js +4 -0
- package/package.json +3 -3
- package/server/routes/capabilities.js +1 -0
- package/server/routes/knowledgebase.js +7 -1
- package/dist/assets/index-BL-9rGEh.css +0 -1
- package/dist/assets/index-DhoScTZK.js +0 -7379
- package/dist/assets/motion-CBnf8hfk.js +0 -9
- package/dist/assets/preact-vendor-B239Onrg.js +0 -1
- package/dist/assets/react-query-_hsOQSt5.js +0 -1
- package/dist/assets/vendor-DZYPF2Pz.js +0 -156
- /package/dist/assets/{markdown-Dd89TVib.js → markdown-Dwwtq3bu.js} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{C as e,E as t,g as n,v as r,x as i}from"./fullcalendar-Bn75j0xM.js";import{a as ee,n as a,t as o}from"./react-query-BIbNygEJ.js";import{i as s}from"./motion-B3ZE8SGR.js";import{S as te,b as ne,h as c,m as re,s as l,x as u}from"./index-TvymvGva.js";import{n as d}from"./LazyJson-vfWw7G9F.js";var f=`tandem.workflow.importHandoff.v1`;function p(e){return String(e||``).trim()}function m(e,t){return Array.isArray(e)?e:Array.isArray(e?.[t])?e[t]:[]}function h(e){let t=p(e);if(!t)throw Error(`Paste a workflow bundle JSON object first.`);let n=JSON.parse(t);if(!n||typeof n!=`object`||Array.isArray(n))throw Error(`Workflow bundle must be a JSON object.`);return n}function g(e,t=``){let n=p(e?.absPath||e?.abs_path||e?.url);if(n)return n;let r=p(e?.root),i=p(e?.path);return r&&i?`${r.replace(/\/+$/,``)}/${i.replace(/^\/+/,``)}`:p(i||t)}function _(e,t){return new Promise((n,r)=>{let i=new XMLHttpRequest;i.open(`POST`,`/api/files/upload?dir=${encodeURIComponent(t)}`),i.withCredentials=!0,i.responseType=`json`,i.setRequestHeader(`x-file-name`,encodeURIComponent(e.name)),i.onerror=()=>r(Error(`Upload failed: ${e.name}`)),i.onload=()=>{let e=i.response||{};if(i.status<200||i.status>=300||e?.ok===!1){r(Error(String(e?.error||`Upload failed (${i.status})`)));return}n(e)},i.send(e)})}function ie(e){let t=p(e);return t?t.startsWith(`/api/engine/`)?t:t.startsWith(`/`)?`/api/engine${t}`:t:``}function v({client:v,toast:y,navigate:b,identity:ae}){let x=ee(),[S,oe]=r(``),[C,se]=r(ae.botName||`workflow_planner`),[w,ce]=r(`workflow-imports`),[T,le]=r(``),[E,D]=r(``),[O,k]=r(null),[A,j]=r(``),[M,ue]=r(``),[de,fe]=r(``),[N,P]=r(null),[F,I]=r(``),[L,R]=r(``),[z,B]=r(``),[V,H]=r(``),[U,pe]=r(`0.1.0`),[W,G]=r(``),[K,q]=r(null),J=a({queryKey:[`workflow-center`,`sessions`],queryFn:()=>v.workflowPlannerSessions.list().catch(()=>({sessions:[]})),refetchInterval:15e3}),Y=n(()=>m(J.data,`sessions`).sort((e,t)=>Number(t?.updated_at_ms||0)-Number(e?.updated_at_ms||0)),[J.data]),X=a({queryKey:[`workflow-center`,`session`,E],enabled:!!E,queryFn:()=>v.workflowPlannerSessions.get(E).catch(()=>({session:null}))}).data?.session||null;e(()=>{if(!X){B(``),H(``),G(``),I(``),R(``),q(null);return}B(p(X.title)),H(p(X.title).toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``)),G(p(X.goal)),I(``),R(``),q(null)},[X?.session_id]);let me=i(async e=>{if(e){j(``);try{ue(g(await _(e,`uploads/workflow-pack-imports`),e.name)),fe(e.name),P(null),y(`ok`,`Workflow pack uploaded. Preview it before installing.`)}catch(e){let t=e instanceof Error?e.message:String(e);j(t),y(`err`,t)}}},[y]),he=i(async e=>{if(e)try{I(g(await _(e,`uploads/workflow-pack-covers`),e.name)),R(URL.createObjectURL(e)),y(`ok`,`Cover image added to export.`)}catch(e){y(`err`,e instanceof Error?e.message:String(e))}},[y]),Z=o({mutationFn:async()=>(j(``),v.workflowPlans.importPackPreview({path:M,creatorId:C,creator_id:C,projectSlug:w,project_slug:w,title:p(T)||void 0})),onSuccess:e=>{P(e),y(`ok`,`Workflow pack preview generated.`)},onError:e=>{let t=e instanceof Error?e.message:String(e);j(t),y(`err`,t)}}),Q=o({mutationFn:async()=>(j(``),v.workflowPlans.importPack({path:M,creatorId:C,creator_id:C,projectSlug:w,project_slug:w,title:p(T)||void 0})),onSuccess:async e=>{let t=e?.sessions?.[0]||e?.session;if(t?.session_id){try{localStorage.setItem(f,JSON.stringify({session_id:t.session_id,title:t.title,project_slug:t.project_slug,source_kind:t.source_kind||`workflow_pack`,source_bundle_digest:t.source_bundle_digest||null,current_plan_id:t.current_plan_id||null}))}catch{}D(t.session_id)}P(e),await Promise.all([x.invalidateQueries({queryKey:[`workflow-center`]}),x.invalidateQueries({queryKey:[`intent-planner`]})]),y(`ok`,`Workflow pack installed.`),b(`planner`)},onError:e=>{let t=e instanceof Error?e.message:String(e);j(t),y(`err`,t)}}),$=o({mutationFn:async()=>{if(!E)throw Error(`Select a workflow session to export.`);return v.workflowPlans.exportPack({sessionId:E,session_id:E,name:p(V)||void 0,title:p(z||X?.title)||void 0,version:p(U)||void 0,description:p(W)||void 0,creatorId:C,creator_id:C,coverImagePath:p(F)||void 0,cover_image_path:p(F)||void 0})},onSuccess:e=>{q(e),y(`ok`,`Workflow pack exported.`)},onError:e=>y(`err`,e instanceof Error?e.message:String(e))}),ge=o({mutationFn:async()=>{j(``);let e=h(S);return v.workflowPlans.importPreview({bundle:e,creatorId:C,creator_id:C,projectSlug:w,project_slug:w,title:p(T)||void 0})},onSuccess:e=>{k(e),y(`ok`,`Import preview generated.`)},onError:e=>{let t=e instanceof Error?e.message:String(e);j(t),y(`err`,t)}}),_e=o({mutationFn:async()=>{j(``);let e=h(S);return v.workflowPlans.importPlan({bundle:e,creatorId:C,creator_id:C,projectSlug:w,project_slug:w,title:p(T)||void 0})},onSuccess:async e=>{let t=e?.session;if(t?.session_id){try{localStorage.setItem(f,JSON.stringify({session_id:t.session_id,title:t.title,project_slug:t.project_slug,source_kind:t.source_kind||`imported_bundle`,source_bundle_digest:t.source_bundle_digest||null,current_plan_id:t.current_plan_id||null}))}catch{}D(t.session_id)}k(e),await Promise.all([x.invalidateQueries({queryKey:[`workflow-center`]}),x.invalidateQueries({queryKey:[`intent-planner`]})]),y(`ok`,`Workflow imported and saved.`),b(`planner`)},onError:e=>{let t=e instanceof Error?e.message:String(e);j(t),y(`err`,t)}}),ve=async e=>{try{await navigator.clipboard.writeText(e),y(`ok`,`Session id copied.`)}catch{y(`warn`,`Could not copy session id.`)}},ye=()=>{if(E){try{let e=X;e&&localStorage.setItem(f,JSON.stringify({session_id:e.session_id,title:e.title,project_slug:e.project_slug,source_kind:e.source_kind||`planner`,source_bundle_digest:e.source_bundle_digest||null,current_plan_id:e.current_plan_id||null}))}catch{}b(`planner`)}},be=e=>p(e?.source_kind||`planner`);return s(re,{className:`grid gap-4`,children:[s(ne,{eyebrow:`Workflow center`,title:`Workflow packs, sessions, and provenance`,subtitle:`Import marketplace-ready workflow packs, export your planner sessions, and keep JSON bundles available for advanced debugging.`,badges:s(t,{children:[s(c,{tone:`info`,children:[Y.length,` sessions`]}),s(c,{tone:`warn`,children:[Y.filter(e=>[`imported_bundle`,`workflow_pack`].includes(e?.source_kind)).length,` `,`imports`]})]})}),s(u,{title:`Import workflow pack`,subtitle:`Upload a .zip pack, preview its manifest and workflow contents, then install it into your local workflow library.`,children:s(`div`,{className:`grid gap-3`,children:[s(`div`,{className:`grid gap-3 md:grid-cols-3`,children:[s(`label`,{className:`grid gap-2 text-sm md:col-span-3`,children:[s(`span`,{className:`tcp-subtle`,children:`Workflow pack ZIP`}),s(`input`,{className:`tcp-input`,type:`file`,accept:`.zip,application/zip`,onChange:e=>me(e.currentTarget.files?.[0]||null)}),M?s(`span`,{className:`text-xs text-white/70`,children:[de||`Uploaded pack`,` · `,M]}):null]}),s(`label`,{className:`grid gap-2 text-sm`,children:[s(`span`,{className:`tcp-subtle`,children:`Creator id`}),s(`input`,{className:`tcp-input`,value:C,onChange:e=>se(e.target.value)})]}),s(`label`,{className:`grid gap-2 text-sm`,children:[s(`span`,{className:`tcp-subtle`,children:`Project slug`}),s(`input`,{className:`tcp-input`,value:w,onChange:e=>ce(e.target.value)})]}),s(`label`,{className:`grid gap-2 text-sm`,children:[s(`span`,{className:`tcp-subtle`,children:`Session title`}),s(`input`,{className:`tcp-input`,value:T,onChange:e=>le(e.target.value),placeholder:`Optional`})]})]}),s(`div`,{className:`flex flex-wrap gap-2`,children:[s(`button`,{type:`button`,className:`tcp-btn-secondary`,disabled:!M||Z.isPending,onClick:()=>Z.mutate(),children:`Preview pack`}),s(`button`,{type:`button`,className:`tcp-btn-primary`,disabled:!M||Q.isPending,onClick:()=>Q.mutate(),children:`Install and open planner`})]}),A?s(`div`,{className:`text-sm text-red-300`,children:A}):null,N?s(`div`,{className:`grid gap-3 rounded-2xl border border-white/10 bg-black/20 p-4`,children:[s(`div`,{className:`flex flex-wrap items-start gap-4`,children:[N?.cover_image_data_url?s(`img`,{alt:``,className:`h-24 w-40 border border-white/10 object-cover`,src:N.cover_image_data_url}):null,s(`div`,{className:`grid gap-2`,children:[s(`div`,{className:`flex flex-wrap items-center gap-2`,children:[s(c,{tone:N?.persisted?`ok`:`info`,children:N?.persisted?`installed`:`preview only`}),s(c,{tone:`ghost`,children:p(N?.pack?.name||`workflow pack`)}),s(c,{tone:`ghost`,children:p(N?.pack?.version||`version`)}),s(c,{tone:`info`,children:[m(N?.workflows,`workflows`).length,` workflows`]})]}),s(`div`,{className:`text-sm text-white/75`,children:p(N?.manifest?.marketplace?.listing?.display_name||N?.manifest?.name)}),s(`div`,{className:`flex flex-wrap gap-2 text-xs`,children:m(N?.manifest?.capabilities?.required,`required`).map(e=>s(`span`,{className:`rounded border border-white/10 px-2 py-1 text-white/70`,children:String(e)},String(e)))})]})]}),s(d,{value:N?.workflows?.[0]?.plan_package_validation||N?.workflows?.[0]?.import_validation||N,label:`Show validation details`,preClassName:`max-h-64 overflow-auto rounded-xl bg-black/30 p-3 text-xs text-white/80`})]}):null,s(`details`,{className:`rounded-2xl border border-white/10 bg-black/10 p-3`,children:[s(`summary`,{className:`cursor-pointer text-sm font-semibold text-white`,children:`Advanced JSON bundle import`}),s(`div`,{className:`mt-3 grid gap-3`,children:[s(`label`,{className:`grid gap-2 text-sm`,children:[s(`span`,{className:`tcp-subtle`,children:`Bundle JSON`}),s(`textarea`,{className:`min-h-40 w-full rounded-xl border border-white/10 bg-black/20 p-3 font-mono text-xs text-white outline-none`,placeholder:`{"plan_id":"...","mission":{...},"routine_graph":[...]}`,value:S,onChange:e=>oe(e.target.value)})]}),s(`div`,{className:`flex flex-wrap gap-2`,children:[s(`button`,{type:`button`,className:`tcp-btn-secondary`,onClick:()=>ge.mutate(),children:`Preview JSON`}),s(`button`,{type:`button`,className:`tcp-btn-secondary`,onClick:()=>_e.mutate(),children:`Import JSON`})]}),O?s(d,{value:O?.plan_package_validation||O?.import_validation||O,label:`Show JSON import validation`,preClassName:`max-h-64 overflow-auto rounded-xl bg-black/30 p-3 text-xs text-white/80`}):null]})]})]})}),s(u,{title:`Export workflow pack`,subtitle:X?`Turn this planner session into a marketplace-ready .zip pack with an optional cover image.`:`Select a planner session below before exporting a workflow pack.`,children:[s(`div`,{className:`grid gap-3 md:grid-cols-4`,children:[s(`label`,{className:`grid gap-2 text-sm md:col-span-2`,children:[s(`span`,{className:`tcp-subtle`,children:`Pack title`}),s(`input`,{className:`tcp-input`,disabled:!X,placeholder:`Select a workflow session`,value:z,onChange:e=>B(e.target.value)})]}),s(`label`,{className:`grid gap-2 text-sm`,children:[s(`span`,{className:`tcp-subtle`,children:`Pack slug`}),s(`input`,{className:`tcp-input`,disabled:!X,placeholder:`workflow-pack-slug`,value:V,onChange:e=>H(e.target.value)})]}),s(`label`,{className:`grid gap-2 text-sm`,children:[s(`span`,{className:`tcp-subtle`,children:`Version`}),s(`input`,{className:`tcp-input`,disabled:!X,value:U,onChange:e=>pe(e.target.value)})]}),s(`label`,{className:`grid gap-2 text-sm md:col-span-3`,children:[s(`span`,{className:`tcp-subtle`,children:`Description`}),s(`input`,{className:`tcp-input`,disabled:!X,placeholder:`Short marketplace description`,value:W,onChange:e=>G(e.target.value)})]}),s(`label`,{className:`grid gap-2 text-sm`,children:[s(`span`,{className:`tcp-subtle`,children:`Cover image`}),s(`input`,{className:`tcp-input`,type:`file`,disabled:!X,accept:`image/png,image/jpeg,image/webp`,onChange:e=>he(e.currentTarget.files?.[0]||null)})]})]}),s(`div`,{className:`mt-3 flex flex-wrap items-center gap-3`,children:[L?s(`img`,{alt:``,className:`h-20 w-32 border border-white/10 object-cover`,src:L}):null,s(`button`,{type:`button`,className:`tcp-btn-primary`,disabled:!X||$.isPending,onClick:()=>$.mutate(),children:`Export workflow pack`})]}),K?s(`div`,{className:`mt-3 grid gap-2 rounded-2xl border border-emerald-400/30 bg-emerald-950/20 p-3 text-sm`,children:[s(`div`,{className:`font-semibold`,children:`Marketplace-ready workflow pack`}),s(`div`,{className:`break-all text-white/75`,children:p(K?.exported?.path)}),s(`div`,{className:`text-xs text-white/60`,children:[`SHA-256 `,p(K?.exported?.sha256)]}),s(`div`,{className:`flex flex-wrap gap-2`,children:[K?.exported?.download_url?s(`a`,{className:`tcp-btn-primary`,href:ie(K.exported.download_url),children:`Download ZIP`}):null,s(c,{tone:`ok`,children:`tandempack.yaml`}),s(c,{tone:`ok`,children:`workflow plan bundle`}),K?.pack?.cover_image?s(c,{tone:`ok`,children:`cover image`}):s(c,{tone:`ghost`,children:`no cover image`}),s(c,{tone:`info`,children:`Upload as Workflow in marketplace`})]}),s(d,{value:K?.manifest||K,label:`Show manifest`,preClassName:`max-h-64 overflow-auto rounded-xl bg-black/30 p-3 text-xs text-white/80`})]}):null]}),s(te,{main:s(u,{title:`Planner sessions`,subtitle:`Imported bundles, local drafts, and applied workflow sessions all show up here.`,children:s(`div`,{className:`grid gap-2`,children:Y.length?Y.map(e=>{let t=e.session_id===E,n=be(e);return s(`button`,{type:`button`,className:`tcp-list-item text-left ${t?`border-amber-400/70`:``}`,onClick:()=>D(e.session_id),children:[s(`div`,{className:`mb-1 flex items-center justify-between gap-2`,children:[s(`strong`,{children:p(e.title||e.session_id)}),s(c,{tone:n===`imported_bundle`?`warn`:`info`,children:n})]}),s(`div`,{className:`flex flex-wrap gap-2 text-xs`,children:[s(`span`,{className:`tcp-subtle`,children:p(e.project_slug)}),s(`span`,{className:`tcp-subtle`,children:p(e.source_bundle_digest||``)}),s(`span`,{className:`tcp-subtle`,children:new Date(Number(e.updated_at_ms||e.created_at_ms||0)).toLocaleString()})]})]},e.session_id)}):s(l,{text:`No workflow sessions have been saved yet.`})})}),aside:s(u,{title:`Selected session`,subtitle:`This is the durable stored record, including provenance and draft linkage when available.`,children:X?s(`div`,{className:`grid gap-3`,children:[s(`div`,{className:`flex flex-wrap items-center gap-2`,children:[s(c,{tone:X.source_kind===`imported_bundle`?`warn`:`info`,children:p(X.source_kind||`planner`)}),s(c,{tone:`ghost`,children:p(X.session_id)})]}),s(`div`,{className:`grid gap-2 text-sm`,children:[s(`div`,{children:[s(`div`,{className:`tcp-subtle text-xs`,children:`Title`}),s(`div`,{children:p(X.title)})]}),s(`div`,{children:[s(`div`,{className:`tcp-subtle text-xs`,children:`Project`}),s(`div`,{children:p(X.project_slug)})]}),s(`div`,{children:[s(`div`,{className:`tcp-subtle text-xs`,children:`Bundle digest`}),s(`div`,{children:p(X.source_bundle_digest||`—`)})]}),s(`div`,{children:[s(`div`,{className:`tcp-subtle text-xs`,children:`Current plan id`}),s(`div`,{children:p(X.current_plan_id||`—`)})]}),s(`div`,{children:[s(`div`,{className:`tcp-subtle text-xs`,children:`Goal`}),s(`div`,{className:`whitespace-pre-wrap`,children:p(X.goal||`—`)})]}),s(`div`,{children:[s(`div`,{className:`tcp-subtle text-xs`,children:`Import validation`}),s(d,{value:X.import_validation||{},label:`Show import validation`,preClassName:`max-h-40 overflow-auto rounded-xl bg-black/20 p-3 text-xs text-white/75`})]})]}),s(`div`,{className:`flex flex-wrap gap-2`,children:[s(`button`,{type:`button`,className:`tcp-btn-primary`,onClick:ye,children:`Open in planner`}),s(`button`,{type:`button`,className:`tcp-btn-secondary`,onClick:()=>ve(X.session_id),children:`Copy session id`})]}),X.import_transform_log?.length?s(`div`,{className:`grid gap-2`,children:[s(`div`,{className:`tcp-subtle text-xs`,children:`Import transform log`}),s(`pre`,{className:`max-h-40 overflow-auto rounded-xl bg-black/20 p-3 text-xs text-white/75`,children:X.import_transform_log.join(`
|
|
2
|
+
`)})]}):null]}):s(l,{text:`Select a session to inspect its provenance.`})})})]})}export{v as WorkflowsPage};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=new Set([`tool.called`,`tool.call`,`tool.started`,`tool_call.started`,`tool_call.created`,`tool_call.delta`,`session.tool_call`,`session.tool.call`]),t=new Set([`tool.result`,`tool.completed`,`tool.failed`,`tool_call.completed`,`tool_call.succeeded`,`tool_call.failed`,`session.tool_result`,`session.tool.result`]),n=new Set([`tool.progress`,`tool_call.progress`,`session.tool_progress`]),r=new Set([`run.complete`,`run.completed`,`session.run.finished`,`session.run.completed`]),i=new Set([`run.failed`,`session.run.failed`,`run.cancelled`,`run.canceled`,`session.run.cancelled`,`session.run.canceled`]);function a(e){return String(e||``).trim().replace(/\s+/g,` `).replace(/[<>]/g,``)}function o(e){let t=e||{},n=t.call||t.toolCall||t.part||t.function||{},r=t.tool||n.tool||{};return a(t.toolName||t.tool_name||t.name||t.tool_id||t.toolID||(typeof r==`string`?r:r.name||r.id)||n.toolName||n.tool_name||n.name||n.tool_id||n.toolID||``)}function s(e){let t=e||{},n=t.call||t.toolCall||t.part||{};return String(t.callID||t.toolCallID||t.tool_call_id||t.id||t.call_id||t.callId||n.callID||n.toolCallID||n.tool_call_id||n.id||n.call_id||n.callId||``).trim()}function c(e,t=``){let n=e?.properties||{};return String(e?.runId||e?.runID||e?.run_id||n.runID||n.runId||n.run_id||n.run?.id||t).trim()}function l(e){let t=e&&typeof e==`object`?e:{},n=t.call||t.toolCall||t.part||{},r=t.input||t.args||t.arguments||n.input||n.args,i=t.output||t.result||n.output||n.result,a=t.error||n.error,o=t.message||t.summary||t.status||n.message||``,s=a||i||r||o;if(!s)return``;if(typeof s==`string`)return s.trim().slice(0,240);try{return JSON.stringify(s).slice(0,240)}catch{return String(s).slice(0,240)}}function u(e){if(!e)return null;let t=e.request||e.approval||e.permission||{},n=String(e.id||e.requestID||e.requestId||e.approvalID||t.id||t.requestID||``).trim();return n?{id:n,tool:a(e.tool||t.tool||t.name||`tool`)||`tool`,permission:String(e.permission||t.permission||``).trim(),pattern:String(e.pattern||t.pattern||``).trim(),sessionId:String(e.sessionId||e.sessionID||e.session_id||t.sessionId||t.sessionID||``).trim(),status:String(e.status||t.status||``).trim().toLowerCase()}:null}function d(e){let t=String(e||``).trim().toLowerCase();return t?t.includes(`approved`)||t.includes(`rejected`)||t.includes(`denied`)||t.includes(`resolved`)||t.includes(`expired`)||t.includes(`cancel`)||t.includes(`complete`)||t.includes(`done`)||t.includes(`timeout`)?!1:t.includes(`pending`)||t.includes(`request`)||t.includes(`ask`)||t.includes(`await`)||t.includes(`open`)||t.includes(`queue`)||t.includes(`new`)||t.includes(`progress`)||t===`unknown`:!0}var f=`tandem_control_panel_chat_auto_approve_tools`,p=`tandem_control_panel_chat_tool_allowlist`,m=`tandem.automations.plannerSeed`,h=`tandem.workflow.plannerSeed`,g={md:`text/markdown`,txt:`text/plain`,csv:`text/csv`,json:`application/json`,pdf:`application/pdf`,png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`};function _(e=``){return g[String(e).toLowerCase().split(`.`).pop()||``]||`application/octet-stream`}function v(e=``,t=``){return!e||!t?t||``:`${String(e).replace(/[\\/]+$/,``)}/${String(t).replace(/^[\\/]+/,``)}`}function y(e,t){return!e||!t?!0:String(e).trim()===String(t).trim()}function b(e){let t=String(e||``).trim();return t!==`server.connected`&&t!==`engine.lifecycle.ready`}function x(e){return e===`completed`?`chat-tool-chip-ok`:e===`failed`?`chat-tool-chip-failed`:`chat-tool-chip-running`}function S(){try{return localStorage.getItem(f)===`1`}catch{return!1}}function C(e){try{localStorage.setItem(f,e?`1`:`0`)}catch{}}function w(){try{let e=JSON.parse(localStorage.getItem(p)||`[]`);return Array.isArray(e)?e.map(e=>String(e||``).trim()).filter(Boolean):[]}catch{return[]}}function T(e){try{localStorage.setItem(p,JSON.stringify([...new Set(e.map(e=>e.trim()).filter(Boolean))].sort()))}catch{}}function E(e){try{let t=String(e?.prompt||e?.goal||``).trim();if(!t)return;sessionStorage.setItem(m,JSON.stringify({prompt:t,plan_source:String(e?.plan_source||`chat_setup`).trim()||`chat_setup`}))}catch{}}function D(e){try{let t=String(e?.prompt||e?.goal||``).trim();if(!t)return;sessionStorage.setItem(h,JSON.stringify({prompt:t,plan_source:String(e?.plan_source||`chat_setup`).trim()||`chat_setup`,session_id:String(e?.session_id||``).trim()||``,source_platform:String(e?.source_platform||``).trim()||``,source_channel:String(e?.source_channel||``).trim()||``,workspace_root:String(e?.workspace_root||``).trim()||``}))}catch{}}function O(e){return e instanceof Error?e.message:String(e)}function k(e){if(e.decision===`pass_through`)return null;if(e.intent_kind===`provider_setup`)return{title:`Provider setup`,body:`Configure ${e.slots.provider_ids[0]||`a provider`} in Providers.`,cta:`Open Providers`,actionType:`open_provider_setup`,payload:e.proposed_action.payload||{}};if(e.intent_kind===`integration_setup`)return{title:`Tool connection`,body:`Connect ${e.slots.integration_targets[0]||`the matching tool`} through MCP.`,cta:`Open MCP`,actionType:`open_mcp_setup`,payload:e.proposed_action.payload||{}};if(e.intent_kind===`automation_create`)return{title:`Automation setup`,body:e.slots.goal||`Create an automation from this request.`,cta:`Open Automations`,actionType:`open_automations`,payload:e.proposed_action.payload||{}};if(e.intent_kind===`workflow_planner_create`){let t={...e.proposed_action.payload||{},prompt:String(e.proposed_action.payload?.prompt||e.slots.goal||``).trim()||void 0,plan_source:String(e.proposed_action.payload?.plan_source||``).trim()||`chat_setup`};return{title:e.decision===`clarify`?`Workflow planning questions`:`Workflow planning`,body:e.clarifier?.question||e.slots.goal||`Open the planner to draft a governed workflow plan.`,cta:`Open Planner`,actionType:`open_planner`,payload:t,clarifier:e.clarifier||void 0}}return{title:`Setup help`,body:e.clarifier?.question||`Choose a setup path.`,cta:`Open Providers`,actionType:`open_provider_setup`,payload:e.proposed_action.payload||{},clarifier:e.clarifier||void 0}}function A(e){return String(e?.type||e?.kind||e?.role||``).trim().toLowerCase().replace(/_/g,`-`)}function j(e){let t=e?.state,n=String((t&&typeof t==`object`?t.status:t)||e?.status||e?.phase||``).trim().toLowerCase();return e?.error||t&&typeof t==`object`&&t.error||n.includes(`fail`)||n.includes(`error`)||n.includes(`deny`)||n.includes(`reject`)||n.includes(`cancel`)?`failed`:e?.result||e?.output||t&&typeof t==`object`&&(t.output||t.result)||n.includes(`done`)||n.includes(`complete`)||n.includes(`success`)?`completed`:`started`}function M(e){let t=Array.isArray(e)?e:Array.isArray(e?.messages)?e.messages:[],n=[];return t.forEach((e,t)=>{[...Array.isArray(e?.parts)?e.parts:[],...Array.isArray(e?.content)?e.content:[],...Array.isArray(e?.message?.parts)?e.message.parts:[]].forEach((r,i)=>{let a=A(r),c=o(r);if(!(c&&(a.includes(`tool`)||r?.tool||r?.toolName||r?.tool_name||r?.toolCall||r?.call)))return;let u=s(r),d=String(e?.runID||e?.runId||e?.run_id||``).trim(),f=Number(e?.created_at_ms||e?.createdAtMs||e?.timestamp_ms||0)||Date.now();n.push({id:`history:${e?.id||t}:${u||i}:${c}:${j(r)}`,tool:c,status:j(r),at:f,callId:u,runId:d,source:`history`,summary:l(r),detail:l(r)})})}),n.slice(-80).reverse()}function N(e,t){if(t.decision===`pass_through`)return!1;if(t.intent_kind!==`workflow_planner_create`)return!0;let n=String(e||``).trim().toLowerCase(),r=/\b(create|build|make|draft|design|plan|schedule|automate|orchestrate)\b/.test(n)&&/\b(workflow|workflows|pipeline|handoff|automation|automations)\b/.test(n),i=/\b(workflow plan|workflow draft|plan this workflow|draft a plan|turn this into a plan|open planner)\b/.test(n);return r||i}function P(e,t){let n=String(e||``).toLowerCase(),r=String(t?.status||t?.state||``).toLowerCase();return n.includes(`fail`)||n.includes(`error`)||r.includes(`fail`)?`failed`:n.includes(`finished`)||n.includes(`complete`)||r.includes(`complete`)?t?.error?`failed`:`ok`:n.includes(`started`)||n.includes(`running`)||r.includes(`running`)?`running`:`info`}function F(e){let t=String(e||``).toLowerCase();return t.includes(`permission`)||t.includes(`approval`)?`Approval`:t.includes(`tool`)?`Tool activity`:t.includes(`response`)?`Response`:t.includes(`status`)?`Status`:t.includes(`finished`)||t.includes(`complete`)?`Run finished`:t.includes(`started`)?`Run started`:e||`Session event`}function I(e,t){let n=[o(t),String(t?.status||t?.state||``).trim(),String(t?.error||t?.message||``).trim()].filter(Boolean);return n.length?n.join(` · `):String(e||`event`)}function L(e){let t=Array.isArray(e)?e:Array.isArray(e?.messages)?e.messages:[];return t.map((e,n)=>{let r=String(e?.info?.role||e?.role||e?.message_role||`assistant`).trim().toLowerCase(),i=String(e?.text||e?.content||e?.message||``).trim(),a=Number(e?.created_at_ms||e?.createdAtMs||e?.timestamp_ms||e?.at)||Date.now()-(t.length-n)*1e3;return{id:`message:${e?.id||n}:${r}`,type:`message`,title:r===`user`?`User message`:`Assistant message`,summary:i?i.slice(0,140):r,tone:r===`user`?`info`:`ok`,at:a,runId:String(e?.runID||e?.runId||e?.run_id||``).trim()}}).reverse().slice(0,40)}export{l as A,n as C,o as D,s as E,d as O,t as S,c as T,P as _,v as a,i as b,y as c,E as d,D as f,F as g,I as h,b as i,u as k,C as l,N as m,M as n,S as o,k as p,_ as r,w as s,L as t,T as u,O as v,e as w,r as x,x as y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`tandem_control_panel_files_explorer_handoff`,t=new Set([`uploads`,`artifacts`,`exports`]),n=`control-panel`;function r(e){let r=String(e||``).trim().replace(/\\/g,`/`);if(!r)return``;let i=r.lastIndexOf(`/channel_uploads/`),a=(i>=0?r.slice(i+17):r.startsWith(`channel_uploads/`)?r.slice(16):r.replace(/^\/+/,``)).replace(/\/+$/,``);if(!a)return``;let o=a.split(`/`).filter(Boolean);if(!o.length||o.some(e=>e===`.`||e===`..`))return``;let[s,...c]=o;return s===n?[`uploads`,...c].join(`/`):t.has(s)?[s,...c].join(`/`):``}function i(e){return r(e)}function a(e){let t=r(e);if(!t)return``;let n=t.lastIndexOf(`/`);return n<0?``:t.slice(0,n)}function o(t){try{sessionStorage.setItem(e,JSON.stringify(t))}catch{}}function s(e){return r(e)}function c(e){return a(e)}function l(e){let n=r(e.path||``);o({dir:i(e.dir||``)||(n?t.has(n)?n:a(n):``)||void 0,path:n||void 0,atMs:Date.now()})}function u(){try{let t=sessionStorage.getItem(e);if(!t)return null;sessionStorage.removeItem(e);let n=JSON.parse(t),a=r(n?.path||``);return{dir:i(n?.dir||``)||void 0,path:a||void 0,atMs:Number(n?.atMs||0)||Date.now()}}catch{return null}}function d(e,n){let o=r(n.path||``),s=i(n.dir||``)||(o?t.has(o)?o:a(o):``);return!o&&!s?!1:(l({dir:s||void 0,path:o||void 0}),e(`files`),!0)}export{c as i,s as n,d as r,u as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){return new Intl.NumberFormat(void 0,{notation:`compact`,maximumFractionDigits:1}).format(Number(e||0))}export{e as t};
|