clawatch 1.1.4 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/backend/dist/routes.d.ts.map +1 -1
  2. package/backend/dist/routes.js +4 -2
  3. package/backend/dist/routes.js.map +1 -1
  4. package/frontend/.next/BUILD_ID +1 -1
  5. package/frontend/.next/build-manifest.json +2 -2
  6. package/frontend/.next/prerender-manifest.json +3 -3
  7. package/frontend/.next/server/app/_global-error.html +2 -2
  8. package/frontend/.next/server/app/_global-error.rsc +1 -1
  9. package/frontend/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  10. package/frontend/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/frontend/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/frontend/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/frontend/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/frontend/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/frontend/.next/server/app/_not-found.html +1 -1
  16. package/frontend/.next/server/app/_not-found.rsc +2 -2
  17. package/frontend/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  18. package/frontend/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  19. package/frontend/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  20. package/frontend/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  21. package/frontend/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  22. package/frontend/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  23. package/frontend/.next/server/app/dashboard/page.js.nft.json +1 -1
  24. package/frontend/.next/server/app/dashboard/page_client-reference-manifest.js +1 -1
  25. package/frontend/.next/server/app/dashboard/projects/[id]/page.js.nft.json +1 -1
  26. package/frontend/.next/server/app/dashboard/projects/[id]/page_client-reference-manifest.js +1 -1
  27. package/frontend/.next/server/app/dashboard/sessions/[id]/page.js.nft.json +1 -1
  28. package/frontend/.next/server/app/dashboard/sessions/[id]/page_client-reference-manifest.js +1 -1
  29. package/frontend/.next/server/app/dashboard.html +1 -1
  30. package/frontend/.next/server/app/dashboard.rsc +3 -3
  31. package/frontend/.next/server/app/dashboard.segments/_full.segment.rsc +3 -3
  32. package/frontend/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
  33. package/frontend/.next/server/app/dashboard.segments/_index.segment.rsc +2 -2
  34. package/frontend/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  35. package/frontend/.next/server/app/dashboard.segments/dashboard/__PAGE__.segment.rsc +2 -2
  36. package/frontend/.next/server/app/dashboard.segments/dashboard.segment.rsc +1 -1
  37. package/frontend/.next/server/app/index.html +2 -2
  38. package/frontend/.next/server/app/index.rsc +3 -3
  39. package/frontend/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  40. package/frontend/.next/server/app/index.segments/_full.segment.rsc +3 -3
  41. package/frontend/.next/server/app/index.segments/_head.segment.rsc +1 -1
  42. package/frontend/.next/server/app/index.segments/_index.segment.rsc +2 -2
  43. package/frontend/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  44. package/frontend/.next/server/app/page.js.nft.json +1 -1
  45. package/frontend/.next/server/app/page_client-reference-manifest.js +1 -1
  46. package/frontend/.next/server/chunks/ssr/_21f396dd._.js +35 -0
  47. package/frontend/.next/server/chunks/ssr/{_2bfdd77b._.js → _2542c95f._.js} +3 -3
  48. package/frontend/.next/server/chunks/ssr/_b0ae6d33._.js +1 -1
  49. package/frontend/.next/server/chunks/ssr/{_f26b1aca._.js → _b9077047._.js} +3 -3
  50. package/frontend/.next/server/chunks/ssr/_e17fe96b._.js +1 -1
  51. package/frontend/.next/server/chunks/ssr/src_app_page_tsx_a7111f3e._.js +1 -1
  52. package/frontend/.next/server/pages/404.html +1 -1
  53. package/frontend/.next/server/pages/500.html +2 -2
  54. package/frontend/.next/server/server-reference-manifest.js +1 -1
  55. package/frontend/.next/server/server-reference-manifest.json +1 -1
  56. package/frontend/.next/static/chunks/{856515f7c0c70a74.js → 2b61bfc898574561.js} +1 -1
  57. package/frontend/.next/static/chunks/34bc00d7c1d074e7.js +33 -0
  58. package/frontend/.next/static/chunks/{b64a4ebe4acf6ef6.js → 6d0f2f87160fcf43.js} +1 -1
  59. package/frontend/.next/static/chunks/7ca25fc6318e5416.js +1 -0
  60. package/frontend/.next/static/chunks/{89a2e839a714c1b0.js → 89e8308f2f72ca5f.js} +1 -1
  61. package/frontend/.next/static/chunks/{1421ed2dd17a1ef2.css → 97f976b92141a3f2.css} +1 -1
  62. package/frontend/.next/static/chunks/bc01d49478c01c23.js +33 -0
  63. package/frontend/.next/static/chunks/d3ae592e48f7ffa4.js +1 -0
  64. package/package.json +1 -1
  65. package/frontend/.next/static/chunks/889a3378ed5d7ecb.js +0 -1
  66. package/frontend/.next/static/chunks/9e5b5ccda421a827.js +0 -33
  67. package/frontend/.next/static/chunks/e9d6a387c57251bc.js +0 -1
  68. /package/frontend/.next/static/{pDJVbL9tpaWC95Oaelf3H → G40gZzYPgULz9kZs2yo97}/_buildManifest.js +0 -0
  69. /package/frontend/.next/static/{pDJVbL9tpaWC95Oaelf3H → G40gZzYPgULz9kZs2yo97}/_clientMiddlewareManifest.json +0 -0
  70. /package/frontend/.next/static/{pDJVbL9tpaWC95Oaelf3H → G40gZzYPgULz9kZs2yo97}/_ssgManifest.js +0 -0
@@ -1,6 +1,6 @@
1
1
  module.exports=[57997,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={UnrecognizedActionError:function(){return f},unstable_isUnrecognizedActionError:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});class f extends Error{constructor(...a){super(...a),this.name="UnrecognizedActionError"}}function g(a){return!!(a&&"object"==typeof a&&a instanceof f)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},75718,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ReadonlyURLSearchParams",{enumerable:!0,get:function(){return e}});class d extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class e extends URLSearchParams{append(){throw new d}delete(){throw new d}set(){throw new d}sort(){throw new d}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},15128,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"RedirectStatusCode",{enumerable:!0,get:function(){return e}});var d,e=((d={})[d.SeeOther=303]="SeeOther",d[d.TemporaryRedirect=307]="TemporaryRedirect",d[d.PermanentRedirect=308]="PermanentRedirect",d);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},11026,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d,e={REDIRECT_ERROR_CODE:function(){return h},RedirectType:function(){return i},isRedirectError:function(){return j}};for(var f in e)Object.defineProperty(c,f,{enumerable:!0,get:e[f]});let g=a.r(15128),h="NEXT_REDIRECT";var i=((d={}).push="push",d.replace="replace",d);function j(a){if("object"!=typeof a||null===a||!("digest"in a)||"string"!=typeof a.digest)return!1;let b=a.digest.split(";"),[c,d]=b,e=b.slice(2,-2).join(";"),f=Number(b.at(-2));return c===h&&("replace"===d||"push"===d)&&"string"==typeof e&&!isNaN(f)&&f in g.RedirectStatusCode}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},22099,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={getRedirectError:function(){return i},getRedirectStatusCodeFromError:function(){return n},getRedirectTypeFromError:function(){return m},getURLFromRedirectError:function(){return l},permanentRedirect:function(){return k},redirect:function(){return j}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(15128),g=a.r(11026),h=a.r(20635).actionAsyncStorage;function i(a,b,c=f.RedirectStatusCode.TemporaryRedirect){let d=Object.defineProperty(Error(g.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return d.digest=`${g.REDIRECT_ERROR_CODE};${b};${a};${c};`,d}function j(a,b){throw i(a,b??=h?.getStore()?.isAction?g.RedirectType.push:g.RedirectType.replace,f.RedirectStatusCode.TemporaryRedirect)}function k(a,b=g.RedirectType.replace){throw i(a,b,f.RedirectStatusCode.PermanentRedirect)}function l(a){return(0,g.isRedirectError)(a)?a.digest.split(";").slice(2,-2).join(";"):null}function m(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return a.digest.split(";",2)[1]}function n(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(a.digest.split(";").at(-2))}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},8535,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={HTTPAccessErrorStatus:function(){return f},HTTP_ERROR_FALLBACK_ERROR_CODE:function(){return h},getAccessFallbackErrorTypeByStatus:function(){return k},getAccessFallbackHTTPStatus:function(){return j},isHTTPAccessFallbackError:function(){return i}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f={NOT_FOUND:404,FORBIDDEN:403,UNAUTHORIZED:401},g=new Set(Object.values(f)),h="NEXT_HTTP_ERROR_FALLBACK";function i(a){if("object"!=typeof a||null===a||!("digest"in a)||"string"!=typeof a.digest)return!1;let[b,c]=a.digest.split(";");return b===h&&g.has(Number(c))}function j(a){return Number(a.digest.split(";")[1])}function k(a){switch(a){case 401:return"unauthorized";case 403:return"forbidden";case 404:return"not-found";default:return}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},28102,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"notFound",{enumerable:!0,get:function(){return f}});let d=a.r(8535),e=`${d.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;function f(){let a=Object.defineProperty(Error(e),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});throw a.digest=e,a}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},64177,(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"forbidden",{enumerable:!0,get:function(){return d}}),a.r(8535).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},88213,(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unauthorized",{enumerable:!0,get:function(){return d}}),a.r(8535).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},35710,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={isHangingPromiseRejectionError:function(){return f},makeDevtoolsIOAwarePromise:function(){return l},makeHangingPromise:function(){return j}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});function f(a){return"object"==typeof a&&null!==a&&"digest"in a&&a.digest===g}let g="HANGING_PROMISE_REJECTION";class h extends Error{constructor(a,b){super(`During prerendering, ${b} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${b} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${a}".`),this.route=a,this.expression=b,this.digest=g}}let i=new WeakMap;function j(a,b,c){if(a.aborted)return Promise.reject(new h(b,c));{let d=new Promise((d,e)=>{let f=e.bind(null,new h(b,c)),g=i.get(a);if(g)g.push(f);else{let b=[f];i.set(a,b),a.addEventListener("abort",()=>{for(let a=0;a<b.length;a++)b[a]()},{once:!0})}});return d.catch(k),d}}function k(){}function l(a,b,c){return b.stagedRendering?b.stagedRendering.delayUntilStage(c,void 0,a):new Promise(b=>{setTimeout(()=>{b(a)},0)})}},31101,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isPostpone",{enumerable:!0,get:function(){return e}});let d=Symbol.for("react.postpone");function e(a){return"object"==typeof a&&null!==a&&a.$$typeof===d}},41997,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={BailoutToCSRError:function(){return g},isBailoutToCSRError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="BAILOUT_TO_CLIENT_SIDE_RENDERING";class g extends Error{constructor(a){super(`Bail out to client-side rendering: ${a}`),this.reason=a,this.digest=f}}function h(a){return"object"==typeof a&&null!==a&&"digest"in a&&a.digest===f}},77747,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isNextRouterError",{enumerable:!0,get:function(){return f}});let d=a.r(8535),e=a.r(11026);function f(a){return(0,e.isRedirectError)(a)||(0,d.isHTTPAccessFallbackError)(a)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},3326,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={DynamicServerError:function(){return g},isDynamicServerError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="DYNAMIC_SERVER_USAGE";class g extends Error{constructor(a){super(`Dynamic server usage: ${a}`),this.description=a,this.digest=f}}function h(a){return"object"==typeof a&&null!==a&&"digest"in a&&"string"==typeof a.digest&&a.digest===f}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},99392,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={StaticGenBailoutError:function(){return g},isStaticGenBailoutError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="NEXT_STATIC_GEN_BAILOUT";class g extends Error{constructor(...a){super(...a),this.code=f}}function h(a){return"object"==typeof a&&null!==a&&"code"in a&&a.code===f}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},83590,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={METADATA_BOUNDARY_NAME:function(){return f},OUTLET_BOUNDARY_NAME:function(){return h},ROOT_LAYOUT_BOUNDARY_NAME:function(){return i},VIEWPORT_BOUNDARY_NAME:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="__next_metadata_boundary__",g="__next_viewport_boundary__",h="__next_outlet_boundary__",i="__next_root_layout_boundary__"},76383,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={atLeastOneTask:function(){return h},scheduleImmediate:function(){return g},scheduleOnNextTick:function(){return f},waitAtLeastOneReactRenderTask:function(){return i}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a=>{Promise.resolve().then(()=>{process.nextTick(a)})},g=a=>{setImmediate(a)};function h(){return new Promise(a=>g(a))}function i(){return new Promise(a=>setImmediate(a))}},88644,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"InvariantError",{enumerable:!0,get:function(){return d}});class d extends Error{constructor(a,b){super(`Invariant: ${a.endsWith(".")?a:a+"."} This is a bug in Next.js.`,b),this.name="InvariantError"}}},54110,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d,e,f={Postpone:function(){return B},PreludeState:function(){return $},abortAndThrowOnSynchronousRequestDataAccess:function(){return A},abortOnSynchronousPlatformIOAccess:function(){return z},accessedDynamicData:function(){return J},annotateDynamicAccess:function(){return O},consumeDynamicAccess:function(){return K},createDynamicTrackingState:function(){return s},createDynamicValidationState:function(){return t},createHangingInputAbortSignal:function(){return N},createRenderInBrowserAbortSignal:function(){return M},delayUntilRuntimeStage:function(){return ac},formatDynamicAPIAccesses:function(){return L},getFirstDynamicReason:function(){return u},getStaticShellDisallowedDynamicReasons:function(){return ab},isDynamicPostpone:function(){return E},isPrerenderInterruptedError:function(){return I},logDisallowedDynamicError:function(){return _},markCurrentScopeAsDynamic:function(){return v},postponeWithTracking:function(){return C},throwIfDisallowedDynamic:function(){return aa},throwToInterruptStaticGeneration:function(){return w},trackAllowedDynamicAccess:function(){return W},trackDynamicDataInDynamicRender:function(){return x},trackDynamicHoleInRuntimeShell:function(){return X},trackDynamicHoleInStaticShell:function(){return Y},useDynamicRouteParams:function(){return P},useDynamicSearchParams:function(){return Q}};for(var g in f)Object.defineProperty(c,g,{enumerable:!0,get:f[g]});let h=(d=a.r(72131))&&d.__esModule?d:{default:d},i=a.r(3326),j=a.r(99392),k=a.r(32319),l=a.r(56704),m=a.r(35710),n=a.r(83590),o=a.r(76383),p=a.r(41997),q=a.r(88644),r="function"==typeof h.default.unstable_postpone;function s(a){return{isDebugDynamicAccesses:a,dynamicAccesses:[],syncDynamicErrorWithStack:null}}function t(){return{hasSuspenseAboveBody:!1,hasDynamicMetadata:!1,dynamicMetadata:null,hasDynamicViewport:!1,hasAllowedDynamic:!1,dynamicErrors:[]}}function u(a){var b;return null==(b=a.dynamicAccesses[0])?void 0:b.expression}function v(a,b,c){if(b)switch(b.type){case"cache":case"unstable-cache":case"private-cache":return}if(!a.forceDynamic&&!a.forceStatic){if(a.dynamicShouldError)throw Object.defineProperty(new j.StaticGenBailoutError(`Route ${a.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${c}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E553",enumerable:!1,configurable:!0});if(b)switch(b.type){case"prerender-ppr":return C(a.route,c,b.dynamicTracking);case"prerender-legacy":b.revalidate=0;let d=Object.defineProperty(new i.DynamicServerError(`Route ${a.route} couldn't be rendered statically because it used ${c}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E550",enumerable:!1,configurable:!0});throw a.dynamicUsageDescription=c,a.dynamicUsageStack=d.stack,d}}}function w(a,b,c){let d=Object.defineProperty(new i.DynamicServerError(`Route ${b.route} couldn't be rendered statically because it used \`${a}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E558",enumerable:!1,configurable:!0});throw c.revalidate=0,b.dynamicUsageDescription=a,b.dynamicUsageStack=d.stack,d}function x(a){switch(a.type){case"cache":case"unstable-cache":case"private-cache":return}}function y(a,b,c){let d=H(`Route ${a} needs to bail out of prerendering at this point because it used ${b}.`);c.controller.abort(d);let e=c.dynamicTracking;e&&e.dynamicAccesses.push({stack:e.isDebugDynamicAccesses?Error().stack:void 0,expression:b})}function z(a,b,c,d){let e=d.dynamicTracking;y(a,b,d),e&&null===e.syncDynamicErrorWithStack&&(e.syncDynamicErrorWithStack=c)}function A(a,b,c,d){if(!1===d.controller.signal.aborted){y(a,b,d);let e=d.dynamicTracking;e&&null===e.syncDynamicErrorWithStack&&(e.syncDynamicErrorWithStack=c)}throw H(`Route ${a} needs to bail out of prerendering at this point because it used ${b}.`)}function B({reason:a,route:b}){let c=k.workUnitAsyncStorage.getStore();C(b,a,c&&"prerender-ppr"===c.type?c.dynamicTracking:null)}function C(a,b,c){(function(){if(!r)throw Object.defineProperty(Error("Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E224",enumerable:!1,configurable:!0})})(),c&&c.dynamicAccesses.push({stack:c.isDebugDynamicAccesses?Error().stack:void 0,expression:b}),h.default.unstable_postpone(D(a,b))}function D(a,b){return`Route ${a} needs to bail out of prerendering at this point because it used ${b}. React throws this special object to indicate where. It should not be caught by your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`}function E(a){return"object"==typeof a&&null!==a&&"string"==typeof a.message&&F(a.message)}function F(a){return a.includes("needs to bail out of prerendering at this point because it used")&&a.includes("Learn more: https://nextjs.org/docs/messages/ppr-caught-error")}if(!1===F(D("%%%","^^^")))throw Object.defineProperty(Error("Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E296",enumerable:!1,configurable:!0});let G="NEXT_PRERENDER_INTERRUPTED";function H(a){let b=Object.defineProperty(Error(a),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return b.digest=G,b}function I(a){return"object"==typeof a&&null!==a&&a.digest===G&&"name"in a&&"message"in a&&a instanceof Error}function J(a){return a.length>0}function K(a,b){return a.dynamicAccesses.push(...b.dynamicAccesses),a.dynamicAccesses}function L(a){return a.filter(a=>"string"==typeof a.stack&&a.stack.length>0).map(({expression:a,stack:b})=>(b=b.split("\n").slice(4).filter(a=>!(a.includes("node_modules/next/")||a.includes(" (<anonymous>)")||a.includes(" (node:"))).join("\n"),`Dynamic API Usage Debug - ${a}:
2
2
  ${b}`))}function M(){let a=new AbortController;return a.abort(Object.defineProperty(new p.BailoutToCSRError("Render in Browser"),"__NEXT_ERROR_CODE",{value:"E721",enumerable:!1,configurable:!0})),a.signal}function N(a){switch(a.type){case"prerender":case"prerender-runtime":let b=new AbortController;if(a.cacheSignal)a.cacheSignal.inputReady().then(()=>{b.abort()});else{let c=(0,k.getRuntimeStagePromise)(a);c?c.then(()=>(0,o.scheduleOnNextTick)(()=>b.abort())):(0,o.scheduleOnNextTick)(()=>b.abort())}return b.signal;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":return}}function O(a,b){let c=b.dynamicTracking;c&&c.dynamicAccesses.push({stack:c.isDebugDynamicAccesses?Error().stack:void 0,expression:a})}function P(a){let b=l.workAsyncStorage.getStore(),c=k.workUnitAsyncStorage.getStore();if(b&&c)switch(c.type){case"prerender-client":case"prerender":{let d=c.fallbackRouteParams;d&&d.size>0&&h.default.use((0,m.makeHangingPromise)(c.renderSignal,b.route,a));break}case"prerender-ppr":{let d=c.fallbackRouteParams;if(d&&d.size>0)return C(b.route,a,c.dynamicTracking);break}case"prerender-runtime":throw Object.defineProperty(new q.InvariantError(`\`${a}\` was called during a runtime prerender. Next.js should be preventing ${a} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E771",enumerable:!1,configurable:!0});case"cache":case"private-cache":throw Object.defineProperty(new q.InvariantError(`\`${a}\` was called inside a cache scope. Next.js should be preventing ${a} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E745",enumerable:!1,configurable:!0})}}function Q(a){let b=l.workAsyncStorage.getStore(),c=k.workUnitAsyncStorage.getStore();if(b)switch(!c&&(0,k.throwForMissingRequestStore)(a),c.type){case"prerender-client":h.default.use((0,m.makeHangingPromise)(c.renderSignal,b.route,a));break;case"prerender-legacy":case"prerender-ppr":if(b.forceStatic)return;throw Object.defineProperty(new p.BailoutToCSRError(a),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});case"prerender":case"prerender-runtime":throw Object.defineProperty(new q.InvariantError(`\`${a}\` was called from a Server Component. Next.js should be preventing ${a} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E795",enumerable:!1,configurable:!0});case"cache":case"unstable-cache":case"private-cache":throw Object.defineProperty(new q.InvariantError(`\`${a}\` was called inside a cache scope. Next.js should be preventing ${a} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E745",enumerable:!1,configurable:!0});case"request":return}}let R=/\n\s+at Suspense \(<anonymous>\)/,S=RegExp(`\\n\\s+at Suspense \\(<anonymous>\\)(?:(?!\\n\\s+at (?:body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6) \\(<anonymous>\\))[\\s\\S])*?\\n\\s+at ${n.ROOT_LAYOUT_BOUNDARY_NAME} \\([^\\n]*\\)`),T=RegExp(`\\n\\s+at ${n.METADATA_BOUNDARY_NAME}[\\n\\s]`),U=RegExp(`\\n\\s+at ${n.VIEWPORT_BOUNDARY_NAME}[\\n\\s]`),V=RegExp(`\\n\\s+at ${n.OUTLET_BOUNDARY_NAME}[\\n\\s]`);function W(a,b,c,d){if(!V.test(b)){if(T.test(b)){c.hasDynamicMetadata=!0;return}if(U.test(b)){c.hasDynamicViewport=!0;return}if(S.test(b)){c.hasAllowedDynamic=!0,c.hasSuspenseAboveBody=!0;return}else if(R.test(b)){c.hasAllowedDynamic=!0;return}else{if(d.syncDynamicErrorWithStack)return void c.dynamicErrors.push(d.syncDynamicErrorWithStack);let e=Z(`Route "${a.route}": Uncached data was accessed outside of <Suspense>. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`,b);return void c.dynamicErrors.push(e)}}}function X(a,b,c,d){if(!V.test(b)){if(T.test(b)){c.dynamicMetadata=Z(`Route "${a.route}": Uncached data or \`connection()\` was accessed inside \`generateMetadata\`. Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`,b);return}if(U.test(b)){let d=Z(`Route "${a.route}": Uncached data or \`connection()\` was accessed inside \`generateViewport\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`,b);c.dynamicErrors.push(d);return}if(S.test(b)){c.hasAllowedDynamic=!0,c.hasSuspenseAboveBody=!0;return}else if(R.test(b)){c.hasAllowedDynamic=!0;return}else{if(d.syncDynamicErrorWithStack)return void c.dynamicErrors.push(d.syncDynamicErrorWithStack);let e=Z(`Route "${a.route}": Uncached data or \`connection()\` was accessed outside of \`<Suspense>\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`,b);return void c.dynamicErrors.push(e)}}}function Y(a,b,c,d){if(!V.test(b)){if(T.test(b)){c.dynamicMetadata=Z(`Route "${a.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed inside \`generateMetadata\` or you have file-based metadata such as icons that depend on dynamic params segments. Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`,b);return}if(U.test(b)){let d=Z(`Route "${a.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed inside \`generateViewport\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`,b);c.dynamicErrors.push(d);return}if(S.test(b)){c.hasAllowedDynamic=!0,c.hasSuspenseAboveBody=!0;return}else if(R.test(b)){c.hasAllowedDynamic=!0;return}else{if(d.syncDynamicErrorWithStack)return void c.dynamicErrors.push(d.syncDynamicErrorWithStack);let e=Z(`Route "${a.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed outside of \`<Suspense>\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`,b);return void c.dynamicErrors.push(e)}}}function Z(a,b){let c=Object.defineProperty(Error(a),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return c.stack=c.name+": "+a+b,c}var $=((e={})[e.Full=0]="Full",e[e.Empty=1]="Empty",e[e.Errored=2]="Errored",e);function _(a,b){console.error(b),a.dev||(a.hasReadableErrorStacks?console.error(`To get a more detailed stack trace and pinpoint the issue, start the app in development mode by running \`next dev\`, then open "${a.route}" in your browser to investigate the error.`):console.error(`To get a more detailed stack trace and pinpoint the issue, try one of the following:
3
3
  - Start the app in development mode by running \`next dev\`, then open "${a.route}" in your browser to investigate the error.
4
- - Rerun the production build with \`next build --debug-prerender\` to generate better stack traces.`))}function aa(a,b,c,d){if(d.syncDynamicErrorWithStack)throw _(a,d.syncDynamicErrorWithStack),new j.StaticGenBailoutError;if(0!==b){if(c.hasSuspenseAboveBody)return;let d=c.dynamicErrors;if(d.length>0){for(let b=0;b<d.length;b++)_(a,d[b]);throw new j.StaticGenBailoutError}if(c.hasDynamicViewport)throw console.error(`Route "${a.route}" has a \`generateViewport\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`),new j.StaticGenBailoutError;if(1===b)throw console.error(`Route "${a.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`),new j.StaticGenBailoutError}else if(!1===c.hasAllowedDynamic&&c.hasDynamicMetadata)throw console.error(`Route "${a.route}" has a \`generateMetadata\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) when the rest of the route does not. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`),new j.StaticGenBailoutError}function ab(a,b,c){if(c.hasSuspenseAboveBody)return[];if(0!==b){let d=c.dynamicErrors;if(d.length>0)return d;if(1===b)return[Object.defineProperty(new q.InvariantError(`Route "${a.route}" did not produce a static shell and Next.js was unable to determine a reason.`),"__NEXT_ERROR_CODE",{value:"E936",enumerable:!1,configurable:!0})]}else if(!1===c.hasAllowedDynamic&&0===c.dynamicErrors.length&&c.dynamicMetadata)return[c.dynamicMetadata];return[]}function ac(a,b){return a.runtimeStagePromise?a.runtimeStagePromise.then(()=>b):b}},44753,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return function a(b){if((0,g.isNextRouterError)(b)||(0,f.isBailoutToCSRError)(b)||(0,i.isDynamicServerError)(b)||(0,h.isDynamicPostpone)(b)||(0,e.isPostpone)(b)||(0,d.isHangingPromiseRejectionError)(b)||(0,h.isPrerenderInterruptedError)(b))throw b;b instanceof Error&&"cause"in b&&a(b.cause)}}});let d=a.r(35710),e=a.r(31101),f=a.r(41997),g=a.r(77747),h=a.r(54110),i=a.r(3326);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},47083,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return d}});let d=a.r(44753).unstable_rethrow;("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},21066,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return f.ReadonlyURLSearchParams},RedirectType:function(){return h.RedirectType},forbidden:function(){return j.forbidden},notFound:function(){return i.notFound},permanentRedirect:function(){return g.permanentRedirect},redirect:function(){return g.redirect},unauthorized:function(){return k.unauthorized},unstable_isUnrecognizedActionError:function(){return m},unstable_rethrow:function(){return l.unstable_rethrow}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(75718),g=a.r(22099),h=a.r(11026),i=a.r(28102),j=a.r(64177),k=a.r(88213),l=a.r(47083);function m(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},74137,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return h.ReadonlyURLSearchParams},RedirectType:function(){return l.RedirectType},ServerInsertedHTMLContext:function(){return j.ServerInsertedHTMLContext},forbidden:function(){return l.forbidden},notFound:function(){return l.notFound},permanentRedirect:function(){return l.permanentRedirect},redirect:function(){return l.redirect},unauthorized:function(){return l.unauthorized},unstable_isUnrecognizedActionError:function(){return k.unstable_isUnrecognizedActionError},unstable_rethrow:function(){return l.unstable_rethrow},useParams:function(){return r},usePathname:function(){return p},useRouter:function(){return q},useSearchParams:function(){return o},useSelectedLayoutSegment:function(){return t},useSelectedLayoutSegments:function(){return s},useServerInsertedHTML:function(){return j.useServerInsertedHTML}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(46058)._(a.r(72131)),g=a.r(9270),h=a.r(36313),i=a.r(39118),j=a.r(18341),k=a.r(57997),l=a.r(21066),m=a.r(54110).useDynamicRouteParams,n=a.r(54110).useDynamicSearchParams;function o(){n?.("useSearchParams()");let a=(0,f.useContext)(h.SearchParamsContext);return(0,f.useMemo)(()=>a?new h.ReadonlyURLSearchParams(a):null,[a])}function p(){return m?.("usePathname()"),(0,f.useContext)(h.PathnameContext)}function q(){let a=(0,f.useContext)(g.AppRouterContext);if(null===a)throw Object.defineProperty(Error("invariant expected app router to be mounted"),"__NEXT_ERROR_CODE",{value:"E238",enumerable:!1,configurable:!0});return a}function r(){return m?.("useParams()"),(0,f.useContext)(h.PathParamsContext)}function s(a="children"){m?.("useSelectedLayoutSegments()");let b=(0,f.useContext)(g.LayoutRouterContext);return b?(0,i.getSelectedLayoutSegmentPath)(b.parentTree,a):null}function t(a="children"){m?.("useSelectedLayoutSegment()"),(0,f.useContext)(h.NavigationPromisesContext);let b=s(a);return(0,i.computeSelectedLayoutSegment)(b,a)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},50944,(a,b,c)=>{b.exports=a.r(74137)},91119,86304,19032,a=>{"use strict";let b,c,d,e,f;var g,h=a.i(87924),i=a.i(68114);function j({className:a,size:b="default",...c}){return(0,h.jsx)("div",{"data-slot":"card","data-size":b,className:(0,i.cn)("group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",a),...c})}function k({className:a,...b}){return(0,h.jsx)("div",{"data-slot":"card-header",className:(0,i.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",a),...b})}function l({className:a,...b}){return(0,h.jsx)("div",{"data-slot":"card-title",className:(0,i.cn)("text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",a),...b})}function m({className:a,...b}){return(0,h.jsx)("div",{"data-slot":"card-content",className:(0,i.cn)("px-4 group-data-[size=sm]/card:px-3",a),...b})}a.s(["Card",()=>j,"CardContent",()=>m,"CardHeader",()=>k,"CardTitle",()=>l],91119);var n=a.i(84991),o=a.i(2840);let p=(0,a.i(187).cva)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function q({className:a,variant:b="default",render:c,...d}){var e;return e={defaultTagName:"span",props:(0,n.mergeProps)({className:(0,i.cn)(p({variant:b}),a)},d),render:c,state:{slot:"badge",variant:b}},(0,o.useRenderElement)(e.defaultTagName??"div",e,e)}a.s(["Badge",()=>q],86304);let r=[{id:"agent-1",name:"code-reviewer",host:"prod-us-east-1",status:"running",spend:{today:24.82,mtd:128.5,allTime:364},tokens:{today:62e4,mtd:32e5,allTime:91e5},errorCount:0,lastHeartbeatMinutesAgo:.5},{id:"agent-2",name:"deploy-bot",host:"prod-us-east-1",status:"running",spend:{today:12.15,mtd:64.2,allTime:238},tokens:{today:32e4,mtd:16e5,allTime:595e4},errorCount:1,lastHeartbeatMinutesAgo:1},{id:"agent-3",name:"data-pipeline",host:"prod-eu-west-1",status:"error",spend:{today:18.43,mtd:108.8,allTime:410},tokens:{today:49e4,mtd:272e4,allTime:1025e4},errorCount:7,lastHeartbeatMinutesAgo:12},{id:"agent-4",name:"customer-support",host:"prod-us-west-2",status:"stuck",spend:{today:22.67,mtd:118.3,allTime:353},tokens:{today:57e4,mtd:296e4,allTime:8825e3},errorCount:3,lastHeartbeatMinutesAgo:45},{id:"agent-5",name:"test-runner",host:"staging-1",status:"paused",spend:{today:1.03,mtd:6.4,allTime:22},tokens:{today:28e3,mtd:16e4,allTime:55e4},errorCount:0,lastHeartbeatMinutesAgo:120},{id:"agent-6",name:"doc-generator",host:"prod-us-east-1",status:"running",spend:{today:8.21,mtd:47.5,allTime:170},tokens:{today:22e4,mtd:119e4,allTime:425e4},errorCount:0,lastHeartbeatMinutesAgo:.2},{id:"agent-7",name:"security-scanner",host:"prod-eu-west-1",status:"stopped",spend:{today:.45,mtd:3.2,allTime:14},tokens:{today:12e3,mtd:8e4,allTime:35e4},errorCount:0,lastHeartbeatMinutesAgo:360},{id:"agent-8",name:"slack-responder",host:"prod-us-west-2",status:"running",spend:{today:16.89,mtd:86.4,allTime:271.57},tokens:{today:445e3,mtd:216e4,allTime:6775e3},errorCount:2,lastHeartbeatMinutesAgo:.1}],s={today:r.reduce((a,b)=>a+b.spend.today,0),mtd:r.reduce((a,b)=>a+b.spend.mtd,0),allTime:r.reduce((a,b)=>a+b.spend.allTime,0),tokens:{today:r.reduce((a,b)=>a+b.tokens.today,0),mtd:r.reduce((a,b)=>a+b.tokens.mtd,0),allTime:r.reduce((a,b)=>a+b.tokens.allTime,0)}},t=[{id:"proj-1",name:"ClaWatch",cost:297.43},{id:"proj-2",name:"Customer Support Bot",cost:341.82},{id:"proj-3",name:"Sales Pipeline Automation",cost:287.19},{id:"proj-4",name:"Code Review Assistant",cost:319.54},{id:"proj-5",name:"Documentation Generator",cost:381.28},{id:"proj-6",name:"Slack Integration",cost:215.31}].map(a=>({...a,pct:a.cost/s.allTime})),u={byModel:[{model:"claude-sonnet-4-20250514",costUsd:+(.65*s.allTime).toFixed(2)},{model:"claude-haiku-4-20250506",costUsd:+(.25*s.allTime).toFixed(2)},{model:"gpt-4o",costUsd:+(.1*s.allTime).toFixed(2)}]},v=new Date,w=a=>new Date(v.getTime()-6e4*a).toISOString(),x=a=>new Date(v.getTime()-36e5*a).toISOString(),y=[{id:"agent-1",name:"code-reviewer",host:"prod-us-east-1",status:"running",lastHeartbeat:w(.5),costUsd:4.82,tokenCount:124e4,errorCount:0},{id:"agent-2",name:"deploy-bot",host:"prod-us-east-1",status:"running",lastHeartbeat:w(1),costUsd:2.15,tokenCount:52e4,errorCount:1},{id:"agent-3",name:"data-pipeline",host:"prod-eu-west-1",status:"error",lastHeartbeat:w(12),costUsd:8.43,tokenCount:21e5,errorCount:7},{id:"agent-4",name:"customer-support",host:"prod-us-west-2",status:"stuck",lastHeartbeat:w(45),costUsd:12.67,tokenCount:34e5,errorCount:3},{id:"agent-5",name:"test-runner",host:"staging-1",status:"paused",lastHeartbeat:x(2),costUsd:1.03,tokenCount:28e4,errorCount:0},{id:"agent-6",name:"doc-generator",host:"prod-us-east-1",status:"running",lastHeartbeat:w(.2),costUsd:3.21,tokenCount:89e4,errorCount:0},{id:"agent-7",name:"security-scanner",host:"prod-eu-west-1",status:"stopped",lastHeartbeat:x(6),costUsd:.45,tokenCount:12e4,errorCount:0},{id:"agent-8",name:"slack-responder",host:"prod-us-west-2",status:"running",lastHeartbeat:w(.1),costUsd:6.89,tokenCount:178e4,errorCount:2}],z=[{id:"alert-1",agentId:"agent-4",type:"stuck",severity:"critical",message:"customer-support has not sent a heartbeat in 45 minutes",timestamp:w(44),acknowledged:!1},{id:"alert-2",agentId:"agent-3",type:"error",severity:"critical",message:"data-pipeline encountered 7 errors in the last hour",timestamp:w(10),acknowledged:!1},{id:"alert-3",agentId:"agent-4",type:"cost_spike",severity:"warning",message:"customer-support cost increased 340% in the last hour",timestamp:x(1),acknowledged:!1},{id:"alert-4",agentId:"agent-8",type:"loop_detected",severity:"warning",message:"slack-responder may be in a retry loop (similar outputs detected)",timestamp:w(30),acknowledged:!0},{id:"alert-5",agentId:"agent-2",type:"error",severity:"info",message:"deploy-bot encountered a transient API error (auto-recovered)",timestamp:x(3),acknowledged:!0}],A={totalUsd:+s.allTime.toFixed(2),totalTokens:s.tokens.allTime,sessionCount:42,byAgent:r.map(a=>({agentId:a.id,name:a.name,costUsd:a.spend.allTime,tokenCount:a.tokens.allTime})),byModel:u.byModel,byProject:t.map((a,b)=>({projectId:a.id,name:a.name,costUsd:+a.cost.toFixed(2),tokenCount:Math.floor(s.tokens.allTime*a.pct),sessionCount:5+2*b})),daily:(b=[.12,.15,.11,.17,.14,.16,.15],c=[4,6,3,7,5,6,5],Array.from({length:7},(a,d)=>{let e=new Date("2026-03-04");return e.setDate(e.getDate()+d),{date:e.toISOString().slice(0,10),costUsd:+(s.mtd*b[d]).toFixed(2),tokenCount:Math.floor(s.tokens.mtd*b[d]),sessionCount:c[d]}}))},B=[{id:"session-1",agentId:"agent-1",title:"Build ClaWatch dashboard with real-time alerts",status:"active",costUsd:3.47,tokenCount:892e3,messageCount:47,model:"claude-sonnet-4-20250514",startedAt:w(45),lastActivityAt:w(1),duration:2640,projects:[{id:"project-1",name:"Building ClaWatch"}]},{id:"session-2",agentId:"agent-2",title:"Fix authentication bug in user login flow",status:"completed",costUsd:1.23,tokenCount:34e4,messageCount:22,model:"claude-sonnet-4-20250514",startedAt:x(3),lastActivityAt:x(2),duration:3600,projects:[{id:"project-2",name:"Bug Fixes Sprint"}]},{id:"session-3",agentId:"agent-3",title:"Review PR #47 — add retry logic to API calls",status:"idle",costUsd:.87,tokenCount:215e3,messageCount:14,model:"claude-haiku-4-20250506",startedAt:w(90),lastActivityAt:w(12),duration:4680},{id:"session-4",agentId:"agent-1",title:"Implement WebSocket event streaming for agent heartbeats",status:"active",costUsd:5.12,tokenCount:134e4,messageCount:63,model:"claude-sonnet-4-20250514",startedAt:x(1.5),lastActivityAt:w(.5),duration:5400,projects:[{id:"project-1",name:"Building ClaWatch"},{id:"project-2",name:"Bug Fixes Sprint"}]},{id:"session-5",agentId:"agent-2",title:"Refactor database schema for multi-tenant support",status:"completed",costUsd:2.89,tokenCount:78e4,messageCount:38,model:"claude-sonnet-4-20250514",startedAt:x(5),lastActivityAt:x(4),duration:3600},{id:"session-6",agentId:"agent-3",title:"Debug failing CI pipeline — Jest timeout errors",status:"idle",costUsd:.54,tokenCount:145e3,messageCount:11,model:"claude-haiku-4-20250506",startedAt:w(30),lastActivityAt:w(8),duration:1320},{id:"session-7",agentId:"agent-1",title:"Add Telegram bot notification integration",status:"completed",costUsd:1.76,tokenCount:46e4,messageCount:29,model:"claude-sonnet-4-20250514",startedAt:x(8),lastActivityAt:x(7),duration:3600},{id:"session-8",agentId:"agent-2",title:"Write unit tests for cost calculation module",status:"active",costUsd:.92,tokenCount:248e3,messageCount:18,model:"claude-haiku-4-20250506",startedAt:w(15),lastActivityAt:w(2),duration:780},{id:"session-9",agentId:"agent-3",title:"Optimize SQL queries — reduce p95 latency from 800ms to 200ms",status:"completed",costUsd:4.31,tokenCount:112e4,messageCount:52,model:"claude-sonnet-4-20250514",startedAt:x(12),lastActivityAt:x(10),duration:7200},{id:"session-10",agentId:"agent-1",title:"Set up Docker Compose for local development environment",status:"idle",costUsd:.63,tokenCount:172e3,messageCount:9,model:"claude-haiku-4-20250506",startedAt:w(60),lastActivityAt:w(20),duration:2400}],C=t.map((a,b)=>({id:a.id,name:a.name,description:["Full-stack AI observability platform with real-time monitoring, session tracking, and cost analytics","Automated customer support with AI-powered ticket routing and response generation","Lead scoring, pipeline automation, and CRM integration powered by AI agents","Automated PR reviews with code quality analysis, security scanning, and style enforcement","AI-driven documentation generation from code, APIs, and architecture diagrams","Slack bot integration for team notifications, standup automation, and workflow triggers"][b],createdAt:x(48+24*b),updatedAt:w(5+15*b),sessionCount:3,totalCostUsd:+a.cost.toFixed(2)})),D=(d=[],e=0,(f=(a,b,c,f,g,h)=>{e++,d.push({sessionId:a,agentId:b,id:`tl-${e}`,role:c,timestamp:w(f),content:g,...h})})("session-1","agent-1","user",120,"Build the ClaWatch dashboard with real-time alerts and agent monitoring. Use Next.js 15 + shadcn/ui."),f("session-1","agent-1","assistant",119,"I'll build the ClaWatch dashboard. Let me start by setting up the project structure and examining existing code.",{model:"claude-sonnet-4-20250514",costUsd:.04}),f("session-3","agent-3","user",118,"Review the initial project setup and suggest architectural improvements for the monitoring system."),f("session-1","agent-1","tool",117,"src/\n app/\n dashboard/\n page.tsx\n layout.tsx\n components/\n ui/\n lib/\n types.ts\n api.ts",{toolName:"read"}),f("session-3","agent-3","assistant",116,"Looking at the project structure. I'll review the architecture and suggest improvements for scalability.",{model:"claude-haiku-4-20250506",costUsd:.01}),f("session-1","agent-1","assistant",115,"Project structure looks good. I'll create the type definitions for agents, sessions, alerts, and cost data.",{model:"claude-sonnet-4-20250514",costUsd:.06}),f("session-8","agent-2","user",114,"Write comprehensive unit tests for the cost calculation module including edge cases."),f("session-1","agent-1","tool",113,"File written: src/lib/types.ts (78 lines)",{toolName:"write"}),f("session-8","agent-2","assistant",112,"I'll write thorough unit tests for cost calculations. Let me first examine the module.",{model:"claude-haiku-4-20250506",costUsd:.02}),f("session-3","agent-3","tool",111,"export interface Agent {\n id: string;\n name: string;\n status: AgentStatus;\n ...",{toolName:"read"}),f("session-3","agent-3","assistant",110,"The type definitions look solid. I'd suggest adding a `duration` field to Session for better analytics. Also, the cost tracking should support per-model breakdown.",{model:"claude-haiku-4-20250506",costUsd:.02}),f("session-1","agent-1","assistant",108,"Good point from the review. I'll add duration tracking and per-model cost breakdown. Now creating the mock data layer.",{model:"claude-sonnet-4-20250514",costUsd:.05}),f("session-8","agent-2","tool",107,"export function calculateCost(tokens: number, model: string): number { ... }",{toolName:"read"}),f("session-1","agent-1","tool",105,"File written: src/lib/mock-data.ts (280 lines)",{toolName:"write"}),f("session-8","agent-2","assistant",104,"Found the cost module. I'll test standard pricing, cache discount calculations, multi-model sessions, and zero-token edge cases.",{model:"claude-haiku-4-20250506",costUsd:.03}),f("session-1","agent-1","system",103,"Context window: 45% utilized (90K/200K tokens)"),f("session-8","agent-2","tool",102,"File written: src/__tests__/cost-calculation.test.ts (156 lines)",{toolName:"write"}),f("session-1","agent-1","assistant",100,"Mock data created. Now building the dashboard page with agent cards, alert banners, and cost overview.",{model:"claude-sonnet-4-20250514",costUsd:.12}),f("session-3","agent-3","user",98,"Can you also review the API layer and check for error handling gaps?"),f("session-1","agent-1","tool",95,"File written: src/app/dashboard/page.tsx (320 lines)",{toolName:"write"}),f("session-8","agent-2","assistant",94,"All 12 test cases pass. Found one edge case where negative token counts could cause issues — adding a guard.",{model:"claude-haiku-4-20250506",costUsd:.02}),f("session-3","agent-3","assistant",92,"Reviewing API layer. The fetchJson wrapper needs better error handling — currently swallows network errors. I'll suggest adding retry logic and timeout handling.",{model:"claude-haiku-4-20250506",costUsd:.03}),f("session-8","agent-2","tool",90,"$ npm test -- --watchAll=false\n\nTest Suites: 1 passed, 1 total\nTests: 14 passed, 14 total\nTime: 2.834s",{toolName:"exec"}),f("session-1","agent-1","assistant",88,"Dashboard page done. Adding real-time polling with 5-second intervals and the tabbed interface for Agents/Sessions views.",{model:"claude-sonnet-4-20250514",costUsd:.08}),f("session-1","agent-1","tool",85,"$ npm run build\n\n ✓ Compiled successfully\n ✓ Generating static pages (5/5)\n\nBuild completed in 8.2s",{toolName:"exec"}),f("session-3","agent-3","assistant",83,"Here's my review summary:\n1. Add retry logic to fetchJson (3 retries with exponential backoff)\n2. Add request timeout (30s default)\n3. The mock fallback pattern is good but should log errors to a monitoring service\n4. Consider adding request deduplication for concurrent calls",{model:"claude-haiku-4-20250506",costUsd:.04}),f("session-1","agent-1","user",80,"Add session detail view with message timeline, cost breakdown by model, and token analysis."),f("session-1","agent-1","assistant",78,"I'll build the session detail page with a full message timeline. Each message type will have distinct visual treatment.",{model:"claude-sonnet-4-20250514",costUsd:.09}),f("session-1","agent-1","tool",75,"File written: src/app/dashboard/sessions/[id]/page.tsx (340 lines)",{toolName:"write"}),f("session-8","agent-2","assistant",72,"All tests passing. Adding integration tests for the API mock fallback pattern now.",{model:"claude-haiku-4-20250506",costUsd:.02}),f("session-1","agent-1","assistant",70,"Session detail page complete with:\n- Message timeline with user/assistant/tool/system styling\n- Cost breakdown by model with progress bars\n- Token breakdown (input/output/cache read/cache write)\n- Collapsible tool outputs",{model:"claude-sonnet-4-20250514",costUsd:.06}),f("session-1","agent-1","system",68,"Context window: 72% utilized (144K/200K tokens)"),f("session-1","agent-1","tool",65,"$ npm run build\n\n ✓ Compiled successfully\n ✓ Generating static pages (7/7)\n\nBuild completed in 9.1s",{toolName:"exec"}),f("session-1","agent-1","assistant",60,"Build passes. The ClaWatch dashboard is fully functional with real-time monitoring, session tracking, and cost analytics.",{model:"claude-sonnet-4-20250514",costUsd:.04}),d.sort((a,b)=>new Date(a.timestamp).getTime()-new Date(b.timestamp).getTime())),E=["Build dashboard with real-time monitoring","Implement API integration layer","Add automated test coverage","Optimize query performance","Set up CI/CD pipeline","Refactor authentication module","Add webhook event handlers","Build notification system","Implement rate limiting","Create admin management panel"],F=Object.fromEntries(t.map((a,b)=>{let c=+a.cost.toFixed(2),d=Math.floor(s.tokens.allTime*a.pct),e=40+20*b,f=[r[b%8],r[(b+1)%8],r[(b+3)%8]],g=[.5,.3,.2],h=f.map((h,i)=>{let j=i===f.length-1,k=j?g.slice(0,i).reduce((a,b)=>a+ +(c*b).toFixed(2),0):0,l=j?+(c-k).toFixed(2):+(c*g[i]).toFixed(2),m=j?g.slice(0,i).reduce((a,b)=>a+Math.round(e*b),0):0,n=j?e-m:Math.round(e*g[i]);return{id:`proj-${b+1}-session-${i+1}`,agentId:h.id,title:E[(3*b+i)%E.length],status:0===i?"active":1===i?"idle":"completed",costUsd:l,tokenCount:Math.floor(d*g[i]),messageCount:n,model:i%3==2?"claude-haiku-4-20250506":"claude-sonnet-4-20250514",startedAt:x(4*i+1),lastActivityAt:w(15*i+2),duration:1800+1200*i,projects:[{id:a.id,name:a.name}]}});return[a.id,{id:a.id,name:a.name,description:C[b]?.description||a.name,stats:{totalCostUsd:c,totalTokens:d,totalMessages:e,sessionCount:f.length,dateRange:{from:x(48+24*b),to:w(5+15*b)}},agentBreakdown:f.map((a,b)=>({agentId:a.id,costUsd:+(c*g[b]).toFixed(2),tokenCount:Math.floor(d*g[b]),messageCount:Math.floor(e*g[b]),percentage:100*g[b]})),sessions:h,timeline:0===b?D:[]}]})),G={};for(let a of B)G[a.id]={...a,costByModel:a.model.includes("sonnet")?[{model:"claude-sonnet-4-20250514",costUsd:.82*a.costUsd,tokenCount:Math.floor(.75*a.tokenCount)},{model:"claude-haiku-4-20250506",costUsd:.18*a.costUsd,tokenCount:Math.floor(.25*a.tokenCount)}]:[{model:"claude-haiku-4-20250506",costUsd:.65*a.costUsd,tokenCount:Math.floor(.6*a.tokenCount)},{model:"claude-sonnet-4-20250514",costUsd:.35*a.costUsd,tokenCount:Math.floor(.4*a.tokenCount)}],tokenBreakdown:{input:Math.floor(.35*a.tokenCount),output:Math.floor(.3*a.tokenCount),cacheRead:Math.floor(.25*a.tokenCount),cacheWrite:Math.floor(.1*a.tokenCount)},messages:(g=a.id,[{id:`${g}-msg-1`,role:"user",timestamp:w(44),content:"Build the ClaWatch dashboard with real-time alert monitoring. Use Next.js 15 with shadcn/ui components."},{id:`${g}-msg-2`,role:"assistant",timestamp:w(43),content:"I'll build the ClaWatch dashboard. Let me start by examining the project structure and existing code.",model:"claude-sonnet-4-20250514",costUsd:.03,tokenCount:12400},{id:`${g}-msg-3`,role:"tool",timestamp:w(43),content:"src/\n app/\n dashboard/\n page.tsx\n layout.tsx\n page.tsx\n components/\n ui/\n lib/\n types.ts\n api.ts\n mock-data.ts",toolName:"read",toolInput:'{"path": "src/"}'},{id:`${g}-msg-4`,role:"assistant",timestamp:w(42),content:"I can see the project structure. Let me read the existing types and API files to understand the data model.",model:"claude-sonnet-4-20250514",costUsd:.02,tokenCount:8200},{id:`${g}-msg-5`,role:"tool",timestamp:w(42),content:'export type AgentStatus = "running" | "paused" | "stopped" | "error" | "stuck";\n\nexport interface Agent {\n id: string;\n name: string;\n ...',toolName:"read",toolInput:'{"path": "src/lib/types.ts"}'},{id:`${g}-msg-6`,role:"assistant",timestamp:w(40),content:"Now I'll create the dashboard page with agent cards, alert banners, and cost overview panels. I'll use the existing shadcn/ui components.",model:"claude-sonnet-4-20250514",costUsd:.08,tokenCount:34600},{id:`${g}-msg-7`,role:"tool",timestamp:w(39),content:"File written: src/app/dashboard/page.tsx (358 lines)",toolName:"write",toolInput:'{"path": "src/app/dashboard/page.tsx", "content": "..."}'},{id:`${g}-msg-8`,role:"tool",timestamp:w(38),content:"$ npm run build\n\n ✓ Compiled successfully\n ✓ Collecting page data\n ✓ Generating static pages (5/5)\n ✓ Collecting build traces\n\nRoute (app) Size First Load JS\n├ ○ / 5.2 kB 92.1 kB\n└ ○ /dashboard 12.4 kB 99.3 kB",toolName:"exec",toolInput:'{"command": "npm run build"}'},{id:`${g}-msg-9`,role:"assistant",timestamp:w(37),content:"The build succeeded. Let me now add the real-time polling mechanism and alert notification sounds.",model:"claude-sonnet-4-20250514",costUsd:.04,tokenCount:15800},{id:`${g}-msg-10`,role:"tool",timestamp:w(36),content:"Lines 49-64 edited in src/app/dashboard/page.tsx",toolName:"edit",toolInput:'{"path": "src/app/dashboard/page.tsx", "old_string": "...", "new_string": "..."}'},{id:`${g}-msg-11`,role:"user",timestamp:w(35),content:"Can you also add a cost breakdown by model? Show it as horizontal progress bars."},{id:`${g}-msg-12`,role:"assistant",timestamp:w(34),content:"Sure! I'll add a cost breakdown section with progress bars for each model. Let me update the dashboard.",model:"claude-sonnet-4-20250514",costUsd:.06,tokenCount:24200},{id:`${g}-msg-13`,role:"tool",timestamp:w(33),content:"Lines 254-305 edited in src/app/dashboard/page.tsx",toolName:"edit",toolInput:'{"path": "src/app/dashboard/page.tsx", "old_string": "...", "new_string": "..."}'},{id:`${g}-msg-14`,role:"system",timestamp:w(32),content:"Context window: 78% utilized (156K/200K tokens)"},{id:`${g}-msg-15`,role:"assistant",timestamp:w(31),content:"I've added the cost breakdown panels. The dashboard now shows:\n\n1. **Agent cards** with status, cost, tokens, errors, and heartbeat\n2. **Alert banner** for critical/warning alerts\n3. **Cost by Agent** — horizontal progress bars\n4. **Cost by Model** — horizontal progress bars\n\nThe data refreshes every 5 seconds via polling.",model:"claude-sonnet-4-20250514",costUsd:.05,tokenCount:18900},{id:`${g}-msg-16`,role:"tool",timestamp:w(30),content:'{"results": [{"title": "shadcn/ui Tabs Component", "url": "https://ui.shadcn.com/docs/components/tabs"}]}',toolName:"web_search",toolInput:'{"query": "shadcn ui tabs component usage"}'},{id:`${g}-msg-17`,role:"assistant",timestamp:w(28),content:"Let me add a tabbed interface for Agents and Sessions views. I'll implement the tabs using a simple state-based approach.",model:"claude-sonnet-4-20250514",costUsd:.11,tokenCount:45200},{id:`${g}-msg-18`,role:"tool",timestamp:w(27),content:"$ npm run build\n\n ✓ Compiled successfully\n ✓ Linting and checking validity of types\n ✓ Generating static pages (5/5)\n\nBuild completed in 8.2s",toolName:"exec",toolInput:'{"command": "npm run build"}'},{id:`${g}-msg-19`,role:"assistant",timestamp:w(25),content:"Build passes. The dashboard now has Agents and Sessions tabs with full filtering and sorting. All existing functionality is preserved.",model:"claude-sonnet-4-20250514",costUsd:.03,tokenCount:11600},{id:`${g}-msg-20`,role:"tool",timestamp:w(24),content:"$ npm test -- --watchAll=false\n\nTest Suites: 3 passed, 3 total\nTests: 12 passed, 12 total\nTime: 4.231s",toolName:"exec",toolInput:'{"command": "npm test -- --watchAll=false"}'}])};let H={"alert-1":{alert:z[0],agent:{id:"agent-4",name:"customer-support",status:"stuck"},relatedErrors:[],context:{lastHeartbeat:w(45),stuckDurationMinutes:45,agentStatus:"stuck"}},"alert-2":{alert:z[1],agent:{id:"agent-3",name:"data-pipeline",status:"error"},relatedErrors:[{timestamp:w(12),error:"TypeError: Cannot read properties of undefined (reading 'map')"},{timestamp:w(11),error:"ECONNREFUSED: Connection refused to database at 127.0.0.1:5432"},{timestamp:w(11),error:"ECONNREFUSED: Connection refused to database at 127.0.0.1:5432"},{timestamp:w(10),error:"Unhandled promise rejection: Query timeout after 30000ms"},{timestamp:w(10),error:'FATAL: too many connections for role "app_user"'}]},"alert-3":{alert:z[2],agent:{id:"agent-4",name:"customer-support",status:"running"},relatedErrors:[],context:{currentCostUsd:12.67,thresholdUsd:10,overage:2.67}},"alert-4":{alert:z[3],agent:{id:"agent-8",name:"slack-responder",status:"running"},relatedErrors:[{timestamp:w(32),error:"Detected 5 consecutive similar outputs — possible retry loop"},{timestamp:w(31),error:"Output similarity score: 0.94 (threshold: 0.85)"}]},"alert-5":{alert:z[4],agent:{id:"agent-2",name:"deploy-bot",status:"running"},relatedErrors:[{timestamp:x(3),error:"API returned 503 Service Unavailable — auto-retried successfully"}]}},I=process.env.NEXT_PUBLIC_API_URL||"",J=process.env.NEXT_PUBLIC_API_KEY||"",K=!1;function L(){return K}function M(){K=!0}async function N(a,b){let c={"Content-Type":"application/json","ngrok-skip-browser-warning":"true",...J?{"X-ClaWatch-Key":J}:{},...b?.headers||{}},d=await fetch(`${I}${a}`,{...b,headers:c});if(!d.ok)throw Error(`API error: ${d.status}`);return d.json()}async function O(){try{return(await N("/api/profiles")).profiles}catch{return console.warn("API unreachable, skipping profiles"),[]}}async function P(){try{return(await N("/api/version")).version}catch{return console.warn("API unreachable, skipping version"),null}}async function Q(a,b){try{let c=new URLSearchParams;a&&c.set("status",a),b&&c.set("profile",b);let d=c.toString();return(await N(`/api/agents${d?`?${d}`:""}`)).agents}catch{return console.warn("API unreachable, falling back to mock data"),M(),y}}async function R(a){try{let b=new URLSearchParams;a?.limit!==void 0&&b.set("limit",String(a.limit)),a?.offset!==void 0&&b.set("offset",String(a.offset)),a?.severity&&b.set("severity",a.severity),a?.acknowledged!==void 0&&b.set("acknowledged",String(a.acknowledged)),a?.profile&&b.set("profile",a.profile);let c=b.toString();return await N(`/api/alerts${c?`?${c}`:""}`)}catch{return console.warn("API unreachable, falling back to mock data"),M(),{alerts:z,total:z.length}}}async function S(a){return await N(`/api/alerts/acknowledge-all${a?`?severity=${a}`:""}`,{method:"POST"})}async function T(a){try{let b=new URLSearchParams;a?.profile&&b.set("profile",a.profile),a?.from&&b.set("from",a.from),a?.to&&b.set("to",a.to);let c=b.toString();return await N(`/api/costs${c?`?${c}`:""}`)}catch{return console.warn("API unreachable, falling back to mock data"),M(),A}}async function U(a){await N(`/api/agents/${a}/pause`,{method:"POST"})}async function V(a){await N(`/api/agents/${a}/resume`,{method:"POST"})}async function W(a){await N(`/api/alerts/${a}/acknowledge`,{method:"POST"})}async function X(a){try{return await N(`/api/alerts/${a}/details`)}catch{console.warn("API unreachable, falling back to mock data"),M();let b=H[a];if(b)return b;throw Error("Alert not found")}}async function Y(a){let{agentId:b,status:c,sort:d,profile:e,limit:f,offset:g}=a||{};try{let a=new URLSearchParams;f&&a.set("limit",String(f)),g&&a.set("offset",String(g)),b&&a.set("agentId",b),c&&a.set("status",c),d&&a.set("sort",d),e&&a.set("profile",e);let h=a.toString(),i=await N(`/api/sessions${h?`?${h}`:""}`);return{sessions:i.sessions,total:i.total}}catch{return console.warn("API unreachable, falling back to mock data"),M(),{sessions:B,total:B.length}}}async function Z(a){try{return await N(`/api/sessions/${a}`)}catch{console.warn("API unreachable, falling back to mock data"),M();let b=G[a];if(b)return b;throw Error("Session not found")}}async function $(a){try{let b=a?`?profile=${a}`:"";return(await N(`/api/projects${b}`)).projects}catch{return console.warn("API unreachable, falling back to mock data"),M(),C}}async function _(a){try{return await N(`/api/projects/${a}`)}catch{console.warn("API unreachable, falling back to mock data"),M();let b=F[a];if(b)return b;throw Error("Project not found")}}async function aa(a,b){return await N("/api/projects",{method:"POST",body:JSON.stringify({name:a,description:b})})}async function ab(a,b){await N(`/api/sessions/${a}/projects`,{method:"PUT",body:JSON.stringify({projectIds:b})})}async function ac(a,b){await N(`/api/sessions/${a}/projects/${b}`,{method:"DELETE"})}function ad(a){let b=r.filter(a=>a.spend.allTime>50),c=t.map(a=>({projectId:a.id,name:a.name,pct:a.pct})),d=(a,d,e,f,g,h)=>{let i=d.reduce((a,b)=>a+b,0),j=((a,b)=>{let c=b.reduce((a,b)=>a+b,0),d=b.map(a=>42*a/c),e=d.map(a=>Math.floor(a)),f=42-e.reduce((a,b)=>a+b,0),g=d.map((a,b)=>({i:b,frac:a-e[b]})).sort((a,b)=>b.frac-a.frac);for(let a=0;a<f;a++)e[g[a].i]++;return e})(0,d);return{buckets:a.map((a,b)=>({date:a,costUsd:+(e*d[b]/i).toFixed(2),tokenCount:Math.floor(f*d[b]/i),sessionCount:j[b]})),byAgent:b.map(c=>({agentId:c.name,buckets:a.map((a,e)=>({date:a,costUsd:+(c.spend[g]*d[e]/i).toFixed(2),tokenCount:Math.floor(c.tokens[h]*d[e]/i),sessionCount:Math.max(0,Math.round(42/b.length*d[e]/i))}))})),byProject:c.map(({projectId:b,name:c,pct:g})=>({projectId:b,name:c,buckets:a.map((a,b)=>({date:a,costUsd:+(e*g*d[b]/i).toFixed(2),tokenCount:Math.floor(f*g*d[b]/i),sessionCount:Math.max(0,Math.round(42*g*d[b]/i))}))}))}};if("hour"===a){let a=[.02,.005,.003,.003,.003,.005,.008,.02,.04,.06,.07,.075,.065,.07,.075,.07,.065,.06,.055,.05,.04,.035,.03,.025],b=[.85,.95,1.2],c=[],e=[];for(let d=0;d<3;d++)for(let f=0;f<24;f++){c.push(a[f]*b[d]);let g=new Date;g.setDate(g.getDate()-(2-d)),g.setHours(f,0,0,0),e.push(g.toISOString().slice(0,13)+":00")}return d(e,c,3*s.today,3*s.tokens.today,"today","today")}if("week"===a)return d(Array.from({length:8},(a,b)=>{let c=new Date("2026-01-13");return c.setDate(c.getDate()+7*b),c.toISOString().slice(0,10)}),[.08,.09,.1,.11,.12,.13,.17,.2],s.allTime,s.tokens.allTime,"allTime","allTime");let e=Array.from({length:56},(a,b)=>{let c=new Date("2026-01-13");return c.setDate(c.getDate()+b),c.toISOString().slice(0,10)}),f=e.map((a,b)=>{let c=Math.floor(b/7),d=b%7;return(.7+.08*c)*(d>=5?.4:.8+d%3*.1)});return d(e,f,s.allTime,s.tokens.allTime,"allTime","allTime")}let ae={hour:ad("hour"),day:ad("day"),week:ad("week")};async function af(a){try{let b=new URLSearchParams;a.profile&&b.set("profile",a.profile),a.groupBy&&b.set("groupBy",a.groupBy),a.from&&b.set("from",a.from),a.to&&b.set("to",a.to);let c=b.toString();return await N(`/api/analytics${c?`?${c}`:""}`)}catch{return console.warn("API unreachable, falling back to mock analytics data"),ae[a.groupBy||"day"]||ae.day}}let ag={today:94.72,mtd:236.83,allTime:1842.57,byAgent:{anas:{today:36.21,mtd:69.12},ofek:{today:42.83,mtd:112.18},dor:{today:15.68,mtd:55.53}},limits:{type:null,amount:null,agentLimits:{}},usagePercent:null};async function ah(a){try{let b=a?`?profile=${a}`:"";return await N(`/api/spend${b}`)}catch{return console.warn("API unreachable, falling back to mock spend data"),ag}}async function ai(a){return await N("/api/settings/cost-limits",{method:"PUT",body:JSON.stringify(a)})}a.s(["acknowledgeAlert",()=>W,"acknowledgeAllAlerts",()=>S,"createProject",()=>aa,"getAgents",()=>Q,"getAlertDetails",()=>X,"getAlerts",()=>R,"getAnalytics",()=>af,"getCosts",()=>T,"getProfiles",()=>O,"getProject",()=>_,"getProjects",()=>$,"getSession",()=>Z,"getSessions",()=>Y,"getSpend",()=>ah,"getVersion",()=>P,"isUsingMockData",()=>L,"pauseAgent",()=>U,"removeSessionProject",()=>ac,"resumeAgent",()=>V,"setCostLimits",()=>ai,"setSessionProjects",()=>ab],19032)}];
4
+ - Rerun the production build with \`next build --debug-prerender\` to generate better stack traces.`))}function aa(a,b,c,d){if(d.syncDynamicErrorWithStack)throw _(a,d.syncDynamicErrorWithStack),new j.StaticGenBailoutError;if(0!==b){if(c.hasSuspenseAboveBody)return;let d=c.dynamicErrors;if(d.length>0){for(let b=0;b<d.length;b++)_(a,d[b]);throw new j.StaticGenBailoutError}if(c.hasDynamicViewport)throw console.error(`Route "${a.route}" has a \`generateViewport\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`),new j.StaticGenBailoutError;if(1===b)throw console.error(`Route "${a.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`),new j.StaticGenBailoutError}else if(!1===c.hasAllowedDynamic&&c.hasDynamicMetadata)throw console.error(`Route "${a.route}" has a \`generateMetadata\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) when the rest of the route does not. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`),new j.StaticGenBailoutError}function ab(a,b,c){if(c.hasSuspenseAboveBody)return[];if(0!==b){let d=c.dynamicErrors;if(d.length>0)return d;if(1===b)return[Object.defineProperty(new q.InvariantError(`Route "${a.route}" did not produce a static shell and Next.js was unable to determine a reason.`),"__NEXT_ERROR_CODE",{value:"E936",enumerable:!1,configurable:!0})]}else if(!1===c.hasAllowedDynamic&&0===c.dynamicErrors.length&&c.dynamicMetadata)return[c.dynamicMetadata];return[]}function ac(a,b){return a.runtimeStagePromise?a.runtimeStagePromise.then(()=>b):b}},44753,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return function a(b){if((0,g.isNextRouterError)(b)||(0,f.isBailoutToCSRError)(b)||(0,i.isDynamicServerError)(b)||(0,h.isDynamicPostpone)(b)||(0,e.isPostpone)(b)||(0,d.isHangingPromiseRejectionError)(b)||(0,h.isPrerenderInterruptedError)(b))throw b;b instanceof Error&&"cause"in b&&a(b.cause)}}});let d=a.r(35710),e=a.r(31101),f=a.r(41997),g=a.r(77747),h=a.r(54110),i=a.r(3326);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},47083,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return d}});let d=a.r(44753).unstable_rethrow;("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},21066,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return f.ReadonlyURLSearchParams},RedirectType:function(){return h.RedirectType},forbidden:function(){return j.forbidden},notFound:function(){return i.notFound},permanentRedirect:function(){return g.permanentRedirect},redirect:function(){return g.redirect},unauthorized:function(){return k.unauthorized},unstable_isUnrecognizedActionError:function(){return m},unstable_rethrow:function(){return l.unstable_rethrow}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(75718),g=a.r(22099),h=a.r(11026),i=a.r(28102),j=a.r(64177),k=a.r(88213),l=a.r(47083);function m(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},74137,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return h.ReadonlyURLSearchParams},RedirectType:function(){return l.RedirectType},ServerInsertedHTMLContext:function(){return j.ServerInsertedHTMLContext},forbidden:function(){return l.forbidden},notFound:function(){return l.notFound},permanentRedirect:function(){return l.permanentRedirect},redirect:function(){return l.redirect},unauthorized:function(){return l.unauthorized},unstable_isUnrecognizedActionError:function(){return k.unstable_isUnrecognizedActionError},unstable_rethrow:function(){return l.unstable_rethrow},useParams:function(){return r},usePathname:function(){return p},useRouter:function(){return q},useSearchParams:function(){return o},useSelectedLayoutSegment:function(){return t},useSelectedLayoutSegments:function(){return s},useServerInsertedHTML:function(){return j.useServerInsertedHTML}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(46058)._(a.r(72131)),g=a.r(9270),h=a.r(36313),i=a.r(39118),j=a.r(18341),k=a.r(57997),l=a.r(21066),m=a.r(54110).useDynamicRouteParams,n=a.r(54110).useDynamicSearchParams;function o(){n?.("useSearchParams()");let a=(0,f.useContext)(h.SearchParamsContext);return(0,f.useMemo)(()=>a?new h.ReadonlyURLSearchParams(a):null,[a])}function p(){return m?.("usePathname()"),(0,f.useContext)(h.PathnameContext)}function q(){let a=(0,f.useContext)(g.AppRouterContext);if(null===a)throw Object.defineProperty(Error("invariant expected app router to be mounted"),"__NEXT_ERROR_CODE",{value:"E238",enumerable:!1,configurable:!0});return a}function r(){return m?.("useParams()"),(0,f.useContext)(h.PathParamsContext)}function s(a="children"){m?.("useSelectedLayoutSegments()");let b=(0,f.useContext)(g.LayoutRouterContext);return b?(0,i.getSelectedLayoutSegmentPath)(b.parentTree,a):null}function t(a="children"){m?.("useSelectedLayoutSegment()"),(0,f.useContext)(h.NavigationPromisesContext);let b=s(a);return(0,i.computeSelectedLayoutSegment)(b,a)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},50944,(a,b,c)=>{b.exports=a.r(74137)},91119,86304,19032,a=>{"use strict";let b,c,d,e,f;var g,h=a.i(87924),i=a.i(68114);function j({className:a,size:b="default",...c}){return(0,h.jsx)("div",{"data-slot":"card","data-size":b,className:(0,i.cn)("group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",a),...c})}function k({className:a,...b}){return(0,h.jsx)("div",{"data-slot":"card-header",className:(0,i.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",a),...b})}function l({className:a,...b}){return(0,h.jsx)("div",{"data-slot":"card-title",className:(0,i.cn)("text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",a),...b})}function m({className:a,...b}){return(0,h.jsx)("div",{"data-slot":"card-content",className:(0,i.cn)("px-4 group-data-[size=sm]/card:px-3",a),...b})}a.s(["Card",()=>j,"CardContent",()=>m,"CardHeader",()=>k,"CardTitle",()=>l],91119);var n=a.i(84991),o=a.i(2840);let p=(0,a.i(187).cva)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function q({className:a,variant:b="default",render:c,...d}){var e;return e={defaultTagName:"span",props:(0,n.mergeProps)({className:(0,i.cn)(p({variant:b}),a)},d),render:c,state:{slot:"badge",variant:b}},(0,o.useRenderElement)(e.defaultTagName??"div",e,e)}a.s(["Badge",()=>q],86304);let r=[{id:"agent-1",name:"code-reviewer",host:"prod-us-east-1",status:"running",spend:{today:24.82,mtd:128.5,allTime:364},tokens:{today:62e4,mtd:32e5,allTime:91e5},errorCount:0,lastHeartbeatMinutesAgo:.5},{id:"agent-2",name:"deploy-bot",host:"prod-us-east-1",status:"running",spend:{today:12.15,mtd:64.2,allTime:238},tokens:{today:32e4,mtd:16e5,allTime:595e4},errorCount:1,lastHeartbeatMinutesAgo:1},{id:"agent-3",name:"data-pipeline",host:"prod-eu-west-1",status:"error",spend:{today:18.43,mtd:108.8,allTime:410},tokens:{today:49e4,mtd:272e4,allTime:1025e4},errorCount:7,lastHeartbeatMinutesAgo:12},{id:"agent-4",name:"customer-support",host:"prod-us-west-2",status:"stuck",spend:{today:22.67,mtd:118.3,allTime:353},tokens:{today:57e4,mtd:296e4,allTime:8825e3},errorCount:3,lastHeartbeatMinutesAgo:45},{id:"agent-5",name:"test-runner",host:"staging-1",status:"paused",spend:{today:1.03,mtd:6.4,allTime:22},tokens:{today:28e3,mtd:16e4,allTime:55e4},errorCount:0,lastHeartbeatMinutesAgo:120},{id:"agent-6",name:"doc-generator",host:"prod-us-east-1",status:"running",spend:{today:8.21,mtd:47.5,allTime:170},tokens:{today:22e4,mtd:119e4,allTime:425e4},errorCount:0,lastHeartbeatMinutesAgo:.2},{id:"agent-7",name:"security-scanner",host:"prod-eu-west-1",status:"stopped",spend:{today:.45,mtd:3.2,allTime:14},tokens:{today:12e3,mtd:8e4,allTime:35e4},errorCount:0,lastHeartbeatMinutesAgo:360},{id:"agent-8",name:"slack-responder",host:"prod-us-west-2",status:"running",spend:{today:16.89,mtd:86.4,allTime:271.57},tokens:{today:445e3,mtd:216e4,allTime:6775e3},errorCount:2,lastHeartbeatMinutesAgo:.1}],s={today:r.reduce((a,b)=>a+b.spend.today,0),mtd:r.reduce((a,b)=>a+b.spend.mtd,0),allTime:r.reduce((a,b)=>a+b.spend.allTime,0),tokens:{today:r.reduce((a,b)=>a+b.tokens.today,0),mtd:r.reduce((a,b)=>a+b.tokens.mtd,0),allTime:r.reduce((a,b)=>a+b.tokens.allTime,0)}},t=[{id:"proj-1",name:"ClaWatch",cost:297.43},{id:"proj-2",name:"Customer Support Bot",cost:341.82},{id:"proj-3",name:"Sales Pipeline Automation",cost:287.19},{id:"proj-4",name:"Code Review Assistant",cost:319.54},{id:"proj-5",name:"Documentation Generator",cost:381.28},{id:"proj-6",name:"Slack Integration",cost:215.31}].map(a=>({...a,pct:a.cost/s.allTime})),u={byModel:[{model:"claude-sonnet-4-20250514",costUsd:+(.65*s.allTime).toFixed(2)},{model:"claude-haiku-4-20250506",costUsd:+(.25*s.allTime).toFixed(2)},{model:"gpt-4o",costUsd:+(.1*s.allTime).toFixed(2)}]},v=new Date,w=a=>new Date(v.getTime()-6e4*a).toISOString(),x=a=>new Date(v.getTime()-36e5*a).toISOString(),y=[{id:"agent-1",name:"code-reviewer",host:"prod-us-east-1",status:"running",lastHeartbeat:w(.5),costUsd:4.82,tokenCount:124e4,errorCount:0},{id:"agent-2",name:"deploy-bot",host:"prod-us-east-1",status:"running",lastHeartbeat:w(1),costUsd:2.15,tokenCount:52e4,errorCount:1},{id:"agent-3",name:"data-pipeline",host:"prod-eu-west-1",status:"error",lastHeartbeat:w(12),costUsd:8.43,tokenCount:21e5,errorCount:7},{id:"agent-4",name:"customer-support",host:"prod-us-west-2",status:"stuck",lastHeartbeat:w(45),costUsd:12.67,tokenCount:34e5,errorCount:3},{id:"agent-5",name:"test-runner",host:"staging-1",status:"paused",lastHeartbeat:x(2),costUsd:1.03,tokenCount:28e4,errorCount:0},{id:"agent-6",name:"doc-generator",host:"prod-us-east-1",status:"running",lastHeartbeat:w(.2),costUsd:3.21,tokenCount:89e4,errorCount:0},{id:"agent-7",name:"security-scanner",host:"prod-eu-west-1",status:"stopped",lastHeartbeat:x(6),costUsd:.45,tokenCount:12e4,errorCount:0},{id:"agent-8",name:"slack-responder",host:"prod-us-west-2",status:"running",lastHeartbeat:w(.1),costUsd:6.89,tokenCount:178e4,errorCount:2}],z=[{id:"alert-1",agentId:"agent-4",type:"stuck",severity:"critical",message:"customer-support has not sent a heartbeat in 45 minutes",timestamp:w(44),acknowledged:!1},{id:"alert-2",agentId:"agent-3",type:"error",severity:"critical",message:"data-pipeline encountered 7 errors in the last hour",timestamp:w(10),acknowledged:!1},{id:"alert-3",agentId:"agent-4",type:"cost_spike",severity:"warning",message:"customer-support cost increased 340% in the last hour",timestamp:x(1),acknowledged:!1},{id:"alert-4",agentId:"agent-8",type:"loop_detected",severity:"warning",message:"slack-responder may be in a retry loop (similar outputs detected)",timestamp:w(30),acknowledged:!0},{id:"alert-5",agentId:"agent-2",type:"error",severity:"info",message:"deploy-bot encountered a transient API error (auto-recovered)",timestamp:x(3),acknowledged:!0}],A={totalUsd:+s.allTime.toFixed(2),totalTokens:s.tokens.allTime,sessionCount:42,byAgent:r.map(a=>({agentId:a.id,name:a.name,costUsd:a.spend.allTime,tokenCount:a.tokens.allTime})),byModel:u.byModel,byProject:t.map((a,b)=>({projectId:a.id,name:a.name,costUsd:+a.cost.toFixed(2),tokenCount:Math.floor(s.tokens.allTime*a.pct),sessionCount:5+2*b})),daily:(b=[.12,.15,.11,.17,.14,.16,.15],c=[4,6,3,7,5,6,5],Array.from({length:7},(a,d)=>{let e=new Date("2026-03-04");return e.setDate(e.getDate()+d),{date:e.toISOString().slice(0,10),costUsd:+(s.mtd*b[d]).toFixed(2),tokenCount:Math.floor(s.tokens.mtd*b[d]),sessionCount:c[d]}}))},B=[{id:"session-1",agentId:"agent-1",title:"Build ClaWatch dashboard with real-time alerts",status:"active",costUsd:3.47,tokenCount:892e3,messageCount:47,model:"claude-sonnet-4-20250514",startedAt:w(45),lastActivityAt:w(1),duration:2640,projects:[{id:"project-1",name:"Building ClaWatch"}]},{id:"session-2",agentId:"agent-2",title:"Fix authentication bug in user login flow",status:"completed",costUsd:1.23,tokenCount:34e4,messageCount:22,model:"claude-sonnet-4-20250514",startedAt:x(3),lastActivityAt:x(2),duration:3600,projects:[{id:"project-2",name:"Bug Fixes Sprint"}]},{id:"session-3",agentId:"agent-3",title:"Review PR #47 — add retry logic to API calls",status:"idle",costUsd:.87,tokenCount:215e3,messageCount:14,model:"claude-haiku-4-20250506",startedAt:w(90),lastActivityAt:w(12),duration:4680},{id:"session-4",agentId:"agent-1",title:"Implement WebSocket event streaming for agent heartbeats",status:"active",costUsd:5.12,tokenCount:134e4,messageCount:63,model:"claude-sonnet-4-20250514",startedAt:x(1.5),lastActivityAt:w(.5),duration:5400,projects:[{id:"project-1",name:"Building ClaWatch"},{id:"project-2",name:"Bug Fixes Sprint"}]},{id:"session-5",agentId:"agent-2",title:"Refactor database schema for multi-tenant support",status:"completed",costUsd:2.89,tokenCount:78e4,messageCount:38,model:"claude-sonnet-4-20250514",startedAt:x(5),lastActivityAt:x(4),duration:3600},{id:"session-6",agentId:"agent-3",title:"Debug failing CI pipeline — Jest timeout errors",status:"idle",costUsd:.54,tokenCount:145e3,messageCount:11,model:"claude-haiku-4-20250506",startedAt:w(30),lastActivityAt:w(8),duration:1320},{id:"session-7",agentId:"agent-1",title:"Add Telegram bot notification integration",status:"completed",costUsd:1.76,tokenCount:46e4,messageCount:29,model:"claude-sonnet-4-20250514",startedAt:x(8),lastActivityAt:x(7),duration:3600},{id:"session-8",agentId:"agent-2",title:"Write unit tests for cost calculation module",status:"active",costUsd:.92,tokenCount:248e3,messageCount:18,model:"claude-haiku-4-20250506",startedAt:w(15),lastActivityAt:w(2),duration:780},{id:"session-9",agentId:"agent-3",title:"Optimize SQL queries — reduce p95 latency from 800ms to 200ms",status:"completed",costUsd:4.31,tokenCount:112e4,messageCount:52,model:"claude-sonnet-4-20250514",startedAt:x(12),lastActivityAt:x(10),duration:7200},{id:"session-10",agentId:"agent-1",title:"Set up Docker Compose for local development environment",status:"idle",costUsd:.63,tokenCount:172e3,messageCount:9,model:"claude-haiku-4-20250506",startedAt:w(60),lastActivityAt:w(20),duration:2400}],C=t.map((a,b)=>({id:a.id,name:a.name,description:["Full-stack AI observability platform with real-time monitoring, session tracking, and cost analytics","Automated customer support with AI-powered ticket routing and response generation","Lead scoring, pipeline automation, and CRM integration powered by AI agents","Automated PR reviews with code quality analysis, security scanning, and style enforcement","AI-driven documentation generation from code, APIs, and architecture diagrams","Slack bot integration for team notifications, standup automation, and workflow triggers"][b],createdAt:x(48+24*b),updatedAt:w(5+15*b),sessionCount:3,totalCostUsd:+a.cost.toFixed(2)})),D=(d=[],e=0,(f=(a,b,c,f,g,h)=>{e++,d.push({sessionId:a,agentId:b,id:`tl-${e}`,role:c,timestamp:w(f),content:g,...h})})("session-1","agent-1","user",120,"Build the ClaWatch dashboard with real-time alerts and agent monitoring. Use Next.js 15 + shadcn/ui."),f("session-1","agent-1","assistant",119,"I'll build the ClaWatch dashboard. Let me start by setting up the project structure and examining existing code.",{model:"claude-sonnet-4-20250514",costUsd:.04}),f("session-3","agent-3","user",118,"Review the initial project setup and suggest architectural improvements for the monitoring system."),f("session-1","agent-1","tool",117,"src/\n app/\n dashboard/\n page.tsx\n layout.tsx\n components/\n ui/\n lib/\n types.ts\n api.ts",{toolName:"read"}),f("session-3","agent-3","assistant",116,"Looking at the project structure. I'll review the architecture and suggest improvements for scalability.",{model:"claude-haiku-4-20250506",costUsd:.01}),f("session-1","agent-1","assistant",115,"Project structure looks good. I'll create the type definitions for agents, sessions, alerts, and cost data.",{model:"claude-sonnet-4-20250514",costUsd:.06}),f("session-8","agent-2","user",114,"Write comprehensive unit tests for the cost calculation module including edge cases."),f("session-1","agent-1","tool",113,"File written: src/lib/types.ts (78 lines)",{toolName:"write"}),f("session-8","agent-2","assistant",112,"I'll write thorough unit tests for cost calculations. Let me first examine the module.",{model:"claude-haiku-4-20250506",costUsd:.02}),f("session-3","agent-3","tool",111,"export interface Agent {\n id: string;\n name: string;\n status: AgentStatus;\n ...",{toolName:"read"}),f("session-3","agent-3","assistant",110,"The type definitions look solid. I'd suggest adding a `duration` field to Session for better analytics. Also, the cost tracking should support per-model breakdown.",{model:"claude-haiku-4-20250506",costUsd:.02}),f("session-1","agent-1","assistant",108,"Good point from the review. I'll add duration tracking and per-model cost breakdown. Now creating the mock data layer.",{model:"claude-sonnet-4-20250514",costUsd:.05}),f("session-8","agent-2","tool",107,"export function calculateCost(tokens: number, model: string): number { ... }",{toolName:"read"}),f("session-1","agent-1","tool",105,"File written: src/lib/mock-data.ts (280 lines)",{toolName:"write"}),f("session-8","agent-2","assistant",104,"Found the cost module. I'll test standard pricing, cache discount calculations, multi-model sessions, and zero-token edge cases.",{model:"claude-haiku-4-20250506",costUsd:.03}),f("session-1","agent-1","system",103,"Context window: 45% utilized (90K/200K tokens)"),f("session-8","agent-2","tool",102,"File written: src/__tests__/cost-calculation.test.ts (156 lines)",{toolName:"write"}),f("session-1","agent-1","assistant",100,"Mock data created. Now building the dashboard page with agent cards, alert banners, and cost overview.",{model:"claude-sonnet-4-20250514",costUsd:.12}),f("session-3","agent-3","user",98,"Can you also review the API layer and check for error handling gaps?"),f("session-1","agent-1","tool",95,"File written: src/app/dashboard/page.tsx (320 lines)",{toolName:"write"}),f("session-8","agent-2","assistant",94,"All 12 test cases pass. Found one edge case where negative token counts could cause issues — adding a guard.",{model:"claude-haiku-4-20250506",costUsd:.02}),f("session-3","agent-3","assistant",92,"Reviewing API layer. The fetchJson wrapper needs better error handling — currently swallows network errors. I'll suggest adding retry logic and timeout handling.",{model:"claude-haiku-4-20250506",costUsd:.03}),f("session-8","agent-2","tool",90,"$ npm test -- --watchAll=false\n\nTest Suites: 1 passed, 1 total\nTests: 14 passed, 14 total\nTime: 2.834s",{toolName:"exec"}),f("session-1","agent-1","assistant",88,"Dashboard page done. Adding real-time polling with 5-second intervals and the tabbed interface for Agents/Sessions views.",{model:"claude-sonnet-4-20250514",costUsd:.08}),f("session-1","agent-1","tool",85,"$ npm run build\n\n ✓ Compiled successfully\n ✓ Generating static pages (5/5)\n\nBuild completed in 8.2s",{toolName:"exec"}),f("session-3","agent-3","assistant",83,"Here's my review summary:\n1. Add retry logic to fetchJson (3 retries with exponential backoff)\n2. Add request timeout (30s default)\n3. The mock fallback pattern is good but should log errors to a monitoring service\n4. Consider adding request deduplication for concurrent calls",{model:"claude-haiku-4-20250506",costUsd:.04}),f("session-1","agent-1","user",80,"Add session detail view with message timeline, cost breakdown by model, and token analysis."),f("session-1","agent-1","assistant",78,"I'll build the session detail page with a full message timeline. Each message type will have distinct visual treatment.",{model:"claude-sonnet-4-20250514",costUsd:.09}),f("session-1","agent-1","tool",75,"File written: src/app/dashboard/sessions/[id]/page.tsx (340 lines)",{toolName:"write"}),f("session-8","agent-2","assistant",72,"All tests passing. Adding integration tests for the API mock fallback pattern now.",{model:"claude-haiku-4-20250506",costUsd:.02}),f("session-1","agent-1","assistant",70,"Session detail page complete with:\n- Message timeline with user/assistant/tool/system styling\n- Cost breakdown by model with progress bars\n- Token breakdown (input/output/cache read/cache write)\n- Collapsible tool outputs",{model:"claude-sonnet-4-20250514",costUsd:.06}),f("session-1","agent-1","system",68,"Context window: 72% utilized (144K/200K tokens)"),f("session-1","agent-1","tool",65,"$ npm run build\n\n ✓ Compiled successfully\n ✓ Generating static pages (7/7)\n\nBuild completed in 9.1s",{toolName:"exec"}),f("session-1","agent-1","assistant",60,"Build passes. The ClaWatch dashboard is fully functional with real-time monitoring, session tracking, and cost analytics.",{model:"claude-sonnet-4-20250514",costUsd:.04}),d.sort((a,b)=>new Date(a.timestamp).getTime()-new Date(b.timestamp).getTime())),E=["Build dashboard with real-time monitoring","Implement API integration layer","Add automated test coverage","Optimize query performance","Set up CI/CD pipeline","Refactor authentication module","Add webhook event handlers","Build notification system","Implement rate limiting","Create admin management panel"],F=Object.fromEntries(t.map((a,b)=>{let c=+a.cost.toFixed(2),d=Math.floor(s.tokens.allTime*a.pct),e=40+20*b,f=[r[b%8],r[(b+1)%8],r[(b+3)%8]],g=[.5,.3,.2],h=f.map((h,i)=>{let j=i===f.length-1,k=j?g.slice(0,i).reduce((a,b)=>a+ +(c*b).toFixed(2),0):0,l=j?+(c-k).toFixed(2):+(c*g[i]).toFixed(2),m=j?g.slice(0,i).reduce((a,b)=>a+Math.round(e*b),0):0,n=j?e-m:Math.round(e*g[i]);return{id:`proj-${b+1}-session-${i+1}`,agentId:h.id,title:E[(3*b+i)%E.length],status:0===i?"active":1===i?"idle":"completed",costUsd:l,tokenCount:Math.floor(d*g[i]),messageCount:n,model:i%3==2?"claude-haiku-4-20250506":"claude-sonnet-4-20250514",startedAt:x(4*i+1),lastActivityAt:w(15*i+2),duration:1800+1200*i,projects:[{id:a.id,name:a.name}]}});return[a.id,{id:a.id,name:a.name,description:C[b]?.description||a.name,stats:{totalCostUsd:c,totalTokens:d,totalMessages:e,sessionCount:f.length,dateRange:{from:x(48+24*b),to:w(5+15*b)}},agentBreakdown:f.map((a,b)=>({agentId:a.id,costUsd:+(c*g[b]).toFixed(2),tokenCount:Math.floor(d*g[b]),messageCount:Math.floor(e*g[b]),percentage:100*g[b]})),sessions:h,timeline:0===b?D:[]}]})),G={};for(let a of B)G[a.id]={...a,costByModel:a.model.includes("sonnet")?[{model:"claude-sonnet-4-20250514",costUsd:.82*a.costUsd,tokenCount:Math.floor(.75*a.tokenCount)},{model:"claude-haiku-4-20250506",costUsd:.18*a.costUsd,tokenCount:Math.floor(.25*a.tokenCount)}]:[{model:"claude-haiku-4-20250506",costUsd:.65*a.costUsd,tokenCount:Math.floor(.6*a.tokenCount)},{model:"claude-sonnet-4-20250514",costUsd:.35*a.costUsd,tokenCount:Math.floor(.4*a.tokenCount)}],tokenBreakdown:{input:Math.floor(.35*a.tokenCount),output:Math.floor(.3*a.tokenCount),cacheRead:Math.floor(.25*a.tokenCount),cacheWrite:Math.floor(.1*a.tokenCount)},messages:(g=a.id,[{id:`${g}-msg-1`,role:"user",timestamp:w(44),content:"Build the ClaWatch dashboard with real-time alert monitoring. Use Next.js 15 with shadcn/ui components."},{id:`${g}-msg-2`,role:"assistant",timestamp:w(43),content:"I'll build the ClaWatch dashboard. Let me start by examining the project structure and existing code.",model:"claude-sonnet-4-20250514",costUsd:.03,tokenCount:12400},{id:`${g}-msg-3`,role:"tool",timestamp:w(43),content:"src/\n app/\n dashboard/\n page.tsx\n layout.tsx\n page.tsx\n components/\n ui/\n lib/\n types.ts\n api.ts\n mock-data.ts",toolName:"read",toolInput:'{"path": "src/"}'},{id:`${g}-msg-4`,role:"assistant",timestamp:w(42),content:"I can see the project structure. Let me read the existing types and API files to understand the data model.",model:"claude-sonnet-4-20250514",costUsd:.02,tokenCount:8200},{id:`${g}-msg-5`,role:"tool",timestamp:w(42),content:'export type AgentStatus = "running" | "paused" | "stopped" | "error" | "stuck";\n\nexport interface Agent {\n id: string;\n name: string;\n ...',toolName:"read",toolInput:'{"path": "src/lib/types.ts"}'},{id:`${g}-msg-6`,role:"assistant",timestamp:w(40),content:"Now I'll create the dashboard page with agent cards, alert banners, and cost overview panels. I'll use the existing shadcn/ui components.",model:"claude-sonnet-4-20250514",costUsd:.08,tokenCount:34600},{id:`${g}-msg-7`,role:"tool",timestamp:w(39),content:"File written: src/app/dashboard/page.tsx (358 lines)",toolName:"write",toolInput:'{"path": "src/app/dashboard/page.tsx", "content": "..."}'},{id:`${g}-msg-8`,role:"tool",timestamp:w(38),content:"$ npm run build\n\n ✓ Compiled successfully\n ✓ Collecting page data\n ✓ Generating static pages (5/5)\n ✓ Collecting build traces\n\nRoute (app) Size First Load JS\n├ ○ / 5.2 kB 92.1 kB\n└ ○ /dashboard 12.4 kB 99.3 kB",toolName:"exec",toolInput:'{"command": "npm run build"}'},{id:`${g}-msg-9`,role:"assistant",timestamp:w(37),content:"The build succeeded. Let me now add the real-time polling mechanism and alert notification sounds.",model:"claude-sonnet-4-20250514",costUsd:.04,tokenCount:15800},{id:`${g}-msg-10`,role:"tool",timestamp:w(36),content:"Lines 49-64 edited in src/app/dashboard/page.tsx",toolName:"edit",toolInput:'{"path": "src/app/dashboard/page.tsx", "old_string": "...", "new_string": "..."}'},{id:`${g}-msg-11`,role:"user",timestamp:w(35),content:"Can you also add a cost breakdown by model? Show it as horizontal progress bars."},{id:`${g}-msg-12`,role:"assistant",timestamp:w(34),content:"Sure! I'll add a cost breakdown section with progress bars for each model. Let me update the dashboard.",model:"claude-sonnet-4-20250514",costUsd:.06,tokenCount:24200},{id:`${g}-msg-13`,role:"tool",timestamp:w(33),content:"Lines 254-305 edited in src/app/dashboard/page.tsx",toolName:"edit",toolInput:'{"path": "src/app/dashboard/page.tsx", "old_string": "...", "new_string": "..."}'},{id:`${g}-msg-14`,role:"system",timestamp:w(32),content:"Context window: 78% utilized (156K/200K tokens)"},{id:`${g}-msg-15`,role:"assistant",timestamp:w(31),content:"I've added the cost breakdown panels. The dashboard now shows:\n\n1. **Agent cards** with status, cost, tokens, errors, and heartbeat\n2. **Alert banner** for critical/warning alerts\n3. **Cost by Agent** — horizontal progress bars\n4. **Cost by Model** — horizontal progress bars\n\nThe data refreshes every 5 seconds via polling.",model:"claude-sonnet-4-20250514",costUsd:.05,tokenCount:18900},{id:`${g}-msg-16`,role:"tool",timestamp:w(30),content:'{"results": [{"title": "shadcn/ui Tabs Component", "url": "https://ui.shadcn.com/docs/components/tabs"}]}',toolName:"web_search",toolInput:'{"query": "shadcn ui tabs component usage"}'},{id:`${g}-msg-17`,role:"assistant",timestamp:w(28),content:"Let me add a tabbed interface for Agents and Sessions views. I'll implement the tabs using a simple state-based approach.",model:"claude-sonnet-4-20250514",costUsd:.11,tokenCount:45200},{id:`${g}-msg-18`,role:"tool",timestamp:w(27),content:"$ npm run build\n\n ✓ Compiled successfully\n ✓ Linting and checking validity of types\n ✓ Generating static pages (5/5)\n\nBuild completed in 8.2s",toolName:"exec",toolInput:'{"command": "npm run build"}'},{id:`${g}-msg-19`,role:"assistant",timestamp:w(25),content:"Build passes. The dashboard now has Agents and Sessions tabs with full filtering and sorting. All existing functionality is preserved.",model:"claude-sonnet-4-20250514",costUsd:.03,tokenCount:11600},{id:`${g}-msg-20`,role:"tool",timestamp:w(24),content:"$ npm test -- --watchAll=false\n\nTest Suites: 3 passed, 3 total\nTests: 12 passed, 12 total\nTime: 4.231s",toolName:"exec",toolInput:'{"command": "npm test -- --watchAll=false"}'}])};let H={"alert-1":{alert:z[0],agent:{id:"agent-4",name:"customer-support",status:"stuck"},relatedErrors:[],context:{lastHeartbeat:w(45),stuckDurationMinutes:45,agentStatus:"stuck"}},"alert-2":{alert:z[1],agent:{id:"agent-3",name:"data-pipeline",status:"error"},relatedErrors:[{timestamp:w(12),error:"TypeError: Cannot read properties of undefined (reading 'map')"},{timestamp:w(11),error:"ECONNREFUSED: Connection refused to database at 127.0.0.1:5432"},{timestamp:w(11),error:"ECONNREFUSED: Connection refused to database at 127.0.0.1:5432"},{timestamp:w(10),error:"Unhandled promise rejection: Query timeout after 30000ms"},{timestamp:w(10),error:'FATAL: too many connections for role "app_user"'}]},"alert-3":{alert:z[2],agent:{id:"agent-4",name:"customer-support",status:"running"},relatedErrors:[],context:{currentCostUsd:12.67,thresholdUsd:10,overage:2.67}},"alert-4":{alert:z[3],agent:{id:"agent-8",name:"slack-responder",status:"running"},relatedErrors:[{timestamp:w(32),error:"Detected 5 consecutive similar outputs — possible retry loop"},{timestamp:w(31),error:"Output similarity score: 0.94 (threshold: 0.85)"}]},"alert-5":{alert:z[4],agent:{id:"agent-2",name:"deploy-bot",status:"running"},relatedErrors:[{timestamp:x(3),error:"API returned 503 Service Unavailable — auto-retried successfully"}]}},I=process.env.NEXT_PUBLIC_API_URL||"",J=process.env.NEXT_PUBLIC_API_KEY||"",K=!1;function L(){return K}function M(){K=!0}async function N(a,b){let c={"Content-Type":"application/json","ngrok-skip-browser-warning":"true",...J?{"X-ClaWatch-Key":J}:{},...b?.headers||{}},d=await fetch(`${I}${a}`,{...b,headers:c});if(!d.ok)throw Error(`API error: ${d.status}`);return d.json()}async function O(){try{return(await N("/api/profiles")).profiles}catch{return console.warn("API unreachable, skipping profiles"),[]}}async function P(){try{return(await N("/api/version")).version}catch{return console.warn("API unreachable, skipping version"),null}}async function Q(a,b){try{let c=new URLSearchParams;a&&c.set("status",a),b&&c.set("profile",b);let d=c.toString();return(await N(`/api/agents${d?`?${d}`:""}`)).agents}catch{return console.warn("API unreachable, falling back to mock data"),M(),y}}async function R(a){try{let b=new URLSearchParams;a?.limit!==void 0&&b.set("limit",String(a.limit)),a?.offset!==void 0&&b.set("offset",String(a.offset)),a?.severity&&b.set("severity",a.severity),a?.acknowledged!==void 0&&b.set("acknowledged",String(a.acknowledged)),a?.profile&&b.set("profile",a.profile);let c=b.toString();return await N(`/api/alerts${c?`?${c}`:""}`)}catch{return console.warn("API unreachable, falling back to mock data"),M(),{alerts:z,total:z.length}}}async function S(a){return await N(`/api/alerts/acknowledge-all${a?`?severity=${a}`:""}`,{method:"POST"})}async function T(a){try{let b=new URLSearchParams;a?.profile&&b.set("profile",a.profile),a?.from&&b.set("from",a.from),a?.to&&b.set("to",a.to);let c=b.toString();return await N(`/api/costs${c?`?${c}`:""}`)}catch{return console.warn("API unreachable, falling back to mock data"),M(),A}}async function U(a){await N(`/api/agents/${a}/pause`,{method:"POST"})}async function V(a){await N(`/api/agents/${a}/resume`,{method:"POST"})}async function W(a){await N(`/api/alerts/${a}/acknowledge`,{method:"POST"})}async function X(a){try{return await N(`/api/alerts/${a}/details`)}catch{console.warn("API unreachable, falling back to mock data"),M();let b=H[a];if(b)return b;throw Error("Alert not found")}}async function Y(a){let{agentId:b,status:c,sort:d,profile:e,limit:f,offset:g}=a||{};try{let a=new URLSearchParams;f&&a.set("limit",String(f)),g&&a.set("offset",String(g)),b&&a.set("agentId",b),c&&a.set("status",c),d&&a.set("sort",d),e&&a.set("profile",e);let h=a.toString(),i=await N(`/api/sessions${h?`?${h}`:""}`);return{sessions:i.sessions,total:i.total}}catch{return console.warn("API unreachable, falling back to mock data"),M(),{sessions:B,total:B.length}}}async function Z(a){try{return await N(`/api/sessions/${a}`)}catch{console.warn("API unreachable, falling back to mock data"),M();let b=G[a];if(b)return b;throw Error("Session not found")}}async function $(a){try{let b=a?`?profile=${a}`:"";return(await N(`/api/projects${b}`)).projects}catch{return console.warn("API unreachable, falling back to mock data"),M(),C}}async function _(a){try{return await N(`/api/projects/${a}`)}catch{console.warn("API unreachable, falling back to mock data"),M();let b=F[a];if(b)return b;throw Error("Project not found")}}async function aa(a,b){return await N("/api/projects",{method:"POST",body:JSON.stringify({name:a,description:b})})}async function ab(a,b){await N(`/api/sessions/${a}/projects`,{method:"PUT",body:JSON.stringify({projectIds:b})})}async function ac(a,b){await N(`/api/sessions/${a}/projects/${b}`,{method:"DELETE"})}function ad(a){let b=r.filter(a=>a.spend.allTime>50),c=t.map(a=>({projectId:a.id,name:a.name,pct:a.pct})),d=(a,d,e,f,g,h)=>{let i=d.reduce((a,b)=>a+b,0),j=((a,b)=>{let c=b.reduce((a,b)=>a+b,0),d=b.map(a=>42*a/c),e=d.map(a=>Math.floor(a)),f=42-e.reduce((a,b)=>a+b,0),g=d.map((a,b)=>({i:b,frac:a-e[b]})).sort((a,b)=>b.frac-a.frac);for(let a=0;a<f;a++)e[g[a].i]++;return e})(0,d);return{buckets:a.map((a,b)=>({date:a,costUsd:+(e*d[b]/i).toFixed(2),tokenCount:Math.floor(f*d[b]/i),sessionCount:j[b]})),byAgent:b.map(c=>({agentId:c.name,buckets:a.map((a,e)=>({date:a,costUsd:+(c.spend[g]*d[e]/i).toFixed(2),tokenCount:Math.floor(c.tokens[h]*d[e]/i),sessionCount:Math.max(0,Math.round(42/b.length*d[e]/i))}))})),byProject:c.map(({projectId:b,name:c,pct:g})=>({projectId:b,name:c,buckets:a.map((a,b)=>({date:a,costUsd:+(e*g*d[b]/i).toFixed(2),tokenCount:Math.floor(f*g*d[b]/i),sessionCount:Math.max(0,Math.round(42*g*d[b]/i))}))}))}};if("hour"===a){let a=[.02,.005,.003,.003,.003,.005,.008,.02,.04,.06,.07,.075,.065,.07,.075,.07,.065,.06,.055,.05,.04,.035,.03,.025],b=[.85,.95,1.2],c=[],e=[];for(let d=0;d<3;d++)for(let f=0;f<24;f++){c.push(a[f]*b[d]);let g=new Date;g.setDate(g.getDate()-(2-d)),g.setHours(f,0,0,0),e.push(g.toISOString().slice(0,13)+":00")}return d(e,c,3*s.today,3*s.tokens.today,"today","today")}if("week"===a)return d(Array.from({length:8},(a,b)=>{let c=new Date("2026-01-13");return c.setDate(c.getDate()+7*b),c.toISOString().slice(0,10)}),[.08,.09,.1,.11,.12,.13,.17,.2],s.allTime,s.tokens.allTime,"allTime","allTime");let e=Array.from({length:56},(a,b)=>{let c=new Date("2026-01-13");return c.setDate(c.getDate()+b),c.toISOString().slice(0,10)}),f=e.map((a,b)=>{let c=Math.floor(b/7),d=b%7;return(.7+.08*c)*(d>=5?.4:.8+d%3*.1)});return d(e,f,s.allTime,s.tokens.allTime,"allTime","allTime")}let ae={hour:ad("hour"),day:ad("day"),week:ad("week")};async function af(a){try{let b=new URLSearchParams;a.profile&&b.set("profile",a.profile),a.groupBy&&b.set("groupBy",a.groupBy),a.from&&b.set("from",a.from),a.to&&b.set("to",a.to);let c=b.toString();return await N(`/api/analytics${c?`?${c}`:""}`)}catch{return console.warn("API unreachable, falling back to mock analytics data"),function(a,b,c){if(!b&&!c)return a;let d=b?new Date(b.includes("T")&&!b.endsWith("Z")?b+":00Z":b+(b.includes("T")?"":"T00:00:00Z")).getTime():0,e=c?new Date(c.includes("T")&&!c.endsWith("Z")?c+":00Z":c+(c.includes("T")?"":"T23:59:59Z")).getTime():1/0,f=a=>{let b=new Date(a.includes("T")&&!a.endsWith("Z")?a+":00Z":a+(a.includes("T")?"":"T00:00:00Z"));return b.getTime()>=d&&b.getTime()<=e};return{buckets:a.buckets.filter(a=>f(a.date)),byAgent:a.byAgent.map(a=>({...a,buckets:a.buckets.filter(a=>f(a.date))})),byProject:a.byProject.map(a=>({...a,buckets:a.buckets.filter(a=>f(a.date))}))}}(ae[a.groupBy||"day"]||ae.day,a.from,a.to)}}let ag={today:94.72,mtd:236.83,allTime:1842.57,byAgent:{anas:{today:36.21,mtd:69.12},ofek:{today:42.83,mtd:112.18},dor:{today:15.68,mtd:55.53}},limits:{type:null,amount:null,agentLimits:{}},usagePercent:null};async function ah(a){try{let b=a?`?profile=${a}`:"";return await N(`/api/spend${b}`)}catch{return console.warn("API unreachable, falling back to mock spend data"),ag}}async function ai(a){return await N("/api/settings/cost-limits",{method:"PUT",body:JSON.stringify(a)})}a.s(["acknowledgeAlert",()=>W,"acknowledgeAllAlerts",()=>S,"createProject",()=>aa,"getAgents",()=>Q,"getAlertDetails",()=>X,"getAlerts",()=>R,"getAnalytics",()=>af,"getCosts",()=>T,"getProfiles",()=>O,"getProject",()=>_,"getProjects",()=>$,"getSession",()=>Z,"getSessions",()=>Y,"getSpend",()=>ah,"getVersion",()=>P,"isUsingMockData",()=>L,"pauseAgent",()=>U,"removeSessionProject",()=>ac,"resumeAgent",()=>V,"setCostLimits",()=>ai,"setSessionProjects",()=>ab],19032)}];
5
5
 
6
6
  //# sourceMappingURL=_b0ae6d33._.js.map