@zaip-ai/cli 1.3.5 → 1.3.7
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/README.md +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +7 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/services/install-agents-template.d.ts.map +1 -1
- package/dist/services/install-agents-template.js +18 -2
- package/dist/services/install-agents-template.js.map +1 -1
- package/dist/services/sqlite-bootstrap.d.ts +29 -0
- package/dist/services/sqlite-bootstrap.d.ts.map +1 -0
- package/dist/services/sqlite-bootstrap.js +141 -0
- package/dist/services/sqlite-bootstrap.js.map +1 -0
- package/dist/services/template-manifest.d.ts.map +1 -1
- package/dist/services/template-manifest.js +2 -0
- package/dist/services/template-manifest.js.map +1 -1
- package/package.json +2 -2
- package/templates/.agents/architecture/.gitkeep +0 -0
- package/templates/.agents/branding/.gitkeep +0 -0
- package/templates/.agents/dashboard/.zaip-managed.json +51 -39
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{CostCalculationGuidePage-D1mpyYwh.js → CostCalculationGuidePage-DwVZOmMV.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-CKO47D5s.js → DashboardHelpDialog--czwAlcH.js} +723 -723
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{PricingSettingsDialog-BuSlCbyZ.js → PricingSettingsDialog-CyjMXkm8.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{ProjectSettingsPage-CUHFkAhZ.js → ProjectSettingsPage-B_Oj6Dlf.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{TraceabilityWorkspace-BmASq2gW.js → TraceabilityWorkspace-CAqYVin1.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{cost-monitor-Csj6LiAt.js → cost-monitor-C09KmlSw.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-VyTTl_ph.js → icons-vendor-DXBOtWNI.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-CblPpexd.js +2 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-CTC6vtln.js → react-vendor-DaNXQPyk.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{traceability-9Mtvbwrg.js → traceability-I4AKqVDX.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/index.html +5 -5
- package/templates/.agents/dashboard/apps/frontend/src/App.tsx +17 -8
- package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +8 -3
- package/templates/.agents/dashboard/apps/frontend/src/operations-period.test.ts +19 -1
- package/templates/.agents/dashboard/apps/frontend/src/operations-period.ts +8 -0
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +7 -4
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsFilteredStatusDialog.tsx +131 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +2 -133
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.status-cards.test.ts +13 -7
- package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-prerequisites.mjs +40 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-prerequisites.test.mjs +46 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +33 -26
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +5 -8
- package/templates/.agents/dashboard/tests/e2e/specs/cost-monitor-loading.spec.ts +4 -6
- package/templates/.agents/dashboard/tests/e2e/specs/cost-monitor-period-transition.spec.ts +37 -17
- package/templates/.agents/dashboard/tests/e2e/specs/dashboard-performance-matrix.spec.ts +5 -3
- package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +12 -5
- package/templates/.agents/growth/.gitkeep +0 -0
- package/templates/.agents/marketing/.gitkeep +0 -0
- package/templates/.agents/requirements/autonomous-assurance.md +1 -1
- package/templates/.agents/requirements/comparative-audit.md +1 -1
- package/templates/.agents/requirements/context-engine.md +1 -1
- package/templates/.agents/requirements/cost-observability.md +1 -1
- package/templates/.agents/requirements/dashboard-launch.md +1 -1
- package/templates/.agents/requirements/data-export.md +1 -1
- package/templates/.agents/requirements/design-system.md +1 -1
- package/templates/.agents/requirements/execution-engine.md +1 -1
- package/templates/.agents/requirements/kanban-dashboard.md +1 -1
- package/templates/.agents/requirements/model-orchestration.md +1 -1
- package/templates/.agents/requirements/public-distribution.md +1 -1
- package/templates/.agents/requirements/software-architecture.md +1 -1
- package/templates/.agents/requirements/strategic-improvements.md +1 -1
- package/templates/.agents/requirements/work-lifecycle.md +1 -1
- package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
- package/templates/.agents/sales/.gitkeep +0 -0
- package/templates/README.md +722 -0
- package/templates/template-manifest.json +84 -85
- package/templates/.agents/architecture/software-architecture.md +0 -131
- package/templates/.agents/branding/brandbook.docx +0 -0
- package/templates/.agents/branding/brandbook.md +0 -60
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DIwDvCu5.js +0 -2
- package/templates/.agents/growth/estrategia-bootstrap-90-dias.md +0 -169
- package/templates/.agents/growth/strategy.md +0 -27
- package/templates/.agents/marketing/estrategia-marketing-zaip-90-dias.md +0 -197
- package/templates/.agents/marketing/strategy.md +0 -29
- package/templates/.agents/sales/playbook.md +0 -32
- package/templates/.agents/sales/roteiro-comercial-zaip.md +0 -252
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DashboardHelpDialog-CKO47D5s.js","assets/cost-monitor-Csj6LiAt.js","assets/rolldown-runtime-D9-fqq9M.js","assets/cost-monitor-PoJA2PI1.css","assets/dashboard-localization-CLJ0lT9v.js","assets/DashboardHelpDialog-Je5nK-Et.css","assets/PricingSettingsDialog-BuSlCbyZ.js","assets/ProjectSettingsPage-CUHFkAhZ.js","assets/ProjectSettingsPage-BomxqCBU.css","assets/CostCalculationGuidePage-D1mpyYwh.js","assets/TraceabilityWorkspace-BmASq2gW.js","assets/traceability-9Mtvbwrg.js","assets/icons-vendor-VyTTl_ph.js","assets/traceability-DFY7ZDlu.css","assets/TraceabilityWorkspace-DvvavDLY.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{S as e,a as t,b as n,g as r,h as i,i as a,n as o,r as s,t as c}from"./cost-monitor-Csj6LiAt.js";import{t as l}from"./react-vendor-CTC6vtln.js";import{n as u,t as d}from"./traceability-9Mtvbwrg.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var f=e(),p=l(),m=n();function h({locale:e}){let t=e===`pt-BR`?[`Definição`,`Planejamento`,`Pronto para Executar`,`Execução`,`Verificação`]:[`Definition`,`Planning`,`Ready to Execute`,`Execution`,`Verification`];return(0,m.jsxs)(`main`,{"aria-busy":`true`,"aria-live":`polite`,"aria-label":e===`pt-BR`?`Preparando dashboard`:`Preparing dashboard`,className:`app-skeleton`,role:`status`,children:[(0,m.jsxs)(`header`,{className:`app-skeleton-header`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`span`,{className:`app-skeleton-line app-skeleton-line-short`}),(0,m.jsx)(`h1`,{children:`Dashboard Zaip AIOS`})]}),(0,m.jsxs)(`div`,{className:`app-skeleton-actions`,children:[(0,m.jsx)(`span`,{}),(0,m.jsx)(`span`,{}),(0,m.jsx)(`span`,{})]})]}),(0,m.jsx)(`section`,{className:`app-skeleton-kpis`,"aria-hidden":`true`,children:Array.from({length:4},(e,t)=>`skeleton-kpi-${t}`).map(e=>(0,m.jsxs)(`article`,{children:[(0,m.jsx)(`span`,{className:`app-skeleton-line app-skeleton-line-short`}),(0,m.jsx)(`span`,{className:`app-skeleton-value`}),(0,m.jsx)(`span`,{className:`app-skeleton-line`})]},e))}),(0,m.jsxs)(`section`,{className:`app-skeleton-panels`,"aria-hidden":`true`,children:[(0,m.jsxs)(`article`,{children:[(0,m.jsx)(`span`,{className:`app-skeleton-line app-skeleton-line-medium`}),(0,m.jsx)(`div`,{className:`app-skeleton-chart`})]}),(0,m.jsxs)(`article`,{children:[(0,m.jsx)(`span`,{className:`app-skeleton-line app-skeleton-line-medium`}),(0,m.jsx)(`div`,{className:`app-skeleton-chart app-skeleton-chart-small`})]})]}),(0,m.jsx)(`section`,{className:`app-skeleton-board`,"aria-hidden":`true`,children:t.map((e,t)=>(0,m.jsxs)(`article`,{children:[(0,m.jsx)(`h2`,{children:e}),Array.from({length:t%2==0?2:1},(t,n)=>`${e}-${n}`).map(e=>(0,m.jsxs)(`div`,{className:`app-skeleton-card`,children:[(0,m.jsx)(`span`,{className:`app-skeleton-line`}),(0,m.jsx)(`span`,{className:`app-skeleton-line app-skeleton-line-medium`}),(0,m.jsx)(`span`,{className:`app-skeleton-pill`})]},e))]},e))})]})}function g(e,t){let n=t===`pt-BR`;return e===`costs`?n?{title:`Carregando Monitor de Custos…`,detail:`Isso costuma levar poucos segundos.`}:{title:`Loading Cost Monitor…`,detail:`This usually takes a few seconds.`}:e===`traceability`?n?{title:`Carregando Rastreabilidade…`,detail:`Estamos preparando as 6 etapas da task.`}:{title:`Loading Traceability…`,detail:`Preparing the task's 6 stages.`}:n?{title:`Atualizando dados do dashboard…`,detail:`Você pode continuar navegando.`}:{title:`Refreshing dashboard data…`,detail:`You can keep navigating.`}}function _({area:e,locale:t}){let n=g(e,t);return(0,m.jsxs)(`section`,{"aria-busy":`true`,"aria-live":`polite`,className:`app-loading-panel`,role:`status`,children:[(0,m.jsx)(`i`,{}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`strong`,{children:n.title}),(0,m.jsx)(`span`,{children:n.detail})]})]})}function v({area:e,locale:t}){let n=g(e,t);return(0,m.jsxs)(`section`,{"aria-live":`polite`,className:`app-refresh-status`,role:`status`,children:[(0,m.jsx)(`i`,{}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`strong`,{children:n.title}),(0,m.jsx)(`span`,{children:n.detail})]})]})}function y({locale:e,onRetry:t}){return(0,m.jsxs)(`section`,{"aria-live":`polite`,className:`app-loading-panel app-loading-panel-error`,role:`status`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`strong`,{children:e===`pt-BR`?`Não foi possível carregar os custos`:`Couldn't load costs`}),(0,m.jsx)(`span`,{children:e===`pt-BR`?`A tela continua disponível. Tente novamente quando quiser.`:`The dashboard remains available. Try again whenever you want.`})]}),(0,m.jsx)(`button`,{onClick:t,type:`button`,children:e===`pt-BR`?`Tentar novamente`:`Try again`})]})}function ee({costsLoaded:e,currency:t,snapshotCurrency:n}){return!e||n!==t}function te({aborted:e,currentCurrency:t,currentPeriod:n,currentRequestVersion:r,requestVersion:i,requestedCurrency:a,requestedPeriod:o}){return!e&&i===r&&a===t&&o.from===n.from&&o.to===n.to}function b(e,t){return e===t}function x(e,t,n,r){return b(e,t)&&n.from===r.from&&n.to===r.to}function S(e){return e instanceof DOMException&&e.name===`AbortError`}function ne(e,t){return e===t}function C(e,t,n){return b(e,t)&&!n.aborted}function re(e,t){let n=e=>[...new Map(e.map(e=>[e.id,e])).values()];return{...e,prds:n([...e.prds,...t.flatMap(e=>e.prds)]),specs:n([...e.specs,...t.flatMap(e=>e.specs)]),tasks:n([...e.tasks,...t.flatMap(e=>e.tasks)]),changes:n([...e.changes,...t.flatMap(e=>e.changes)])}}function ie(){let e=(0,f.useRef)(null);return(0,f.useEffect)(()=>{e.current?.focus()},[]),(0,m.jsx)(`div`,{"aria-busy":`true`,"aria-live":`polite`,className:`period-transition-overlay`,onKeyDownCapture:e=>e.preventDefault(),ref:e,role:`status`,tabIndex:-1,children:(0,m.jsxs)(`div`,{className:`period-transition-overlay__content`,children:[(0,m.jsx)(`i`,{"aria-hidden":`true`,className:`period-transition-overlay__spinner`}),(0,m.jsx)(`span`,{className:`period-transition-overlay__label`,children:`Carregando...`})]})})}function ae({pending:e,children:t}){return(0,m.jsx)(`div`,{"aria-hidden":e||void 0,inert:e,children:t})}function oe({children:e,error:t,globalLoadingPending:n,locale:r,onRefresh:i,operations:a,snapshotNotice:o,setupRoute:s}){return s===null?t&&a===null?(0,m.jsxs)(`main`,{className:`app-state`,children:[(0,m.jsx)(`p`,{children:`Dashboard local indisponível`}),(0,m.jsx)(`h1`,{children:`Não foi possível ler o workspace V2.`}),(0,m.jsx)(`pre`,{children:t}),(0,m.jsx)(`button`,{onClick:i,type:`button`,children:`Tentar novamente`})]}):a===null?(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(h,{locale:r}),o,n?(0,m.jsx)(ie,{}):null]}):e:s}var se=`modulepreload`,w=function(e){return`/`+e},ce={},T=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=w(t,n),t=s(t),t in ce)return;ce[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:se,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},le=(0,f.lazy)(async()=>({default:(await T(async()=>{let{DashboardHelpDialog:e}=await import(`./DashboardHelpDialog-CKO47D5s.js`);return{DashboardHelpDialog:e}},__vite__mapDeps([0,1,2,3,4,5]))).DashboardHelpDialog}));function ue({costLocale:e,documentDetail:n,helpOpen:i,loadingArea:a,operations:s,reconciliationResult:c,refreshDialog:l,showTrace:p,trace:h,traceLink:g,traceLoadingTaskId:_,closeDocument:y,onCloseHelp:ee,onCloseTrace:te,onDismissReconciliation:b,onOpenDocument:x,onOpenTrace:S,onOpenTraceChange:ne,onOpenTraceMacro:C,onRefreshCancel:re,onRefreshFromDialog:ie,setTraceLink:ae}){return(0,m.jsxs)(m.Fragment,{children:[p?null:_?(0,m.jsx)(d,{locale:e,taskId:_}):h?(0,m.jsx)(u,{locale:e,onClose:te,onOpenChange:ne,onOpenPrd:e=>C(`PRD`,e),onOpenSpec:e=>C(`SPEC`,e),trace:h}):null,g?.kind===`change`?(0,m.jsx)(r,{details:{kind:`change`,row:g.row},locale:e,onClose:()=>ae(null)}):null,g?.kind===`macro`?(0,m.jsx)(t,{label:g.label,locale:e,onClose:()=>ae(null),onOpenDocument:x,onOpenTrace:e=>{ae(null),S(e)},row:g.row,runs:s.runs,specs:s.specs,tasks:s.tasks}):null,n?(0,m.jsx)(o,{detail:n.detail,error:n.error,label:n.label,locale:e,loading:!n.detail&&!n.error,onClose:y,onRetry:()=>x(n.kind,n.preview.id),preview:n.preview}):null,i?(0,m.jsx)(f.Suspense,{fallback:null,children:(0,m.jsx)(le,{locale:e,onClose:ee})}):null,l===`choose`?(0,m.jsx)(`div`,{className:`app-refresh-dialog-backdrop`,children:(0,m.jsxs)(`section`,{"aria-label":`Atualizar dashboard`,"aria-modal":`true`,className:`app-refresh-dialog`,role:`dialog`,children:[(0,m.jsx)(`h2`,{children:e===`pt-BR`?`Atualizar dashboard`:`Refresh dashboard`}),(0,m.jsx)(`p`,{children:e===`pt-BR`?`Escolha uma atualização rápida ou reconcilie os itens que ainda estão em aberto.`:`Choose a quick refresh or reconcile work items that are still open.`}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`button`,{onClick:()=>ie(!1),type:`button`,children:e===`pt-BR`?`Apenas atualizar dados`:`Refresh data only`}),(0,m.jsx)(`button`,{onClick:()=>ie(!0),type:`button`,children:e===`pt-BR`?`Reconciliar itens abertos`:`Reconcile open work`})]}),(0,m.jsx)(`button`,{className:`app-refresh-cancel`,onClick:re,type:`button`,children:e===`pt-BR`?`Cancelar`:`Cancel`})]})}):null,l===`refreshing`||l===`reconciling`?(0,m.jsxs)(`section`,{"aria-live":`polite`,className:`app-refresh-status`,role:`status`,children:[(0,m.jsx)(`i`,{}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`strong`,{children:l===`reconciling`?e===`pt-BR`?`Reconciliando itens em aberto…`:`Reconciling open work…`:e===`pt-BR`?`Atualizando dados…`:`Refreshing data…`}),(0,m.jsx)(`span`,{children:e===`pt-BR`?`Você pode continuar usando o dashboard.`:`You can keep using the dashboard.`})]})]}):null,c!==null&&l===null?(0,m.jsxs)(`section`,{"aria-live":`polite`,className:`app-reconciliation-result`,role:`status`,children:[(0,m.jsx)(`strong`,{children:e===`pt-BR`?`Resultado da reconciliação manual`:`Manual reconciliation result`}),(0,m.jsx)(`span`,{children:e===`pt-BR`?`${c.reconciled_ids.length} item(ns) reconciliado(s).`:`${c.reconciled_ids.length} item(s) reconciled.`}),c.reconciled_ids.length>0?(0,m.jsx)(`p`,{children:c.reconciled_ids.join(`, `)}):null,c.blocked.length>0?(0,m.jsxs)(`p`,{children:[e===`pt-BR`?`Bloqueados: `:`Blocked: `,c.blocked.map(e=>`${e.id}${e.reason===null?``:` (${e.reason})`}`).join(`; `)]}):null,c.not_reconciled.length>0?(0,m.jsxs)(`p`,{children:[e===`pt-BR`?`Não reconciliados: `:`Not reconciled: `,c.not_reconciled.map(e=>`${e.id}${e.reason===null?``:` (${e.reason})`}`).join(`; `)]}):null,(0,m.jsx)(`button`,{onClick:b,type:`button`,children:e===`pt-BR`?`Fechar`:`Dismiss`})]}):null,a!==null&&a!==`operations`&&l===null?(0,m.jsx)(v,{area:a,locale:e}):null]})}var de=(0,f.lazy)(async()=>({default:(await T(async()=>{let{PricingSettingsPage:e}=await import(`./PricingSettingsDialog-BuSlCbyZ.js`);return{PricingSettingsPage:e}},__vite__mapDeps([6,1,2,3,4]))).PricingSettingsPage})),fe=(0,f.lazy)(async()=>({default:(await T(async()=>{let{ProjectSettingsPage:e}=await import(`./ProjectSettingsPage-CUHFkAhZ.js`);return{ProjectSettingsPage:e}},__vite__mapDeps([7,1,2,3,8]))).ProjectSettingsPage})),pe=(0,f.lazy)(async()=>({default:(await T(async()=>{let{CostCalculationGuidePage:e}=await import(`./CostCalculationGuidePage-D1mpyYwh.js`);return{CostCalculationGuidePage:e}},__vite__mapDeps([9,1,2,3]))).CostCalculationGuidePage})),me=`/setup-pricing`,he=`/setup-project`,ge=`/cost-calculation-guide`;function _e(e){let{api:t,costLocale:n,fxRate:r,navigate:i,pathname:a,pricing:o,refresh:s,setFxRate:c,setPricing:l}=e;return a===`/setup-pricing`?o===null?(0,m.jsxs)(`main`,{className:`app-state`,children:[(0,m.jsx)(`p`,{children:n===`pt-BR`?`Configuração do projeto`:`Project settings`}),(0,m.jsx)(`h1`,{children:n===`pt-BR`?`Carregando catálogo de preços…`:`Loading pricing catalog…`}),(0,m.jsx)(`button`,{onClick:()=>i(`/`),type:`button`,children:n===`pt-BR`?`Voltar ao dashboard`:`Back to dashboard`})]}):(0,m.jsx)(f.Suspense,{fallback:null,children:(0,m.jsx)(de,{catalog:o,fxRate:r,locale:n,onClose:()=>i(`/`),onSave:async e=>{l(await t.savePricing(e)),await s()},onSaveFxRate:async e=>{c(await t.saveFxRate(e)),await s()}})}):a===`/cost-calculation-guide`&&o!==null?(0,m.jsx)(f.Suspense,{fallback:null,children:(0,m.jsx)(pe,{catalog:o,fxRate:r,locale:n,onClose:()=>i(`/`)})}):a===`/setup-project`?(0,m.jsx)(f.Suspense,{fallback:null,children:(0,m.jsx)(fe,{api:t,locale:n,onClose:()=>i(`/`)})}):null}var ve=`/zaip-cost-monitor`,E=`zaip-dashboard-session-token`,ye=`zaip-dashboard-locale`,D=`zaip-dashboard-currency`;function be(){return window.localStorage.getItem(`zaip-dashboard-locale`)===`en-US`?`en-US`:`pt-BR`}function xe(e){return e.replace(/\/+$/,``)===ve?`cost-monitor`:null}function Se(){let e=new URL(window.location.href),t=e.searchParams.get(`token`)??window.localStorage.getItem(`zaip-dashboard-session-token`)??window.sessionStorage.getItem(`zaip-dashboard-session-token`)??``;return t&&(window.localStorage.setItem(E,t),window.sessionStorage.setItem(E,t)),e.searchParams.has(`token`)&&(e.searchParams.delete(`token`),window.history.replaceState(null,``,`${e.pathname}${e.search}${e.hash}`)),t}var Ce=(0,f.lazy)(async()=>({default:(await T(async()=>{let{TraceabilityWorkspace:e}=await import(`./TraceabilityWorkspace-BmASq2gW.js`);return{TraceabilityWorkspace:e}},__vite__mapDeps([10,1,2,3,11,12,13,14]))).TraceabilityWorkspace}));function we({costs:e,costLocale:t,currency:n,dashboardView:r,failedArea:i,lastUpdatedAt:a,loadCostDetail:o,loadCostReadModelPage:s,loadCostRunPage:l,loadCostGroupPage:u,loadingArea:d,onActiveDataChange:p,onCurrencyChange:h,onLoadingChange:g,onLocaleChange:v,onOpenTrace:ee,onLoadMoreTraceTasks:te,onRefresh:b,onRetry:x,onSelectTraceTask:S,onOpenTraceChange:ne,onOpenTraceMacro:C,operations:re,selectedTraceTaskId:ie,trace:ae,traceLoadingTaskId:oe,traceTasksHasMore:se,traceTasksLoading:w,traceTasks:ce}){return r===`cost-monitor`?e===null?()=>i===`costs`?(0,m.jsx)(y,{locale:t,onRetry:x}):(0,m.jsx)(_,{area:`costs`,locale:t}):r=>(0,m.jsx)(f.Suspense,{fallback:(0,m.jsx)(_,{area:`costs`,locale:t}),children:(0,m.jsx)(c,{currency:n,data:e,embedded:!0,globalFilters:r,lastUpdatedAt:a,locale:t,loading:d===`costs`,loadDetail:o,loadReadModelPage:s,loadRunPage:l,loadGroupPage:u,onActiveDataChange:p,onCurrencyChange:h,onLoadingChange:g,onLocaleChange:v,onOpenTrace:ee,onRefresh:b,operations:re})}):r===`traceability`?()=>(0,m.jsx)(f.Suspense,{fallback:(0,m.jsx)(_,{area:`operations`,locale:t}),children:(0,m.jsx)(Ce,{loadingTaskId:oe,locale:t,onOpenChange:ne,onOpenPrd:e=>C(`PRD`,e),onOpenSpec:e=>C(`SPEC`,e),onLoadMoreTasks:te,onSelectTask:S,selectedTaskId:ie,tasks:ce.length>0?ce:re.tasks,hasMoreTasks:se,isLoadingTasks:w,trace:ae})}):r===null?(0,m.jsx)(`span`,{"aria-hidden":`true`,hidden:!0}):void 0}var O={"pt-BR":{label:`Áreas do dashboard`,operations:`Operação`,operationsHint:`Trabalho em andamento e priorização`,costs:`Monitor de Custos`,costsHint:`Tempo, tokens e custo`,traceability:`Rastreabilidade`,traceabilityHint:`Ciclo completo em 6 etapas`},"en-US":{label:`Dashboard areas`,operations:`Operations`,operationsHint:`Lifecycle and work in progress`,costs:`Cost Monitor`,costsHint:`Time, tokens, and cost`,traceability:`Traceability`,traceabilityHint:`Complete 6-stage lifecycle`}};function Te({activeView:e,locale:t,onChange:n}){let r=O[t],i=e=>{n(e),window.requestAnimationFrame(()=>{document.querySelector(`.dashboard-global-controls`)?.scrollIntoView({behavior:`smooth`,block:`start`})})};return(0,m.jsxs)(`nav`,{"aria-label":r.label,className:`dashboard-capability-nav`,children:[(0,m.jsxs)(`button`,{"aria-current":e===`cost-monitor`?`page`:void 0,className:e===`cost-monitor`?`is-active`:void 0,onClick:()=>i(`cost-monitor`),type:`button`,children:[(0,m.jsx)(Ee,{}),(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`strong`,{children:r.costs}),(0,m.jsx)(`small`,{children:r.costsHint})]})]}),(0,m.jsxs)(`button`,{"aria-current":e===`operations`?`page`:void 0,className:e===`operations`?`is-active`:void 0,onClick:()=>i(`operations`),type:`button`,children:[(0,m.jsx)(k,{}),(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`strong`,{children:r.operations}),(0,m.jsx)(`small`,{children:r.operationsHint})]})]}),(0,m.jsxs)(`button`,{"aria-current":e===`traceability`?`page`:void 0,className:e===`traceability`?`is-active`:void 0,onClick:()=>i(`traceability`),type:`button`,children:[(0,m.jsx)(A,{}),(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`strong`,{children:r.traceability}),(0,m.jsx)(`small`,{children:r.traceabilityHint})]})]})]})}function k(){return(0,m.jsxs)(`svg`,{"aria-hidden":`true`,className:`lucide lucide-square-kanban`,viewBox:`0 0 24 24`,children:[(0,m.jsx)(`rect`,{height:`18`,rx:`2`,width:`18`,x:`3`,y:`3`}),(0,m.jsx)(`path`,{d:`M8 7v7`}),(0,m.jsx)(`path`,{d:`M12 7v4`}),(0,m.jsx)(`path`,{d:`M16 7v9`})]})}function Ee(){return(0,m.jsxs)(`svg`,{"aria-hidden":`true`,className:`lucide lucide-circle-dollar-sign`,viewBox:`0 0 24 24`,children:[(0,m.jsx)(`circle`,{cx:`12`,cy:`12`,r:`10`}),(0,m.jsx)(`path`,{d:`M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8`}),(0,m.jsx)(`path`,{d:`M12 18V6`})]})}function A(){return(0,m.jsxs)(`svg`,{"aria-hidden":`true`,className:`lucide lucide-route`,viewBox:`0 0 24 24`,children:[(0,m.jsx)(`circle`,{cx:`6`,cy:`19`,r:`3`}),(0,m.jsx)(`path`,{d:`M9 19h6.5a3.5 3.5 0 0 0 0-7h-7a3.5 3.5 0 0 1 0-7H18`}),(0,m.jsx)(`circle`,{cx:`18`,cy:`5`,r:`3`})]})}function De({currency:e,locale:t,onCurrencyChange:n,onHelpOpen:r,onNavigate:i,pricingSetupPath:a,projectSetupPath:o,costCalculationGuidePath:s}){return(0,m.jsxs)(`div`,{className:`dashboard-global-settings`,children:[(0,m.jsxs)(`label`,{children:[(0,m.jsx)(`span`,{children:t===`pt-BR`?`Moeda`:`Currency`}),(0,m.jsxs)(`select`,{"aria-label":t===`pt-BR`?`Moeda`:`Currency`,onChange:e=>n(e.target.value),value:e,children:[(0,m.jsx)(`option`,{value:`BRL`,children:`BRL · Real brasileiro`}),(0,m.jsx)(`option`,{value:`USD`,children:`USD · US Dollar`})]})]}),(0,m.jsx)(`button`,{className:`dashboard-help-open`,onClick:r,type:`button`,children:t===`pt-BR`?`Central de Ajuda`:`Open help and guides`}),(0,m.jsx)(`button`,{className:`dashboard-help-open`,onClick:()=>i(a),type:`button`,children:t===`pt-BR`?`Configurar preços e câmbio`:`Configure pricing and FX`}),(0,m.jsx)(`button`,{className:`dashboard-help-open`,onClick:()=>i(o),type:`button`,children:t===`pt-BR`?`Configurar projeto`:`Configure project`})]})}var Oe=class{token;constructor(e){this.token=e}ready(){return this.get(`/api/v2/ready`)}operations(e,t=`detail`,n,r=!1){let a=`${i.operations}?scope=${t}${r?`&fresh=1`:``}`;return this.get(P(a,e),n)}sqliteViewPage(e,t,n={},r){let i=new URLSearchParams({view:e,offset:String(n.offset??0)});return n.limit!==void 0&&i.set(`limit`,String(n.limit)),n.query&&i.set(`query`,n.query),n.status&&i.set(`status`,n.status),n.risk&&i.set(`risk`,n.risk),n.provider&&i.set(`provider`,n.provider),n.model&&i.set(`model`,n.model),n.agent&&i.set(`agent`,n.agent),n.phase&&i.set(`phase`,n.phase),n.origin&&i.set(`origin`,n.origin),n.workType&&i.set(`workType`,n.workType),n.priority&&i.set(`priority`,n.priority),n.kind&&i.set(`kind`,n.kind),this.get(P(`/api/v2/sqlite-views?${i.toString()}`,t),r)}operationsBoard(e,t,n=0,r,a,o=4){let s=new URLSearchParams({scope:`board`,stage:t,offset:String(n),limit:String(o)});return r?.query&&s.set(`query`,r.query),r?.status&&s.set(`status`,r.status),r?.risk&&s.set(`risk`,r.risk),r?.origin&&s.set(`origin`,r.origin),r?.kind&&s.set(`kind`,r.kind),this.get(P(`${i.operations}?${s.toString()}`,e),a)}operationsClassification(e,t,n,r=0,a,o=50){let s=new URLSearchParams({scope:`classification`,kind:t,classification:n,offset:String(r),limit:String(o)});return this.get(P(`${i.operations}?${s.toString()}`,e),a)}operationsEntityPage(e,t,n=0,r,a){let o=j(t,n,r);return this.get(P(`${i.operations}/runs?${o}`,e),a)}operationsLifecyclePage(e,t,n=0,r,a){let o=j(t,n,r);return this.get(P(`${i.operations}/entities?${o}`,e),a)}operationsReadModelPage(e,t,n=0,r=50,a=``,o){let s=new URLSearchParams({kind:t,offset:String(n),limit:String(r)});return a&&s.set(`query`,a),this.get(P(`${i.operations}/read-models?${s.toString()}`,e),o)}costMonitor(e=`BRL`,t,n=`detail`,r,a,o=!1){let s=new URLSearchParams({currency:e,scope:n});o&&s.set(`fresh`,`1`);for(let[e,t]of Object.entries(a??{}))t&&s.set(e,t);return this.get(P(`${i.costMonitor}?${s.toString()}`,t),r)}costMonitorRuns(e=`BRL`,t,n,r=100,a,o){let s=new URLSearchParams({currency:e,scope:`runs`,offset:String(n),limit:String(r)});for(let[e,t]of Object.entries(o??{}))t&&s.set(e,t);return this.get(P(`${i.costMonitor}?${s.toString()}`,t),a)}snapshot(e=`BRL`,t){return this.get(P(`${i.snapshot}?currency=${e}`,t))}reconcileOpenWork(e=`BRL`,t){return this.post(P(`${i.reconcileOpenWork}?currency=${e}`,t),ke)}refreshProjection(e=`BRL`,t){return this.post(P(`${i.refreshProjection}?currency=${e}`,t),ke)}task(e){return this.get(i.task(e))}prd(e){return this.get(i.prd(e))}spec(e){return this.get(i.spec(e))}taskTrace(e,t){return this.get(i.taskTrace(e),t)}pricing(){return this.get(`/api/v2/pricing`)}async savePricing(e){let t=await fetch(`/api/v2/pricing`,{method:`PUT`,headers:{"content-type":`application/json`,"x-zaip-session":this.token},body:JSON.stringify(e)});if(!t.ok)throw Error(`Pricing update failed with HTTP ${t.status}`);return await t.json()}fxRate(){return this.get(`/api/v2/fx-rate`)}agentCatalog(){return this.get(i.agentCatalog)}agentPortraitUrl(e){return`/api/v2/agent-catalog-assets/${encodeURIComponent(e)}?token=${encodeURIComponent(this.token)}`}projectSettings(){return this.get(i.projectSettings)}projectOverview(){return this.get(`${i.projectSettings}/overview`)}async saveWorkPriority(e){let t=await fetch(i.workPriority,{method:`PUT`,headers:{"content-type":`application/json`,"x-zaip-session":this.token},body:JSON.stringify({item_ids:e})});if(!t.ok)throw Error(`Work priority update failed with HTTP ${t.status}`);return await t.json()}async saveProjectSettings(e){let t=await fetch(i.projectSettings,{method:`PUT`,headers:{"content-type":`application/json`,"x-zaip-session":this.token},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>null);throw Error(e?.error??`Project settings update failed with HTTP ${t.status}`)}return await t.json()}async saveAgentCatalog(e){let t=e.map(({nickname_candidates:e,...t})=>t),n=await fetch(i.agentCatalog,{method:`PUT`,headers:{"content-type":`application/json`,"x-zaip-session":this.token},body:JSON.stringify({agents:t})});if(!n.ok){let e=await n.json().catch(()=>null);throw Error(e?.error??`Agent catalog update failed with HTTP ${n.status}`)}return await n.json()}async saveFxRate(e){let t=await fetch(`/api/v2/fx-rate`,{method:`PUT`,headers:{"content-type":`application/json`,"x-zaip-session":this.token},body:JSON.stringify({rate:e})});if(!t.ok)throw Error(`FX update failed with HTTP ${t.status}`);return await t.json()}async get(e,t){let n=await N(e,{cache:`no-cache`,headers:{"x-zaip-session":this.token}},M,t);if(!n.ok){let e=await n.json().catch(()=>null);throw Error(e?.error??`Dashboard API failed with HTTP ${n.status}`)}return await n.json()}async post(e,t=M){let n=await N(e,{method:`POST`,headers:{"x-zaip-session":this.token}},t);if(!n.ok){let e=await n.json().catch(()=>null);throw Error(e?.error??`Dashboard API failed with HTTP ${n.status}`)}return await n.json()}};function j(e,t,n){let r=new URLSearchParams({kind:e,offset:String(t),limit:`100`});return n?.query&&r.set(`query`,n.query),n?.status&&r.set(`status`,n.status),n?.risk&&r.set(`risk`,n.risk),r.toString()}var M=6e4,ke=18e4;async function N(e,t,n=M,r){let i=new AbortController,a=()=>i.abort();r?.addEventListener(`abort`,a,{once:!0}),r?.aborted&&i.abort();let o=window.setTimeout(()=>i.abort(),n);try{return await fetch(e,{...t,signal:i.signal})}catch(e){throw e instanceof DOMException&&e.name===`AbortError`?Error(`A leitura demorou mais de ${Math.ceil(n/1e3)} segundos. Tente novamente.`):e}finally{window.clearTimeout(o),r?.removeEventListener(`abort`,a)}}function P(e,t){if(t===void 0)return e;let n=new URL(e,`http://dashboard.local`);return t.from!==null&&n.searchParams.set(`from`,t.from),t.to!==null&&n.searchParams.set(`to`,t.to),`${n.pathname}${n.search}`}var Ae={preset:`all`,range:a(`this-month`)};function F(e){return e.preset===`all`?{from:null,to:null}:{from:e.range.start,to:e.range.end}}var je=1500;function Me({snapshotUpdating:e,initialDataPending:t,dismissed:n,delayElapsed:r}){return e&&t&&!n&&r}function Ne({cursor:e,page:t,tasks:n}){let r=new Map(n.map(e=>[e.id,e]));for(let e of t.tasks)r.set(e.id,e);let i=e.offset+t.tasks.length;return{tasks:[...r.values()],cursor:t.tasks.length===0||i>=t.total?{offset:0,stageIndex:e.stageIndex+1}:{...e,offset:i}}}function Pe(e,t,n){return Math.min(t,e+n)}function I(e){return typeof e==`number`?e:null}function L(e){return typeof e==`number`?{known_sum:e,unknown:0,complete:!0,coverage_ratio:1}:{known_sum:0,unknown:1,complete:!1,coverage_ratio:0}}function Fe(e){return Object.hasOwn(e,`total_duration`)?I(e.total_duration):I(e.cost_monitor_total_duration)}function Ie(e,t,n){let{filters:r,query:i}=e;return{offset:t,limit:n,...i===void 0||i===``?{}:{query:i},...r.provider?{provider:r.provider}:{},...r.model?{model:r.model}:{},...r.agent?{agent:r.agent}:{},...r.phase?{phase:r.phase}:{},...r.status?{status:r.status}:{},...r.origin?{origin:r.origin}:{},...r.workType?{workType:r.workType}:{},...r.priority?{priority:r.priority}:{},...r.risk?{risk:r.risk}:{}}}function R(e){let t=Fe(e),n=Number(e.duration_unknown??+(t===null)),r=I(e.duration_known)??t??0;return{key:String(e.key??e.period_key??`total`),label:String(e.label??e.key??e.period_key??``),latest_started_at:typeof e.latest_started_at==`string`?e.latest_started_at:``,persona:typeof e.persona==`string`?e.persona:null,job:typeof e.job==`string`?e.job:null,run_count:Number(e.total_run_count??e.invocation_count??0),task_count:I(e.task_count),prd_count:Number(e.prd_count??0),spec_count:Number(e.spec_count??0),evidence_count:Number(e.evidence_count??0),test_count:Number(e.validation_count??0),event_count:Number(e.source_event_count??0),total_tokens:I(e.total_tokens),estimated_usd:I(e.total_cost_usd),estimated_brl:I(e.total_cost_brl),duration_ms:t,duration:{known_sum:r,unknown:n,complete:n===0,coverage_ratio:+(n===0)},coverage:{events:0,tokens:0,usd:0,brl:0}}}async function Le(e,t){let{from:n,limit:r,offset:i,signal:a,to:o,view:s}=t,c=n===void 0||o===void 0?void 0:{from:n,to:o};if(s===`daily`){let n=await e.sqliteViewPage(`cost_monitor_daily`,c,Ie(t,i,r),a);return{offset:n.offset,limit:n.limit,total_count:n.total_count,has_more:n.has_more,rows:n.rows.map(R),...n.totals===void 0?{}:{totals:R(n.totals)}}}let l={monthly:`cost_monitor_monthly`,annual:`cost_monitor_annual`,agents:`cost_monitor_zaip_agents`,models:`cost_monitor_models`,providers:`cost_monitor_providers`}[s],u=await e.sqliteViewPage(l,c,Ie(t,i,r),a);return{offset:u.offset,limit:u.limit,total_count:u.total_count,has_more:u.has_more,rows:u.rows.map(R),...u.totals===void 0?{}:{totals:R(u.totals)}}}async function Re(e,t){let{filters:n,from:r,limit:i=10,offset:a,signal:o,to:s}=t,c=await e.sqliteViewPage(`cost_monitor_agent_invocations`,r===void 0||s===void 0?void 0:{from:r,to:s},{offset:a,limit:i,...n?.query?{query:n.query}:{},...n?.provider?{provider:n.provider}:{},...n?.model?{model:n.model}:{},...n?.agent?{agent:n.agent}:{},...n?.phase?{phase:n.phase}:{},...n?.status?{status:n.status}:{}},o);return{page_only:!0,runs:c.rows.map(ze),run_page:{offset:c.offset,limit:c.limit,total:c.total_count,has_more:c.has_more}}}function ze(e){let t=(e,t)=>typeof e==`string`?e:t,n=e=>typeof e==`number`?e:null,r=t(e.agent_invocation_id,`unavailable`),i=typeof e.task_id==`string`?e.task_id:null,a=typeof e.spec_id==`string`?e.spec_id:null,o=typeof e.prd_id==`string`?e.prd_id:null,s=t(e.phase,`execution`),c=e.duration_provenance===`observed`||e.duration_provenance===`reconciled`||e.duration_provenance===`estimated`||e.duration_provenance===`legacy_inferred`?e.duration_provenance:`unavailable`,l=Object.hasOwn(e,`calculated_cost_usd`)?n(e.calculated_cost_usd):n(e.cost_usd),u=n(e.current_fx_rate)??n(e.fx_rate),d=n(e.recorded_cost_usd)??n(e.recorded_usd),f=Object.hasOwn(e,`recorded_fx_rate`)?n(e.recorded_fx_rate):n(e.fx_rate),p=n(e.recorded_brl)??(!Object.hasOwn(e,`recorded_brl`)&&d!==null?n(e.cost_brl):null),m=l!==null&&u!==null?Math.round(l*u*1e6)/1e6:null;return{run_id:r,execution_id:typeof e.execution_id==`string`?e.execution_id:null,conversation_id:t(e.run_id,r),task_id:i,task_title:t(e.task_title,i??`Tarefa avulsa`),task_status:t(e.task_status,`unavailable`),priority:t(e.priority,`unavailable`),risk:t(e.risk,`unavailable`),spec_id:a,prd_id:o,change_id:typeof e.change_id==`string`?e.change_id:null,parent_run_id:typeof e.parent_agent_invocation_id==`string`?e.parent_agent_invocation_id:null,run_role:e.invocation_kind===`subagent`?`subagent`:`orchestrator`,run_kind:e.run_kind===`subrun`?`subrun`:`run`,run_purpose:`execution`,requires_finalizer:!1,client:t(e.client,`unavailable`),agent:t(e.zaip_agent,`unavailable`),agent_name:t(e.zaip_agent,`unavailable`),provider:typeof e.provider==`string`?e.provider:null,model:t(e.model,`unavailable`),requested_model:t(e.requested_model,`unavailable`),reasoning_effort:typeof e.reasoning_effort==`string`?e.reasoning_effort:null,effective_reasoning_effort:typeof e.effective_reasoning_effort==`string`?e.effective_reasoning_effort:null,service_tier:typeof e.service_tier==`string`?e.service_tier:null,call_count:n(e.llm_call_count),status:t(e.status,`completed`),phase:s,origin:o===null?a===null?i===null?`conversation`:`task`:`spec`:`prd`,work_type:e.work_type===`rework`?`rework`:`new`,started_at:t(e.occurred_at,``),finished_at:typeof e.finished_at==`string`?e.finished_at:null,duration_ms:n(e.duration_ms),duration_provenance:c,estimation_basis:typeof e.estimation_basis==`string`?e.estimation_basis:null,source_started_at:typeof e.source_started_at==`string`?e.source_started_at:null,source_finished_at:typeof e.source_finished_at==`string`?e.source_finished_at:null,capture_lag_ms:n(e.capture_lag_ms),event_count:n(e.source_event_count),input_tokens:n(e.input_tokens),cached_input_tokens:n(e.cached_input_tokens),output_tokens:n(e.output_tokens),reasoning_tokens:n(e.reasoning_tokens),total_tokens:n(e.total_tokens),uncached_input_tokens:n(e.uncached_input_tokens),visible_output_tokens:n(e.visible_output_tokens),input_rate_usd_per_million:n(e.input_rate_usd_per_million),cached_input_rate_usd_per_million:n(e.cached_input_rate_usd_per_million),output_rate_usd_per_million:n(e.output_rate_usd_per_million),reasoning_rate_usd_per_million:n(e.reasoning_rate_usd_per_million),context_input_multiplier:n(e.context_input_multiplier),context_output_multiplier:n(e.context_output_multiplier),speed_cost_multiplier:n(e.speed_cost_multiplier),standard_cost_usd:n(e.standard_cost_usd),speed_uplift_usd:n(e.speed_uplift_usd),input_cost_usd:n(e.input_cost_usd),cached_input_cost_usd:n(e.cached_input_cost_usd),output_cost_usd:n(e.output_cost_usd),reasoning_cost_usd:n(e.reasoning_cost_usd),fx_rate:u,estimated_usd:l,estimated_brl:m,recorded_usd:d,recorded_brl:p,recorded_fx_rate:f,coverage:{events:0,tokens:0,usd:0,brl:0},artifact_path:`.agents/records/runs/${r}`}}function Be(e,t){let n=t.totals,r=e=>L(n?.[e]);return{data_source:`lifecycle_daily_read_models`,snapshot_id:null,source_latest_at:null,kind:e,offset:t.offset,limit:t.limit,total:t.total_count,has_more:t.has_more,next_cursor:null,subtotal:{entity_count:typeof n?.entity_count==`number`?n.entity_count:t.total_count,run_count:r(`invocation_count`),metrics:{duration:r(`total_duration`),total_tokens:r(`total_tokens`),cost_brl:r(`total_cost_brl`),cost_usd:r(`total_cost_usd`)}},rows:t.rows.map(t=>({id:String(t.task_id??t.spec_id??t.prd_id??t.execution_id??t.conversation_id??t.id??`unavailable`),title:String(t.title??t.task_id??t.spec_id??t.prd_id??t.execution_id??t.conversation_id??`Unavailable`),kind:e===`tasks`?`task`:e===`specs`?`spec`:e===`prds`?`prd`:e===`executions`?`execution`:`conversation`,status:typeof t.status==`string`?t.status:null,risk:typeof t.risk==`string`?t.risk:null,occurred_at:typeof t.occurred_at==`string`?t.occurred_at:typeof t.started_at==`string`?t.started_at:typeof t.last_day==`string`?`${t.last_day}T12:00:00.000Z`:``,parent_id:null,run_count:Number(t.invocation_count??0),cost_currency:`BRL`,metrics:{duration:L(t.total_duration),total_tokens:L(t.total_tokens),cost:L(t.total_cost_brl)}}))}}function Ve(e){return{loadCostDetail:(0,f.useCallback)(async()=>{throw Error(`SQLite Cost Monitor loads the selected paginated view; full detail is disabled.`)},[]),loadCostReadModelPage:(0,f.useCallback)(async({filters:t,from:n,kind:r,limit:i,offset:a,query:o,signal:s,to:c})=>{let l={tasks:`cost_monitor_tasks`,specs:`cost_monitor_specs`,prds:`cost_monitor_prds`,executions:`cost_monitor_executions`,conversations:`cost_monitor_conversations`}[r];return Be(r,await e.sqliteViewPage(l,n===void 0||c===void 0?void 0:{from:n,to:c},{offset:a,limit:i,...o===void 0||o===``?{}:{query:o},...t.provider?{provider:t.provider}:{},...t.model?{model:t.model}:{},...t.agent?{agent:t.agent}:{},...t.phase?{phase:t.phase}:{},...t.status?{status:t.status}:{},...t.origin?{origin:t.origin}:{},...t.workType?{workType:t.workType}:{},...t.priority?{priority:t.priority}:{},...t.risk?{risk:t.risk}:{}},s))},[e]),loadCostRunPage:(0,f.useCallback)(t=>Re(e,t),[e]),loadCostGroupPage:(0,f.useCallback)(t=>Le(e,t),[e])}}function He(e,t){return!1}function Ue(e,t=window,n=0){let r=!1,i=!1,a=new AbortController,o=t.setTimeout(()=>{r||i||(i=!0,e(a.signal))},n);return()=>{r||(r=!0,a.abort(),t.clearTimeout(o))}}function We({inFlight:e,lastRefreshAt:t,now:n,visibilityState:r}){return r===`visible`&&!e&&n-t>=5e3}function Ge({api:e,costLocale:t,currency:n,dashboardView:r,loadOperationsDetails:i,operations:a,operationsDetailAbortRef:o,operationsDetailCancelRef:s,operationsPageAbortRef:c,pathname:l,pricing:u,refresh:d,refreshVersion:p,setError:m,setFxRate:h,setPathname:g,setPricing:_}){let v=(0,f.useRef)(!1),y=(0,f.useRef)(0);(0,f.useEffect)(()=>(d(),()=>{s.current?.(),s.current=null,o.current?.abort(),o.current=null,c.current?.abort(),c.current=null,++p.current}),[o,s,c,d,p]),(0,f.useEffect)(()=>{let e=()=>{let e=Date.now();We({inFlight:v.current,lastRefreshAt:y.current,now:e,visibilityState:document.visibilityState})&&(y.current=e,v.current=!0,d(!1,!1,!0).finally(()=>{v.current=!1}))};return window.addEventListener(`focus`,e),document.addEventListener(`visibilitychange`,e),()=>{window.removeEventListener(`focus`,e),document.removeEventListener(`visibilitychange`,e)}},[d]),(0,f.useEffect)(()=>{if(!He(r,a?.summary.overview_metrics?.partial===!0))return;let e=Ue(async e=>{await i(e)});return s.current=e,()=>{s.current===e&&(s.current=null),e()}},[r,i,a?.summary.overview_metrics?.partial,s]),(0,f.useEffect)(()=>window.localStorage.setItem(ye,t),[t]),(0,f.useEffect)(()=>window.localStorage.setItem(D,n),[n]),(0,f.useEffect)(()=>{[`/`,`/setup-pricing`,`/setup-project`].includes(window.location.pathname)||(window.history.replaceState(null,``,`/${window.location.search}${window.location.hash}`),g(`/`))},[g]),(0,f.useEffect)(()=>{let e=()=>g(window.location.pathname);return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[g]),(0,f.useEffect)(()=>{l!==`/setup-pricing`||u!==null||Promise.all([e.pricing(),e.fxRate()]).then(([e,t])=>{_(e),h(t)}).catch(e=>m(String(e)))},[e,l,u,m,h,_])}var z={events:0,tokens:{input:null,cached_input:null,output:null,reasoning:null,total:null},cost:{usd:null,brl:null},coverage:{events:0,tokens:0,usd:0,brl:0}};function Ke(e,t,n){let r=e=>e===`intake`||e===`orchestration`||e===`execution`||e===`review`||e===`audit`||e===`finalization`?e:`execution`,i=n.rows.map(e=>({id:e.id,artifact_path:`.agents/records/runs/${e.id}`,status:e.status===`running`||e.status===`failed`||e.status===`cancelled`?e.status:`completed`,phase:e.phase??`execution`,entrypoint:e.conversation_id===null?`task`:`conversation`,work_type:`new`,run_role:e.run_kind===`subrun`?`subagent`:`orchestrator`,run_kind:e.run_kind??`run`,run_purpose:r(e.run_purpose),requires_finalizer:!1,parent_run_id:e.parent_run_id,client:e.client??`unknown`,agent:e.agent??`unknown`,agent_name:e.agent??`unknown`,agent_persona:e.agent_persona??null,agent_job:e.agent_job??null,provider:e.provider??null,model:e.model??`unknown`,reasoning_effort:e.reasoning_effort??null,effective_model:e.model??null,effective_reasoning_effort:e.reasoning_effort??null,effective_config_mixed:e.pricing_mixed??!1,service_tier:e.service_tier??null,call_count:e.llm_call_count??null,terminal_call_count:null,failed_call_count:null,cancelled_call_count:null,conversation_id:e.conversation_id??e.id,execution_id:e.execution_id,task_id:e.task_id,spec_id:null,prd_id:null,change_id:null,started_at:e.started_at,finished_at:e.finished_at,duration_ms:e.duration_ms,source_duration_ms:e.source_duration_ms===void 0?e.duration_ms:e.source_duration_ms,duration_provenance:e.duration_provenance===`observed`||e.duration_provenance===`reconciled`||e.duration_provenance===`legacy_inferred`||e.duration_provenance===`estimated`?e.duration_provenance:`unavailable`,llm_call_count:e.llm_call_count??null,input_tokens:e.input_tokens??null,cached_input_tokens:e.cached_input_tokens??null,uncached_input_tokens:e.uncached_input_tokens??null,output_tokens:e.output_tokens??null,reasoning_tokens:e.reasoning_tokens??null,visible_output_tokens:e.visible_output_tokens??null,input_rate_usd_per_million:e.input_rate_usd_per_million??null,cached_input_rate_usd_per_million:e.cached_input_rate_usd_per_million??null,output_rate_usd_per_million:e.output_rate_usd_per_million??null,reasoning_rate_usd_per_million:e.reasoning_rate_usd_per_million??null,context_input_multiplier:e.context_input_multiplier??null,context_output_multiplier:e.context_output_multiplier??null,speed_cost_multiplier:e.speed_cost_multiplier??null,pricing_scenario:e.pricing_scenario??null,standard_cost_usd:e.standard_cost_usd??null,speed_uplift_usd:e.speed_uplift_usd??null,input_cost_usd:e.input_cost_usd??null,cached_input_cost_usd:e.cached_input_cost_usd??null,output_cost_usd:e.output_cost_usd??null,reasoning_cost_usd:e.reasoning_cost_usd??null,calculated_cost_usd:e.calculated_cost_usd??null,recorded_cost_usd:e.recorded_cost_usd??null,cost_variance_usd:e.cost_variance_usd??null,cost_usd:e.cost_usd??null,cost_brl:e.currency===`BRL`?e.cost:null,fx_rate:e.fx_rate??null,pricing_segment_count:e.pricing_segment_count??null,pricing_mixed:e.pricing_mixed??!1,pricing_model:e.pricing_model??null,pricing_source:e.pricing_source??null,...e.lifecycle_elapsed_ms===void 0?{}:{lifecycle_elapsed_ms:e.lifecycle_elapsed_ms},usage:{conversation:z,planning:z,execution:{...z,events:e.llm_call_count??0,tokens:{input:e.input_tokens??null,cached_input:e.cached_input_tokens??null,output:e.output_tokens??null,reasoning:e.reasoning_tokens??null,total:e.total_tokens},cost:{usd:e.cost_usd??null,brl:e.currency===`BRL`?e.cost:null}},total:{...z,events:e.llm_call_count??0,tokens:{input:e.input_tokens??null,cached_input:e.cached_input_tokens??null,output:e.output_tokens??null,reasoning:e.reasoning_tokens??null,total:e.total_tokens},cost:{usd:e.cost_usd??null,brl:e.currency===`BRL`?e.cost:null}},new_work:z,rework:z}}));return{...e,runs:i,executions:t===`executions`||t===`conversations`?n.rows.map((e,n)=>{let r=i[n],a=r.execution_id??r.conversation_id,o=e.status??`unavailable`;return{id:a,kind:t===`conversations`?`interaction`:`delivery`,created_at:r.started_at,status:o,work_status:o,origin:t===`conversations`?{type:`interaction`,conversation_id:r.conversation_id}:{type:`task`,task_id:r.task_id??`unavailable`},dag:{nodes:[],topological_order:[]},result:null,artifact_path:`.agents/records/executions/${a}`,agent_call_count:0,orchestrator_run_count:0,subagent_run_count:0,finalizer_run_count:0,finalized_task_count:0,llm_call_count:0,llm_call_count_complete:!1,task_count:0,spec_count:0,prd_count:0,duration_ms:r.source_duration_ms??null,...e.lifecycle_elapsed_ms===void 0?{}:{lifecycle_elapsed_ms:e.lifecycle_elapsed_ms},total_tokens:r.usage.total.tokens.total,cost_brl:r.usage.total.cost.brl}}):e.executions}}function B(e){if(typeof e!=`string`)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}}function qe({api:e,entityFiltersRef:t,operationsPageAbortRef:n,operationsPageRequestVersionRef:r,operationsPeriod:i,operationsPeriodRef:a,refreshVersion:o,setEntityPage:s,setEntityPageKind:c,setOperations:l}){return{loadOperationsEntityPage:(0,f.useCallback)(async(u,d=0,f=t.current)=>{n.current?.abort();let p=new AbortController;n.current=p;let m=++r.current,h=o.current,g=F(i),_=()=>C(m,r.current,p.signal)&&x(h,o.current,g,F(a.current));c(u),s({offset:d,total:null,loading:!0,error:null});try{let t={runs:`operations_agent_invocations`,executions:`operations_executions`,conversations:`operations_conversations`}[u],n=await e.sqliteViewPage(t,g,{offset:d,limit:100,...f.query?{query:f.query}:{},...f.status?{status:f.status}:{},...f.risk?{risk:f.risk}:{}},p.signal),r={kind:u,offset:n.offset,limit:n.limit,total:n.total_count,aggregation:`canonical_entity`,rows:n.rows.map(e=>({id:String(e.agent_invocation_id??e.execution_id??e.conversation_id??e.id),started_at:String(e.occurred_at??e.started_at??`1970-01-01T00:00:00.000Z`),finished_at:typeof e.finished_at==`string`?e.finished_at:null,task_id:typeof e.task_id==`string`?e.task_id:null,execution_id:typeof e.execution_id==`string`?e.execution_id:null,conversation_id:typeof e.conversation_id==`string`?e.conversation_id:null,parent_run_id:typeof e.parent_agent_invocation_id==`string`?e.parent_agent_invocation_id:null,run_kind:e.invocation_kind===`delegated`||e.invocation_kind===`subagent`?`subrun`:e.invocation_kind===`orchestrator`?`run`:null,run_purpose:typeof e.purpose==`string`?e.purpose:null,phase:typeof e.phase==`string`?e.phase:null,status:typeof e.status==`string`?e.status:null,agent:typeof e.zaip_agent==`string`?e.zaip_agent:null,agent_persona:typeof e.zaip_agent_persona==`string`?e.zaip_agent_persona:null,agent_job:typeof e.zaip_agent_job==`string`?e.zaip_agent_job:null,client:typeof e.client==`string`?e.client:null,provider:typeof e.provider==`string`?e.provider:null,model:typeof e.model==`string`?e.model:null,reasoning_effort:typeof e.reasoning_effort==`string`?e.reasoning_effort:null,service_tier:typeof e.service_tier==`string`?e.service_tier:null,duration_ms:typeof e.duration_ms==`number`?e.duration_ms:typeof e.total_duration==`number`?e.total_duration:null,source_duration_ms:typeof e.source_duration_ms==`number`?e.source_duration_ms:null,duration_provenance:typeof e.duration_provenance==`string`?e.duration_provenance:null,llm_call_count:typeof e.llm_call_count==`number`?e.llm_call_count:null,input_tokens:typeof e.input_tokens==`number`?e.input_tokens:null,cached_input_tokens:typeof e.cached_input_tokens==`number`?e.cached_input_tokens:null,uncached_input_tokens:typeof e.uncached_input_tokens==`number`?e.uncached_input_tokens:null,output_tokens:typeof e.output_tokens==`number`?e.output_tokens:null,reasoning_tokens:typeof e.reasoning_tokens==`number`?e.reasoning_tokens:null,visible_output_tokens:typeof e.visible_output_tokens==`number`?e.visible_output_tokens:null,total_tokens:typeof e.total_tokens==`number`?e.total_tokens:null,input_rate_usd_per_million:typeof e.input_rate_usd_per_million==`number`?e.input_rate_usd_per_million:null,cached_input_rate_usd_per_million:typeof e.cached_input_rate_usd_per_million==`number`?e.cached_input_rate_usd_per_million:null,output_rate_usd_per_million:typeof e.output_rate_usd_per_million==`number`?e.output_rate_usd_per_million:null,reasoning_rate_usd_per_million:typeof e.reasoning_rate_usd_per_million==`number`?e.reasoning_rate_usd_per_million:null,context_input_multiplier:typeof e.context_input_multiplier==`number`?e.context_input_multiplier:null,context_output_multiplier:typeof e.context_output_multiplier==`number`?e.context_output_multiplier:null,speed_cost_multiplier:typeof e.speed_cost_multiplier==`number`?e.speed_cost_multiplier:null,pricing_scenario:typeof e.pricing_scenario==`string`?e.pricing_scenario:null,standard_cost_usd:typeof e.standard_cost_usd==`number`?e.standard_cost_usd:null,speed_uplift_usd:typeof e.speed_uplift_usd==`number`?e.speed_uplift_usd:null,input_cost_usd:typeof e.input_cost_usd==`number`?e.input_cost_usd:null,cached_input_cost_usd:typeof e.cached_input_cost_usd==`number`?e.cached_input_cost_usd:null,output_cost_usd:typeof e.output_cost_usd==`number`?e.output_cost_usd:null,reasoning_cost_usd:typeof e.reasoning_cost_usd==`number`?e.reasoning_cost_usd:null,calculated_cost_usd:typeof e.calculated_cost_usd==`number`?e.calculated_cost_usd:null,recorded_cost_usd:typeof e.recorded_cost_usd==`number`?e.recorded_cost_usd:null,cost_variance_usd:typeof e.cost_variance_usd==`number`?e.cost_variance_usd:null,cost_usd:typeof e.cost_usd==`number`?e.cost_usd:null,fx_rate:typeof e.fx_rate==`number`?e.fx_rate:null,pricing_segment_count:typeof e.pricing_segment_count==`number`?e.pricing_segment_count:null,pricing_mixed:e.pricing_mixed===1||e.pricing_mixed===!0,pricing_model:typeof e.audit_pricing_model==`string`?e.audit_pricing_model:typeof e.pricing_model==`string`?e.pricing_model:null,pricing_source:typeof e.audit_pricing_source==`string`?e.audit_pricing_source:typeof e.pricing_source==`string`?e.pricing_source:null,cost:typeof e.total_cost_brl==`number`?e.total_cost_brl:typeof e.cost_brl==`number`?e.cost_brl:null,currency:`BRL`}))};if(!_())return;l(e=>e===null?e:Ke(e,u,r)),s({offset:r.offset,total:r.total,loading:!1,error:null,aggregation:r.aggregation})}catch(e){if(!_()||S(e))return;s({offset:d,total:null,loading:!1,error:e instanceof Error?e.message:String(e)})}finally{n.current===p&&(n.current=null)}},[e,t,n,r,i,a,o,s,c,l]),loadOperationsLifecyclePage:(0,f.useCallback)(async(u,d=0,f=t.current)=>{n.current?.abort();let p=new AbortController;n.current=p;let m=++r.current,h=o.current,g=F(i),_=()=>C(m,r.current,p.signal)&&x(h,o.current,g,F(a.current));c(u),s({offset:d,total:null,loading:!0,error:null});try{let t=await e.sqliteViewPage(u===`changes`?`operations_changes`:`operations_decisions`,g,{offset:d,limit:100,...f.query?{query:f.query}:{},...f.status?{status:f.status}:{},...f.risk?{risk:f.risk}:{}},p.signal),n=u===`changes`?t.rows.map(e=>{let t=String(e.source_type),n=String(e.source_id);return{id:String(e.id),title:typeof e.title==`string`?e.title:String(e.id),created_at:typeof e.occurred_at==`string`?e.occurred_at:null,status:typeof e.status==`string`?e.status:`unclassified`,risk:typeof e.risk==`string`?e.risk:`unclassified`,source:t===`spec`?{type:`spec`,spec_id:n}:t===`prd`?{type:`prd`,prd_id:n,spec_id:null}:{type:`task`,task_id:n},requirement_ids:B(e.requirement_ids_json),acceptance_ids:B(e.acceptance_ids_json),task_ids:B(e.task_ids_json),result:typeof e.result==`string`?e.result:null,artifact_path:typeof e.source_path==`string`?e.source_path:String(e.id)}}):t.rows.map(e=>({id:String(e.id),title:typeof e.title==`string`?e.title:String(e.id),origin:e.origin===`human`?`human`:`agent`,scope_type:e.scope_type===`execution`?`execution`:`change`,scope_id:String(e.scope_id),artifact_path:typeof e.source_path==`string`?e.source_path:String(e.id),created_at:typeof e.occurred_at==`string`?e.occurred_at:`1970-01-01T00:00:00.000Z`})),r={kind:u,offset:t.offset,limit:t.limit,total:t.total_count,rows:n};if(!_())return;l(e=>e===null?e:{...e,...u===`changes`?{changes:r.rows}:{decisions:r.rows}}),s({offset:r.offset,total:r.total,loading:!1,error:null})}catch(e){if(!_()||S(e))return;s({offset:d,total:null,loading:!1,error:e instanceof Error?e.message:String(e)})}finally{n.current===p&&(n.current=null)}},[e,t,n,r,i,a,o,s,c,l])}}function Je({api:e,operations:t,setError:n,setFailedArea:r,setLoadingArea:i}){let[a,o]=(0,f.useState)(null),[s,c]=(0,f.useState)([]),[l,u]=(0,f.useState)(null),[d,p]=(0,f.useState)(null),m=(0,f.useRef)(0),h=(0,f.useRef)(0),g=(0,f.useRef)(null),[_,v]=(0,f.useState)(null),[y,ee]=(0,f.useState)(``);async function te(a){let c=++h.current;g.current?.abort();let l=new AbortController;g.current=l,n(null),r(null),o(null),v(a),i(`traceability`),await new Promise(e=>window.requestAnimationFrame(()=>e()));try{let n=await e.taskTrace(a,l.signal);if(h.current!==c)return!1;let r=s.find(e=>e.id===a)??t?.tasks.find(e=>e.id===a);return o({...n,task_title:r?.title||n.task_title||a,task_risk:r?.risk||n.task_risk||null,task_created_at:r?.created_at||n.task_created_at||null,task_progress:r?.progress??n.task_progress??0}),!0}catch(e){return l.signal.aborted||h.current!==c?!1:(n(e instanceof Error?e.message:String(e)),r(`traceability`),!1)}finally{h.current===c&&(g.current===l&&(g.current=null),v(null),i(e=>e===`traceability`?null:e))}}function b(e){let n=t?.changes.find(t=>t.id===e);n!==void 0&&(o(null),p({kind:`change`,row:n}))}function x(e,n){let r=(e===`PRD`?t?.prds:t?.specs)?.find(e=>e.id===n);r!==void 0&&(o(null),p({kind:`macro`,label:e,row:r}))}async function S(n,r){let i=(n===`prd`?t?.prds:t?.specs)?.find(e=>e.id===r);if(!i)return;let a=++m.current,o=n===`prd`?`PRD`:`SPEC`;u({kind:n,label:o,preview:i});try{let t=n===`prd`?await e.prd(r):await e.spec(r);if(m.current!==a)return;u({kind:n,label:o,preview:i,detail:t})}catch(e){if(m.current!==a)return;u({kind:n,label:o,preview:i,error:e instanceof Error?e.message:String(e)})}}function ne(){m.current+=1,u(null)}return{closeDocument:ne,documentDetail:l,openDocument:S,openTrace:te,openTraceChange:b,openTraceMacro:x,selectedTraceTaskId:y,setSelectedTraceTaskId:ee,setTrace:o,setTraceLink:p,setTraceLoadingTaskId:v,setTraceTasks:c,trace:a,traceLink:d,traceLoadingTaskId:_,traceTasks:s}}function Ye(e,t){return JSON.stringify([e.query,e.status,e.risk,e.origin??``,e.kind??``,t.from??``,t.to??``])}function Xe(e,t,n){return e===`explicit`||t!==n}function Ze(e,t){return{...e,kind:e.kind??t.kind??``}}var Qe={offset:0,limit:10,total:null,hasMore:!1,typeFilter:`all`,rows:[],loading:!1,error:null};function $e({api:e,operationsPeriod:t,operationsPeriodRef:n}){let[r,i]=(0,f.useState)(Qe),a=(0,f.useRef)({query:``,status:``,risk:``}),o=(0,f.useRef)(null),s=(0,f.useRef)(0),c=(0,f.useRef)(null),l=(0,f.useCallback)(async(r,l=0,u=`explicit`)=>{let d=F(t),f=Ze(r,a.current),p=Ye(f,d);if(!Xe(u,p,c.current))return;o.current?.abort();let m=new AbortController;o.current=m;let h=++s.current;a.current=f,c.current=p;let g=f.kind||`all`;i(e=>({...e,offset:l,typeFilter:g,loading:!0,error:null}));try{let t=await e.sqliteViewPage(`operations_work_list`,d,{offset:l,limit:10,...f.query?{query:f.query}:{},...f.status?{status:f.status}:{},...f.risk?{risk:f.risk}:{},...f.origin?{origin:f.origin}:{},...g===`all`?{}:{kind:g}},m.signal);if(m.signal.aborted||h!==s.current||d.from!==F(n.current).from||d.to!==F(n.current).to)return;i({offset:t.offset,limit:t.limit,total:t.total_count,hasMore:t.has_more,typeFilter:g,rows:t.rows,loading:!1,error:null})}catch(e){if(m.signal.aborted||h!==s.current)return;c.current===p&&(c.current=null),i(t=>({...t,offset:l,typeFilter:g,loading:!1,error:e instanceof Error?e.message:String(e)}))}finally{o.current===m&&(o.current=null)}},[e,t,n]),u=(0,f.useCallback)(()=>{o.current?.abort(),o.current=null,++s.current,c.current=null,i(Qe)},[]);return{workListPage:r,workListFiltersRef:a,loadWorkListFilters:(0,f.useCallback)(e=>l(e,0,`filter-hydration`),[l]),loadWorkListPage:l,resetWorkListPage:u}}async function*et(e,t){let n=e;for(;;){if(n.rows.length===0)return;yield n.rows;let e=n.offset+n.rows.length;if(!n.has_more||e>=n.total_count)return;n=await t(e)}}function tt({api:e,operationsPeriod:t}){return(0,f.useCallback)((n,r)=>{let i=F(t);if(n===`work-kanban`)return;let a={"work-list":`operations_work_list`,changes:`operations_changes`,decisions:`operations_decisions`,executions:`operations_executions`,runs:`operations_agent_invocations`,conversations:`operations_conversations`,daily:`operations_daily`,monthly:`operations_monthly`,yearly:`operations_annual`}[n];if(a===void 0)return;let o=e=>({offset:e,limit:100,...r.query?{query:r.query}:{},...r.status?{status:r.status}:{},...r.risk?{risk:r.risk}:{},...r.origin?{origin:r.origin}:{},...a===`operations_work_list`&&r.kind?{kind:r.kind}:{}});return{prepare:async()=>{let t=await e.sqliteViewPage(a,i,o(0));return{totalRows:t.total_count,pages:()=>et(t,t=>e.sqliteViewPage(a,i,o(t)))}}}},[e,t])}var nt=(e,t)=>`${e}:${t}`,rt=(e,t)=>`${e}:${t}`,it=[`definition`,`planning`,`ready`,`executing`,`verifying`,`completed`,`blocked`,`cancelled`,`failed`],at=[`completed`,`executing`,`ready`,`blocked`,`verifying`,`failed`,`cancelled`,`planning`,`definition`];function V(){let[e,t]=(0,f.useState)(!1),[n,r]=(0,f.useState)(!1),[i,a]=(0,f.useState)(!1),o=(0,f.useMemo)(Se,[]),c=(0,f.useMemo)(()=>new Oe(o),[o]),{loadCostDetail:l,loadCostReadModelPage:u,loadCostRunPage:d,loadCostGroupPage:p}=Ve(c),[h,g]=(0,f.useState)(()=>xe(window.location.pathname)),_=(0,f.useRef)(h);_.current=h;let[v,y]=(0,f.useState)(null),[C,se]=(0,f.useState)({offset:0,total:null,loading:!1,error:null}),[w,ce]=(0,f.useState)(`runs`),T=(0,f.useRef)({query:``,status:``,risk:``}),[le,de]=(0,f.useState)({}),[fe,pe]=(0,f.useState)({}),[ve,E]=(0,f.useState)({}),[ye,D]=(0,f.useState)({}),[Ce,O]=(0,f.useState)({}),[k,Ee]=(0,f.useState)(null),[A,j]=(0,f.useState)(null),[M,ke]=(0,f.useState)(be),[N,P]=(0,f.useState)(()=>window.localStorage.getItem(`zaip-dashboard-currency`)===`USD`?`USD`:`BRL`),Pe=(0,f.useRef)(N);Pe.current=N;let I=(0,f.useCallback)(e=>{ke(e),P(e===`en-US`?`USD`:`BRL`)},[]),[L,Fe]=(0,f.useState)(()=>Ae),Ie=(0,f.useMemo)(()=>F(L),[L.preset===`all`?`all`:`${L.preset}:${L.range.start}:${L.range.end}`]),R=(0,f.useRef)(L);R.current=L;let[Le,Re]=(0,f.useState)(!1),[ze,Be]=(0,f.useState)(null),[He,Ue]=(0,f.useState)(null),[We,z]=(0,f.useState)(window.location.pathname),[Ke,B]=(0,f.useState)(!0),[,Ye]=(0,f.useState)(!1),[,Xe]=(0,f.useState)(!1),[Ze,Qe]=(0,f.useState)(!1),[et,V]=(0,f.useState)(`operations`),[H,U]=(0,f.useState)(null),[ot,st]=(0,f.useState)(null);(0,f.useEffect)(()=>{c.ready().then(e=>t(e.snapshot_state===`updating`)).catch(()=>{})},[c]);let[ct,W]=(0,f.useState)(null),[lt,ut]=(0,f.useState)(null),[dt,ft]=(0,f.useState)(null),[pt,mt]=(0,f.useState)({title:`Dashboard Zaip AIOS`,repositoryName:``}),{closeDocument:ht,documentDetail:gt,openDocument:_t,openTrace:G,openTraceChange:vt,openTraceMacro:yt,selectedTraceTaskId:bt,setSelectedTraceTaskId:xt,setTrace:St,setTraceLink:Ct,setTraceLoadingTaskId:wt,setTraceTasks:Tt,trace:Et,traceLink:Dt,traceLoadingTaskId:Ot,traceTasks:kt}=Je({api:c,operations:v,setError:W,setFailedArea:U,setLoadingArea:V}),K=(0,f.useRef)(kt),At=(0,f.useRef)({offset:0,stageIndex:0}),jt=(0,f.useRef)(!1),[Mt,Nt]=(0,f.useState)(!1),[Pt,Ft]=(0,f.useState)(!1),q=(0,f.useRef)(0);(0,f.useEffect)(()=>{K.current=kt},[kt]);let It=(0,f.useRef)(0),Lt=(0,f.useRef)(!1),J=(0,f.useRef)(0),Rt=(0,f.useRef)(0),Y=(0,f.useRef)(null),zt=(0,f.useRef)(!1),Bt=(0,f.useRef)(!1),Vt=(0,f.useRef)(null),X=(0,f.useRef)(null),Ht=(0,f.useRef)(null),Ut=(0,f.useRef)(0),Wt=(0,f.useRef)({}),Z=(0,f.useRef)(new Set),Q=(0,f.useRef)(new Map),Gt=(0,f.useRef)(new Set),Kt=(0,f.useRef)(new Set),qt=(0,f.useRef)({query:``,status:``,risk:``,origin:``,kind:``}),Jt=(0,f.useRef)(`||||`),$=(0,f.useRef)(0),Yt=(0,f.useRef)(void 0),{workListPage:Xt,workListFiltersRef:Zt,loadWorkListFilters:Qt,loadWorkListPage:$t,resetWorkListPage:en}=$e({api:c,operationsPeriod:L,operationsPeriodRef:R}),tn=(0,f.useRef)(!1),nn=(0,f.useCallback)(async(e=!0,t=!1,n=!1)=>{Vt.current?.(),Vt.current=null,X.current?.abort(),X.current=null,$.current+=1;for(let e of Q.current.values())e.abort();Q.current.clear(),Z.current.clear(),Kt.current.clear(),Wt.current={},de({}),pe({}),E({}),D({}),O({});let r=++q.current,i=It.current,a=_.current,o=Ie,s=()=>b(r,q.current)&&x(r,q.current,o,F(R.current));e&&(B(!0),V(`operations`)),W(null),U(null);try{if(t||n){let e,n=null;if(t){let t=await c.reconcileOpenWork(N,o);n=t.reconciliation,e=t}else e=await c.refreshProjection(N,o);if(!s())return;n!==null&&ut(n),y(e.operations),Yt.current=e.operations.summary.overview_metrics,Bt.current=!0,Ee(e.costs),zt.current=!0,j(null),e.dashboard&&mt({title:e.dashboard.title,repositoryName:e.dashboard.repository_name}),ft(e.projection.source_latest_at)}else{let[e,t]=await Promise.all([c.operations(o,`quick`,void 0,tn.current),N===`USD`?c.costMonitor(N,o,`summary`):Promise.resolve(null)]);if(!s())return;tn.current=!1,y(e),Yt.current=e.summary.overview_metrics,Bt.current=!1,t!==null&&(Ee(t),zt.current=!1,j(null)),ft(e.summary.source_latest_at)}}catch(e){if(!s())return;W(e instanceof Error?e.message:String(e)),U(a===`cost-monitor`?`costs`:`operations`)}finally{s()&&ne(i,It.current)&&Qe(!1),e&&s()&&(B(!1),V(e=>e===`operations`?null:e))}},[c,N,Ie]),rn=(0,f.useCallback)(async e=>{if(Bt.current||Lt.current||e?.aborted)return null;X.current?.abort();let t=e===void 0?new AbortController:null,n=e??t?.signal;if(n===void 0)return null;t!==null&&(X.current=t),Lt.current=!0,J.current+=1,V(`costs`),U(null);try{let e=++q.current,t=F(L),r=()=>b(e,q.current)&&x(e,q.current,t,F(R.current)),i=await c.operations(t,`detail`,n);return r()?(y(i),Bt.current=!0,i):null}catch(e){return n.aborted||S(e)?null:(W(e instanceof Error?e.message:String(e)),U(`operations`),null)}finally{t!==null&&X.current===t&&(X.current=null),Lt.current=!1,J.current=Math.max(0,J.current-1),J.current===0&&V(e=>e===`costs`?null:e)}},[c,L]),{loadOperationsEntityPage:an,loadOperationsLifecyclePage:on}=qe({api:c,entityFiltersRef:T,operationsPageAbortRef:Ht,operationsPageRequestVersionRef:Ut,operationsPeriod:L,operationsPeriodRef:R,refreshVersion:q,setEntityPage:se,setEntityPageKind:ce,setOperations:y}),sn=(0,f.useCallback)((e,t)=>{T.current=t,e===`changes`||e===`decisions`?on(e,0,t):an(e,0,t)},[an,on]),cn=(0,f.useCallback)(async e=>{if(v===null||Z.current.has(e))return;Z.current.add(e),Q.current.get(e)?.abort();let t=new AbortController;Q.current.set(e,t);let n=$.current,r=F(L);E(t=>({...t,[e]:{loading:!0,error:null}}));let i=Wt.current[e]??0;try{let a=await c.operationsBoard(r,e,i,qt.current,t.signal,10);if(t.signal.aborted||n!==$.current||r.from!==F(R.current).from||r.to!==F(R.current).to)return;y(e=>e===null?e:{...re(e,[a]),summary:e.summary}),de(t=>({...t,[e]:a.total})),pe(t=>({...t,[e]:a.totals_by_kind}));let o=i+a.prds.length+a.specs.length+a.tasks.length;Wt.current={...Wt.current,[e]:o}}catch(r){if(t.signal.aborted||n!==$.current||S(r))return;E(t=>({...t,[e]:{loading:!1,error:r instanceof Error?r.message:String(r)}}))}finally{n===$.current&&(Z.current.delete(e),Q.current.get(e)===t&&Q.current.delete(e),E(t=>t[e]?.error===null?{...t,[e]:{loading:!1,error:null}}:t))}},[c,v,L]),ln=(0,f.useCallback)(e=>{let t={...e,kind:e.kind??qt.current.kind??``},n=`${t.query}|${t.status}|${t.risk}|${t.origin??``}|${t.kind}`;if(n!==Jt.current){Jt.current=n,qt.current=t,$.current+=1;for(let e of Q.current.values())e.abort();Q.current.clear(),Z.current.clear(),Kt.current.clear(),Wt.current={},de({}),pe({}),E({}),D({}),O({}),y(e=>e===null?e:{...e,prds:[],specs:[],tasks:[],changes:[],summary:n===`||||`&&Yt.current!==void 0?{...e.summary,overview_metrics:Yt.current}:e.summary})}},[]),un=(0,f.useCallback)(async(e,t,n)=>{let r=nt(e,t);if(Gt.current.has(r))return;Gt.current.add(r);let i=$.current,a=F(L);D(e=>({...e,[r]:{items:n===0?[]:e[r]?.items??[],total:e[r]?.total??0,loading:!0,error:null}}));try{let o=await c.operationsBoard(a,e,n,{kind:t===`task`?`all-tasks`:t});if(i!==$.current||a.from!==F(R.current).from||a.to!==F(R.current).to)return;let s=t===`task`?o.tasks:t===`spec`?o.specs:o.prds;D(e=>({...e,[r]:{items:n===0?s:[...e[r]?.items??[],...s],total:o.total,loading:!1,error:null}}))}catch(e){if(i!==$.current||S(e))return;D(t=>({...t,[r]:{items:t[r]?.items??[],total:t[r]?.total??0,loading:!1,error:e instanceof Error?e.message:String(e)}}))}finally{Gt.current.delete(r)}},[c,L]),dn=(0,f.useCallback)(async(e,t,n)=>{let r=rt(e,t);if(Gt.current.has(r))return;Gt.current.add(r);let i=$.current,a=F(L);O(e=>({...e,[r]:{items:n===0?[]:e[r]?.items??[],total:e[r]?.total??0,loading:!0,error:null}}));try{let o=await c.operationsClassification(a,e,t,n);if(i!==$.current||a.from!==F(R.current).from||a.to!==F(R.current).to)return;let s=e===`task`?o.tasks:e===`spec`?o.specs:o.prds;O(e=>({...e,[r]:{items:n===0?s:[...e[r]?.items??[],...s],total:o.total,loading:!1,error:null}}))}catch(e){if(i!==$.current||S(e))return;O(t=>({...t,[r]:{items:t[r]?.items??[],total:t[r]?.total??0,loading:!1,error:e instanceof Error?e.message:String(e)}}))}finally{Gt.current.delete(r)}},[c,L]),fn=(0,f.useCallback)(e=>{let t={...qt.current,...e},n=F(L);return{prepare:async()=>{let e=await Promise.all(it.map(e=>c.operationsBoard(n,e,0,t))),r=e=>[...e.prds.map(({kind:e,...t})=>({kind:`prd`,...t})),...e.specs.map(({kind:e,...t})=>({kind:`spec`,...t})),...e.tasks.map(e=>({kind:`task`,...e}))];return{totalRows:e.reduce((e,t)=>e+t.total,0),pages:async function*(){for(let i of e){let e=i,a=0;for(;;){let i=r(e);if(i.length===0||(a+=i.length,yield i,a>=e.total))break;e=await c.operationsBoard(n,e.stage,a,t)}}}}}}},[c,L]),pn=tt({api:c,operationsPeriod:L});(0,f.useEffect)(()=>{if(h!==`operations`||v===null)return;let e=!1,t=async()=>{if(e)return;let t=it.filter(e=>!Kt.current.has(e)&&!Z.current.has(e));for(let n=0;n<t.length&&!e;n+=3){let e=t.slice(n,n+3);for(let t of e)Kt.current.add(t);await Promise.all(e.map(e=>cn(e)))}},n=typeof window.requestIdleCallback==`function`?{kind:`idle`,id:window.requestIdleCallback(()=>void t())}:{kind:`timeout`,id:window.setTimeout(()=>void t(),0)};return()=>{e=!0,n.kind===`idle`?window.cancelIdleCallback(n.id):window.clearTimeout(n.id)}},[h,cn,v]);let mn=async e=>{e&&ut(null),st(e?`reconciling`:`refreshing`),await nn(!1,e,!e),st(null)};Ge({api:c,costLocale:M,currency:N,dashboardView:h,loadOperationsDetails:rn,operations:v,operationsDetailAbortRef:X,operationsDetailCancelRef:Vt,operationsPageAbortRef:Ht,pathname:We,pricing:ze,refresh:nn,refreshVersion:q,setError:W,setFxRate:Ue,setPathname:z,setPricing:Be});let hn=e=>{window.history.pushState(null,``,e),z(e),window.scrollTo({left:0,top:0})},gn=(0,f.useCallback)(async()=>{Y.current?.abort();let e=new AbortController;Y.current=e;let t=++Rt.current,n=F(L);J.current+=1,V(`costs`),U(null);try{let r=await c.costMonitor(N,n,`summary`,e.signal),i=F(R.current);if(!te({aborted:e.signal.aborted,currentCurrency:Pe.current,currentPeriod:i,currentRequestVersion:Rt.current,requestVersion:t,requestedCurrency:N,requestedPeriod:n}))return;Ee(r),zt.current=!0,j(null)}catch(n){if(e.signal.aborted||t!==Rt.current)return;W(n instanceof Error?n.message:String(n)),U(`costs`)}finally{J.current=Math.max(0,J.current-1),J.current===0&&V(e=>e===`costs`?null:e),Y.current===e&&(Y.current=null)}},[c,N,L]);(0,f.useEffect)(()=>{N!==`USD`||k?.currency===N||gn()},[k?.currency,N,gn]),(0,f.useEffect)(()=>{h!==`cost-monitor`&&L.preset!==`all`||Y.current!==null||ee({costsLoaded:zt.current,currency:N,snapshotCurrency:k?.currency})&&gn()},[k?.currency,N,h,gn,L.preset]);let _n=(0,f.useCallback)(async(e=!1,t=!1)=>{if(jt.current||(t&&(At.current={offset:0,stageIndex:0},K.current=[],Tt([]),Nt(!0)),At.current.stageIndex>=at.length))return K.current;jt.current=!0,Ft(!0);try{do{let t=At.current,n=at[t.stageIndex];if(n===void 0)break;let r=await c.operationsBoard({from:null,to:null},n,t.offset,{kind:`all-tasks`},void 0,10),i=Ne({cursor:t,page:r,tasks:K.current});if(K.current=i.tasks,Tt(K.current),At.current=i.cursor,r.tasks.length>0&&!e)break}while(At.current.stageIndex<at.length);return Nt(At.current.stageIndex<at.length),K.current}finally{jt.current=!1,Ft(!1)}},[c,Tt]),vn=async e=>{if(g(e),window.scrollTo({left:0,top:0}),e===`cost-monitor`?ee({costsLoaded:zt.current,currency:N,snapshotCurrency:k?.currency})&&gn():Y.current?.abort(),e===`traceability`){let e=kt;if(e.length===0){let t=$.current;if(e=await _n(!1,!0),t!==$.current)return;Tt(e)}let t=e.toSorted((e,t)=>Date.parse(t.finished_at??t.updated_at)-Date.parse(e.finished_at??e.updated_at)),n=t.find(e=>e.status===`completed`)??t[0];n&&(xt(n.id),G(n.id));return}St(null),wt(null)},yn=(0,m.jsx)(`div`,{className:`dashboard-capability-shell dashboard-capability-shell--${h??`initial`}`,children:(0,m.jsx)(Te,{activeView:h,locale:M,onChange:e=>void vn(e)})}),bn=(0,f.useMemo)(()=>new Map((A??k)?.runs.map(e=>[e.run_id,N===`USD`?e.estimated_usd:e.estimated_brl])??[]),[k,N,A]),xn=(0,f.useMemo)(()=>{let e=A??k;return e?.currency===N?N===`USD`?e.overview.estimated_usd:e.overview.estimated_brl:null},[k,N,A]),Sn=(0,f.useMemo)(()=>{let e=A??k;if(e?.currency===N)return{day:e.groups.daily,month:e.groups.monthly,year:e.groups.annual}},[k,N,A]),Cn=()=>{W(null),H===`costs`?gn():H===`traceability`&&bt?G(bt):H===`operations`&&v!==null?rn():nn()},wn=_e({api:c,costLocale:M,fxRate:He,navigate:hn,pathname:We,pricing:ze,refresh:nn,setFxRate:Ue,setPricing:Be}),Tn=Ze||N===`USD`&&k?.currency!==N,En=v===null&&Ke;(0,f.useEffect)(()=>{if(!e||!En||n){a(!1);return}let t=window.setTimeout(()=>a(!0),je);return()=>window.clearTimeout(t)},[En,n,e]);let Dn=Me({snapshotUpdating:e,initialDataPending:En,dismissed:n,delayElapsed:i})?(0,m.jsxs)(`div`,{"aria-live":`polite`,className:`app-notice app-snapshot-status`,role:`status`,children:[(0,m.jsx)(`span`,{children:`Exibindo o último snapshot local validado. Os dados canônicos estão sendo atualizados em segundo plano e estarão atuais na próxima abertura.`}),(0,m.jsx)(`button`,{"aria-label":M===`pt-BR`?`Fechar aviso de atualização do snapshot`:`Dismiss snapshot update notice`,onClick:()=>r(!0),type:`button`,children:`×`})]}):null,On=v;return(0,m.jsxs)(oe,{error:ct,globalLoadingPending:Tn,locale:M,onRefresh:()=>void nn(),operations:v,snapshotNotice:Dn,setupRoute:wn,children:[(0,m.jsxs)(ae,{pending:Tn,children:[ct?(0,m.jsxs)(`div`,{"aria-live":`assertive`,className:`app-warning app-error`,role:`alert`,children:[(0,m.jsx)(`span`,{children:ct}),H?(0,m.jsx)(`button`,{onClick:Cn,type:`button`,children:M===`pt-BR`?`Tentar novamente`:`Try again`}):null,(0,m.jsx)(`button`,{"aria-label":M===`pt-BR`?`Fechar erro`:`Dismiss error`,onClick:()=>W(null),type:`button`,children:`×`})]}):null,(0,m.jsx)(s,{alternateContent:we({costs:k,costLocale:M,currency:N,dashboardView:h,failedArea:H,lastUpdatedAt:dt,loadCostDetail:l,loadCostReadModelPage:u,loadCostRunPage:d,loadCostGroupPage:p,loadingArea:et,onActiveDataChange:j,onCurrencyChange:P,onLoadingChange:Xe,onLocaleChange:I,onLoadMoreTraceTasks:_n,onOpenTrace:e=>void G(e),onRefresh:()=>st(`choose`),onRetry:Cn,onSelectTraceTask:e=>{xt(e),G(e)},onOpenTraceChange:vt,onOpenTraceMacro:yt,operations:On,selectedTraceTaskId:bt,trace:Et,traceLoadingTaskId:Ot,traceTasksHasMore:Mt,traceTasksLoading:Pt,traceTasks:kt}),capabilityNavigation:yn,boardTotals:le,boardKindTotals:fe,boardExportSource:fn,detailExportSource:pn,boardStates:ve,data:On,datePreset:L.preset,dateRange:L.range,entityPage:C,dashboardTitle:pt.title,repositoryName:pt.repositoryName,loading:Ke,locale:M,currency:N,factualCostTotal:xn,factualCostPeriods:Sn,onLoadingChange:Ye,resolveRunCost:k===null?void 0:e=>bn.get(e)??null,onLocaleChange:I,onDetailDataRequest:e=>{let t=e===`conversations`?`conversations`:e===`executions`?`executions`:e===`runs`?`runs`:null;t===null?e===`changes`||e===`decisions`?on(e):rn():an(t)},onLoadMacroMetrics:()=>void rn(),onEntityPageChange:e=>{w===`changes`||w===`decisions`?on(w,e):an(w,e)},onEntityFiltersChange:sn,onBoardFiltersChange:ln,onWorkListFiltersChange:Qt,onWorkListPageChange:e=>void $t(Zt.current,e),onBoardTypeChange:e=>ln({...qt.current,kind:e===`all`?``:e}),onWorkListTypeChange:e=>void $t({...Zt.current,kind:e===`all`?``:e}),onLoadMoreBoard:e=>void cn(e),workListPage:Xt,statusPage:(e,t)=>ye[nt(e,t)],onLoadStatusPage:(e,t,n)=>void un(e,t,n),classificationPage:(e,t)=>Ce[rt(e,t)],onLoadClassificationPage:(e,t,n)=>void dn(e,t,n),onOpenDocument:(e,t)=>void _t(e,t),onOpenTask:G,onPriorityChange:async e=>{try{await c.saveWorkPriority(e)}catch(e){throw W(e instanceof Error?e.message:String(e)),e}},onDateChange:(e,t)=>{Bt.current=!1,Vt.current?.(),Vt.current=null,X.current?.abort(),X.current=null,Ht.current?.abort(),Ht.current=null,en(),++Ut.current,$.current+=1;for(let e of Q.current.values())e.abort();Q.current.clear(),Z.current.clear(),Kt.current.clear(),Wt.current={},de({}),pe({}),E({}),D({}),O({}),++q.current,Y.current?.abort(),Y.current=null,++Rt.current,se({offset:0,total:null,loading:!1,error:null}),zt.current=!1,Ee(null),j(null),B(!0),It.current+=1,Qe(!0),V(`operations`),Fe({preset:e,range:t})},onRefresh:()=>st(`choose`),settings:(0,m.jsx)(De,{costCalculationGuidePath:ge,currency:N,locale:M,onCurrencyChange:P,onHelpOpen:()=>Re(!0),onNavigate:hn,pricingSetupPath:me,projectSetupPath:he})}),(0,m.jsx)(ue,{closeDocument:ht,costLocale:M,documentDetail:gt,helpOpen:Le,loadingArea:h===`cost-monitor`&&k===null?null:et,operations:On,reconciliationResult:lt,refreshDialog:ot,showTrace:h===`traceability`,trace:Et,traceLink:Dt,traceLoadingTaskId:Ot,onCloseHelp:()=>Re(!1),onCloseTrace:()=>St(null),onDismissReconciliation:()=>ut(null),onOpenDocument:(e,t)=>void _t(e,t),onOpenTrace:e=>void G(e),onOpenTraceChange:vt,onOpenTraceMacro:yt,onRefreshCancel:()=>st(null),onRefreshFromDialog:e=>void mn(e),setTraceLink:e=>Ct(e)})]}),Tn?(0,m.jsx)(ie,{}):null]})}var H=document.getElementById(`root`);if(!H)throw Error(`Elemento #root não encontrado`);(0,p.createRoot)(H).render((0,m.jsx)(f.StrictMode,{children:(0,m.jsx)(V,{})}));export{Pe as t};
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
# Estratégia de Growth Bootstrap — 90 Dias
|
|
2
|
-
|
|
3
|
-
**Data:** 22 de agosto de 2026
|
|
4
|
-
**Horizonte:** 90 dias
|
|
5
|
-
**Estado:** plano operacional; não é projeção realizada nem autorização para campanhas, contratações ou despesas externas.
|
|
6
|
-
|
|
7
|
-
## Decisão estratégica
|
|
8
|
-
|
|
9
|
-
Nos próximos 90 dias, a Zaip deve priorizar **repetibilidade comercial e implantação com caixa positivo**, não escala ampla. O foco é validar uma oferta específica para agências de performance que recebem leads de mídia paga e usam o WhatsApp para vender.
|
|
10
|
-
|
|
11
|
-
O ponto de partida observado é um cliente pagante de **R$ 5 mil de MRR**. O case apresentado no pitch mostra resultado relevante, mas uma única conta não comprova repetibilidade por segmento, canal ou coorte. Portanto, ROI não será prometido como resultado padrão.
|
|
12
|
-
|
|
13
|
-
## Resultado-alvo conservador
|
|
14
|
-
|
|
15
|
-
| Cenário | Clientes ativos no dia 90 | MRR ao final do período | Leitura |
|
|
16
|
-
|---|---:|---:|---|
|
|
17
|
-
| Mínimo aceitável | 2 | R$ 7 mil | Um novo contrato pago; tese ainda em validação. |
|
|
18
|
-
| Base conservadora | 3 | R$ 9 mil | Dois novos contratos de R$ 2 mil/mês. |
|
|
19
|
-
| Alvo | 4 | R$ 10–11 mil | Dois contratos de R$ 2 mil e um de R$ 1–2 mil/mês. |
|
|
20
|
-
|
|
21
|
-
As faixas acima são cenários de planejamento. Elas pressupõem manutenção do cliente atual, ausência de churn e recebimento normal das mensalidades.
|
|
22
|
-
|
|
23
|
-
## Oferta inicial padronizada
|
|
24
|
-
|
|
25
|
-
**Proposta de valor**
|
|
26
|
-
|
|
27
|
-
> A Zaip transforma o WhatsApp em uma operação comercial 24/7: responde, qualifica, acompanha e encaminha oportunidades para fechamento.
|
|
28
|
-
|
|
29
|
-
**Pacote de entrada**
|
|
30
|
-
|
|
31
|
-
- R$ 2 mil/mês + setup pago antes do início;
|
|
32
|
-
- implantação de até 30 dias, com escopo e integrações definidos na proposta;
|
|
33
|
-
- configuração do fluxo, base de conhecimento, regras de qualificação e handoff humano;
|
|
34
|
-
- revisão de resultados no dia 30;
|
|
35
|
-
- sem customizações fora do escopo durante o piloto.
|
|
36
|
-
|
|
37
|
-
O setup pago evita que a Zaip financie a implantação do cliente. Caso a operação exija trabalho não padronizado, a proposta deve separar esse valor da mensalidade.
|
|
38
|
-
|
|
39
|
-
## ICP e desqualificação
|
|
40
|
-
|
|
41
|
-
### ICP inicial
|
|
42
|
-
|
|
43
|
-
- Agência de performance no Brasil;
|
|
44
|
-
- recebe leads de mídia paga pelo WhatsApp;
|
|
45
|
-
- já possui vendedor, closer ou responsável por fechamento;
|
|
46
|
-
- perde velocidade ou consistência no atendimento/follow-up;
|
|
47
|
-
- consegue disponibilizar dados mínimos de origem, atendimento e conversão.
|
|
48
|
-
|
|
49
|
-
### Não priorizar nos 90 dias
|
|
50
|
-
|
|
51
|
-
- Empresas sem volume de leads ou sem processo comercial mínimo;
|
|
52
|
-
- projetos que dependem de produto novo, integração inédita ou customização extensa;
|
|
53
|
-
- clientes que exigem garantia de receita;
|
|
54
|
-
- segmentos diferentes do ICP antes de existirem dois casos comparáveis.
|
|
55
|
-
|
|
56
|
-
## Motores de aquisição
|
|
57
|
-
|
|
58
|
-
### 1. Outbound do founder — motor de aprendizagem
|
|
59
|
-
|
|
60
|
-
O fundador conduz o diagnóstico e a venda para aprender linguagem, dor, objeções e critérios de compra. A abordagem oferece uma avaliação objetiva do funil de WhatsApp, não uma promessa genérica de IA.
|
|
61
|
-
|
|
62
|
-
Meta semanal:
|
|
63
|
-
|
|
64
|
-
| Atividade | Meta |
|
|
65
|
-
|---|---:|
|
|
66
|
-
| Contas ICP pesquisadas | 25 |
|
|
67
|
-
| Contatos personalizados enviados | 25 |
|
|
68
|
-
| Conversas qualificadas | 5 |
|
|
69
|
-
| Diagnósticos realizados | 2 |
|
|
70
|
-
| Propostas enviadas | 1–2 |
|
|
71
|
-
|
|
72
|
-
### 2. Parceiros de indicação — motor de distribuição
|
|
73
|
-
|
|
74
|
-
Mapear consultores comerciais, gestores de tráfego e agências complementares que já atendem o ICP. Nos 90 dias, os acordos devem ser manuais e simples: comissão somente após o recebimento do primeiro pagamento do cliente indicado. O objetivo é aprender qualidade e velocidade do canal, não criar um programa de parceria completo.
|
|
75
|
-
|
|
76
|
-
### 3. Prova de resultado — motor de conversão
|
|
77
|
-
|
|
78
|
-
Transformar o caso atual e os próximos pilotos em provas comparáveis. Cada case deve informar contexto, volume, período, baseline, intervenções, resultado observado e limitações. Não usar ganhos estimados como se fossem receita realizada.
|
|
79
|
-
|
|
80
|
-
## Plano mensal
|
|
81
|
-
|
|
82
|
-
### Mês 1 — Provar a oferta
|
|
83
|
-
|
|
84
|
-
**Objetivo:** fechar um cliente de R$ 2 mil/mês e tornar a implantação repetível.
|
|
85
|
-
|
|
86
|
-
- Definir lista de 100 contas ICP e cadência de outbound;
|
|
87
|
-
- criar diagnóstico comercial, proposta e checklist de onboarding;
|
|
88
|
-
- registrar baseline antes do go-live;
|
|
89
|
-
- fechar um cliente com setup pago;
|
|
90
|
-
- documentar objeções, motivo de ganho/perda e tempo de implantação.
|
|
91
|
-
|
|
92
|
-
**Gate do mês:** há um contrato novo pago e o onboarding pode ser concluído sem trabalho fora do escopo.
|
|
93
|
-
|
|
94
|
-
### Mês 2 — Repetir com evidência
|
|
95
|
-
|
|
96
|
-
**Objetivo:** fechar o segundo cliente de R$ 2 mil/mês e validar a retenção inicial.
|
|
97
|
-
|
|
98
|
-
- Repetir a mesma oferta e o mesmo ICP;
|
|
99
|
-
- iniciar cinco conversas com potenciais parceiros;
|
|
100
|
-
- publicar uma prova comercial com método e limitações;
|
|
101
|
-
- reduzir o tempo de implantação identificando tarefas repetitivas;
|
|
102
|
-
- realizar a revisão de 30 dias do primeiro novo cliente.
|
|
103
|
-
|
|
104
|
-
**Gate do mês:** dois clientes novos ou um novo cliente e pipeline qualificado suficiente para compensar o atraso, sem aumento de customização.
|
|
105
|
-
|
|
106
|
-
### Mês 3 — Escolher o canal vencedor
|
|
107
|
-
|
|
108
|
-
**Objetivo:** alcançar o cenário base de três clientes ativos ou o alvo de quatro.
|
|
109
|
-
|
|
110
|
-
- Comparar outbound e indicação por reuniões, propostas, fechamentos, MRR e esforço do founder;
|
|
111
|
-
- fechar um terceiro contrato somente se o onboarding mantiver o padrão;
|
|
112
|
-
- decidir o ICP e o canal para o trimestre seguinte;
|
|
113
|
-
- formalizar playbook mínimo de venda, onboarding e revisão de resultado;
|
|
114
|
-
- manter investimento em aquisição dentro do teto definido.
|
|
115
|
-
|
|
116
|
-
**Gate do período:** continuar com o canal que mostrou melhor combinação de fechamento, velocidade de ativação e esforço de implantação. Não escalar mídia ou contratação fixa sem esse sinal.
|
|
117
|
-
|
|
118
|
-
## Caixa e guardrails
|
|
119
|
-
|
|
120
|
-
| Regra | Limite inicial |
|
|
121
|
-
|---|---|
|
|
122
|
-
| Nova despesa de aquisição | R$ 500–1.000 por mês, em testes reversíveis |
|
|
123
|
-
| Mídia paga | Não iniciar antes de conversão repetível no ICP |
|
|
124
|
-
| Contratação fixa | Não realizar no horizonte de 90 dias |
|
|
125
|
-
| Setup | Cobrado antecipadamente |
|
|
126
|
-
| Customização | Escopo e preço separados da mensalidade |
|
|
127
|
-
|
|
128
|
-
Esses limites preservam o bootstrap. Devem ser revistos somente com dados de margem, custo de implantação, churn e capacidade, que ainda não estão demonstrados neste plano.
|
|
129
|
-
|
|
130
|
-
## Painel semanal
|
|
131
|
-
|
|
132
|
-
| Etapa | Métrica | Definição |
|
|
133
|
-
|---|---|---|
|
|
134
|
-
| Aquisição | Contas ICP contatadas | Contas que atendem aos critérios definidos. |
|
|
135
|
-
| Qualificação | Conversas e diagnósticos | Reuniões com dor e contexto comercial verificáveis. |
|
|
136
|
-
| Conversão | Propostas, fechamentos e taxa de ganho | Pipeline comercial por período. |
|
|
137
|
-
| Receita | MRR novo e MRR total | Receita recorrente contratada, sem confundir setup com MRR. |
|
|
138
|
-
| Implantação | Dias até ativação | Da confirmação do setup ao go-live. |
|
|
139
|
-
| Uso | Leads atendidos e tempo de primeira resposta | Indicadores operacionais do cliente. |
|
|
140
|
-
| Resultado | Qualificados, agendamentos e vendas atribuídas | Sempre com período e método explícitos. |
|
|
141
|
-
| Retenção | Risco de churn e expansão | Sinais qualitativos e financeiros por conta. |
|
|
142
|
-
|
|
143
|
-
## Experimento prioritário
|
|
144
|
-
|
|
145
|
-
**Hipótese:** agências de performance com leads de mídia paga converterão uma oferta de implantação assistida de IA Comercial para WhatsApp em contratos de R$ 2 mil/mês quando receberem um diagnóstico concreto de velocidade, atendimento e follow-up.
|
|
146
|
-
|
|
147
|
-
| Item | Definição |
|
|
148
|
-
|---|---|
|
|
149
|
-
| População | 100 agências de performance que atendam ao ICP inicial. |
|
|
150
|
-
| Alavanca | Outbound personalizado oferecendo diagnóstico e demonstração contextual. |
|
|
151
|
-
| Métrica primária | Novos contratos pagos. |
|
|
152
|
-
| Guardrails | Setup pago, escopo padronizado, sem garantia de receita e sem customização não precificada. |
|
|
153
|
-
| Duração | 30 dias por ciclo; três ciclos no horizonte. |
|
|
154
|
-
| Critério de decisão | Manter o ICP/canal se gerar contrato pago sem ampliar esforço de implantação; caso contrário, revisar mensagem, segmentação ou oferta. |
|
|
155
|
-
| Responsável | Founder / Growth. |
|
|
156
|
-
|
|
157
|
-
## Condição para escalar depois dos 90 dias
|
|
158
|
-
|
|
159
|
-
Só ampliar mídia, parceiros ou equipe se houver, ao mesmo tempo:
|
|
160
|
-
|
|
161
|
-
1. ao menos três clientes ativos;
|
|
162
|
-
2. onboarding controlado e documentado;
|
|
163
|
-
3. pelo menos um canal repetível;
|
|
164
|
-
4. evidência de uso e retenção após 30 dias;
|
|
165
|
-
5. entendimento de margem, custo de implantação e capacidade.
|
|
166
|
-
|
|
167
|
-
## Fonte de referência
|
|
168
|
-
|
|
169
|
-
- `C:/Users/david/OneDrive/Zaip/Apresentações/Pitch - Zaip - 2026 - v21.pptx`, especialmente os slides 9 a 15. O material foi usado para contexto de proposta, preços, caso inicial e ambição; não constitui validação independente das fontes, estimativas ou projeções citadas nele.
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# Estratégia de Growth — Zaip
|
|
2
|
-
|
|
3
|
-
**Status:** draft estratégico
|
|
4
|
-
**Decisão norteadora:** provar repetibilidade comercial para PMEs e parceiros, preservando eficiência e evidência.
|
|
5
|
-
|
|
6
|
-
## Tese
|
|
7
|
-
|
|
8
|
-
A Zaip cresce ao melhorar a conversão de leads que já chegam pelo WhatsApp e ao criar distribuição por agências e consultores que monetizam implantação e recorrência.
|
|
9
|
-
|
|
10
|
-
## Alavancas prioritárias
|
|
11
|
-
|
|
12
|
-
- Conversão de tráfego pago existente em PMEs com fit.
|
|
13
|
-
- Cases que conectem operação, processo e resultado observável.
|
|
14
|
-
- Programa de parceiros com oferta, onboarding e retenção claros.
|
|
15
|
-
- Instrumentação de funil: origem, qualificação, oportunidade, venda, retenção e expansão.
|
|
16
|
-
|
|
17
|
-
## Experimentos candidatos
|
|
18
|
-
|
|
19
|
-
| Hipótese | Métrica primária | Guardrail |
|
|
20
|
-
|---|---|---|
|
|
21
|
-
| Demonstração do fluxo no WhatsApp aumenta qualificação. | taxa de lead qualificado | custo por lead e taxa de comparecimento |
|
|
22
|
-
| Case contextualizado aumenta confiança comercial. | conversão para reunião | qualidade do lead |
|
|
23
|
-
| Oferta de parceiro aumenta distribuição. | parceiros ativos com pipeline | retenção e suporte por parceiro |
|
|
24
|
-
|
|
25
|
-
## Lacunas
|
|
26
|
-
|
|
27
|
-
Não há metas numéricas, baseline de funil ou custos de aquisição fornecidos. Definir essas medidas antes de classificar experimentos como vencedores.
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
# Estratégia de marketing ZAIP-AIOS — 90 dias
|
|
2
|
-
|
|
3
|
-
**Data do plano:** 22 de agosto de 2026
|
|
4
|
-
**Horizonte:** semanas 1–12
|
|
5
|
-
**Status:** plano interno para validação; não autoriza publicação, contato comercial, coleta de dados pessoais ou promessa comercial.
|
|
6
|
-
|
|
7
|
-
## 1. Contexto, evidências e limites
|
|
8
|
-
|
|
9
|
-
### Evidências confirmadas no README
|
|
10
|
-
|
|
11
|
-
- O ZAIP-AIOS se apresenta como um sistema operacional de execução autônoma com **23 agentes especializados em 6 squads**, operando no Codex.
|
|
12
|
-
- O fluxo relaciona planejamento, execução, revisão, testes, validação e critérios de aceite; uma Task não é concluída somente porque um agente terminou.
|
|
13
|
-
- A fonte de verdade é Git-native: requisitos, decisões, implementações, testes, revisões e evidências permanecem no repositório. O Dashboard usa um SQLite local, descartável e reconstruível como camada de consulta.
|
|
14
|
-
- O Dashboard reúne Kanban, custos, cobertura, bloqueios e rastreabilidade entre PRD, Requirements, SPEC, Change, Task, Execution, Runs e Evidence. Telemetria ausente continua `unknown` ou `null`, sem ser exibida como zero.
|
|
15
|
-
- O README informa uma comparação de amostra: custo médio por Task de R$ 67 para R$ 44 (redução de 34,3%) e custo médio por hora de R$ 410 para R$ 154 (62,4%). O próprio documento restringe esses resultados à amostra, a coortes comparáveis e à metodologia declarada; eles não podem ser generalizados a todo modelo, repositório ou tarefa.
|
|
16
|
-
- O produto também descreve capacidade para Operações, Growth, Marketing, Branding e Vendas, embora sua origem tenha forte foco em desenvolvimento de software.
|
|
17
|
-
|
|
18
|
-
**Fontes internas:** [README.md](../README.md), seções “Visão rápida”, “Dashboard Local”, “Qualidade e evidências” e “Economia medida e meta central por tarefa” (snapshot consultado em 22/08/2026).
|
|
19
|
-
|
|
20
|
-
### Hipóteses e assunções a validar
|
|
21
|
-
|
|
22
|
-
- **H1 — dor prioritária:** líderes técnicos que já usam agentes de código percebem retrabalho, perda de contexto ou dificuldade de auditar entregas como problema relevante.
|
|
23
|
-
- **H2 — entrada:** uma demonstração de uma Task real, com critérios de aceite e evidência, comunica valor melhor que uma apresentação de todos os 23 agentes.
|
|
24
|
-
- **H3 — conversão:** consultorias de software e squads técnicos aceitam um piloto limitado quando há uma definição prévia de sucesso e não há promessa de economia universal.
|
|
25
|
-
- **H4 — canal:** conteúdo técnico em GitHub, LinkedIn e comunidades de engenharia alcança o ICP inicial com qualidade suficiente para entrevistas e pilotos. Esta é uma hipótese de canal, não uma métrica observada.
|
|
26
|
-
- **Assunção de marca:** não foi fornecido Brandbook aprovado para este plano. A aplicação de identidade visual, tom definitivo e ativos gráficos permanecem pendentes de input aprovado.
|
|
27
|
-
|
|
28
|
-
## 2. Objetivo para os próximos 90 dias
|
|
29
|
-
|
|
30
|
-
Validar uma proposta de valor repetível para equipes técnicas que usam agentes de IA: **entregas governadas, rastreáveis e verificáveis no Git**, com um caminho mensurável de interesse para ativação/piloto.
|
|
31
|
-
|
|
32
|
-
Ao fim das 12 semanas, a decisão é escolher uma mensagem, um segmento prioritário e um formato de demonstração com evidência suficiente para repetir a abordagem — ou documentar que a hipótese não se sustentou. O plano não estabelece meta de receita, economia garantida ou automação sem supervisão humana.
|
|
33
|
-
|
|
34
|
-
## 3. Público e priorização
|
|
35
|
-
|
|
36
|
-
### ICP prioritário
|
|
37
|
-
|
|
38
|
-
**Líder técnico (CTO, engineering manager, tech lead ou founder técnico) de equipe de 5–30 pessoas que já usa Codex ou agentes de IA em repositórios Git.**
|
|
39
|
-
|
|
40
|
-
Sinais de aderência: revisão de PRs, requisitos e testes importam; há demanda por recuperar decisões e evidências; existe alguém capaz de conduzir uma instalação/piloto técnico; a equipe quer analisar custo, cobertura ou rework sem confundir ausência de dados com zero.
|
|
41
|
-
|
|
42
|
-
### Segmento de foco inicial
|
|
43
|
-
|
|
44
|
-
**Software houses e consultorias de desenvolvimento** com entregas recorrentes a clientes. A mensagem deve enfatizar previsibilidade, revisão e prova do que foi entregue; não afirmar redução de margem, prazo ou custo antes de medição no contexto do cliente.
|
|
45
|
-
|
|
46
|
-
### Segmentos posteriores
|
|
47
|
-
|
|
48
|
-
1. Squads internos de produto/engenharia que necessitam manter o histórico de decisões e evidências no Git.
|
|
49
|
-
2. Times de Operações, Growth, Marketing, Branding e Vendas que tenham trabalho definido, autoridade de execução e condições para usar o fluxo ZAIP; validar em separado, sem extrapolar a evidência de desenvolvimento.
|
|
50
|
-
3. Organizações com requisitos de auditoria e governança, somente após confirmar segurança, permissões, implantação e necessidades regulatórias específicas.
|
|
51
|
-
|
|
52
|
-
### Exclusões iniciais
|
|
53
|
-
|
|
54
|
-
Não priorizar equipes sem responsável técnico, sem repositório Git ou que busquem apenas geração instantânea de código sem critérios de aceite, revisão e evidência.
|
|
55
|
-
|
|
56
|
-
## 4. Posicionamento e mensagens
|
|
57
|
-
|
|
58
|
-
### Posicionamento proposto
|
|
59
|
-
|
|
60
|
-
> ZAIP-AIOS organiza o trabalho com agentes de IA para que planejamento, execução, validação e evidências permaneçam conectados no Git até os critérios de aceite serem atendidos.
|
|
61
|
-
|
|
62
|
-
Evitar “autonomia total”, “substitui desenvolvedores” e qualquer promessa de custo/tempo universal. Preferir **autonomia governada e verificável**; a decisão humana, a revisão e a qualidade são parte do fluxo.
|
|
63
|
-
|
|
64
|
-
| Dor percebida | Mensagem de campanha | Demonstração/evidência necessária |
|
|
65
|
-
| --- | --- | --- |
|
|
66
|
-
| “A IA produz código, mas não sei se a entrega está pronta.” | Uma Task só encerra com critérios de aceite e evidências objetivas de qualidade. | Fluxo de Task com checks, review/teste e Evidence vinculada. |
|
|
67
|
-
| “Perdemos contexto e repetimos decisões.” | Intenção, decisões, execução e resultado mantêm relações rastreáveis no repositório. | Navegação de PRD/Task/Execution/Evidence e histórico Git. |
|
|
68
|
-
| “Coordenar especialistas virou trabalho manual.” | O sistema organiza dependências e encaminha o trabalho ao especialista necessário. | Demonstração de cadeia limitada a um caso real; sem prometer que toda demanda é automática. |
|
|
69
|
-
| “Não consigo discutir o custo real do trabalho com IA.” | Custos, duração e cobertura podem ser observados por unidade de trabalho; telemetria incompleta permanece explícita. | Cost Monitor com origem e lacunas de cobertura visíveis. |
|
|
70
|
-
|
|
71
|
-
### Mensagens por estágio
|
|
72
|
-
|
|
73
|
-
- **Descoberta:** “IA no repositório precisa de uma definição de pronto, não apenas de uma resposta gerada.”
|
|
74
|
-
- **Consideração:** “Conecte requisitos, execução, testes e evidências em uma trilha Git-native.”
|
|
75
|
-
- **Piloto:** “Escolha uma Task real, defina o baseline e compare o fluxo completo de conclusão.”
|
|
76
|
-
- **Prova:** “Relate o resultado observado, a cobertura e os limites da amostra; não transforme uma coorte em promessa.”
|
|
77
|
-
|
|
78
|
-
## 5. Funil e canais
|
|
79
|
-
|
|
80
|
-
```text
|
|
81
|
-
Conteúdo técnico / demonstração
|
|
82
|
-
↓
|
|
83
|
-
Diagnóstico de aderência (dor, Git, uso de agentes, autoridade)
|
|
84
|
-
↓
|
|
85
|
-
Demo orientada a uma Task e critérios de aceite
|
|
86
|
-
↓
|
|
87
|
-
Piloto limitado com baseline, qualidade e cobertura definidos
|
|
88
|
-
↓
|
|
89
|
-
Relato de resultado observado ou aprendizado de não-aderência
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
| Etapa | Canal principal | Ativo | Chamada para ação | Sinal de avanço |
|
|
93
|
-
| --- | --- | --- | --- | --- |
|
|
94
|
-
| Descoberta | GitHub, LinkedIn, comunidades técnicas | Post curto, diagrama e vídeo de até 3 minutos | Ver a demonstração / responder à pergunta de dor | Visita qualificada, comentário técnico ou inscrição voluntária |
|
|
95
|
-
| Consideração | Página/README e conversa técnica | Guia de avaliação e demo de fluxo | Solicitar diagnóstico | Perfil confirma repositório, uso de agentes e responsável técnico |
|
|
96
|
-
| Piloto | Sessão remota autorizada | Plano de uma Task, baseline e critérios | Iniciar piloto limitado | Escopo, critérios e fonte de dados aceitos |
|
|
97
|
-
| Prova | Estudo de caso aprovado | Caso com método, população e limites | Avaliar fluxo semelhante | Caso revisado pelo participante; nenhum dado confidencial publicado sem autorização |
|
|
98
|
-
|
|
99
|
-
Os canais são próprios ou comunitários; qualquer publicação, mensagem direta, formulário, analytics externo ou contato depende de autorização operacional específica.
|
|
100
|
-
|
|
101
|
-
## 6. Roadmap de execução
|
|
102
|
-
|
|
103
|
-
### Semanas 1–4 — fundação e diagnóstico
|
|
104
|
-
|
|
105
|
-
1. Consolidar esta narrativa em uma página de mensagem: problema, fluxo, prova disponível e limites.
|
|
106
|
-
2. Criar uma demo de até três minutos baseada em uma Task de exemplo, mostrando critérios de aceite, execução, verificação e evidência — sem dados sensíveis.
|
|
107
|
-
3. Elaborar roteiro de diagnóstico com cinco perguntas: uso atual de agentes, tipo de trabalho, falha de qualidade/contexto, processo de revisão e capacidade de piloto.
|
|
108
|
-
4. Preparar template de piloto: hipótese, baseline equivalente, fontes de custo/tempo, quality floor, cobertura e condições de interrupção.
|
|
109
|
-
5. Entrevistar apenas contatos que autorizarem a conversa; registrar padrões de dor e objeções de forma agregada.
|
|
110
|
-
|
|
111
|
-
**Gate da semana 4:** decidir se a dor e a mensagem foram compreendidas por participantes do ICP. Se não, revisar segmento ou mensagem antes de ampliar canais.
|
|
112
|
-
|
|
113
|
-
### Semanas 5–8 — teste de mensagens e demonstrações
|
|
114
|
-
|
|
115
|
-
1. Testar duas mensagens: **“entregas verificáveis com IA”** versus **“governança Git-native para agentes”**.
|
|
116
|
-
2. Publicar/compartilhar somente os ativos aprovados, em cadência leve e consistente.
|
|
117
|
-
3. Conduzir demos orientadas ao caso de uso, não ao catálogo completo de agentes.
|
|
118
|
-
4. Qualificar interessados contra o ICP e convidar perfis aderentes a piloto limitado.
|
|
119
|
-
5. Atualizar FAQ com objeções observadas: autonomia, segurança, custo equivalente, telemetria `unknown` e tempo de adoção.
|
|
120
|
-
|
|
121
|
-
**Gate da semana 8:** selecionar mensagem vencedora pelo avanço qualificado (diagnóstico → demo/piloto), não somente por impressões ou curtidas.
|
|
122
|
-
|
|
123
|
-
### Semanas 9–12 — pilotos e prova responsável
|
|
124
|
-
|
|
125
|
-
1. Iniciar pilotos autorizados com uma unidade de trabalho e critérios de aceite definidos antes da execução.
|
|
126
|
-
2. Medir conclusão, cobertura, rework, duração e custo somente quando a fonte e comparabilidade forem adequadas.
|
|
127
|
-
3. Produzir um estudo de caso somente com permissão do participante; anonimizar ou manter interno se necessário.
|
|
128
|
-
4. Documentar resultados inconclusivos e causas (cobertura incompleta, baseline não equivalente, escopo alterado) em vez de convertê-los em ganhos.
|
|
129
|
-
5. Fazer retrospectiva: ICP, mensagem, canal, ativação, segurança percebida e decisão para o próximo ciclo.
|
|
130
|
-
|
|
131
|
-
**Gate da semana 12:** manter, ajustar ou interromper o movimento de marketing com base nas métricas definidas abaixo e nas limitações observadas.
|
|
132
|
-
|
|
133
|
-
## 7. Cadência de conteúdo
|
|
134
|
-
|
|
135
|
-
Cadência inicial: **1 conteúdo técnico principal por semana**, transformado em até dois recortes curtos, mais uma demonstração ou sessão de perguntas a cada duas semanas se houver autorização e demanda. Priorizar qualidade, verificabilidade e aprendizado; não perseguir volume.
|
|
136
|
-
|
|
137
|
-
| Semana | Tema principal | Formato | Evidência/limite obrigatório |
|
|
138
|
-
| --- | --- | --- | --- |
|
|
139
|
-
| 1 | O que significa “pronto” quando agentes executam trabalho | Post + diagrama | Critérios de aceite e evidências, sem alegação de economia |
|
|
140
|
-
| 2 | Da intenção à Evidence no Git | Demo curta | Dados de exemplo ou autorizados |
|
|
141
|
-
| 3 | Por que telemetria ausente não é custo zero | Artigo técnico | Explicar `unknown`/`null` e custo equivalente estimado |
|
|
142
|
-
| 4 | Checklist para avaliar um piloto com agentes | Guia | Baseline e quality floor antes de comparar |
|
|
143
|
-
| 5–6 | Duas mensagens do teste | Posts/demos A e B | Mesma CTA e janela de observação |
|
|
144
|
-
| 7–8 | Objeções e FAQ | Artigo + sessão | Respostas condicionais, sem promessas absolutas |
|
|
145
|
-
| 9–10 | Como ler resultados de um piloto | Template de caso | Método, cobertura e limites visíveis |
|
|
146
|
-
| 11–12 | Aprendizados do ciclo | Retrospectiva | Separar dado observado, inferência e próxima hipótese |
|
|
147
|
-
|
|
148
|
-
## 8. Backlog de experimentos
|
|
149
|
-
|
|
150
|
-
| Prioridade | Experimento | Hipótese | Indicador primário | Critério de decisão |
|
|
151
|
-
| --- | --- | --- | --- | --- |
|
|
152
|
-
| P0 | Mensagem A vs. B | “Entregas verificáveis” gera mais avanço qualificado do que “governança Git-native”, ou o inverso. | Taxa de avanço de diagnóstico para demo/piloto por variante. | Manter a variante com diferença prática e qualitativa consistente após janela e volume definidos; se inconclusivo, registrar empate. |
|
|
153
|
-
| P0 | Demo curta vs. visão de catálogo | Uma Task completa é mais clara que apresentar todos os agentes. | Participantes que descrevem corretamente o critério de pronto após a demo. | Adotar o formato que obtiver compreensão e convite ao próximo passo sem aumentar objeções críticas. |
|
|
154
|
-
| P1 | Segmento: consultoria vs. squad interno | Um dos segmentos declara dor, autoridade e condição de piloto com maior frequência. | Proporção de conversas qualificadas que aceita definir um piloto. | Direcionar a próxima rodada ao segmento com melhor sinal qualitativo e quantitativo; não inferir tamanho de mercado. |
|
|
155
|
-
| P1 | Checklist de piloto | Um checklist reduz escopo indefinido e comparações inválidas. | Pilotos com baseline, quality floor e cobertura definidos antes de iniciar. | Reter se elevar a completude de desenho do piloto sem impedir adesão legítima. |
|
|
156
|
-
| P2 | Estudo de caso com limites explícitos | Transparência metodológica aumenta confiança dos perfis técnicos. | Feedback de confiança e solicitações qualificadas após leitura. | Reutilizar se a maioria do feedback técnico considerar método e limites claros; caso contrário, revisar. |
|
|
157
|
-
|
|
158
|
-
Para cada experimento, registrar período, público, variante, CTA, fonte de dados, número de observações, resultados, limitações e decisão. Sem tamanho de amostra e período definidos, tratar o resultado como exploratório.
|
|
159
|
-
|
|
160
|
-
## 9. Métricas e definições
|
|
161
|
-
|
|
162
|
-
| Métrica | Definição | Fonte mínima | Uso correto |
|
|
163
|
-
| --- | --- | --- | --- |
|
|
164
|
-
| Alcance qualificado | Pessoas/organizações do ICP que tiveram contato identificável e autorizado com o ativo. | Registro de campanha ou conversa, sem dados pessoais desnecessários. | Indicador de distribuição; não prova interesse. |
|
|
165
|
-
| Diagnóstico qualificado | Conversa em que se confirmou ao menos: uso de agentes, repositório Git, dor relevante e responsável técnico. | Formulário/nota autorizada. | Entrada para demo; não é intenção de compra. |
|
|
166
|
-
| Taxa diagnóstico → demo | Demos realizadas ÷ diagnósticos qualificados no mesmo período. | Agenda/registro de campanha. | Comparar canais e mensagens com mesma janela. |
|
|
167
|
-
| Taxa demo → piloto | Pilotos com escopo aceito ÷ demos realizadas. | Documento de piloto. | Sinal de aderência; não equivale a receita. |
|
|
168
|
-
| Ativação de piloto | Pilotos que executam a primeira Task definida com algum registro de verificação ÷ pilotos iniciados. | Registros Git/ZAIP autorizados. | Medir uso real, mantendo lacunas explícitas. |
|
|
169
|
-
| Cobertura de evidências | Itens de critérios de aceite com evidência vinculada ÷ itens aplicáveis. | Task, testes, reviews e Evidence. | Qualidade do piloto; não fingir 100% se algo não foi observado. |
|
|
170
|
-
| Resultado comparável | Diferença observada em coortes equivalentes de custo/duração/rework, com fonte e qualidade definidas. | Dados de coorte e metodologia. | Só comunicar quando as dimensões obrigatórias forem comparáveis; caso contrário, `null`/inconclusivo. |
|
|
171
|
-
| Aprendizado validado | Hipótese com decisão registrada, baseada em dado e feedback rastreáveis. | Log de experimento. | Evita otimizar vaidade ou anedotas isoladas. |
|
|
172
|
-
|
|
173
|
-
## 10. Instrumentação mínima
|
|
174
|
-
|
|
175
|
-
1. **Registro de conteúdo:** data, canal, versão da mensagem, CTA, URL/ativo, público pretendido e aprovação de publicação.
|
|
176
|
-
2. **Registro de conversa/piloto:** organização pseudonimizada quando possível, segmento, origem, estágio, dores declaradas, objeções, próxima ação autorizada e consentimento de contato.
|
|
177
|
-
3. **Registro de experimento:** hipótese, variante, período, denominador, fonte, resultado, limitações e decisão.
|
|
178
|
-
4. **Registro de piloto:** Task/escopo, critérios de aceite, baseline, quality floor, fontes de telemetria, cobertura, mudança de escopo e decisão de encerramento.
|
|
179
|
-
5. **Privacidade e integridade:** não registrar prompts, código de cliente, credenciais ou dados pessoais além do necessário; não usar custo equivalente estimado como cobrança real; preservar ausências como indisponíveis.
|
|
180
|
-
|
|
181
|
-
Começar com planilha/repositório interno controlado e IDs não identificáveis. Adoção de CRM, pixels, automações ou integrações é decisão posterior, com consentimento, segurança e responsável definidos.
|
|
182
|
-
|
|
183
|
-
## 11. Riscos, limites e decisões pendentes
|
|
184
|
-
|
|
185
|
-
| Risco ou limite | Mitigação proposta | Decisão pendente |
|
|
186
|
-
| --- | --- | --- |
|
|
187
|
-
| Transformar resultados da amostra em promessa universal de economia. | Em toda copy, citar contexto, método e limites; aprovar casos antes de publicar. | Definir processo de revisão de alegações mensuráveis. |
|
|
188
|
-
| Confundir custo equivalente de API com cobrança real. | Rotular como estimativa e expor cobertura/fonte. | Definir glossário e responsável pela aprovação de métricas. |
|
|
189
|
-
| Atrair público amplo demais, sem condição de adoção. | Qualificar pelo ICP e usar um piloto de uma Task. | Confirmar se consultorias ou squads internos têm prioridade comercial. |
|
|
190
|
-
| Prometer autonomia irrestrita ou segurança não demonstrada. | Falar em fluxo governado, Git-native e evidências; encaminhar requisitos de segurança a validação técnica. | Definir claims de segurança aprovadas e limites de suporte. |
|
|
191
|
-
| Brandbook/tom de voz não fornecido. | Usar linguagem técnica, objetiva e condicional neste plano. | Fornecer Brandbook aprovado ou autorizar decisão de marca. |
|
|
192
|
-
| Dados de piloto incompletos ou coortes não equivalentes. | Tornar cobertura e inconclusão visíveis; não calcular “economia” sem requisitos. | Definir campos mínimos e owner da medição. |
|
|
193
|
-
| Execução externa sem autoridade. | Este arquivo é planejamento interno; publicações, contato e coleta exigem autorização específica. | Nomear responsável, orçamento, canais e calendário de publicação. |
|
|
194
|
-
|
|
195
|
-
## 12. Próxima decisão recomendada
|
|
196
|
-
|
|
197
|
-
Aprovar ou ajustar o ICP de entrada — **consultorias de software e líderes de engenharia já usuários de agentes no Git** — e designar o responsável por: (1) validar Brandbook/tom, (2) aprovar ativos e publicação, (3) conduzir entrevistas autorizadas e (4) governar a medição dos pilotos. Com essas decisões, a primeira entrega executável é a demo curta de uma Task real com seus critérios de aceite e evidências.
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# Estratégia de Marketing — Zaip
|
|
2
|
-
|
|
3
|
-
**Status:** draft estratégico
|
|
4
|
-
**Base de marca:** `.agents/branding/brandbook.md`
|
|
5
|
-
|
|
6
|
-
## Objetivo
|
|
7
|
-
|
|
8
|
-
Gerar demanda qualificada para a Zaip entre PMEs de serviço e desenvolver o canal de agências e parceiros sem reduzir a marca a automação genérica.
|
|
9
|
-
|
|
10
|
-
## Público prioritário
|
|
11
|
-
|
|
12
|
-
1. PMEs com ao menos um vendedor, volume de leads e WhatsApp como canal comercial.
|
|
13
|
-
2. Agências e consultores que desejam criar receita recorrente com implantação de IA comercial.
|
|
14
|
-
|
|
15
|
-
## Mensagem central
|
|
16
|
-
|
|
17
|
-
Transforme conversas em receita previsível com IA comercial que segue processo, atualiza CRM, recupera leads e conduz ao próximo passo.
|
|
18
|
-
|
|
19
|
-
## Pilares de conteúdo
|
|
20
|
-
|
|
21
|
-
- Processo comercial no WhatsApp.
|
|
22
|
-
- Prova contextualizada: case Moradigna e ROI observado.
|
|
23
|
-
- Antes/depois de chatbot, atendimento e IA comercial.
|
|
24
|
-
- CRM, recuperação de leads e handoff humano.
|
|
25
|
-
- Oferta e capacitação para parceiros.
|
|
26
|
-
|
|
27
|
-
## Métricas pendentes
|
|
28
|
-
|
|
29
|
-
Definir CAC, taxa de lead qualificado, conversão por canal, ciclo de venda, retenção, receita por parceiro e atribuição antes de estabelecer metas numéricas.
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# Playbook de Sales — Zaip
|
|
2
|
-
|
|
3
|
-
**Status:** draft interno
|
|
4
|
-
**Oferta:** IA comercial para WhatsApp com processo, CRM e fechamento inteligente.
|
|
5
|
-
|
|
6
|
-
## ICP inicial
|
|
7
|
-
|
|
8
|
-
PMEs prestadoras de serviço com pelo menos um vendedor, leads recorrentes e necessidade de converter melhor o tráfego já adquirido. Canal parceiro: agências e consultores próximos da operação comercial do cliente.
|
|
9
|
-
|
|
10
|
-
## Descoberta
|
|
11
|
-
|
|
12
|
-
Objetivo: entender origem dos leads, velocidade de resposta, processo atual, gargalos, CRM, volume, ticket, decisão e próximo passo.
|
|
13
|
-
|
|
14
|
-
Perguntas essenciais:
|
|
15
|
-
|
|
16
|
-
- Onde os leads se perdem hoje?
|
|
17
|
-
- Quanto tempo a equipe leva para responder?
|
|
18
|
-
- Como qualificam, acompanham e registram oportunidades?
|
|
19
|
-
- Qual etapa comercial mais trava?
|
|
20
|
-
- Quando um humano precisa assumir a conversa?
|
|
21
|
-
|
|
22
|
-
## Narrativa de valor
|
|
23
|
-
|
|
24
|
-
A Zaip não é chatbot ou FAQ automático: ela segue o processo comercial, recupera conversas, atualiza o CRM e conduz o lead até pagamento, agendamento ou handoff humano.
|
|
25
|
-
|
|
26
|
-
## Prova
|
|
27
|
-
|
|
28
|
-
Usar o case Moradigna como resultado contextualizado — até 11x de ROI no primeiro mês em operação real — sem apresentar como garantia.
|
|
29
|
-
|
|
30
|
-
## Handoff
|
|
31
|
-
|
|
32
|
-
Registrar problema, contexto, etapa, decisor, necessidade, timing e próximo compromisso no CRM antes de transferir para closer, implantação ou suporte.
|