@godmode-team/godmode 1.8.2 → 1.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -12
- package/dist/godmode-ui/assets/{brain-tab-B1CYwAJ7.js → brain-tab-C2AbYrWP.js} +35 -23
- package/dist/godmode-ui/assets/{connections-tab-Cuv4eW0d.js → connections-tab-CwdK_wkL.js} +3 -3
- package/dist/godmode-ui/assets/ctrl-settings-nG144v_G.js +5 -0
- package/dist/godmode-ui/assets/{dashboards-tab-7hHXzWPp.js → dashboards-tab-CIED6Kpa.js} +1 -1
- package/dist/godmode-ui/assets/index-Btlae9Mn.css +1 -0
- package/dist/godmode-ui/assets/{index-DcYipcbm.js → index-DzcGsUUC.js} +287 -273
- package/dist/godmode-ui/assets/{second-brain-tab-DkFatLwl.js → second-brain-tab-BK7ARED2.js} +56 -48
- package/dist/godmode-ui/assets/{team-tab-Q3icI_Q-.js → team-tab-Dpl4pwK6.js} +1 -1
- package/dist/godmode-ui/assets/{today-tab-C6lIMzgY.js → today-tab-ReKlJGhF.js} +1 -1
- package/dist/godmode-ui/assets/{views-settings-B2UFEtoi.js → views-settings-TQFJxfo9.js} +1 -1
- package/dist/godmode-ui/assets/work-tab-BJF_wapn.js +1 -0
- package/dist/godmode-ui/assets/{workspaces-vzpIVgdl.js → workspaces-C4ZyofCq.js} +49 -49
- package/dist/godmode-ui/index.html +4 -4
- package/dist/index.js +407 -404
- package/dist/mcp-entry.js +256 -255
- package/dist/standalone.js +395 -392
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/skill-cards/screenpipe.md +23 -15
- package/dist/godmode-ui/assets/ctrl-settings-COfcdhha.js +0 -5
- package/dist/godmode-ui/assets/index-DmEmOd0w.css +0 -1
- package/dist/godmode-ui/assets/work-tab-DwU559Bx.js +0 -1
package/dist/godmode-ui/assets/{second-brain-tab-DkFatLwl.js → second-brain-tab-BK7ARED2.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{d as
|
|
1
|
+
import{d as m,b as e,A as i,o as f,g as $,r as o,t as g}from"./lit-core-CTInmNPB.js";import{a as h,b as S}from"./index-DzcGsUUC.js";import{a as x}from"./views-settings-TQFJxfo9.js";import{f as _}from"./ctrl-settings-nG144v_G.js";import"./markdown-i_gIkIP3.js";var w=Object.defineProperty,F=Object.getOwnPropertyDescriptor,l=(s,t,a,r)=>{for(var n=r>1?void 0:r?F(t,a):t,d=s.length-1,p;d>=0;d--)(p=s[d])&&(n=(r?p(t,a,n):p(n))||n);return r&&n&&w(t,a,n),n};function u(s){if(!s)return"";try{return _(new Date(s).getTime())}catch{return""}}function k(s){return e`<div class="sb-md-body">${f(x(s))}</div>`}const b={ready:"sb-dot--ready",degraded:"sb-dot--degraded",offline:"sb-dot--offline"},B={"vault-capture":"📝","identity-update":"👤","calendar-enrichment":"📅","thought-captured":"💭",search:"🔍","file-modified":"📄"},A={honcho:"🟣",vault:"📓",session:"💬",screenpipe:"📺"};function v(s){return!s||s==="personal"?e`<span class="sb-scope-badge sb-scope-badge--personal" title="Personal memory">\u{1F512} personal</span>`:e`<span class="sb-scope-badge sb-scope-badge--shared" title="Shared to ${s}">\u{2197}\u{FE0F} ${s}</span>`}let c=class extends m{constructor(){super(...arguments),this.loading=!1,this.error=null,this.pulse=null,this.activity=null,this.identity=null,this.memoryBank=null,this.fileTree=null,this.screenpipeStatus=null,this.screenpipeSetupBusy=!1,this.ingestionStatus=null,this.searchQuery="",this.searchResults=null,this.searching=!1,this.browsingFolder=null,this.folderEntries=null,this.folderName=null,this.expandedPulseSystem=null,this._unsubs=[],this._searchTimer=null}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this._unsubs.push(h.on("refresh-requested",s=>{s.target==="second-brain"&&this._loadAll()})),this._loadAll()}disconnectedCallback(){for(const s of this._unsubs)s();this._unsubs=[],this._searchTimer&&clearTimeout(this._searchTimer),super.disconnectedCallback()}async _loadAll(){if(!(!this.ctx.gateway||!this.ctx.connected)){this.loading=!0,this.error=null;try{const s=this.ctx.gateway,[t,a,r,n,d]=await Promise.all([s.request("secondBrain.memoryPulse",{}),s.request("secondBrain.activity",{limit:20}),s.request("secondBrain.identity",{}),s.request("secondBrain.memoryBank",{}),s.request("secondBrain.fileTree",{depth:3})]);this.pulse=t,this.activity=a,this.identity=r,this.memoryBank=n,this.fileTree=d.tree??[],Promise.all([s.request("ingestion.screenpipeStatus",{}).catch(()=>null),s.request("ingestion.status",{}).catch(()=>null)]).then(([p,y])=>{this.screenpipeStatus=p,this.ingestionStatus=y})}catch(s){console.error("[SecondBrain] Load failed:",s),this.error=s instanceof Error?s.message:"Failed to load"}finally{this.loading=!1}}}async _doSearch(s){if(!this.ctx.gateway||!this.ctx.connected||!s.trim()){this.searchResults=null,this.searching=!1;return}this.searching=!0;try{const t=await this.ctx.gateway.request("secondBrain.search",{query:s,limit:30});this.searchQuery===s&&(this.searchResults=t.results??[])}catch(t){console.error("[SecondBrain] Search failed:",t)}finally{this.searching=!1}}_onSearchInput(s){const t=s.target.value;if(this.searchQuery=t,this._searchTimer&&clearTimeout(this._searchTimer),!t.trim()){this.searchResults=null;return}this._searchTimer=setTimeout(()=>{this._doSearch(t)},300)}async _openFile(s){if(!(!this.ctx.gateway||!this.ctx.connected))try{const t=await this.ctx.gateway.request("secondBrain.memoryBankEntry",{path:s});if(t?.content){const a=s.endsWith(".html")||s.endsWith(".htm");this.ctx.openSidebar({content:t.content,mimeType:a?"text/html":"text/markdown",filePath:s,title:t.name||s.split("/").pop()||"File"})}}catch(t){console.error("[SecondBrain] Open file failed:",t),this.ctx.addToast("Failed to open file","error")}}async _browseFolder(s){if(!(!this.ctx.gateway||!this.ctx.connected))try{const t=await this.ctx.gateway.request("secondBrain.memoryBank",{folder:s});this.browsingFolder=t.folder,this.folderName=t.folderName,this.folderEntries=t.entries}catch(t){console.error("[SecondBrain] Browse folder failed:",t)}}_exitFolder(){this.browsingFolder=null,this.folderEntries=null,this.folderName=null}_chatNavigate(s){h.emit("chat-navigate",{sessionKey:"new",tab:"chat",message:s})}render(){return this.loading&&!this.pulse?e`<div class="sb-loading"><div class="sb-spinner"></div>Loading Second Brain...</div>`:this.error&&!this.pulse?e`<div class="sb-error">${this.error}</div>`:this.browsingFolder&&this.folderEntries?e`
|
|
2
2
|
<section class="sb-dashboard">
|
|
3
3
|
<button class="sb-back-btn" @click=${()=>this._exitFolder()}>
|
|
4
4
|
\u{2190} Back
|
|
@@ -60,7 +60,7 @@ import{d as y,b as e,A as i,o as f,g as $,r as o,t as g}from"./lit-core-CTInmNPB
|
|
|
60
60
|
<input
|
|
61
61
|
class="sb-search-input"
|
|
62
62
|
type="text"
|
|
63
|
-
placeholder="Search your memory \u2014
|
|
63
|
+
placeholder="Search your memory \u2014 conversations, vault, sessions, screen recall..."
|
|
64
64
|
.value=${this.searchQuery}
|
|
65
65
|
@input=${s=>this._onSearchInput(s)}
|
|
66
66
|
/>
|
|
@@ -79,7 +79,7 @@ import{d as y,b as e,A as i,o as f,g as $,r as o,t as g}from"./lit-core-CTInmNPB
|
|
|
79
79
|
<div class="sb-entry-body">
|
|
80
80
|
<div class="sb-entry-name">
|
|
81
81
|
${s.name}
|
|
82
|
-
${s.source?e`<span class="sb-source-tag">${
|
|
82
|
+
${s.source?e`<span class="sb-source-tag">${A[s.source]??""} ${s.source}</span>`:i}
|
|
83
83
|
${s.scope?v(s.scope):i}
|
|
84
84
|
</div>
|
|
85
85
|
${s.matchContext??s.excerpt?e`<div class="sb-entry-excerpt">${s.matchContext??s.excerpt}</div>`:i}
|
|
@@ -145,7 +145,7 @@ import{d as y,b as e,A as i,o as f,g as $,r as o,t as g}from"./lit-core-CTInmNPB
|
|
|
145
145
|
`)}
|
|
146
146
|
</div>
|
|
147
147
|
</div>
|
|
148
|
-
`}_renderPeopleEntities(){if(!this.memoryBank)return i;const s=this.memoryBank.sections.find(
|
|
148
|
+
`}_renderPeopleEntities(){if(!this.memoryBank)return i;const s=this.memoryBank.sections.find(n=>n.key==="people"),t=this.memoryBank.sections.find(n=>n.key==="companies"),a=(s?.entries.length??0)>0,r=(t?.entries.length??0)>0;return!a&&!r?e`
|
|
149
149
|
<div class="sb-section">
|
|
150
150
|
<div class="sb-section-header">
|
|
151
151
|
<span class="sb-section-title">People & Companies</span>
|
|
@@ -161,29 +161,29 @@ import{d as y,b as e,A as i,o as f,g as $,r as o,t as g}from"./lit-core-CTInmNPB
|
|
|
161
161
|
<span class="sb-section-count">${(s?.entries.length??0)+(t?.entries.length??0)}</span>
|
|
162
162
|
</div>
|
|
163
163
|
<div class="sb-people-grid">
|
|
164
|
-
${(s?.entries??[]).map(
|
|
165
|
-
<div class="sb-person-card" @click=${()=>this._openFile(
|
|
164
|
+
${(s?.entries??[]).map(n=>e`
|
|
165
|
+
<div class="sb-person-card" @click=${()=>this._openFile(n.path)}>
|
|
166
166
|
<div class="sb-person-icon">\u{1F464}</div>
|
|
167
167
|
<div class="sb-person-body">
|
|
168
|
-
<div class="sb-person-name">${
|
|
169
|
-
${
|
|
168
|
+
<div class="sb-person-name">${n.name}</div>
|
|
169
|
+
${n.excerpt?e`<div class="sb-person-excerpt">${n.excerpt}</div>`:i}
|
|
170
170
|
</div>
|
|
171
|
-
${
|
|
171
|
+
${n.updatedAt?e`<div class="sb-person-time">${u(n.updatedAt)}</div>`:i}
|
|
172
172
|
</div>
|
|
173
173
|
`)}
|
|
174
|
-
${(t?.entries??[]).map(
|
|
175
|
-
<div class="sb-person-card" @click=${()=>this._openFile(
|
|
174
|
+
${(t?.entries??[]).map(n=>e`
|
|
175
|
+
<div class="sb-person-card" @click=${()=>this._openFile(n.path)}>
|
|
176
176
|
<div class="sb-person-icon">\u{1F3E2}</div>
|
|
177
177
|
<div class="sb-person-body">
|
|
178
|
-
<div class="sb-person-name">${
|
|
179
|
-
${
|
|
178
|
+
<div class="sb-person-name">${n.name}</div>
|
|
179
|
+
${n.excerpt?e`<div class="sb-person-excerpt">${n.excerpt}</div>`:i}
|
|
180
180
|
</div>
|
|
181
|
-
${
|
|
181
|
+
${n.updatedAt?e`<div class="sb-person-time">${u(n.updatedAt)}</div>`:i}
|
|
182
182
|
</div>
|
|
183
183
|
`)}
|
|
184
184
|
</div>
|
|
185
185
|
</div>
|
|
186
|
-
`}_renderKnowledgeBrowser(){const s=this.memoryBank?.sections.find(d=>d.key==="projects"),t=(s?.entries.length??0)>0,
|
|
186
|
+
`}_renderKnowledgeBrowser(){const s=this.memoryBank?.sections.find(d=>d.key==="projects"),t=(s?.entries.length??0)>0,a=!!this.memoryBank?.curated,r=(this.memoryBank?.extraFiles.length??0)>0,n=(this.fileTree?.length??0)>0;return!t&&!a&&!r&&!n?i:e`
|
|
187
187
|
<div class="sb-section">
|
|
188
188
|
<div class="sb-section-header">
|
|
189
189
|
<span class="sb-section-title">Knowledge</span>
|
|
@@ -201,12 +201,12 @@ import{d as y,b as e,A as i,o as f,g as $,r as o,t as g}from"./lit-core-CTInmNPB
|
|
|
201
201
|
</details>
|
|
202
202
|
`:i}
|
|
203
203
|
|
|
204
|
-
${
|
|
204
|
+
${a?e`
|
|
205
205
|
<details class="sb-collapsible">
|
|
206
206
|
<summary class="sb-collapsible-header">
|
|
207
207
|
<span>\u{2B50} Curated Facts</span>
|
|
208
208
|
</summary>
|
|
209
|
-
<div class="sb-card">${
|
|
209
|
+
<div class="sb-card">${k(this.memoryBank.curated.content)}</div>
|
|
210
210
|
</details>
|
|
211
211
|
`:i}
|
|
212
212
|
|
|
@@ -222,7 +222,7 @@ import{d as y,b as e,A as i,o as f,g as $,r as o,t as g}from"./lit-core-CTInmNPB
|
|
|
222
222
|
</details>
|
|
223
223
|
`:i}
|
|
224
224
|
|
|
225
|
-
${
|
|
225
|
+
${n?e`
|
|
226
226
|
<details class="sb-collapsible">
|
|
227
227
|
<summary class="sb-collapsible-header">
|
|
228
228
|
<span>\u{1F5C2}\uFE0F Browse All Files</span>
|
|
@@ -231,20 +231,26 @@ import{d as y,b as e,A as i,o as f,g as $,r as o,t as g}from"./lit-core-CTInmNPB
|
|
|
231
231
|
</details>
|
|
232
232
|
`:i}
|
|
233
233
|
</div>
|
|
234
|
-
`}_renderScreenpipePanel(){const s=this.screenpipeStatus;return e`
|
|
234
|
+
`}_renderScreenpipePanel(){const s=this.screenpipeStatus,t=this.screenpipeSetupBusy;return e`
|
|
235
235
|
<div class="sb-section">
|
|
236
236
|
<div class="sb-section-header">
|
|
237
237
|
<span class="sb-section-title">\u{1F4FA} Ambient Memory (Screenpipe)</span>
|
|
238
238
|
${s?e`
|
|
239
|
-
<span class="sb-dot ${s.available?"sb-dot--ready":"sb-dot--offline"}"></span>
|
|
239
|
+
<span class="sb-dot ${s.available?"sb-dot--ready":s.installed?"sb-dot--degraded":"sb-dot--offline"}"></span>
|
|
240
240
|
`:i}
|
|
241
241
|
</div>
|
|
242
|
-
${s?s.available?e`
|
|
242
|
+
${s?s.installed?s.available?e`
|
|
243
243
|
<div class="sb-screenpipe-active">
|
|
244
244
|
<div class="sb-screenpipe-row">
|
|
245
245
|
<span class="sb-screenpipe-label">Status</span>
|
|
246
246
|
<span class="sb-screenpipe-value">${s.enabled?"Active — capturing":"Connected but not enabled"}</span>
|
|
247
247
|
</div>
|
|
248
|
+
${s.version?e`
|
|
249
|
+
<div class="sb-screenpipe-row">
|
|
250
|
+
<span class="sb-screenpipe-label">Version</span>
|
|
251
|
+
<span class="sb-screenpipe-value">${s.version}</span>
|
|
252
|
+
</div>
|
|
253
|
+
`:i}
|
|
248
254
|
<div class="sb-screenpipe-row">
|
|
249
255
|
<span class="sb-screenpipe-label">Blocked Apps</span>
|
|
250
256
|
<span class="sb-screenpipe-value">${s.blockedApps?.length??0} apps filtered</span>
|
|
@@ -260,23 +266,25 @@ import{d as y,b as e,A as i,o as f,g as $,r as o,t as g}from"./lit-core-CTInmNPB
|
|
|
260
266
|
`:e`
|
|
261
267
|
<div class="sb-screenpipe-setup">
|
|
262
268
|
<div class="sb-setup-message">
|
|
263
|
-
Screenpipe
|
|
269
|
+
Screenpipe is installed${s.version?` (${s.version})`:""} but not running.
|
|
264
270
|
</div>
|
|
265
|
-
<
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
<span>Run: <code>screenpipe</code> (keeps running in background)</span>
|
|
277
|
-
</div>
|
|
271
|
+
<button
|
|
272
|
+
class="sb-action-btn"
|
|
273
|
+
?disabled=${t}
|
|
274
|
+
@click=${()=>this._startScreenpipe()}
|
|
275
|
+
>${t?"Starting...":"Start Screenpipe"}</button>
|
|
276
|
+
</div>
|
|
277
|
+
`:e`
|
|
278
|
+
<div class="sb-screenpipe-setup">
|
|
279
|
+
<div class="sb-setup-message">
|
|
280
|
+
Ambient Memory captures what's on your screen and in your audio, locally.
|
|
281
|
+
Your ally uses it to recall context you've seen. All data stays on your machine.
|
|
278
282
|
</div>
|
|
279
|
-
<button
|
|
283
|
+
<button
|
|
284
|
+
class="sb-action-btn"
|
|
285
|
+
?disabled=${t}
|
|
286
|
+
@click=${()=>this._setupScreenpipe()}
|
|
287
|
+
>${t?"Installing...":"Enable Ambient Memory"}</button>
|
|
280
288
|
</div>
|
|
281
289
|
`:e`
|
|
282
290
|
<div class="sb-empty-block">
|
|
@@ -284,7 +292,7 @@ import{d as y,b as e,A as i,o as f,g as $,r as o,t as g}from"./lit-core-CTInmNPB
|
|
|
284
292
|
</div>
|
|
285
293
|
`}
|
|
286
294
|
</div>
|
|
287
|
-
`}async
|
|
295
|
+
`}async _setupScreenpipe(){if(!(!this.ctx.gateway||!this.ctx.connected)){this.screenpipeSetupBusy=!0;try{const s=await this.ctx.gateway.request("ingestion.screenpipeSetup",{},3e5);if(s.success){this.ctx.addToast("Ambient Memory enabled! Screenpipe is running.","success");const t=await this.ctx.gateway.request("ingestion.screenpipeStatus",{});this.screenpipeStatus=t}else this.ctx.addToast(s.error??"Setup failed","error")}catch{this.ctx.addToast("Screenpipe setup failed — check logs for details","error")}finally{this.screenpipeSetupBusy=!1}}}async _startScreenpipe(){if(!(!this.ctx.gateway||!this.ctx.connected)){this.screenpipeSetupBusy=!0;try{const s=await this.ctx.gateway.request("ingestion.screenpipeStart",{},3e4);if(s.success){this.ctx.addToast("Screenpipe daemon started","success");const t=await this.ctx.gateway.request("ingestion.screenpipeStatus",{});this.screenpipeStatus=t}else this.ctx.addToast(s.error??"Failed to start","error")}catch{this.ctx.addToast("Failed to start Screenpipe daemon","error")}finally{this.screenpipeSetupBusy=!1}}}async _toggleScreenpipe(s){if(!(!this.ctx.gateway||!this.ctx.connected))try{await this.ctx.gateway.request("ingestion.screenpipeConfigure",{enabled:s}),this.screenpipeStatus&&(this.screenpipeStatus={...this.screenpipeStatus,enabled:s}),this.ctx.addToast(s?"Ambient memory enabled":"Ambient memory paused","success")}catch{this.ctx.addToast("Failed to update Screenpipe config","error")}}_renderIngestionStatus(){const s=this.ingestionStatus;if(!s)return i;const t=s.pipelines.filter(r=>r.configured),a=s.pipelines.filter(r=>!r.configured);return e`
|
|
288
296
|
<div class="sb-section">
|
|
289
297
|
<div class="sb-section-header">
|
|
290
298
|
<span class="sb-section-title">\u{1F504} Data Sources</span>
|
|
@@ -301,14 +309,14 @@ import{d as y,b as e,A as i,o as f,g as $,r as o,t as g}from"./lit-core-CTInmNPB
|
|
|
301
309
|
`)}
|
|
302
310
|
</div>
|
|
303
311
|
`:i}
|
|
304
|
-
${
|
|
312
|
+
${a.length>0?e`
|
|
305
313
|
<details class="sb-collapsible">
|
|
306
314
|
<summary class="sb-collapsible-header">
|
|
307
315
|
<span>Available Sources</span>
|
|
308
|
-
<span class="sb-section-count">${
|
|
316
|
+
<span class="sb-section-count">${a.length}</span>
|
|
309
317
|
</summary>
|
|
310
318
|
<div class="sb-ingestion-list">
|
|
311
|
-
${
|
|
319
|
+
${a.map(r=>e`
|
|
312
320
|
<div class="sb-ingestion-item">
|
|
313
321
|
<span class="sb-dot sb-dot--offline"></span>
|
|
314
322
|
<span class="sb-ingestion-name">${r.name}</span>
|
|
@@ -330,21 +338,21 @@ import{d as y,b as e,A as i,o as f,g as $,r as o,t as g}from"./lit-core-CTInmNPB
|
|
|
330
338
|
</div>
|
|
331
339
|
`}_renderFileTree(s,t){return e`
|
|
332
340
|
<div class="sb-file-tree" style="padding-left: ${t*16}px">
|
|
333
|
-
${s.map(
|
|
341
|
+
${s.map(a=>a.type==="folder"?e`
|
|
334
342
|
<details class="sb-tree-folder">
|
|
335
343
|
<summary class="sb-tree-item sb-tree-folder-name">
|
|
336
344
|
<span class="sb-file-icon">\u{1F4C1}</span>
|
|
337
|
-
<span>${
|
|
338
|
-
${
|
|
345
|
+
<span>${a.name}</span>
|
|
346
|
+
${a.childCount!=null?e`<span class="sb-tree-count">${a.childCount}</span>`:i}
|
|
339
347
|
</summary>
|
|
340
|
-
${
|
|
348
|
+
${a.children?this._renderFileTree(a.children,t+1):i}
|
|
341
349
|
</details>
|
|
342
350
|
`:e`
|
|
343
|
-
<button class="sb-tree-item sb-tree-file" @click=${()=>this._openFile(
|
|
351
|
+
<button class="sb-tree-item sb-tree-file" @click=${()=>this._openFile(a.path)}>
|
|
344
352
|
<span class="sb-file-icon">\u{1F4C4}</span>
|
|
345
|
-
<span class="sb-file-name">${
|
|
346
|
-
${
|
|
353
|
+
<span class="sb-file-name">${a.name}</span>
|
|
354
|
+
${a.size!=null?e`<span class="sb-tree-size">${a.size<1024?`${a.size}B`:`${(a.size/1024).toFixed(1)}K`}</span>`:i}
|
|
347
355
|
</button>
|
|
348
356
|
`)}
|
|
349
357
|
</div>
|
|
350
|
-
`}};l([$({context:S,subscribe:!0})],c.prototype,"ctx",2);l([o()],c.prototype,"loading",2);l([o()],c.prototype,"error",2);l([o()],c.prototype,"pulse",2);l([o()],c.prototype,"activity",2);l([o()],c.prototype,"identity",2);l([o()],c.prototype,"memoryBank",2);l([o()],c.prototype,"fileTree",2);l([o()],c.prototype,"screenpipeStatus",2);l([o()],c.prototype,"ingestionStatus",2);l([o()],c.prototype,"searchQuery",2);l([o()],c.prototype,"searchResults",2);l([o()],c.prototype,"searching",2);l([o()],c.prototype,"browsingFolder",2);l([o()],c.prototype,"folderEntries",2);l([o()],c.prototype,"folderName",2);l([o()],c.prototype,"expandedPulseSystem",2);c=l([g("gm-second-brain")],c);function I(){return i}export{c as GmSecondBrain,I as renderSecondBrain};
|
|
358
|
+
`}};l([$({context:S,subscribe:!0})],c.prototype,"ctx",2);l([o()],c.prototype,"loading",2);l([o()],c.prototype,"error",2);l([o()],c.prototype,"pulse",2);l([o()],c.prototype,"activity",2);l([o()],c.prototype,"identity",2);l([o()],c.prototype,"memoryBank",2);l([o()],c.prototype,"fileTree",2);l([o()],c.prototype,"screenpipeStatus",2);l([o()],c.prototype,"screenpipeSetupBusy",2);l([o()],c.prototype,"ingestionStatus",2);l([o()],c.prototype,"searchQuery",2);l([o()],c.prototype,"searchResults",2);l([o()],c.prototype,"searching",2);l([o()],c.prototype,"browsingFolder",2);l([o()],c.prototype,"folderEntries",2);l([o()],c.prototype,"folderName",2);l([o()],c.prototype,"expandedPulseSystem",2);c=l([g("gm-second-brain")],c);function I(){return i}export{c as GmSecondBrain,I as renderSecondBrain};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{d as h,A as d,b as s,g as u,a as g,r as o,t as v}from"./lit-core-CTInmNPB.js";import{
|
|
1
|
+
import{d as h,A as d,b as s,g as u,a as g,r as o,t as v}from"./lit-core-CTInmNPB.js";import{b as x}from"./index-DzcGsUUC.js";import"./ctrl-settings-nG144v_G.js";import"./views-settings-TQFJxfo9.js";import"./markdown-i_gIkIP3.js";var f=Object.defineProperty,y=Object.getOwnPropertyDescriptor,a=(e,t,r,n)=>{for(var p=n>1?void 0:n?y(t,r):t,c=e.length-1,l;c>=0;c--)(l=e[c])&&(p=(n?l(t,r,p):l(p))||p);return n&&p&&f(t,r,p),p};const _="http://localhost:3100";let i=class extends h{constructor(){super(...arguments),this._phase="loading",this._url="",this._serverUp=!1,this._configured=!1,this._steps=[],this._error=null,this._iframeError=!1,this._customUrl="",this._showAdvanced=!1,this._agentCount=0,this._wasConnected=!1}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this._checkStatus()}willUpdate(e){super.willUpdate(e);const t=this.ctx?.connected??!1;t&&!this._wasConnected&&this._checkStatus(),this._wasConnected=t}get _client(){return this.host?.client??this.ctx?.client}async _checkStatus(){this._phase="loading",this._error=null,this._steps=[];const e=this._client;if(!e){this._phase="error",this._error="Not connected to gateway.";return}try{const t=await e.request("paperclip.dashboardUrl",{});if(t?.ready){this._url=t.url??"",this._agentCount=t.agents?.length??0,this._phase="ready";return}const r=await e.request("paperclip.setup",{action:"check"});this._serverUp=r?.serverUp??!1,this._configured=r?.configured??!1,this._steps=r?.steps??[],this._phase="not-configured"}catch{this._phase="not-configured",this._serverUp=!1,this._configured=!1}}async _quickSetup(){const e=this._client;if(e){this._phase="installing",this._steps=[],this._error=null;try{const t=await e.request("paperclip.setup",{action:"install"});if(this._steps=[...t?.steps??[]],!t?.success){this._phase="error",this._error="Could not start Paperclip server. See details below.";return}this._url=t.url??_,this._phase="seeding";const r=await e.request("paperclip.setup",{action:"seed"});if(this._steps=[...this._steps,...r?.steps??[]],this._agentCount=r?.totalAgents??0,!r?.success){this._phase="error",this._error="Server is running but agent seeding failed.";return}this._phase="ready"}catch(t){this._phase="error",this._error=t instanceof Error?t.message:String(t)}}}async _connectExisting(){const e=this._client;if(!e)return;const t=this._customUrl.trim();if(t){this._phase="installing",this._steps=[],this._error=null;try{const r=await e.request("paperclip.setup",{action:"connect",url:t});if(this._steps=[...r?.steps??[]],!r?.success){this._phase="error",this._error="Could not connect to that server.";return}this._phase="seeding";const n=await e.request("paperclip.setup",{action:"seed"});this._steps=[...this._steps,...n?.steps??[]],this._agentCount=n?.totalAgents??0,this._phase=n?.success?"ready":"error",n?.success||(this._error="Connected but agent seeding failed.")}catch(r){this._phase="error",this._error=r instanceof Error?r.message:String(r)}}}async _seedOnly(){const e=this._client;if(e){this._phase="seeding",this._steps=[],this._error=null;try{const t=await e.request("paperclip.setup",{action:"seed"});this._steps=t?.steps??[],this._agentCount=t?.totalAgents??0,t?.success?this._phase="ready":(this._phase="error",this._error="Agent seeding failed.")}catch(t){this._phase="error",this._error=t instanceof Error?t.message:String(t)}}}_dashboardUrl(){let e="3100";if(this._url)try{const n=new URL(this._url);n.port&&(e=n.port)}catch{}const t=window.location.protocol,r=window.location.hostname;return`${t}//${r}:${e}`}_renderSteps(){return this._steps.length===0?d:s`
|
|
2
2
|
<div style="margin-top: 16px; font-size: 13px;">
|
|
3
3
|
${this._steps.map(e=>s`
|
|
4
4
|
<div style="
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as r,A as u,d as S,g as D,r as c,t as _}from"./lit-core-CTInmNPB.js";import{a as b,
|
|
1
|
+
import{b as r,A as u,d as S,g as D,r as c,t as _}from"./lit-core-CTInmNPB.js";import{a as b,b as I}from"./index-DzcGsUUC.js";import{ab as h}from"./ctrl-settings-nG144v_G.js";import{G as C}from"./views-settings-TQFJxfo9.js";import{s as L,a as m}from"./workspaces-C4ZyofCq.js";import"./markdown-i_gIkIP3.js";function x(t){const e=Date.now()-new Date(t).getTime(),a=Math.floor(e/6e4);if(a<1)return"just now";if(a<60)return`${a}m ago`;const o=Math.floor(a/60);return o<24?`${o}h ago`:`${Math.floor(o/24)}d ago`}function $(t){return t.source.persona?t.source.persona.replace(/-/g," ").replace(/\b\w/g,e=>e.toUpperCase()):t.source.skill?t.source.skill:t.type==="agent-execution"?"Agent":"Skill"}function B(t){return t<=2?"Poor":t<=4?"Below expectations":t<=6?"Okay":t<=8?"Good":"Excellent"}function v(t,e){if(t.scoringId!==e.id)return u;const a=t.scoringValue??7,o=t.feedbackText??"",i=a<=4,n=a<=4||a>=9;return r`
|
|
2
2
|
<div class="inbox-scoring">
|
|
3
3
|
<div class="inbox-score-label">
|
|
4
4
|
Rate this output
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{A as u,b as n,o as _n}from"./lit-core-CTInmNPB.js";import{t as Sn,f as L,a as He,b as Ya,c as Dt,d as je}from"./ctrl-settings-
|
|
1
|
+
import{A as u,b as n,o as _n}from"./lit-core-CTInmNPB.js";import{t as Sn,f as L,a as He,b as Ya,c as Dt,d as je}from"./ctrl-settings-nG144v_G.js";import{g as We}from"./markdown-i_gIkIP3.js";function Cn(e){const{values:t,original:a}=e;return t.name!==a.name||t.displayName!==a.displayName||t.about!==a.about||t.picture!==a.picture||t.banner!==a.banner||t.website!==a.website||t.nip05!==a.nip05||t.lud16!==a.lud16}function Tn(e){const{state:t,callbacks:a,accountId:s}=e,i=Cn(t),l=(r,d,v={})=>{const{type:p="text",placeholder:g,maxLength:h,help:$}=v,b=t.values[r]??"",y=t.fieldErrors[r],f=`nostr-profile-${r}`;return p==="textarea"?n`
|
|
2
2
|
<div class="form-field" style="margin-bottom: 12px;">
|
|
3
3
|
<label for="${f}" style="display: block; margin-bottom: 4px; font-weight: 500;">
|
|
4
4
|
${d}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as F,g as x,r as c,t as B}from"./lit-core-CTInmNPB.js";import{a as k,b as q}from"./index-DzcGsUUC.js";import{r as E}from"./workspaces-C4ZyofCq.js";import"./ctrl-settings-nG144v_G.js";import"./views-settings-TQFJxfo9.js";import"./markdown-i_gIkIP3.js";function w(e,t=Date.now()){if(typeof e=="number"&&Number.isFinite(e))return new Date(e);if(typeof e=="string"){const s=Date.parse(e);if(Number.isFinite(s))return new Date(s)}return new Date(t)}function m(e){return{id:e.id,name:e.name,emoji:e.emoji||"📁",type:e.type,path:e.path,artifactCount:e.artifactCount??0,sessionCount:e.sessionCount??0,connectionCount:e.connectionCount??0,feedCount:e.feedCount??0,lastUpdated:w(e.lastUpdated,e.lastScanned)}}function f(e){return{path:e.path,name:e.name,type:e.type,size:e.size,modified:w(e.modified),isDirectory:e.isDirectory,searchText:e.searchText}}function g(e){return{id:e.id,key:e.key,title:e.title,created:w(e.created),status:e.status,workspaceSubfolder:e.workspaceSubfolder}}function p(e){return{id:e.id,title:e.title,status:e.status,project:e.project,dueDate:e.dueDate,priority:e.priority,createdAt:e.createdAt,completedAt:e.completedAt}}function W(e){return e.map(t=>({name:t.name,path:t.path,type:t.type,fileType:t.fileType,size:t.size,modified:t.modified?w(t.modified):void 0,children:t.children?W(t.children):void 0}))}function b(e,t){return{...t,id:e.id,name:e.name,emoji:e.emoji,type:e.type,path:e.path,artifactCount:e.artifactCount,sessionCount:e.sessionCount,lastUpdated:e.lastUpdated}}async function v(e){if(!e.client||!e.connected){e.workspaces?.length||(e.workspaces=[],e.workspacesError="Connect to gateway to see workspaces"),e.workspacesLoading=!1;return}e.workspacesLoading=!0,e.workspacesError=null;try{const t=await e.client.request("workspaces.list",{});if(e.workspaces=(t.workspaces??[]).map(m),e.selectedWorkspace){const s=e.workspaces.find(r=>r.id===e.selectedWorkspace?.id);s&&(e.selectedWorkspace=b(s,e.selectedWorkspace))}}catch(t){console.error("[Workspaces] load failed:",t),e.workspacesError=t instanceof Error?t.message:"Failed to load workspaces",e.workspaces?.length||(e.workspaces=[])}finally{e.workspacesLoading=!1}}async function u(e,t){if(!e.client||!e.connected)return null;try{const s=await e.client.request("workspaces.get",{id:t});return s.workspace?{...m(s.workspace),pinned:(s.pinned??[]).map(f),pinnedSessions:(s.pinnedSessions??[]).map(g),outputs:(s.outputs??[]).map(f),folderTree:s.folderTree?W(s.folderTree):void 0,sessions:(s.sessions??[]).map(g),tasks:(s.tasks??[]).map(p),memory:(s.memory??[]).map(f)}:null}catch(s){return console.error("[Workspaces] get failed:",s),null}}async function P(e,t){if(!(!e.client||!e.connected||!e.selectedWorkspace)&&e.selectedWorkspace.id===t)try{const[s,r]=await Promise.all([M(e,t).catch(()=>[]),S(e,t).catch(()=>[])]);e.selectedWorkspace?.id===t&&(e.selectedWorkspace={...e.selectedWorkspace,feedEntries:s,connections:r,feedCount:s.length,connectionCount:r.length})}catch{}}async function U(e,t,s){if(!e.client||!e.connected)return null;try{const r=await e.client.request("workspaces.readFile",s?{workspaceId:s,filePath:t}:{path:t});return r.content?{content:r.content,mime:r.contentType??r.mime??"text/plain"}:(r.error&&console.warn("[Workspaces] readFile failed:",r.error),null)}catch(r){return console.error("[Workspaces] readFile error:",r),null}}async function T(e,t){if(!t){e.selectedWorkspace=null;return}const s=await u(e,t.id);e.selectedWorkspace=s||{...t,pinned:[],pinnedSessions:[],outputs:[],sessions:[],tasks:[]}}async function D(e,t,s,r){if(!e.client||!e.connected)return!1;try{if(await e.client.request(r?"workspaces.unpin":"workspaces.pin",{workspaceId:t,filePath:s}),e.selectedWorkspace?.id===t){const o=await u(e,t);o&&(e.selectedWorkspace=o)}return!0}catch(o){return console.error("[Workspaces] pin toggle failed:",o),!1}}async function R(e,t,s,r){if(!e.client||!e.connected)return!1;try{if(await e.client.request(r?"workspaces.unpinSession":"workspaces.pinSession",{workspaceId:t,sessionKey:s}),e.selectedWorkspace?.id===t){const o=await u(e,t);o&&(e.selectedWorkspace=o)}return!0}catch(o){return console.error("[Workspaces] session pin toggle failed:",o),!1}}async function Q(e,t){if(!e.client||!e.connected)return null;const s=String(t.name??"").trim();if(!s)return e.workspacesError="Workspace name is required",null;const r=t.type??"project",o=String(t.path??"").trim();try{const i=await e.client.request("workspaces.create",{name:s,type:r,...o?{path:o}:{}});if(!i.workspace)return e.workspacesError="Workspace creation returned no workspace",null;const l=m(i.workspace),C=e.workspaces??[],y=new Map(C.map(h=>[h.id,h]));return y.set(l.id,l),e.workspaces=Array.from(y.values()).toSorted((h,_)=>_.lastUpdated.getTime()-h.lastUpdated.getTime()),e.workspacesError=null,l}catch(i){return console.error("[Workspaces] create failed:",i),e.workspacesError=i instanceof Error?i.message:"Failed to create workspace",null}}async function I(e,t){if(!e.client||!e.connected)return!1;try{return await e.client.request("workspaces.delete",{id:t}),e.workspaces=(e.workspaces??[]).filter(s=>s.id!==t),e.selectedWorkspace?.id===t&&(e.selectedWorkspace=null),e.workspacesError=null,!0}catch(s){return console.error("[Workspaces] delete failed:",s),e.workspacesError=s instanceof Error?s.message:"Failed to delete workspace",!1}}function L(e,t){const s=new Set(e);return s.has(t)?s.delete(t):s.add(t),s}const O={coding:"Builder",research:"Researcher",analysis:"Analyst",creative:"Creative",review:"Reviewer",ops:"Ops",task:"Agent",url:"Reader",idea:"Explorer"};async function d(e){if(!e.client||!e.connected)return[];try{const[t,s]=await Promise.all([e.client.request("tasks.list",{}),e.client.request("queue.list",{limit:100}).catch(()=>({items:[]}))]),r=new Map;for(const o of s.items)o.sourceTaskId&&(o.status==="processing"||o.status==="review"||o.status==="needs-review"||o.status==="failed")&&r.set(o.sourceTaskId,{status:o.status==="needs-review"?"review":o.status,type:o.type,roleName:O[o.type]??o.type,queueItemId:o.id});return(t.tasks??[]).map(o=>({...p(o),queueStatus:r.get(o.id)??null}))}catch(t){return console.error("[Workspaces] loadAllTasksWithQueueStatus failed:",t),[]}}async function j(e,t,s){if(!e.client||!e.connected)return null;const r=s==="complete"?"pending":"complete";try{const o=await e.client.request("tasks.update",{id:t,status:r});return p(o)}catch(o){return console.error("[Workspaces] toggleTaskComplete failed:",o),null}}async function A(e,t,s){if(!e.client||!e.connected)return null;try{const r=await e.client.request("tasks.update",{id:t,...s});return p(r)}catch(r){return console.error("[Workspaces] updateTask failed:",r),null}}async function G(e,t){if(!e.client||!e.connected)return null;try{return await e.client.request("tasks.openSession",{taskId:t})}catch(s){return console.error("[Workspaces] startTask failed:",s),null}}async function N(e,t,s){if(!e.client||!e.connected)return null;try{const r=await e.client.request("tasks.create",{title:t,project:s,source:"chat"});return p(r)}catch(r){return console.error("[Workspaces] createTask failed:",r),null}}async function K(e,t,s){if(!e.client||!e.connected)return null;try{return await e.client.request("workspaces.browseFolder",{workspaceId:t,folderPath:s})}catch(r){return console.error("[Workspaces] browseFolder failed:",r),null}}async function z(e,t,s,r=50){if(!e.client||!e.connected)return[];try{return(await e.client.request("workspaces.search",{workspaceId:t,query:s,limit:r})).results??[]}catch(o){return console.error("[Workspaces] search failed:",o),[]}}async function V(e,t,s){if(!e.client||!e.connected)return!1;try{return await e.client.request("workspaces.createFolder",{workspaceId:t,folderPath:s}),!0}catch(r){return console.error("[Workspaces] createFolder failed:",r),!1}}async function M(e,t,s=50,r){if(!e.client||!e.connected)return[];try{return(await e.client.request("workspace.feed.read",{workspaceId:t,limit:s,before:r})).entries??[]}catch(o){return console.error("[Workspaces] loadFeed failed:",o),[]}}async function $(e,t,s,r="update"){if(!e.client||!e.connected)return null;try{return(await e.client.request("workspace.feed.post",{workspaceId:t,text:s,type:r,author:"user"})).entry??null}catch(o){return console.error("[Workspaces] postToFeed failed:",o),null}}async function S(e,t){if(!e.client||!e.connected)return[];try{return(await e.client.request("workspace.connections.list",{workspaceId:t})).connections??[]}catch(s){return console.error("[Workspaces] loadConnections failed:",s),[]}}async function H(e,t,s){if(!e.client||!e.connected)return{ok:!1,error:"Not connected"};try{return await e.client.request("workspace.connections.test",{workspaceId:t,connectionId:s})}catch(r){return console.error("[Workspaces] testConnection failed:",r),{ok:!1,error:r instanceof Error?r.message:"Failed"}}}async function J(e,t,s){if(!e.client||!e.connected)return!1;try{return await e.client.request("workspace.connections.remove",{workspaceId:t,connectionId:s}),!0}catch(r){return console.error("[Workspaces] removeConnection failed:",r),!1}}var X=Object.defineProperty,Y=Object.getOwnPropertyDescriptor,n=(e,t,s,r)=>{for(var o=r>1?void 0:r?Y(t,s):t,i=e.length-1,l;i>=0;i--)(l=e[i])&&(o=(r?l(t,s,o):l(o))||o);return r&&o&&X(t,s,o),o};const Z="Connect to gateway to see workspaces";function ee(e){return!e.connected||!e.hasGateway||!(!e.hasWorkspaceData||!!e.workspacesError)?!1:!e.previousConnected||e.gatewayChanged?!0:e.workspacesError===Z}let a=class extends F{constructor(){super(...arguments),this.selectedWorkspace=null,this.workspacesSearchQuery="",this.workspaceItemSearchQuery="",this.workspacesLoading=!1,this.workspacesCreateLoading=!1,this.workspacesError=null,this.workspaceExpandedFolders=new Set,this.taskFilter="outstanding",this.taskSort="due",this.taskSearch="",this.showCompletedTasks=!1,this.editingTaskId=null,this.workspaceBrowsePath=null,this.workspaceBrowseEntries=null,this.workspaceBreadcrumbs=null,this.workspaceBrowseSearchQuery="",this.workspaceBrowseSearchResults=null,this._unsubs=[],this._lastConnected=!1,this._refreshInFlight=!1,this._lastGateway=null}createRenderRoot(){return this}get client(){return this.ctx.gateway}get connected(){return this.ctx.connected}connectedCallback(){super.connectedCallback(),this._unsubs.push(k.on("refresh-requested",e=>{(e.target==="workspaces"||e.target==="work")&&this._refresh()})),this._maybeRefreshForContext()}disconnectedCallback(){for(const e of this._unsubs)e();this._unsubs=[],super.disconnectedCallback()}updated(e){super.updated?.(e),this._maybeRefreshForContext()}render(){return E({connected:this.ctx.connected,workspaces:this.workspaces??[],selectedWorkspace:this.selectedWorkspace??null,searchQuery:this.workspacesSearchQuery,itemSearchQuery:this.workspaceItemSearchQuery,expandedFolders:this.workspaceExpandedFolders,loading:this.workspacesLoading,createLoading:this.workspacesCreateLoading,error:this.workspacesError,allTasks:this.allTasks??[],taskFilter:this.taskFilter,taskSort:this.taskSort,taskSearch:this.taskSearch,showCompletedTasks:this.showCompletedTasks,editingTaskId:this.editingTaskId,workspaceNames:(this.workspaces??[]).map(e=>e.name),browsePath:this.workspaceBrowsePath,browseEntries:this.workspaceBrowseEntries,breadcrumbs:this.workspaceBreadcrumbs,browseSearchQuery:this.workspaceBrowseSearchQuery,browseSearchResults:this.workspaceBrowseSearchResults,onSearch:e=>{this.workspacesSearchQuery=e},onItemSearch:e=>{this.workspaceItemSearchQuery=e},onSelectWorkspace:e=>this._onSelectWorkspace(e),onBack:()=>this._onBack(),onItemClick:e=>this._onItemClick(e),onSessionClick:e=>this._onSessionClick(e),onPinToggle:(e,t,s)=>this._onPinToggle(e,t,s),onPinSessionToggle:(e,t,s)=>this._onPinSessionToggle(e,t,s),onCreateWorkspace:e=>this._onCreateWorkspace(e),onDeleteWorkspace:e=>this._onDeleteWorkspace(e),onToggleFolder:e=>this._onToggleFolder(e),onTeamSetup:()=>this._onTeamSetup(),onToggleTaskComplete:(e,t)=>this._onToggleTaskComplete(e,t),onCreateTask:(e,t)=>this._onCreateTask(e,t),onSetTaskFilter:e=>{this.taskFilter=e},onSetTaskSort:e=>{this.taskSort=e},onSetTaskSearch:e=>{this.taskSearch=e},onToggleCompletedTasks:()=>{this.showCompletedTasks=!this.showCompletedTasks},onStartTask:e=>this._onStartTask(e),onViewTaskOutput:e=>this._onViewTaskOutput(e),onEditTask:e=>{this.editingTaskId=e},onUpdateTask:(e,t)=>this._onUpdateTask(e,t),onBrowseFolder:e=>this._onBrowseFolder(e),onBrowseSearch:e=>this._onBrowseSearch(e),onBrowseBack:()=>this._onBrowseBack(),onCreateFolder:e=>this._onCreateFolder(e),onBatchPushToDrive:e=>this._onBatchPushToDrive(e),onPostToFeed:(e,t)=>this._onPostToFeed(e,t),onTestConnection:e=>this._onTestConnection(e),onRemoveConnection:e=>this._onRemoveConnection(e)})}_maybeRefreshForContext(){const e=this.ctx?.connected??!1,t=this.ctx?.gateway??null,s=t!==this._lastGateway,r=ee({connected:e,hasGateway:!!t,previousConnected:this._lastConnected,gatewayChanged:s,hasWorkspaceData:!!this.workspaces?.length,workspacesError:this.workspacesError});this._lastConnected=e,this._lastGateway=t,r&&this._refresh()}async _refresh(){if(this._refreshInFlight)return;this._refreshInFlight=!0;const e=setTimeout(()=>{this.workspacesLoading&&(console.warn("[GmWork] safety timeout — forcing loading off"),this.workspacesLoading=!1,this.workspacesError??="Loading timed out — tap to retry",this.requestUpdate())},12e3);try{await v(this),this.allTasks=await d(this)}catch(t){console.error("[GmWork] refresh failed:",t)}finally{clearTimeout(e),this._refreshInFlight=!1}this.requestUpdate()}async _onSelectWorkspace(e){this.workspaceItemSearchQuery="",this.workspacesLoading=!0,this.requestUpdate();try{const t=new Promise((s,r)=>setTimeout(()=>r(new Error("Workspace load timed out")),5e3));await Promise.race([T(this,e),t])}catch(t){console.error("[GmWork] workspace select failed:",t),this.selectedWorkspace||(this.selectedWorkspace={...e,pinned:[],pinnedSessions:[],outputs:[],sessions:[],tasks:[]}),this.ctx.addToast(t instanceof Error?t.message:"Failed to open "+e.name,"error")}finally{this.workspacesLoading=!1,this.requestUpdate()}P(this,e.id).then(()=>this.requestUpdate()).catch(()=>{})}_onBack(){this.selectedWorkspace=null,this.workspaceItemSearchQuery="",this._onBrowseBack()}async _onItemClick(e){const t=this.selectedWorkspace?.id,s=await U(this,e.path,t);if(!s){this.ctx.addToast("Failed to open "+e.name,"error");return}this.ctx.openSidebar({content:s.content,mimeType:s.mime,filePath:e.path,title:e.name})}_onSessionClick(e){e.key&&k.emit("chat-navigate",{sessionKey:e.key,tab:"chat"})}async _onPinToggle(e,t,s){await D(this,e,t,s)||this.ctx.addToast("Failed to update pin","error"),this.requestUpdate()}async _onPinSessionToggle(e,t,s){await R(this,e,t,s)||this.ctx.addToast("Failed to update session pin","error"),this.requestUpdate()}async _onCreateWorkspace(e){this.workspacesCreateLoading=!0;try{const t=await Q(this,e);return t?(this.workspaceItemSearchQuery="",await T(this,t),this.ctx.addToast("Created workspace: "+t.name,"success"),this.requestUpdate(),!0):(this.ctx.addToast("Failed to create workspace","error"),!1)}finally{this.workspacesCreateLoading=!1}}async _onDeleteWorkspace(e){if(!await I(this,e.id)){this.ctx.addToast("Failed to delete "+e.name,"error");return}this.ctx.addToast("Deleted workspace: "+e.name,"success"),this.allTasks=await d(this),this.requestUpdate()}_onToggleFolder(e){this.workspaceExpandedFolders=L(this.workspaceExpandedFolders,e),this.requestUpdate()}_onTeamSetup(){k.emit("chat-navigate",{sessionKey:"new",tab:"chat",message:"I want to set up a Team Workspace so my team can collaborate. Please walk me through it step by step, keeping it simple."})}async _onToggleTaskComplete(e,t){if(!await j(this,e,t)){this.ctx.addToast("Failed to update task","error");return}if(this.allTasks=await d(this),this.selectedWorkspace){const r=await u(this,this.selectedWorkspace.id);r&&(this.selectedWorkspace=r)}this.requestUpdate()}async _onCreateTask(e,t){const s=await N(this,e,t);if(!s){this.ctx.addToast("Failed to create task","error");return}if(this.ctx.addToast("Task created: "+s.title,"success"),this.allTasks=await d(this),this.selectedWorkspace){const r=await u(this,this.selectedWorkspace.id);r&&(this.selectedWorkspace=r)}this.requestUpdate()}async _onUpdateTask(e,t){if(!await A(this,e,t)){this.ctx.addToast("Failed to update task","error");return}if(this.editingTaskId=null,this.allTasks=await d(this),this.selectedWorkspace){const r=await u(this,this.selectedWorkspace.id);r&&(this.selectedWorkspace=r)}this.requestUpdate()}async _onStartTask(e){const t=await G(this,e);if(!t?.sessionId){this.ctx.addToast("Failed to open session for task","error");return}let s="";if(t.created&&!t.queueOutput){const r=[...this.allTasks??[],...this.selectedWorkspace?.tasks??[]].find(i=>i.id===e),o=r?.project?` (project: ${r.project})`:"";s="Let's work on: "+(r?.title??"this task")+o}this.allTasks=await d(this),this.requestUpdate(),k.emit("chat-navigate",{sessionKey:t.sessionId,tab:"chat",message:s})}async _onViewTaskOutput(e){const t=this.ctx?.gateway;if(!(!t||!this.ctx?.connected))try{const r=(await t.request("queue.list",{limit:100}))?.items?.find(l=>l.sourceTaskId===e);if(!r?.result?.outputPath){this.ctx?.addToast?.("No output available for this task","info");return}const o=await t.request("queue.readOutput",{path:r.result.outputPath}),i=r.result.outputPath.split("/").pop()??"Agent Output";this.ctx?.openSidebar?.({content:o.content,mimeType:"text/markdown",filePath:r.result.outputPath,title:i})}catch(s){console.error("[GmWork] View task output failed:",s),this.ctx?.addToast?.("Failed to load agent output","error")}}async _onBrowseFolder(e){if(!this.selectedWorkspace)return;const t=await K(this,this.selectedWorkspace.id,e);t&&(this.workspaceBrowsePath=e,this.workspaceBrowseEntries=t.entries,this.workspaceBreadcrumbs=t.breadcrumbs)}async _onBrowseSearch(e){if(this.workspaceBrowseSearchQuery=e,!e.trim()||!this.selectedWorkspace){this.workspaceBrowseSearchResults=null;return}this.workspaceBrowseSearchResults=await z(this,this.selectedWorkspace.id,e)}_onBrowseBack(){this.workspaceBrowsePath=null,this.workspaceBrowseEntries=null,this.workspaceBreadcrumbs=null,this.workspaceBrowseSearchQuery="",this.workspaceBrowseSearchResults=null}async _onCreateFolder(e){if(!this.selectedWorkspace)return;const t=await V(this,this.selectedWorkspace.id,e);t&&this.workspaceBrowsePath&&await this._onBrowseFolder(this.workspaceBrowsePath),t&&this.ctx.addToast("Folder created","success")}async _onPostToFeed(e,t){if(!this.selectedWorkspace)return;const s=await $(this,this.selectedWorkspace.id,e,t);if(!s){this.ctx.addToast("Failed to post to feed","error");return}this.selectedWorkspace.feedEntries&&(this.selectedWorkspace={...this.selectedWorkspace,feedEntries:[s,...this.selectedWorkspace.feedEntries]}),this.requestUpdate()}async _onTestConnection(e){if(!this.selectedWorkspace)return;this.ctx.addToast("Testing connection...","info");const t=await H(this,this.selectedWorkspace.id,e);if(t.ok){this.ctx.addToast("Connection OK","success");const s=await S(this,this.selectedWorkspace.id);this.selectedWorkspace={...this.selectedWorkspace,connections:s}}else this.ctx.addToast("Connection failed: "+(t.error??"unknown"),"error");this.requestUpdate()}async _onRemoveConnection(e){if(!this.selectedWorkspace)return;if(!await J(this,this.selectedWorkspace.id,e)){this.ctx.addToast("Failed to remove connection","error");return}this.ctx.addToast("Connection removed","success"),this.selectedWorkspace={...this.selectedWorkspace,connections:(this.selectedWorkspace.connections??[]).filter(s=>s.id!==e)},this.requestUpdate()}async _onBatchPushToDrive(e){if(!(e.length===0||!this.ctx.gateway||!this.ctx.connected)){this.ctx.addToast("Uploading "+e.length+" files to Drive...","info");try{const t=await this.ctx.gateway.request("files.batchPushToDrive",{filePaths:e}),s=t?.results?.filter(o=>o.success).length??0,r=t?.results?.length??e.length;s===r?this.ctx.addToast("Uploaded "+s+" files to Google Drive","success"):this.ctx.addToast("Uploaded "+s+"/"+r+" files ("+(r-s)+" failed)","warning")}catch(t){const s=t instanceof Error?t.message:"Unknown error";this.ctx.addToast("Batch Drive upload failed: "+s,"error")}}}};n([x({context:q,subscribe:!0})],a.prototype,"ctx",2);n([c()],a.prototype,"workspaces",2);n([c()],a.prototype,"selectedWorkspace",2);n([c()],a.prototype,"workspacesSearchQuery",2);n([c()],a.prototype,"workspaceItemSearchQuery",2);n([c()],a.prototype,"workspacesLoading",2);n([c()],a.prototype,"workspacesCreateLoading",2);n([c()],a.prototype,"workspacesError",2);n([c()],a.prototype,"workspaceExpandedFolders",2);n([c()],a.prototype,"allTasks",2);n([c()],a.prototype,"taskFilter",2);n([c()],a.prototype,"taskSort",2);n([c()],a.prototype,"taskSearch",2);n([c()],a.prototype,"showCompletedTasks",2);n([c()],a.prototype,"editingTaskId",2);n([c()],a.prototype,"workspaceBrowsePath",2);n([c()],a.prototype,"workspaceBrowseEntries",2);n([c()],a.prototype,"workspaceBreadcrumbs",2);n([c()],a.prototype,"workspaceBrowseSearchQuery",2);n([c()],a.prototype,"workspaceBrowseSearchResults",2);a=n([B("gm-work")],a);export{a as GmWork,ee as shouldRefreshWorkspaceData};
|