forge-openclaw-plugin 0.3.3 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{action-bar-5Ii4UzHa.js → action-bar-DBZ38L_6.js} +1 -1
- package/dist/assets/{activity-page-CWjTKFY3.js → activity-page-BJxUR9bD.js} +1 -1
- package/dist/assets/{ai-surface-workspace-Dd2FSRom.js → ai-surface-workspace-ehzBjTsW.js} +1 -1
- package/dist/assets/{atlas-panel-Dinteouh.js → atlas-panel-BFUeVT69.js} +1 -1
- package/dist/assets/{calendar-page-BWkXhzDf.js → calendar-page-Bg8W-YQ-.js} +1 -1
- package/dist/assets/{calendar-rules-CjyuTu2I.js → calendar-rules-9XQLoI96.js} +1 -1
- package/dist/assets/{calendar-week-toolbar-D-nd9tkk.js → calendar-week-toolbar-BeYnx1pE.js} +1 -1
- package/dist/assets/{companion-sync-lab-page-G0t1TqqZ.js → companion-sync-lab-page-BRKYkIrs.js} +1 -1
- package/dist/assets/{daily-metrics-dashboard-DpIAdzFX.js → daily-metrics-dashboard-Jt0nAHU5.js} +1 -1
- package/dist/assets/{define-workbench-box-BIOZopF2.js → define-workbench-box-5h-dyvJY.js} +1 -1
- package/dist/assets/{entity-link-multiselect-DZZjpL_d.js → entity-link-multiselect-Bb4De_e3.js} +1 -1
- package/dist/assets/{entity-note-count-link-CmRRdXAr.js → entity-note-count-link-BzWnsOmI.js} +1 -1
- package/dist/assets/{entity-notes-surface-8MPDscsu.js → entity-notes-surface-CagOwdng.js} +1 -1
- package/dist/assets/{execution-board-Bi8gi8J6.js → execution-board-DTmAtmqZ.js} +1 -1
- package/dist/assets/{faceted-token-search-BGs4TqxT.js → faceted-token-search-DJPRm9AY.js} +1 -1
- package/dist/assets/{flagship-signal-deck-jLxHEHvb.js → flagship-signal-deck-CJbGZF7I.js} +1 -1
- package/dist/assets/{floating-action-menu-Itpm7T2_.js → floating-action-menu-K77jh8XZ.js} +1 -1
- package/dist/assets/{generic-node-view-KePoUF3Z.js → generic-node-view-p5ePSFuG.js} +1 -1
- package/dist/assets/{goal-detail-page-a1lEswpJ.js → goal-detail-page-DGu_khEK.js} +1 -1
- package/dist/assets/{goal-dialog-CYgRzl4y.js → goal-dialog-BWD7cOv9.js} +1 -1
- package/dist/assets/{goals-page-JY_EJq9U.js → goals-page-Bgj3sj0f.js} +1 -1
- package/dist/assets/{habits-page-BRI8AoaQ.js → habits-page-Ctut1tuX.js} +1 -1
- package/dist/assets/{health-boxes-DZJOFTOI.js → health-boxes-Ie3horXx.js} +1 -1
- package/dist/assets/index-BaiwtAgo.js +2 -0
- package/dist/assets/{index-Bcem7l5u.css → index-CEgIwgk9.css} +1 -1
- package/dist/assets/{inline-note-fields-CUVRzQkI.js → inline-note-fields-DE6WM9uM.js} +1 -1
- package/dist/assets/{insight-flow-dialog-By73oG1H.js → insight-flow-dialog-XL8I74eJ.js} +1 -1
- package/dist/assets/{insights-page-DLyN-9yz.js → insights-page-Bz1FLbp5.js} +1 -1
- package/dist/assets/{kanban-boxes-M71CejV4.js → kanban-boxes-BBziel7P.js} +1 -1
- package/dist/assets/{kanban-page-InKHhJQD.js → kanban-page-DdQP73I3.js} +1 -1
- package/dist/assets/{knowledge-graph-page-C-GEQGRY.js → knowledge-graph-page-DdHWj4Dj.js} +1 -1
- package/dist/assets/{life-force-page-Dq88NzNp.js → life-force-page-BRN-93cI.js} +1 -1
- package/dist/assets/{life-force-workspace-Bl_0slZi.js → life-force-workspace-BowvP5R4.js} +1 -1
- package/dist/assets/{metric-tile-yQJgjYrN.js → metric-tile-B6aJueRo.js} +1 -1
- package/dist/assets/{movement-boxes-C-rc3N8Z.js → movement-boxes-5cjWjIdR.js} +1 -1
- package/dist/assets/{movement-page-DK-d1uYa.js → movement-page-Dy53RWtB.js} +1 -1
- package/dist/assets/{note-markdown-7czv-KMH.js → note-markdown-CvEQCfoi.js} +1 -1
- package/dist/assets/{note-tags-input-CkgkqiT3.js → note-tags-input-Cg5zBXos.js} +1 -1
- package/dist/assets/{notes-boxes-BQuR1MiB.js → notes-boxes-CgZyf7mV.js} +1 -1
- package/dist/assets/{notes-page-ec9g1mPh.js → notes-page-Cbdcv0Ej.js} +1 -1
- package/dist/assets/{open-in-graph-button-B_4fdm4l.js → open-in-graph-button-D31ZOEhA.js} +1 -1
- package/dist/assets/{orbit-map-DPQNBqS-.js → orbit-map-8eNDWek8.js} +1 -1
- package/dist/assets/overview-page-CZ6q52Qj.js +1 -0
- package/dist/assets/{page-hero-BRcqE3a4.js → page-hero-C0MpI3MM.js} +1 -1
- package/dist/assets/{pill-cluster-dy6jG_dV.js → pill-cluster-DGwKZQKF.js} +1 -1
- package/dist/assets/{preference-entity-handoff-button-DOV-_2Vm.js → preference-entity-handoff-button-CJhr5AXl.js} +1 -1
- package/dist/assets/{preferences-page-Co8w5hzp.js → preferences-page-8vszDNFX.js} +1 -1
- package/dist/assets/{project-collections-DNgKleDl.js → project-collections-sC7eAAhS.js} +1 -1
- package/dist/assets/{project-detail-page-C-Ib1x8w.js → project-detail-page-BKdnMjJy.js} +1 -1
- package/dist/assets/{project-dialog-D_hgOdB9.js → project-dialog-BiHZpOo1.js} +1 -1
- package/dist/assets/{project-management-hierarchy-page-asf61KSz.js → project-management-hierarchy-page-VW-hykAI.js} +1 -1
- package/dist/assets/{project-management-section-nav-DAZA1oXG.js → project-management-section-nav-BEZ5zihs.js} +1 -1
- package/dist/assets/{projects-boxes-CHLr1Bs-.js → projects-boxes-Ca6rpYeE.js} +1 -1
- package/dist/assets/{projects-page-BsM8yCqQ.js → projects-page-D86pjpTf.js} +1 -1
- package/dist/assets/{psyche-behaviors-page-COSZeP4J.js → psyche-behaviors-page-YLJB6CRU.js} +1 -1
- package/dist/assets/{psyche-flashcards-page-CJmgGL9x.js → psyche-flashcards-page-D3gdHLUw.js} +1 -1
- package/dist/assets/{psyche-goal-map-page-avrWNSs9.js → psyche-goal-map-page-DJiqSiCx.js} +1 -1
- package/dist/assets/{psyche-graph-BmwbnNBY.js → psyche-graph-Tke0qFdt.js} +1 -1
- package/dist/assets/{psyche-metrics-page-CY0J_aMx.js → psyche-metrics-page-DoLnvmC2.js} +1 -1
- package/dist/assets/{psyche-mode-guide-page-COcswIHZ.js → psyche-mode-guide-page-_Zbvg_HL.js} +1 -1
- package/dist/assets/{psyche-modes-page-BXF_GZoP.js → psyche-modes-page-eAkaAzJc.js} +1 -1
- package/dist/assets/{psyche-page-VsMBNG1F.js → psyche-page-CwmuBVjA.js} +1 -1
- package/dist/assets/{psyche-patterns-page-DVoIro0Q.js → psyche-patterns-page-D7B4Ykjq.js} +1 -1
- package/dist/assets/{psyche-questionnaire-builder-page-CahcrbQj.js → psyche-questionnaire-builder-page-CHJlvCzX.js} +1 -1
- package/dist/assets/{psyche-questionnaire-detail-page-CYSgADAD.js → psyche-questionnaire-detail-page-Bg3ll-D4.js} +1 -1
- package/dist/assets/{psyche-questionnaire-run-detail-page-D5q5URTu.js → psyche-questionnaire-run-detail-page-CIEerczF.js} +1 -1
- package/dist/assets/{psyche-questionnaire-run-page-DUoA-VSs.js → psyche-questionnaire-run-page-DyxIk6Qx.js} +1 -1
- package/dist/assets/{psyche-questionnaires-page-dbQlqbKh.js → psyche-questionnaires-page-ZlqUxuIl.js} +1 -1
- package/dist/assets/{psyche-report-detail-page-D_Mmlf2D.js → psyche-report-detail-page-B2jgYnQ5.js} +1 -1
- package/dist/assets/{psyche-reports-page-CO3J4Js3.js → psyche-reports-page-DlXr52yr.js} +1 -1
- package/dist/assets/{psyche-schemas-beliefs-page-BUNGL4zW.js → psyche-schemas-beliefs-page-BhrTZN9B.js} +1 -1
- package/dist/assets/{psyche-screen-time-page-Bm18uHDg.js → psyche-screen-time-page-WNGcdusx.js} +1 -1
- package/dist/assets/{psyche-self-observation-page-VdPMBuK4.js → psyche-self-observation-page-XsCOglo4.js} +1 -1
- package/dist/assets/{psyche-values-page-DivSQodJ.js → psyche-values-page-NvHI6zWK.js} +1 -1
- package/dist/assets/{question-flow-dialog-Dsnsc8be.js → question-flow-dialog-Bj4PxpjS.js} +1 -1
- package/dist/assets/{report-chain-fields-Bf-WCSJQ.js → report-chain-fields-mWFikZzT.js} +1 -1
- package/dist/assets/{rewards-page-CI53Cp0i.js → rewards-page-DyjwXsQN.js} +1 -1
- package/dist/assets/{scheduling-rules-editor-Bg3QU_qt.js → scheduling-rules-editor-C6FEYOxd.js} +1 -1
- package/dist/assets/{schema-badge-CRThEDqP.js → schema-badge-CCe4zkSN.js} +1 -1
- package/dist/assets/{schemas-B8-kIOFQ.js → schemas-Cjwn6ooR.js} +1 -1
- package/dist/assets/{select-menu-rT3Qd5t5.js → select-menu-DeJhCsd8.js} +1 -1
- package/dist/assets/{settings-agents-page-VDUv2WuO.js → settings-agents-page-DYDxyKu-.js} +1 -1
- package/dist/assets/{settings-bin-page-DfuGJVqc.js → settings-bin-page-BWLfKVW1.js} +1 -1
- package/dist/assets/{settings-calendar-page-ex7eHB1y.js → settings-calendar-page-Ci-wXhCv.js} +1 -1
- package/dist/assets/{settings-data-page-BPWyPVGo.js → settings-data-page-DxIw-fWn.js} +1 -1
- package/dist/assets/{settings-logs-page-CwTT4n63.js → settings-logs-page-inpyIdu6.js} +1 -1
- package/dist/assets/{settings-mobile-page-B6sVk872.js → settings-mobile-page-BcJGLax8.js} +1 -1
- package/dist/assets/{settings-models-page-Dq5XViZd.js → settings-models-page-OWTRhfkj.js} +1 -1
- package/dist/assets/{settings-page-BRxdAxbS.js → settings-page-DXxF3qK2.js} +1 -1
- package/dist/assets/{settings-rewards-page-DRvxTwv3.js → settings-rewards-page-CCXin1n_.js} +1 -1
- package/dist/assets/{settings-section-nav-D_vKvOWd.js → settings-section-nav-CwSDNC3W.js} +1 -1
- package/dist/assets/{settings-users-page-B6oSpOaV.js → settings-users-page-B4NEACwR.js} +1 -1
- package/dist/assets/{settings-wiki-page-Bkv-SS3J.js → settings-wiki-page-BNRK1SYc.js} +1 -1
- package/dist/assets/{sleep-page-DELXxo6j.js → sleep-page-Bara54nB.js} +1 -1
- package/dist/assets/{sports-page-ByWQL0Gf.js → sports-page-BawekFKD.js} +1 -1
- package/dist/assets/{strategies-page-PuUHsaSJ.js → strategies-page-BEl3NGAU.js} +1 -1
- package/dist/assets/{strategy-detail-page-CSyVdv29.js → strategy-detail-page-DPPI_8Ub.js} +1 -1
- package/dist/assets/{strategy-dialog-Fgpc0z1M.js → strategy-dialog-DU6wbBkQ.js} +1 -1
- package/dist/assets/{surface-DzVqQDmf.js → surface-BVYp-Wq9.js} +1 -1
- package/dist/assets/{task-detail-page-BoLvJ_4F.js → task-detail-page-BsMVAsbb.js} +1 -1
- package/dist/assets/{task-dialog-B2cGkhLk.js → task-dialog-BGzPc6TW.js} +1 -1
- package/dist/assets/{timebox-planning-dialog-BjiC2jh0.js → timebox-planning-dialog-4_XWuqkw.js} +1 -1
- package/dist/assets/{today-boxes-B4f4sBXg.js → today-boxes-5pCvh5zS.js} +1 -1
- package/dist/assets/{today-page-Cusp2JI8.js → today-page-BGurICpl.js} +1 -1
- package/dist/assets/{training-load-page-CsZbK6rY.js → training-load-page-BkoYKZ9_.js} +1 -1
- package/dist/assets/{user-badge-CQygGKVs.js → user-badge-DfDv87j7.js} +1 -1
- package/dist/assets/{utility-widgets-DRESNarT.js → utility-widgets-CbYj32he.js} +1 -1
- package/dist/assets/{vitals-page-BlTZ4f78.js → vitals-page-DlxMk-L7.js} +1 -1
- package/dist/assets/{weekly-review-page-3Pk3NeGE.js → weekly-review-page-VrEvAl1T.js} +1 -1
- package/dist/assets/{weight-loss-page-CRCtv1fX.js → weight-loss-page-DJDnjxKF.js} +3 -3
- package/dist/assets/{wiki-article-markdown-D0PWvioX.js → wiki-article-markdown-DxTkiQRy.js} +1 -1
- package/dist/assets/{wiki-editor-page-OZMYUgFo.js → wiki-editor-page-Beu92YnZ.js} +1 -1
- package/dist/assets/{wiki-ingest-history-page-DXZHzAqU.js → wiki-ingest-history-page-Cq_soygm.js} +1 -1
- package/dist/assets/{wiki-ingest-modal-Ro0V4UMB.js → wiki-ingest-modal-D6xs2sEn.js} +1 -1
- package/dist/assets/{wiki-page-B1g3Rfxy.js → wiki-page-yF3Flgtg.js} +1 -1
- package/dist/assets/{workbench-flow-page-qh5nItU6.js → workbench-flow-page-CZZGg3a8.js} +1 -1
- package/dist/assets/{workbench-page-CFWfAYMV.js → workbench-page-DKENZ5Nz.js} +1 -1
- package/dist/assets/{workout-detail-page-Cw6t6Xj9.js → workout-detail-page-CeN4QiYQ.js} +1 -1
- package/dist/index.html +2 -2
- package/dist/server/server/src/app.js +4 -1
- package/dist/server/server/src/health.js +47 -19
- package/dist/server/src/lib/api.js +4 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/dist/assets/index-wEZUnRh0.js +0 -2
- package/dist/assets/overview-page-CZjMab2o.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as R,j as e,aC as F}from"./vendor-Cpmju3nw.js";import{A as q}from"./ai-surface-workspace-Dd2FSRom.js";import{i as $}from"./state-BtwEvpO6.js";import{T as Q,W as B,M as z,S as G,Q as Y}from"./utility-widgets-DRESNarT.js";import{F as J}from"./flagship-signal-deck-jLxHEHvb.js";import{u as Z,d as ee,bb as te,n as E,m as L,bc as D,k as p,a4 as ie,c as se,C as M,b as ae,E as re,P as ne,R as le,bd as oe,be as de,aS as ce,bf as ue}from"./index-wEZUnRh0.js";import{L as me}from"./life-force-workspace-Bl_0slZi.js";import{E as pe}from"./entity-note-count-link-CmRRdXAr.js";import{P as fe}from"./page-hero-BRcqE3a4.js";import{a as ve,g as xe}from"./activity-copy-Bj4h9OcF.js";import"./board-CLOHbg6t.js";import"./generic-node-view-KePoUF3Z.js";import"./graph-Cd5WF3lw.js";import"./motion-DwjmC9aq.js";import"./ui-B9O-eUim.js";import"./forms-C5d5hTf2.js";import"./floating-action-menu-Itpm7T2_.js";import"./charts-DwTguE_x.js";const f={"Life Force":"Life Force compares today's spent Action Points with the modeled daily budget. It is Forge's local capacity planning layer, not a medical score.",Momentum:"Momentum summarizes recent execution, XP, streak context, and movement across Forge records. Use it as an attention signal.",Instant:"Instant AP/hour estimates current headroom from the Life Force drain model. Higher values mean Forge thinks the next block can absorb more effort.",Level:"Level comes from the XP ledger. It represents accumulated meaningful Forge activity for the selected user scope.","Weekly XP":"Weekly XP is recent reward-ledger movement. It helps separate a genuinely active week from old accumulated progress."};function he(a){const n=["gamification","summary","pipeline","body-signals","signals"],t=[...a.order];let r=!1;for(const v of n)t.includes(v)||(t.push(v),r=!0);const j=t.indexOf("summary"),c=t.indexOf("pipeline"),x=t.indexOf("body-signals"),g=t.indexOf("signals");if(j===-1||c===-1||x===-1||g===-1)return r?{...a,order:t}:a;if(j<c&&c<x&&x<g&&!r)return a;for(const v of n){const b=t.indexOf(v);b!==-1&&t.splice(b,1)}const y=t.indexOf("goals");return t.splice(y===-1?0:y,0,...n),{...a,order:t}}function ge(a=new Date){const n=a.getFullYear(),t=String(a.getMonth()+1).padStart(2,"0"),r=String(a.getDate()).padStart(2,"0");return`${n}-${t}-${r}`}function P(a){if(a>=3600){const n=a/3600;return n>=10||Number.isInteger(n)?`${Math.round(n)}h`:`${n.toFixed(1)}h`}return`${Math.max(1,Math.round(a/60))}m`}function ye(a){return a>=1e3?`${(a/1e3).toFixed(1)} km`:`${Math.round(a)} m`}function be(a){if(!a)return[];const n=new Map;for(const t of a.segments){if(t.kind!=="stay"||t.durationSeconds<=0)continue;const r=t.label.trim()||"Unlabeled stay";n.set(r,(n.get(r)??0)+t.durationSeconds)}return[...n.entries()].map(([t,r])=>({label:t,seconds:r})).sort((t,r)=>r.seconds-t.seconds).slice(0,3)}function ke(a){return a?["restingHeartRate","heartRateVariabilitySDNN","vo2Max","oxygenSaturation"].map(t=>a.metrics.find(r=>r.metric===t)).filter(t=>!!t).slice(0,3):[]}function we(a){if(a.latestValue==null)return"No reading";const n=a.unit==="steps"||a.unit==="flights"||a.unit==="kcal"||a.unit==="min"?0:1;return`${a.latestValue.toLocaleString(void 0,{maximumFractionDigits:n,minimumFractionDigits:n===0||a.latestValue>=100?0:1})} ${a.unit}`}function De(){var X,C;const{t:a}=Z(),n=ee(),t=n.snapshot,r=Array.isArray(n.selectedUserIds)?n.selectedUserIds:[],j=r.join("|"),[c,x]=R.useState(!1);R.useEffect(()=>{x(!1);const i=window.setTimeout(()=>{x(!0)},650);return()=>window.clearTimeout(i)},[j]);const g=ge(),y=$({queryKey:["forge-overview-sleep",...r],queryFn:async()=>(await oe(r)).sleep,enabled:c,staleTime:6e4})??{},v=$({queryKey:["forge-overview-fitness",...r],queryFn:async()=>(await de(r)).fitness,enabled:c,staleTime:6e4})??{},b=$({queryKey:["forge-overview-movement-day",g,...r],queryFn:async()=>(await ce({date:g,userIds:r})).movement,enabled:c,staleTime:6e4})??{},H=$({queryKey:["forge-overview-vitals",...r],queryFn:async()=>(await ue(r)).vitals,enabled:c,staleTime:6e4})??{},I=te(r,{skip:!c}),u=t.dashboard.milestoneRewards.find(i=>!i.completed)??t.dashboard.milestoneRewards[0]??null,o=t.overview.topTasks[0]??null,d=t.overview.dueHabits[0]??null,m=t.overview.recentEvidence[0]??null,V=new Map(t.projects.map(i=>[i.id,i])),N=t.metrics.momentumScore>=80?"Strong":t.metrics.momentumScore>=60?"Steady":"Needs attention",k=((X=y.data)==null?void 0:X.summary)??null,h=((C=v.data)==null?void 0:C.summary)??null,l=b.data,S=H.data??null,A=ke(S??void 0),T=be(l),O=k!==null||h!==null||S!==null,W=l!==void 0&&(l.summary.tripCount>0||l.summary.stayCount>0||l.summary.totalMovingSeconds>0||T.length>0),K=t.lifeForce?[{label:"Life Force",value:`${Math.round(t.lifeForce.spentTodayAp)} / ${Math.round(t.lifeForce.dailyBudgetAp)} AP`,detail:`Remaining ${E(t.lifeForce.remainingAp)}`,help:f["Life Force"]},{label:"Momentum",value:`${t.metrics.momentumScore}`,detail:`${N} · ${t.metrics.streakDays} day streak`,help:f.Momentum},{label:"Instant",value:L(t.lifeForce.instantFreeApPerHour),detail:t.lifeForce.overloadApPerHour>0?`${L(t.lifeForce.overloadApPerHour)} overload`:"Headroom right now",help:f.Instant},{label:"Level",value:`L${t.metrics.level}`,detail:`${t.metrics.currentLevelXp} XP in level`,help:f.Level},{label:"Weekly XP",value:`${t.metrics.weeklyXp}`,detail:`${t.metrics.totalXp} total XP`,help:f["Weekly XP"]}]:[{label:"Level",value:`L${t.metrics.level}`,detail:`${t.metrics.currentLevelXp} XP in level`,help:f.Level},{label:"Weekly XP",value:`${t.metrics.weeklyXp}`,detail:`${t.metrics.totalXp} total XP`,help:f["Weekly XP"]},{label:"Momentum",value:`${t.metrics.momentumScore}`,detail:`${N} · ${t.metrics.streakDays} day streak`,help:f.Momentum}];function U(i){return i.entityType==="goal"?`/goals/${i.entityId}`:i.entityType==="project"?`/projects/${i.entityId}`:i.entityType==="task"?`/tasks/${i.entityId}`:i.entityType==="habit"?"/habits":i.entityType==="task_run"&&typeof i.metadata.taskId=="string"?`/tasks/${i.metadata.taskId}`:`/activity?eventId=${i.id}`}const _=[{id:"hero",title:"Overview",description:"The route header stays movable like any other surface block.",defaultWidth:12,defaultHeight:2,removable:!1,minHeight:2,maxHeight:3,surfaceChrome:"none",defaultTitleVisible:!1,defaultDescriptionVisible:!1,render:()=>e.jsx(fe,{title:"Overview",titleText:"Overview",description:`${N}. Life Force, momentum, XP, goals, active projects, and top tasks all start here.`,badge:`Momentum ${t.metrics.momentumScore}`})},{id:"gamification",title:"Forge Smith",description:"Selected-user level, XP, streak, trophy, and unlock state.",defaultWidth:12,defaultHeight:4,removable:!1,minHeight:3,surfaceChrome:"none",defaultTitleVisible:!1,defaultDescriptionVisible:!1,render:({compact:i})=>{var s;return I.data?e.jsx(D,{metrics:I.data.metrics,compact:i}):e.jsx(D,{metrics:{scope:{mode:"operator_fallback",userIds:t.userScope.selectedUserIds,users:t.userScope.selectedUsers,label:((s=t.userScope.selectedUsers[0])==null?void 0:s.displayName)??"Forge"},profile:t.metrics,achievements:[],milestoneRewards:[],momentumPulse:{status:t.metrics.momentumScore>=80?"surging":t.metrics.momentumScore>=60?"steady":"recovering",headline:`${t.metrics.streakDays}-day streak`,detail:`${t.metrics.currentLevelXp}/${t.metrics.nextLevelXp} XP in level ${t.metrics.level}.`,celebrationLabel:"Forge Smith",nextMilestoneId:null,nextMilestoneLabel:"Next unlock"},catalogPreview:[],unlockedItemCount:0,totalItemCount:144,nextUnlock:null,newestUnlock:null,nextTargets:[],equipment:{selectedMascotSkin:null,selectedHudTreatment:null,selectedStreakEffect:null,selectedTrophyShelf:null,selectedCelebrationVariant:null,updatedAt:null},mascot:{mood:"wise",spriteKey:"mascot-state-014",streakSpriteKey:"mascot-state-017",headline:"Small heat still counts.",line:"Return to the anvil today.",pressureLevel:0,missedDays:0,lastActiveDateKey:null},celebrations:[],recentLedger:[],rules:[],dailyAmbientXp:0,dailyAmbientCap:12},compact:i})}},{id:"summary",title:"Momentum summary",description:"Smaller titles and denser metrics free space for the widgets themselves.",defaultWidth:12,defaultHeight:3,minWidth:6,render:({compact:i})=>e.jsxs("div",{className:"rounded-[24px] bg-[var(--ui-surface-1)] p-4",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.16em] text-[var(--ui-ink-faint)]",children:"Momentum summary"}),e.jsx("div",{className:"mt-2 text-lg font-semibold text-[var(--ui-ink-strong)]",children:"Core live metrics"}),e.jsx("div",{className:"mt-1 text-sm leading-6 text-[var(--ui-ink-soft)]",children:"Life Force, momentum, XP, and instant headroom stay grouped here."})]}),e.jsx(p,{className:"bg-[var(--ui-surface-2)] text-[var(--ui-ink-soft)]",children:N})]}),e.jsx("div",{className:se("mt-4 grid gap-3",i?"grid-cols-2":"sm:grid-cols-2 xl:grid-cols-5"),children:K.map(s=>e.jsxs("div",{className:"rounded-[20px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] uppercase tracking-[0.16em] text-[var(--ui-ink-faint)]",children:[e.jsx("span",{children:s.label}),e.jsx(ie,{label:`Explain ${s.label}`,title:s.label,content:s.help,panelClassName:"normal-case tracking-normal"})]}),e.jsx("div",{className:"mt-1 text-lg font-semibold text-[var(--ui-ink-strong)]",children:s.value}),e.jsx("div",{className:"mt-1 text-xs leading-5 text-[var(--ui-ink-faint)]",children:s.detail})]},s.label))})]})},{id:"life-force",title:"Life Force",description:"Dynamic Action Points, the editable capacity curve, current drains, and stat growth all live here.",defaultWidth:12,defaultHeight:7,minWidth:6,render:()=>t.lifeForce?e.jsx(me,{selectedUserIds:r,fallbackLifeForce:t.lifeForce,onRefresh:n.refresh,showEditor:!1}):e.jsx(M,{className:"rounded-[24px] border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-5 text-sm leading-6 text-[var(--ui-ink-soft)]",children:"Life Force is not configured for this user yet. Once a profile exists, the full capacity curve, drains, and recommendations will appear here."})},{id:"body-signals",title:"Life, health, movement",description:"Health imports and movement context make the overview feel like a real daily operating page.",defaultWidth:12,defaultHeight:4,minWidth:6,render:()=>e.jsxs("div",{className:"grid min-w-0 gap-4 xl:grid-cols-3",children:[e.jsxs(M,{className:"rounded-[24px] border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.16em] text-[var(--ui-ink-faint)]",children:"Life Force"}),e.jsx("div",{className:"mt-2 text-lg font-semibold text-[var(--ui-ink-strong)]",children:t.lifeForce?`${Math.round(t.lifeForce.remainingAp)} AP remaining`:"No Life Force profile yet"})]}),t.lifeForce?e.jsx(p,{className:"bg-[var(--ui-surface-2)] text-[var(--ui-ink-soft)]",children:L(t.lifeForce.instantFreeApPerHour)}):null]}),e.jsx("div",{className:"mt-3 text-sm leading-6 text-[var(--ui-ink-soft)]",children:t.lifeForce?`${Math.round(t.lifeForce.spentTodayAp)} / ${Math.round(t.lifeForce.dailyBudgetAp)} AP spent today. Remaining ${E(t.lifeForce.remainingAp)} with ${L(t.lifeForce.currentDrainApPerHour)} current drain.`:"Once Life Force is configured, this block will show today's budget, remaining headroom, and live drain."})]}),e.jsxs(M,{className:"rounded-[24px] border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.16em] text-[var(--ui-ink-faint)]",children:"Body signals"}),e.jsx("div",{className:"mt-2 text-lg font-semibold text-[var(--ui-ink-strong)]",children:O?"Recovery, training, and vitals":"No health data yet"})]}),S?e.jsxs(p,{className:"bg-[var(--ui-surface-2)] text-[var(--ui-ink-soft)]",children:[S.summary.metricCount," metrics"]}):null]}),y.isLoading||v.isLoading||H.isLoading?e.jsx("div",{className:"mt-3 text-sm leading-6 text-[var(--ui-ink-soft)]",children:"Loading recent sleep, workout, and body-signal metrics…"}):O?e.jsxs("div",{className:"mt-3 grid gap-2 text-sm text-[var(--ui-ink-soft)]",children:[k?e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsx("span",{children:"Average sleep"}),e.jsx("span",{className:"font-medium text-[var(--ui-ink-strong)]",children:P(k.averageSleepSeconds)})]}):null,k?e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsx("span",{children:"Sleep score"}),e.jsx("span",{className:"font-medium text-[var(--ui-ink-strong)]",children:Math.round(k.averageSleepScore)})]}):null,h?e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsx("span",{children:"Exercise"}),e.jsxs("span",{className:"font-medium text-[var(--ui-ink-strong)]",children:[Math.round(h.exerciseMinutes)," min"]})]}):null,h?e.jsx("div",{className:"text-xs leading-5 text-[var(--ui-ink-faint)]",children:h.topWorkoutType?`${h.topWorkoutType} is the top workout type right now.`:"Workout imports are available when Apple Health or habit-generated sessions exist."}):null,A.length>0?e.jsx("div",{className:"mt-1 grid gap-2",children:A.map(i=>e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2 rounded-[14px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-2)] px-3 py-2",children:[e.jsx("span",{children:i.label}),e.jsx("span",{className:"font-medium text-[var(--ui-ink-strong)]",children:we(i)})]},i.metric))}):null]}):e.jsx("div",{className:"mt-3 text-sm leading-6 text-[var(--ui-ink-soft)]",children:"Sleep, workout, and vitals summaries appear here as soon as Forge has recent HealthKit records."})]}),e.jsxs(M,{className:"rounded-[24px] border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.16em] text-[var(--ui-ink-faint)]",children:"Movement"}),e.jsx("div",{className:"mt-2 text-lg font-semibold text-[var(--ui-ink-strong)]",children:W?"Today's place balance":"No movement timeline yet"})]}),W?e.jsxs(p,{className:"bg-[var(--ui-surface-2)] text-[var(--ui-ink-soft)]",children:[P((l==null?void 0:l.summary.totalMovingSeconds)??0)," ","moving"]}):null]}),b.isLoading?e.jsx("div",{className:"mt-3 text-sm leading-6 text-[var(--ui-ink-soft)]",children:"Loading today's stays, trips, and place balance…"}):W?e.jsxs("div",{className:"mt-3 grid gap-2",children:[e.jsxs("div",{className:"flex flex-wrap gap-2",children:[T.map(i=>e.jsxs(p,{className:"bg-[var(--ui-surface-2)] text-[var(--ui-ink-medium)]",children:[P(i.seconds)," at ",i.label]},i.label)),((l==null?void 0:l.summary.totalMovingSeconds)??0)>0?e.jsxs(p,{className:"bg-[var(--ui-success-soft)] text-[color-mix(in_srgb,var(--success)_74%,var(--ui-ink-strong)_26%)]",children:[P((l==null?void 0:l.summary.totalMovingSeconds)??0)," ","moving"]}):null]}),e.jsxs("div",{className:"text-sm leading-6 text-[var(--ui-ink-soft)]",children:[(l==null?void 0:l.summary.tripCount)??0," trip",((l==null?void 0:l.summary.tripCount)??0)===1?"":"s"," and"," ",ye((l==null?void 0:l.summary.totalDistanceMeters)??0)," ","tracked today."]})]}):e.jsx("div",{className:"mt-3 text-sm leading-6 text-[var(--ui-ink-soft)]",children:"Movement summaries appear here once the companion has synced stays, trips, or known places."})]})]})},{id:"signals",title:"Action signals",description:"Direct links to the next things worth opening.",defaultWidth:7,defaultHeight:4,minWidth:4,render:()=>e.jsx(J,{eyebrow:"Actions",title:"Open what matters now",description:"These cards stay compact by default so the page can fit more live context at once.",items:[{id:"top-task",label:o?"Top task":d?"Due habit":"Recovery lane",title:(o==null?void 0:o.title)??(d==null?void 0:d.title)??"Get a real task moving",detail:(o==null?void 0:o.description)||(d==null?void 0:d.description)||"There is no single top task yet, so use this surface to choose one clean next move.",badge:o?`${o.points} xp`:d?`${d.rewardXp} xp`:`${t.metrics.weeklyXp} weekly xp`,href:o?`/tasks/${o.id}`:d?"/habits":"/today",actionLabel:o?"Open task":d?"Open habits":"Open today"},{id:"reward",label:"Next reward",title:(u==null?void 0:u.title)??"Keep the streak alive",detail:(u==null?void 0:u.progressLabel)??`Level ${t.metrics.level} is active. ${t.metrics.weeklyXp} weekly XP is already logged.`,badge:(u==null?void 0:u.rewardLabel)??`${t.metrics.comboMultiplier.toFixed(2)}x combo`,href:"/rewards",actionLabel:"Open rewards"},{id:"recent-activity",label:"Recent activity",title:m?xe(m):"No recent evidence",detail:m?ve(m):"The next work closeout or note will appear here.",badge:(m==null?void 0:m.source)??"activity",href:m?U(m):"/activity",actionLabel:"Open"}]})},{id:"goals",title:"Goals",description:"Long-range direction stays visible without taking over the whole page.",defaultWidth:8,defaultHeight:5,minWidth:4,render:({compact:i})=>e.jsx("div",{className:"grid gap-3",children:t.overview.activeGoals.slice(0,i?2:4).map(s=>{var w;return e.jsxs("div",{className:"group relative rounded-[20px] bg-[var(--ui-surface-1)] p-4 transition hover:bg-[var(--ui-surface-hover)]",children:[e.jsx(F,{to:`/goals/${s.id}`,className:"absolute inset-0 rounded-[20px] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--primary)]","aria-label":`Open goal ${s.title}`}),e.jsxs("div",{className:"pointer-events-none relative z-10",children:[e.jsxs("div",{className:"flex min-w-0 items-center justify-between gap-3",children:[e.jsx(ae,{kind:"goal",label:((w=s.tags[0])==null?void 0:w.name)??s.horizon,compact:!0,gradient:!1}),e.jsxs("div",{className:"text-[11px] uppercase tracking-[0.16em] text-[var(--ui-ink-faint)]",children:[s.progress,"%"]})]}),e.jsx("div",{className:"mt-3",children:e.jsx(re,{kind:"goal",label:s.title,variant:"heading",size:i?"md":"lg",lines:2,className:"max-w-full",labelClassName:"[overflow-wrap:anywhere]"})}),i?null:e.jsx("p",{className:"mt-2 text-sm leading-6 text-[var(--ui-ink-soft)]",children:s.description}),e.jsx("div",{className:"mt-3",children:e.jsx(ne,{value:s.progress})})]}),e.jsx("div",{className:"relative z-20 mt-3",children:e.jsx(pe,{entityType:"goal",entityId:s.id,count:le(t.dashboard.notesSummaryByEntity,"goal",s.id).count})})]},s.id)})})},{id:"pipeline",title:"Projects, habits, tasks",description:"Execution blocks can shrink while keeping the useful subtitles visible.",defaultWidth:12,defaultHeight:5,minWidth:6,render:({compact:i})=>e.jsxs("div",{className:"grid min-w-0 gap-4 xl:grid-cols-3",children:[e.jsxs("div",{className:"grid min-w-0 gap-3",children:[e.jsx("div",{className:"text-[12px] uppercase tracking-[0.16em] text-[var(--ui-ink-faint)]",children:"Projects"}),t.overview.projects.slice(0,i?3:4).map(s=>{var w;return e.jsxs(F,{to:`/projects/${s.id}`,className:"block min-w-0 max-w-full rounded-[18px] bg-[var(--ui-surface-1)] px-4 py-3 transition hover:bg-[var(--ui-surface-hover)]",children:[e.jsxs("div",{className:"flex min-w-0 items-center justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate text-sm font-semibold text-[var(--ui-ink-strong)]",children:s.title}),e.jsx("div",{className:"mt-1 text-sm text-[var(--ui-ink-soft)]",children:((w=V.get(s.id))==null?void 0:w.status)??"active"})]}),e.jsxs(p,{wrap:!0,className:"max-w-[7rem] shrink-0",children:[s.earnedPoints," xp"]})]}),i?null:e.jsx("div",{className:"mt-2 text-sm leading-6 text-[var(--ui-ink-soft)]",children:s.description})]},s.id)})]}),e.jsxs("div",{className:"grid min-w-0 gap-3",children:[e.jsx("div",{className:"text-[12px] uppercase tracking-[0.16em] text-[var(--ui-ink-faint)]",children:"Due habits"}),t.overview.dueHabits.slice(0,i?3:4).map(s=>e.jsx(F,{to:"/habits","aria-label":`Open habit ${s.title}`,className:"block min-w-0 max-w-full rounded-[18px] bg-[var(--ui-surface-1)] px-4 py-3 transition hover:bg-[var(--ui-surface-hover)]",children:e.jsxs("div",{className:"flex min-w-0 items-center justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate text-sm font-semibold text-[var(--ui-ink-strong)]",children:s.title}),i?null:e.jsx("div",{className:"mt-1 text-sm text-[var(--ui-ink-soft)]",children:s.description})]}),e.jsxs(p,{wrap:!0,className:"max-w-[7rem] shrink-0 bg-[var(--ui-success-soft)] text-[color-mix(in_srgb,var(--success)_74%,var(--ui-ink-strong)_26%)]",children:[s.rewardXp," xp"]})]})},s.id))]}),e.jsxs("div",{className:"grid min-w-0 gap-3",children:[e.jsx("div",{className:"text-[12px] uppercase tracking-[0.16em] text-[var(--ui-ink-faint)]",children:"Top tasks"}),t.overview.topTasks.slice(0,i?3:4).map(s=>e.jsx(F,{to:`/tasks/${s.id}`,className:"block min-w-0 max-w-full rounded-[18px] bg-[var(--ui-surface-1)] px-4 py-3 transition hover:bg-[var(--ui-surface-hover)]",children:e.jsxs("div",{className:"flex min-w-0 items-center justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate text-sm font-semibold text-[var(--ui-ink-strong)]",children:s.title}),e.jsx("div",{className:"mt-1 text-sm text-[var(--ui-ink-soft)]",children:s.status.replaceAll("_"," ")})]}),e.jsxs(p,{className:"bg-[var(--ui-surface-2)] text-[var(--ui-ink-soft)]",children:[s.points," xp"]})]})},s.id))]})]})},{id:"time",title:"Clock",description:"Optional utility widget.",defaultWidth:3,defaultHeight:2,defaultHidden:!0,render:({compact:i})=>e.jsx(Q,{compact:i})},{id:"weather",title:"Weather",description:"Optional utility widget.",defaultWidth:3,defaultHeight:2,defaultHidden:!0,render:({compact:i})=>e.jsx(B,{compact:i})},{id:"mini-calendar",title:"Mini calendar",description:"Optional utility widget.",defaultWidth:4,defaultHeight:3,defaultHidden:!0,render:({compact:i})=>e.jsx(z,{compact:i})},{id:"spotify",title:"Spotify",description:"Optional utility widget.",defaultWidth:4,defaultHeight:2,defaultHidden:!0,render:()=>e.jsx(G,{surfaceId:"overview"})},{id:"quick-capture",title:"Quick capture",description:"Save a standalone note or wiki draft from any dashboard.",defaultWidth:5,defaultHeight:3,defaultHidden:!0,render:({compact:i})=>{var s;return e.jsx(Y,{compact:i,defaultUserId:r[0]??((s=t.users[0])==null?void 0:s.id)??null})}}];return e.jsx(q,{surfaceId:"overview",baseWidgets:_,normalizeLayout:he})}export{De as OverviewPage};
|