@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.
Files changed (78) hide show
  1. package/LICENSE +94 -46
  2. package/README.md +195 -36
  3. package/assets/agent-roster/competitor-watch.md +40 -0
  4. package/assets/agent-roster/content-writer.md +35 -53
  5. package/assets/agent-roster/godmode-builder.md +2 -2
  6. package/assets/agent-roster/inbox-manager.md +38 -0
  7. package/assets/agent-roster/meeting-prep.md +40 -16
  8. package/assets/agent-roster/skill-optimizer.md +50 -0
  9. package/assets/agent-roster/weekly-review.md +42 -0
  10. package/assets/skills/autoresearch.md +1 -1
  11. package/assets/skills/pattern-scout.md +1 -1
  12. package/assets/skills/visual-qa.md +128 -0
  13. package/dist/godmode-ui/aeo.html +1 -1
  14. package/dist/godmode-ui/assets/brain-tab-B1CYwAJ7.js +402 -0
  15. package/dist/godmode-ui/assets/connections-tab-Cuv4eW0d.js +91 -0
  16. package/dist/godmode-ui/assets/ctrl-settings-COfcdhha.js +5 -0
  17. package/dist/godmode-ui/assets/dashboards-tab-7hHXzWPp.js +137 -0
  18. package/dist/godmode-ui/assets/index-DcYipcbm.js +1994 -0
  19. package/dist/godmode-ui/assets/index-DmEmOd0w.css +1 -0
  20. package/dist/godmode-ui/assets/lit-core-CTInmNPB.js +3 -0
  21. package/dist/godmode-ui/assets/markdown-i_gIkIP3.js +59 -0
  22. package/dist/godmode-ui/assets/second-brain-tab-DkFatLwl.js +350 -0
  23. package/dist/godmode-ui/assets/setup-BnLadXY9.js +1 -0
  24. package/dist/godmode-ui/assets/team-tab-Q3icI_Q-.js +296 -0
  25. package/dist/godmode-ui/assets/today-tab-C6lIMzgY.js +209 -0
  26. package/dist/godmode-ui/assets/views-settings-B2UFEtoi.js +4643 -0
  27. package/dist/godmode-ui/assets/work-tab-DwU559Bx.js +1 -0
  28. package/dist/godmode-ui/assets/workspaces-vzpIVgdl.js +718 -0
  29. package/dist/godmode-ui/index.html +11 -5
  30. package/dist/index.js +1658 -36092
  31. package/dist/mcp-entry.js +1272 -0
  32. package/dist/standalone.js +1917 -0
  33. package/openclaw.plugin.json +36 -7
  34. package/package.json +27 -13
  35. package/scripts/godmode-gateway.service +41 -0
  36. package/scripts/install-systemd.sh +99 -0
  37. package/skill-cards/adversarial-board.md +63 -0
  38. package/skill-cards/autoresearch.md +39 -0
  39. package/skill-cards/bill-review.md +26 -0
  40. package/skill-cards/calendar.md +32 -0
  41. package/skill-cards/code-quality.md +31 -0
  42. package/skill-cards/competitor-scan.md +26 -0
  43. package/skill-cards/content-generation.md +26 -0
  44. package/skill-cards/context-deep-dive.md +65 -0
  45. package/skill-cards/cron-workflows.md +33 -0
  46. package/skill-cards/dashboards.md +38 -0
  47. package/skill-cards/delegate.md +57 -0
  48. package/skill-cards/files.md +38 -0
  49. package/skill-cards/godmode-builder.md +58 -0
  50. package/skill-cards/inbox-sweep.md +26 -0
  51. package/skill-cards/integrations.md +40 -0
  52. package/skill-cards/life-admin.md +26 -0
  53. package/skill-cards/meetings.md +42 -0
  54. package/skill-cards/meta-problem-solver.md +52 -0
  55. package/skill-cards/people.md +39 -0
  56. package/skill-cards/personal-brand.md +71 -0
  57. package/skill-cards/project-orchestrator.md +97 -0
  58. package/skill-cards/project-pipeline.md +78 -0
  59. package/skill-cards/proof-editor.md +28 -0
  60. package/skill-cards/quality-gate.md +57 -0
  61. package/skill-cards/quarterly-review.md +26 -0
  62. package/skill-cards/queue.md +40 -0
  63. package/skill-cards/screenpipe.md +49 -0
  64. package/skill-cards/second-brain.md +46 -0
  65. package/skill-cards/standup-prep.md +26 -0
  66. package/skill-cards/tasks.md +34 -0
  67. package/skill-cards/visual-qa.md +56 -0
  68. package/skill-cards/workspace-memory.md +51 -0
  69. package/skill-cards/x-twitter.md +37 -0
  70. package/dist/godmode-ui/assets/dashboards-CrT3s0NG.js +0 -1
  71. package/dist/godmode-ui/assets/index-BtwTHiwI.js +0 -9353
  72. package/dist/godmode-ui/assets/index-xiAdnGJD.css +0 -1
  73. package/dist/godmode-ui/assets/options-QuHclvvX.js +0 -1
  74. package/dist/godmode-ui/assets/second-brain-ghSM5E6X.js +0 -1
  75. package/dist/godmode-ui/assets/setup-CWjMtnE4.js +0 -1
  76. package/dist/godmode-ui/consciousness-icon-64.png +0 -0
  77. package/dist/godmode-ui/consciousness-icon.png +0 -0
  78. 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
+ >&times;</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
+ >&larr; 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` &middot; <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">&#128202;</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};