@godmode-team/godmode 1.7.2 → 1.8.2
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/LICENSE +94 -46
- package/README.md +195 -36
- package/assets/agent-roster/competitor-watch.md +40 -0
- package/assets/agent-roster/content-writer.md +35 -53
- package/assets/agent-roster/godmode-builder.md +2 -2
- package/assets/agent-roster/inbox-manager.md +38 -0
- package/assets/agent-roster/meeting-prep.md +40 -16
- package/assets/agent-roster/skill-optimizer.md +50 -0
- package/assets/agent-roster/weekly-review.md +42 -0
- package/assets/skills/autoresearch.md +1 -1
- package/assets/skills/pattern-scout.md +1 -1
- package/assets/skills/visual-qa.md +128 -0
- package/dist/godmode-ui/aeo.html +1 -1
- package/dist/godmode-ui/assets/brain-tab-B1CYwAJ7.js +402 -0
- package/dist/godmode-ui/assets/connections-tab-Cuv4eW0d.js +91 -0
- package/dist/godmode-ui/assets/ctrl-settings-COfcdhha.js +5 -0
- package/dist/godmode-ui/assets/dashboards-tab-7hHXzWPp.js +137 -0
- package/dist/godmode-ui/assets/index-DcYipcbm.js +1994 -0
- package/dist/godmode-ui/assets/index-DmEmOd0w.css +1 -0
- package/dist/godmode-ui/assets/lit-core-CTInmNPB.js +3 -0
- package/dist/godmode-ui/assets/markdown-i_gIkIP3.js +59 -0
- package/dist/godmode-ui/assets/second-brain-tab-DkFatLwl.js +350 -0
- package/dist/godmode-ui/assets/setup-BnLadXY9.js +1 -0
- package/dist/godmode-ui/assets/team-tab-Q3icI_Q-.js +296 -0
- package/dist/godmode-ui/assets/today-tab-C6lIMzgY.js +209 -0
- package/dist/godmode-ui/assets/views-settings-B2UFEtoi.js +4643 -0
- package/dist/godmode-ui/assets/work-tab-DwU559Bx.js +1 -0
- package/dist/godmode-ui/assets/workspaces-vzpIVgdl.js +718 -0
- package/dist/godmode-ui/index.html +11 -5
- package/dist/index.js +1658 -36092
- package/dist/mcp-entry.js +1272 -0
- package/dist/standalone.js +1917 -0
- package/openclaw.plugin.json +36 -7
- package/package.json +27 -13
- package/scripts/godmode-gateway.service +41 -0
- package/scripts/install-systemd.sh +99 -0
- package/skill-cards/adversarial-board.md +63 -0
- package/skill-cards/autoresearch.md +39 -0
- package/skill-cards/bill-review.md +26 -0
- package/skill-cards/calendar.md +32 -0
- package/skill-cards/code-quality.md +31 -0
- package/skill-cards/competitor-scan.md +26 -0
- package/skill-cards/content-generation.md +26 -0
- package/skill-cards/context-deep-dive.md +65 -0
- package/skill-cards/cron-workflows.md +33 -0
- package/skill-cards/dashboards.md +38 -0
- package/skill-cards/delegate.md +57 -0
- package/skill-cards/files.md +38 -0
- package/skill-cards/godmode-builder.md +58 -0
- package/skill-cards/inbox-sweep.md +26 -0
- package/skill-cards/integrations.md +40 -0
- package/skill-cards/life-admin.md +26 -0
- package/skill-cards/meetings.md +42 -0
- package/skill-cards/meta-problem-solver.md +52 -0
- package/skill-cards/people.md +39 -0
- package/skill-cards/personal-brand.md +71 -0
- package/skill-cards/project-orchestrator.md +97 -0
- package/skill-cards/project-pipeline.md +78 -0
- package/skill-cards/proof-editor.md +28 -0
- package/skill-cards/quality-gate.md +57 -0
- package/skill-cards/quarterly-review.md +26 -0
- package/skill-cards/queue.md +40 -0
- package/skill-cards/screenpipe.md +49 -0
- package/skill-cards/second-brain.md +46 -0
- package/skill-cards/standup-prep.md +26 -0
- package/skill-cards/tasks.md +34 -0
- package/skill-cards/visual-qa.md +56 -0
- package/skill-cards/workspace-memory.md +51 -0
- package/skill-cards/x-twitter.md +37 -0
- package/dist/godmode-ui/assets/dashboards-CrT3s0NG.js +0 -1
- package/dist/godmode-ui/assets/index-BtwTHiwI.js +0 -9353
- package/dist/godmode-ui/assets/index-xiAdnGJD.css +0 -1
- package/dist/godmode-ui/assets/options-QuHclvvX.js +0 -1
- package/dist/godmode-ui/assets/second-brain-ghSM5E6X.js +0 -1
- package/dist/godmode-ui/assets/setup-CWjMtnE4.js +0 -1
- package/dist/godmode-ui/consciousness-icon-64.png +0 -0
- package/dist/godmode-ui/consciousness-icon.png +0 -0
- package/dist/godmode-ui/godmode-logo.png +0 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import{d as $,b as i,A as l,o as C,g as k,r as h,t as _}from"./lit-core-CTInmNPB.js";import{a as u,w as I}from"./index-DcYipcbm.js";import{H as S}from"./views-settings-B2UFEtoi.js";import{f as y}from"./ctrl-settings-COfcdhha.js";import"./markdown-i_gIkIP3.js";async function E(a,s){if(!a.client||!a.connected){a.dashboardsError="Not connected to gateway";return}a.dashboardsLoading=!0,a.dashboardsError=null;try{const e=await a.client.request("dashboards.list",s?{scope:s}:{});a.dashboardsList=e.dashboards,a.activeDashboardId=e.activeDashboard}catch(e){a.dashboardsError=e instanceof Error?e.message:"Failed to load dashboards"}finally{a.dashboardsLoading=!1}}async function F(a,s){if(!a.client||!a.connected){a.dashboardsError="Not connected to gateway";return}a.dashboardsLoading=!0,a.dashboardsError=null;try{const e=await a.client.request("dashboards.get",{id:s});a.activeDashboardId=s,a.activeDashboardManifest=e.manifest,a.activeDashboardHtml=e.html}catch(e){a.dashboardsError=e instanceof Error?e.message:"Failed to load dashboard"}finally{a.dashboardsLoading=!1}}async function A(a,s){if(!a.client||!a.connected)return;const e=(a.dashboardsList??[]).find(t=>t.id===s);if(!e)return;const r=!e.pinned;try{await a.client.request("dashboards.save",{id:e.id,title:e.title,description:e.description,scope:e.scope,pinned:r}),e.pinned=r,a.dashboardsList=[...a.dashboardsList??[]]}catch(t){a.dashboardsError=t instanceof Error?t.message:"Failed to toggle pin"}}async function L(a,s){if(!a.client||!a.connected)return!1;try{return await a.client.request("dashboards.remove",{id:s}),a.dashboardsList=(a.dashboardsList??[]).filter(e=>e.id!==s),a.activeDashboardId===s&&(a.activeDashboardId=null,a.activeDashboardHtml=null,a.activeDashboardManifest=null),!0}catch(e){return a.dashboardsError=e instanceof Error?e.message:"Failed to delete dashboard",!1}}var q=Object.defineProperty,T=Object.getOwnPropertyDescriptor,c=(a,s,e,r)=>{for(var t=r>1?void 0:r?T(s,e):s,o=a.length-1,b;o>=0;o--)(b=a[o])&&(t=(r?b(s,e,t):b(t))||t);return r&&t&&q(s,e,t),t};const p={all:{icon:"📊",label:"All"},productivity:{icon:"📋",label:"Productivity"},personal:{icon:"🧑",label:"Personal"},business:{icon:"💼",label:"Business"},system:{icon:"⚙️",label:"System"},custom:{icon:"✨",label:"Custom"}},M=[{id:"weekly-impact",name:"Weekly Impact",category:"productivity",description:"Tasks completed, agent outcomes, and trust trends this week",prompt:"Create a weekly impact dashboard. Use these widgets: tasks-summary, queue-status, trust-scores, streak-stats, brief-summary. Show tasks completed vs created, agent queue throughput, trust score trends, and daily streak. Use clean CSS grid with bar charts."},{id:"agent-activity",name:"Agent Activity",category:"system",description:"Queue pipeline, active personas, and trust scores",prompt:"Create an agent activity dashboard. Use these widgets: queue-status, trust-scores, agent-activity. Show queue stats (pending, processing, completed, failed), most active personas, and trust scores by workflow. Use CSS grid layout."},{id:"morning-overview",name:"Morning Overview",category:"productivity",description:"Today's tasks, brief highlights, and queue status",prompt:"Create a morning overview dashboard. Use these widgets: tasks-summary, brief-summary, queue-status, streak-stats. Show today's priorities, daily brief highlights, pending queue items, and your current streak. Use clean CSS grid layout."}];function P(a){return a==="global"?i`<span class="dashboard-card-scope">Global</span>`:i`<span class="dashboard-card-scope">${a}</span>`}function D(a){return Date.now()-new Date(a).getTime()>1440*60*1e3}function w(a){const s=(a.title+" "+(a.description??"")).toLowerCase();return s.includes("health")||s.includes("sleep")||s.includes("oura")||s.includes("energy")||s.includes("goal")?"personal":s.includes("agent")||s.includes("queue")||s.includes("trust")||s.includes("skill")?"system":s.includes("revenue")||s.includes("business")||s.includes("content")||s.includes("metric")?"business":s.includes("task")||s.includes("calendar")||s.includes("morning")||s.includes("impact")||s.includes("weekly")?"productivity":"custom"}function m(a,s){const e=p[a.category]??p.custom;return i`
|
|
2
|
+
<div class="dashboard-card dashboard-card--template">
|
|
3
|
+
<button
|
|
4
|
+
class="dashboard-card-main"
|
|
5
|
+
@click=${()=>s(a.prompt)}
|
|
6
|
+
>
|
|
7
|
+
<div class="dashboard-card-title">${a.name}</div>
|
|
8
|
+
<div class="dashboard-card-desc">${a.description}</div>
|
|
9
|
+
<div class="dashboard-card-meta">
|
|
10
|
+
<span class="dashboard-card-scope">${e.icon} ${e.label}</span>
|
|
11
|
+
<span class="dashboard-card-template-label">Template</span>
|
|
12
|
+
</div>
|
|
13
|
+
</button>
|
|
14
|
+
</div>
|
|
15
|
+
`}function x(a,s,e,r){const t=D(a.updatedAt);return i`
|
|
16
|
+
<div class="dashboard-card ${a.pinned?"dashboard-card--pinned":""}">
|
|
17
|
+
<button
|
|
18
|
+
class="dashboard-card-main"
|
|
19
|
+
@click=${()=>s(a.id)}
|
|
20
|
+
>
|
|
21
|
+
<div class="dashboard-card-title">
|
|
22
|
+
${a.pinned?i`<span class="pin-icon" title="Pinned">\u{1F4CC}</span>`:l}
|
|
23
|
+
${a.title}
|
|
24
|
+
</div>
|
|
25
|
+
${a.description?i`<div class="dashboard-card-desc">${a.description}</div>`:l}
|
|
26
|
+
<div class="dashboard-card-meta">
|
|
27
|
+
${P(a.scope)}
|
|
28
|
+
<span>${y(new Date(a.updatedAt).getTime())}</span>
|
|
29
|
+
${t?i`<span class="dashboard-card-stale" title="Last updated over 24 hours ago">\u{1F7E1} Stale</span>`:l}
|
|
30
|
+
</div>
|
|
31
|
+
</button>
|
|
32
|
+
<div class="dashboard-card-actions">
|
|
33
|
+
${r?i`<button
|
|
34
|
+
class="dashboard-card-pin"
|
|
35
|
+
title="${a.pinned?"Unpin":"Pin"}"
|
|
36
|
+
@click=${o=>{o.stopPropagation(),r(a.id)}}
|
|
37
|
+
>${a.pinned?"📌":"📅"}</button>`:l}
|
|
38
|
+
<button
|
|
39
|
+
class="dashboard-card-delete"
|
|
40
|
+
title="Delete dashboard"
|
|
41
|
+
@click=${o=>{o.stopPropagation(),confirm(`Delete "${a.title}"?`)&&e(a.id)}}
|
|
42
|
+
>×</button>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
`}function H(a){const{activeDashboardHtml:s,activeDashboardManifest:e,isWorking:r}=a;if(!s||!e)return l;const t=D(e.updatedAt);return i`
|
|
46
|
+
<section class="dashboards-container">
|
|
47
|
+
<div class="dashboards-active-header">
|
|
48
|
+
<button
|
|
49
|
+
class="dashboards-back-btn"
|
|
50
|
+
@click=${()=>a.onBack()}
|
|
51
|
+
>← All Dashboards</button>
|
|
52
|
+
<div class="dashboards-active-title-group">
|
|
53
|
+
<span class="dashboards-active-title">${e.title}</span>
|
|
54
|
+
<span class="dashboards-active-meta">
|
|
55
|
+
${y(new Date(e.updatedAt).getTime())}
|
|
56
|
+
${t?i` · <span class="dashboard-card-stale">\u{1F7E1} Stale</span>`:l}
|
|
57
|
+
</span>
|
|
58
|
+
</div>
|
|
59
|
+
<button
|
|
60
|
+
class="dashboards-session-btn"
|
|
61
|
+
@click=${()=>a.onOpenSession(e.id)}
|
|
62
|
+
>${r?"Working...":"Edit in Chat"}</button>
|
|
63
|
+
<button
|
|
64
|
+
class="dashboards-refresh-btn"
|
|
65
|
+
@click=${()=>a.onRefresh()}
|
|
66
|
+
>Refresh</button>
|
|
67
|
+
</div>
|
|
68
|
+
<div class="dashboards-content">
|
|
69
|
+
<div class="dashboard-render">
|
|
70
|
+
${C(S(s))}
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
</section>
|
|
74
|
+
`}function U(a,s,e){const r={all:s.length};for(const t of s){const o=w(t);r[o]=(r[o]??0)+1}return i`
|
|
75
|
+
<div class="dashboards-category-bar">
|
|
76
|
+
${Object.entries(p).map(([t,o])=>i`
|
|
77
|
+
<button
|
|
78
|
+
class="dashboards-category-btn ${a===t?"active":""}"
|
|
79
|
+
@click=${()=>e(t)}
|
|
80
|
+
>
|
|
81
|
+
${o.icon} ${o.label}
|
|
82
|
+
${r[t]?i`<span class="category-count">${r[t]}</span>`:l}
|
|
83
|
+
</button>
|
|
84
|
+
`)}
|
|
85
|
+
</div>
|
|
86
|
+
`}function O(a){const{loading:s,dashboards:e}=a,r=a.categoryFilter??"all",t=a.templates??M,b=[...r==="all"?e??[]:(e??[]).filter(d=>w(d)===r)].sort((d,v)=>d.pinned&&!v.pinned?-1:!d.pinned&&v.pinned?1:new Date(v.updatedAt).getTime()-new Date(d.updatedAt).getTime()),g=r==="all"?t:t.filter(d=>d.category===r),f=(e??[]).length>0;return i`
|
|
87
|
+
<section class="dashboards-container">
|
|
88
|
+
<div class="dashboards-toolbar">
|
|
89
|
+
<span class="dashboards-count">${(e??[]).length} dashboard${(e??[]).length===1?"":"s"}</span>
|
|
90
|
+
<button
|
|
91
|
+
class="dashboards-create-btn"
|
|
92
|
+
@click=${()=>a.onCreateViaChat()}
|
|
93
|
+
>+ Create via Chat</button>
|
|
94
|
+
</div>
|
|
95
|
+
|
|
96
|
+
${f&&a.onCategoryFilter?U(r,e??[],a.onCategoryFilter):l}
|
|
97
|
+
|
|
98
|
+
${s?i`<div class="dashboards-loading"><div class="spinner"></div> Loading dashboards...</div>`:b.length===0&&!f?i`
|
|
99
|
+
<div class="dashboards-empty">
|
|
100
|
+
<div class="dashboards-empty-icon">📊</div>
|
|
101
|
+
<div class="dashboards-empty-title">No dashboards yet</div>
|
|
102
|
+
<div class="dashboards-empty-hint">
|
|
103
|
+
Dashboards are AI-generated views your ally builds for you.
|
|
104
|
+
Pick a template below or describe what you want to see.
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
<div class="dashboards-templates-section">
|
|
108
|
+
<h3 class="dashboards-section-title">Start from a template</h3>
|
|
109
|
+
<div class="dashboards-grid">
|
|
110
|
+
${t.map(d=>m(d,a.onCreateViaChat))}
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
`:i`
|
|
114
|
+
${b.length===0?i`<div class="dashboards-empty">
|
|
115
|
+
<div class="dashboards-empty-hint">No dashboards in this category. Try a different filter or create one with the button above.</div>
|
|
116
|
+
</div>`:i`<div class="dashboards-grid">
|
|
117
|
+
${b.map(d=>x(d,a.onSelectDashboard,a.onDeleteDashboard,a.onTogglePin))}
|
|
118
|
+
</div>`}
|
|
119
|
+
${g.length>0?i`
|
|
120
|
+
<div class="dashboards-templates-section">
|
|
121
|
+
<h3 class="dashboards-section-title">Create from template</h3>
|
|
122
|
+
<div class="dashboards-grid dashboards-grid--templates">
|
|
123
|
+
${g.map(d=>m(d,a.onCreateViaChat))}
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
`:l}
|
|
127
|
+
`}
|
|
128
|
+
</section>
|
|
129
|
+
`}function R(a){return a.error?i`
|
|
130
|
+
<section class="dashboards-container">
|
|
131
|
+
<div class="dashboards-error">
|
|
132
|
+
<span class="error-icon">\u26A0</span>
|
|
133
|
+
<p>${a.error}</p>
|
|
134
|
+
<button class="retry-button" @click=${()=>a.onRefresh()}>Retry</button>
|
|
135
|
+
</div>
|
|
136
|
+
</section>
|
|
137
|
+
`:a.activeDashboardHtml&&a.activeDashboardManifest?H(a):O(a)}let n=class extends ${constructor(){super(...arguments),this.dashboardsLoading=!1,this.dashboardsError=null,this.activeDashboardId=null,this.activeDashboardHtml=null,this.activeDashboardManifest=null,this.dashboardCategoryFilter=null,this._workingSessionIds=new Set,this._unsubs=[]}createRenderRoot(){return this}get client(){return this.ctx.gateway}get connected(){return this.ctx.connected}connectedCallback(){super.connectedCallback(),this._unsubs.push(u.on("refresh-requested",a=>{a.target==="dashboards"&&this._refresh()})),this._refresh()}disconnectedCallback(){for(const a of this._unsubs)a();this._unsubs=[],super.disconnectedCallback()}render(){const a=this.activeDashboardManifest?.sessionId;return R({connected:this.ctx.connected,loading:this.dashboardsLoading,error:this.dashboardsError,dashboards:this.dashboardsList,activeDashboardId:this.activeDashboardId,activeDashboardHtml:this.activeDashboardHtml,activeDashboardManifest:this.activeDashboardManifest,isWorking:a?this._workingSessionIds.has(a):!1,onSelectDashboard:s=>this._onSelectDashboard(s),onDeleteDashboard:s=>this._onDeleteDashboard(s),onCreateViaChat:s=>this._onCreateViaChat(s),onTogglePin:s=>this._onTogglePin(s),categoryFilter:this.dashboardCategoryFilter??void 0,onCategoryFilter:s=>this._onCategoryFilter(s),onBack:()=>this._onBack(),onRefresh:()=>this._refresh(),onOpenSession:s=>this._onOpenSession(s)})}async _refresh(){await E(this),this.requestUpdate()}async _onSelectDashboard(a){if(await F(this,a),this.requestUpdate(),this.ctx.gateway&&this.ctx.connected)try{const s=await this.ctx.gateway.request("dashboards.openSession",{dashboardId:a});s?.sessionId&&(this.activeDashboardManifest&&(this.activeDashboardManifest={...this.activeDashboardManifest,sessionId:s.sessionId}),u.emit("chat-navigate",{sessionKey:s.sessionId}))}catch(s){console.error("[Dashboards] Failed to init session on select:",s)}}async _onDeleteDashboard(a){await L(this,a),this.requestUpdate()}async _onTogglePin(a){await A(this,a),this.requestUpdate()}_onCreateViaChat(a){u.emit("chat-navigate",{sessionKey:"new",tab:"chat",message:a??"I want to create a custom dashboard. Ask me what data I want to see and design it for me. You can use any of GodMode's data — tasks, calendar, focus pulse, goals, trust scores, agent activity, queue status, coding tasks, workspace stats, and more."})}_onCategoryFilter(a){this.dashboardCategoryFilter=a}_onBack(){this.activeDashboardId=null,this.activeDashboardHtml=null,this.activeDashboardManifest=null}_onOpenSession(a){const s=this.activeDashboardManifest?.sessionId;if(!s){this.ctx.addToast("No session for this dashboard","error");return}this.activeDashboardId=null,this.activeDashboardHtml=null,this.activeDashboardManifest=null,u.emit("chat-navigate",{sessionKey:s,tab:"chat"})}};c([k({context:I,subscribe:!0})],n.prototype,"ctx",2);c([h()],n.prototype,"dashboardsList",2);c([h()],n.prototype,"dashboardsLoading",2);c([h()],n.prototype,"dashboardsError",2);c([h()],n.prototype,"activeDashboardId",2);c([h()],n.prototype,"activeDashboardHtml",2);c([h()],n.prototype,"activeDashboardManifest",2);c([h()],n.prototype,"dashboardCategoryFilter",2);c([h()],n.prototype,"_workingSessionIds",2);n=c([_("gm-dashboards")],n);export{n as GmDashboards};
|