@loicngr/kobo 2.1.7 → 2.1.9
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/AGENTS.md +16 -0
- package/CHANGELOG.md +11 -0
- package/CONFIGURATION.md +39 -0
- package/DESIGN.md +11 -1
- package/README.md +4 -0
- package/dist/mcp-server/kobo-tasks-server.js +33 -1
- package/dist/mcp-server/memory-client.js +39 -0
- package/dist/mcp-server/workspace-dialogue-client.js +4 -1
- package/dist/server/db/memory-schema.js +185 -0
- package/dist/server/db/migrations.js +6 -0
- package/dist/server/db/schema.js +2 -0
- package/dist/server/index.js +4 -0
- package/dist/server/routes/mcp.js +31 -2
- package/dist/server/routes/memory.js +525 -0
- package/dist/server/routes/settings.js +3 -0
- package/dist/server/services/agent/engines/claude-code/event-mapper.js +13 -2
- package/dist/server/services/agent/engines/codex/event-mapper.js +2 -2
- package/dist/server/services/agent/orchestrator.js +110 -6
- package/dist/server/services/memory-agent-runtime.js +65 -0
- package/dist/server/services/memory-budget-service.js +183 -0
- package/dist/server/services/memory-context-service.js +287 -0
- package/dist/server/services/memory-mcp-service.js +339 -0
- package/dist/server/services/memory-service.js +891 -0
- package/dist/server/services/settings-service.js +19 -0
- package/dist/server/utils/memory-project-identity.js +17 -0
- package/dist/server/utils/memory-token-budget.js +221 -0
- package/dist/shared/codex-models.js +24 -0
- package/dist/shared/memory-prompts.js +18 -0
- package/dist/shared/memory-tools.js +215 -0
- package/dist/shared/memory.js +81 -0
- package/dist/shared/models.js +42 -0
- package/package.json +1 -1
- package/src/client/dist/pwa/assets/{ActivityFeed-BfMUdSXQ.css → ActivityFeed-DdJvMzRI.css} +1 -1
- package/src/client/dist/pwa/assets/ActivityFeed-w8TNfMKd.js +2 -0
- package/src/client/dist/pwa/assets/ChangelogPage-B1rkKskD.js +1 -0
- package/src/client/dist/pwa/assets/ClosePopup-CRV2hxHS.js +1 -0
- package/src/client/dist/pwa/assets/{ComparisonPanel-azVvpfGW.js → ComparisonPanel-kMWS9il3.js} +2 -2
- package/src/client/dist/pwa/assets/CreatePage-DOamHqeH.js +2 -0
- package/src/client/dist/pwa/assets/DashboardPage-Ds6Y8xlV.js +1 -0
- package/src/client/dist/pwa/assets/DiffViewer-j7rwPKxU.js +8 -0
- package/src/client/dist/pwa/assets/DocumentsPanel-BTp3J6Rq.js +1 -0
- package/src/client/dist/pwa/assets/{DrawerToggleButton-CQVSfKpY.js → DrawerToggleButton-DcVhAbjN.js} +1 -1
- package/src/client/dist/pwa/assets/GitPanel-DOugIJUS.js +3 -0
- package/src/client/dist/pwa/assets/HealthPage-BSrTmp1k.js +1 -0
- package/src/client/dist/pwa/assets/{MainLayout-CFLswVqP.css → MainLayout-DAcSwgUw.css} +1 -1
- package/src/client/dist/pwa/assets/MainLayout-DWzXL1KW.js +2 -0
- package/src/client/dist/pwa/assets/MemoryPanel-BivQoMQ6.js +1 -0
- package/src/client/dist/pwa/assets/MemoryPanel-Ch3qeyQw.css +1 -0
- package/src/client/dist/pwa/assets/MemoryProposalList-BnoVbFsj.js +1 -0
- package/src/client/dist/pwa/assets/MemoryProposalList-OmDpl3o5.css +1 -0
- package/src/client/dist/pwa/assets/QBadge-CW3Lw-kL.js +1 -0
- package/src/client/dist/pwa/assets/QBanner-BT2ZemYu.js +1 -0
- package/src/client/dist/pwa/assets/QBtn-BUSdPaf4.js +1 -0
- package/src/client/dist/pwa/assets/QBtnDropdown-B9xNOKD0.js +1 -0
- package/src/client/dist/pwa/assets/QBtnGroup-CnM4vSJA.js +1 -0
- package/src/client/dist/pwa/assets/QBtnToggle-DccOOtbh.js +1 -0
- package/src/client/dist/pwa/assets/QChip-Be16M4Ig.js +1 -0
- package/src/client/dist/pwa/assets/QExpansionItem-BBTTV_37.js +1 -0
- package/src/client/dist/pwa/assets/QItemSection-MdJ1_ZK7.js +1 -0
- package/src/client/dist/pwa/assets/QList-Cx1UfaUm.js +1 -0
- package/src/client/dist/pwa/assets/QMarkupTable-UhP7fVUp.js +1 -0
- package/src/client/dist/pwa/assets/QPage-CqkGHokx.js +1 -0
- package/src/client/dist/pwa/assets/QScrollArea-bm6nYMnB.js +1 -0
- package/src/client/dist/pwa/assets/QSelect-CPE9LsIn.js +1 -0
- package/src/client/dist/pwa/assets/QSpinnerDots-xdWyaE1i.js +1 -0
- package/src/client/dist/pwa/assets/QTooltip-CgVCYatx.js +1 -0
- package/src/client/dist/pwa/assets/SchedulePanel-DNwt3V1a.js +1 -0
- package/src/client/dist/pwa/assets/SearchPage-Dr43rGji.js +1 -0
- package/src/client/dist/pwa/assets/SettingsPage-C1dcMqCO.css +1 -0
- package/src/client/dist/pwa/assets/SettingsPage-oSGNwimG.js +9 -0
- package/src/client/dist/pwa/assets/SplitWorkspacePage-Cjd_Lq-0.js +1 -0
- package/src/client/dist/pwa/assets/{TerminalPanel-auHWDK9i.js → TerminalPanel-Bsrg96VZ.js} +9 -9
- package/src/client/dist/pwa/assets/ToolCallItem-M3CSguac.js +8 -0
- package/src/client/dist/pwa/assets/TouchPan-CxThkotY.js +1 -0
- package/src/client/dist/pwa/assets/{TourReplayButton-uCZpvYlj.js → TourReplayButton-COI4vR7q.js} +1 -1
- package/src/client/dist/pwa/assets/WorkspaceAttentionLabels-CqlhQOqG.js +1 -0
- package/src/client/dist/pwa/assets/WorkspacePage-C-JXKt-S.js +4 -0
- package/src/client/dist/pwa/assets/{browser-CU7taghA.js → browser-DuFAaYHh.js} +1 -1
- package/src/client/dist/pwa/assets/build-path-tree-DFwB0SSs.js +1 -0
- package/src/client/dist/pwa/assets/custom-sounds-DTV-xHVv.js +1 -0
- package/src/client/dist/pwa/assets/de-YFD4X2nQ.js +17 -0
- package/src/client/dist/pwa/assets/detached-fullscreen-Du3TcYdX.js +1 -0
- package/src/client/dist/pwa/assets/dom-BtYTvLeN.js +2 -0
- package/src/client/dist/pwa/assets/{editor.api-CBaHnF7Q.js → editor.api-DDwuA_C9.js} +1 -1
- package/src/client/dist/pwa/assets/efforts-DU9dTnaN.js +9 -0
- package/src/client/dist/pwa/assets/es-BvRPXBHq.js +17 -0
- package/src/client/dist/pwa/assets/expand-template-LaRhdYUp.js +1 -0
- package/src/client/dist/pwa/assets/{format-MtzcnR3z.js → format-BUmAn8W2.js} +1 -1
- package/src/client/dist/pwa/assets/formatters-DfLD95iT.js +1 -0
- package/src/client/dist/pwa/assets/fr-CZhjMFZl.js +17 -0
- package/src/client/dist/pwa/assets/{freemarker2-BtVwKuc0.js → freemarker2-DVQM2t3e.js} +1 -1
- package/src/client/dist/pwa/assets/{handlebars-Bhl5yJrV.js → handlebars-ChiPNy9j.js} +1 -1
- package/src/client/dist/pwa/assets/{html-DKXLlkkM.js → html-CnGW31DH.js} +1 -1
- package/src/client/dist/pwa/assets/i18n-v1pgIO4z.js +1 -0
- package/src/client/dist/pwa/assets/index-DPN7dSDH.js +20 -0
- package/src/client/dist/pwa/assets/it-B4rz5PZO.js +17 -0
- package/src/client/dist/pwa/assets/{javascript-Cdfy_faM.js → javascript-BmeNra1c.js} +1 -1
- package/src/client/dist/pwa/assets/{liquid-0NoEATfB.js → liquid-C5qQFvIu.js} +1 -1
- package/src/client/dist/pwa/assets/{mdx-hvP0EAwa.js → mdx-TsWwhlKp.js} +1 -1
- package/src/client/dist/pwa/assets/{monaco-contributions-Be_o6s3m.js → monaco-contributions-SMzL7GRn.js} +1 -1
- package/src/client/dist/pwa/assets/monaco.contribution-sN2BZtSW.js +2 -0
- package/src/client/dist/pwa/assets/network-auth-DXsDKXrM.js +1 -0
- package/src/client/dist/pwa/assets/{notify-theme-I_sWGwy6.js → notify-theme-BXJypfo4.js} +1 -1
- package/src/client/dist/pwa/assets/{permissionModes-BDi77lhg.js → permissionModes-DLWiBfdb.js} +1 -1
- package/src/client/dist/pwa/assets/{private.use-form-vxvbh_VN.js → private.use-form-DY1BkePL.js} +1 -1
- package/src/client/dist/pwa/assets/{project-color-i2bg2TfP.js → project-color-CBLQt6bM.js} +1 -1
- package/src/client/dist/pwa/assets/{python-Bz-bbYMw.js → python-CKHf2s-D.js} +1 -1
- package/src/client/dist/pwa/assets/{razor-CyafkF-1.js → razor-D_5X4O5M.js} +1 -1
- package/src/client/dist/pwa/assets/reactivity.esm-bundler-DY1JkAEA.js +1 -0
- package/src/client/dist/pwa/assets/runtime-core.esm-bundler-Bqg71Vll.js +1 -0
- package/src/client/dist/pwa/assets/{typescript-BSLweq4l.js → typescript-D62emDGo.js} +1 -1
- package/src/client/dist/pwa/assets/use-checkbox-v4aAbE6K.js +1 -0
- package/src/client/dist/pwa/assets/use-dark-BHObfh0O.js +1 -0
- package/src/client/dist/pwa/assets/use-id-BrdYXce0.js +1 -0
- package/src/client/dist/pwa/assets/use-is-mobile-CDB_rzM9.js +1 -0
- package/src/client/dist/pwa/assets/use-search-index-status-bIKbEP5q.js +1 -0
- package/src/client/dist/pwa/assets/{use-slide-transition-C5eDGOmu.js → use-slide-transition-B_Nu6u-t.js} +1 -1
- package/src/client/dist/pwa/assets/use-tours-CTNYIX-Q.js +2 -0
- package/src/client/dist/pwa/assets/use-worktree-restore-D69uzYON.js +1 -0
- package/src/client/dist/pwa/assets/workspace-templates-CSwgMrUf.js +1 -0
- package/src/client/dist/pwa/assets/{xml-DOY7F605.js → xml-Kyg_K_5X.js} +1 -1
- package/src/client/dist/pwa/assets/{yaml-CnWF0ZRJ.js → yaml-DC__PKjj.js} +1 -1
- package/src/client/dist/pwa/index.html +10 -10
- package/src/client/dist/pwa/sw.js +1 -1
- package/src/mcp-server/README.md +23 -0
- package/src/mcp-server/kobo-tasks-server.ts +38 -1
- package/src/mcp-server/memory-client.ts +52 -0
- package/src/mcp-server/workspace-dialogue-client.ts +4 -1
- package/src/client/dist/pwa/assets/ActivityFeed-B8tJgXwD.js +0 -2
- package/src/client/dist/pwa/assets/ChangelogPage-YjWYsB_s.js +0 -1
- package/src/client/dist/pwa/assets/ClosePopup-C1a82pL9.js +0 -1
- package/src/client/dist/pwa/assets/CreatePage-BVNtCTdA.js +0 -2
- package/src/client/dist/pwa/assets/DashboardPage-DydscFLA.js +0 -1
- package/src/client/dist/pwa/assets/DiffViewer-DfMqxOYw.js +0 -8
- package/src/client/dist/pwa/assets/DocumentsPanel-DCGgj9pc.js +0 -1
- package/src/client/dist/pwa/assets/GitPanel-D6ZCZPbj.js +0 -3
- package/src/client/dist/pwa/assets/HealthPage-D_A6DTiH.js +0 -1
- package/src/client/dist/pwa/assets/MainLayout-CeHg73-f.js +0 -2
- package/src/client/dist/pwa/assets/QBadge-rGILsUYl.js +0 -1
- package/src/client/dist/pwa/assets/QBanner-CtppfNDn.js +0 -1
- package/src/client/dist/pwa/assets/QBtn-b_baQtAt.js +0 -1
- package/src/client/dist/pwa/assets/QBtnDropdown-D8I04HPE.js +0 -1
- package/src/client/dist/pwa/assets/QBtnGroup-CUmAgBV8.js +0 -1
- package/src/client/dist/pwa/assets/QBtnToggle-COL46j6W.js +0 -1
- package/src/client/dist/pwa/assets/QChip-Btg1Lp_6.js +0 -1
- package/src/client/dist/pwa/assets/QExpansionItem-DmzCAbka.js +0 -1
- package/src/client/dist/pwa/assets/QItemSection-BhGnulVQ.js +0 -1
- package/src/client/dist/pwa/assets/QList-Cw2xs69W.js +0 -1
- package/src/client/dist/pwa/assets/QMarkupTable-Ck2E2TaI.js +0 -1
- package/src/client/dist/pwa/assets/QPage-BCDXjfVj.js +0 -1
- package/src/client/dist/pwa/assets/QScrollArea-BmBuij9J.js +0 -1
- package/src/client/dist/pwa/assets/QSelect-DUuWu79L.js +0 -1
- package/src/client/dist/pwa/assets/QSpinnerDots-BsKmccpX.js +0 -1
- package/src/client/dist/pwa/assets/QTooltip-Dhy3hNTO.js +0 -1
- package/src/client/dist/pwa/assets/SchedulePanel-BCiV6rMr.js +0 -1
- package/src/client/dist/pwa/assets/SearchPage-of0gPqV4.js +0 -1
- package/src/client/dist/pwa/assets/SettingsPage-BPg3-Lhb.js +0 -9
- package/src/client/dist/pwa/assets/SettingsPage-CpykRKq2.css +0 -1
- package/src/client/dist/pwa/assets/SplitWorkspacePage-BcdPVE9B.js +0 -1
- package/src/client/dist/pwa/assets/ToolCallItem-BQmqNcfF.js +0 -8
- package/src/client/dist/pwa/assets/TouchPan-DKpZbMAf.js +0 -1
- package/src/client/dist/pwa/assets/WorkspaceAttentionLabels-jDKgkf3G.js +0 -1
- package/src/client/dist/pwa/assets/WorkspacePage-DQ-jvLEj.js +0 -4
- package/src/client/dist/pwa/assets/build-path-tree-fw6KlTB4.js +0 -1
- package/src/client/dist/pwa/assets/custom-sounds-Dfi-grUv.js +0 -1
- package/src/client/dist/pwa/assets/de-C_20Oxyv.js +0 -17
- package/src/client/dist/pwa/assets/efforts-CNJXztO0.js +0 -9
- package/src/client/dist/pwa/assets/es-B3_j4CWr.js +0 -17
- package/src/client/dist/pwa/assets/expand-template-BtpC0GKE.js +0 -1
- package/src/client/dist/pwa/assets/formatters-BZm4POkA.js +0 -1
- package/src/client/dist/pwa/assets/fr-DbPOG-xd.js +0 -17
- package/src/client/dist/pwa/assets/i18n-B9eF3pgw.js +0 -1
- package/src/client/dist/pwa/assets/i18n-CPFleoLe.js +0 -19
- package/src/client/dist/pwa/assets/index-BVJWwOvK.js +0 -2
- package/src/client/dist/pwa/assets/it--6niM3qU.js +0 -17
- package/src/client/dist/pwa/assets/latest-request-7rgsEfKZ.js +0 -1
- package/src/client/dist/pwa/assets/monaco.contribution-DRQLCBp8.js +0 -2
- package/src/client/dist/pwa/assets/network-auth-DVXmkvPH.js +0 -1
- package/src/client/dist/pwa/assets/preload-helper-DjzSQ1t3.js +0 -1
- package/src/client/dist/pwa/assets/reactivity.esm-bundler-tuEvQ47f.js +0 -1
- package/src/client/dist/pwa/assets/runtime-core.esm-bundler-DOiZcasU.js +0 -1
- package/src/client/dist/pwa/assets/use-checkbox-BAt9fjK-.js +0 -1
- package/src/client/dist/pwa/assets/use-id-b4A2I8LB.js +0 -1
- package/src/client/dist/pwa/assets/use-is-mobile-DLIZxEo9.js +0 -1
- package/src/client/dist/pwa/assets/use-search-index-status-BzsGSHGh.js +0 -1
- package/src/client/dist/pwa/assets/use-tours-CM4E53aB.js +0 -2
- package/src/client/dist/pwa/assets/use-worktree-restore-C__ResAR.js +0 -1
- package/src/client/dist/pwa/assets/workspace-templates-TOa0yVyr.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{M as e,lt as t,pt as n}from"./reactivity.esm-bundler-DY1JkAEA.js";import{L as r,Y as i,_ as a,d as o,f as s,g as c,l,y as u}from"./runtime-core.esm-bundler-Bqg71Vll.js";import{d}from"./dom-BtYTvLeN.js";import{it as f,qt as p,rt as m}from"./index-DPN7dSDH.js";import{a as h}from"./use-tours-CTNYIX-Q.js";import{t as g}from"./QTooltip-CgVCYatx.js";import{t as _}from"./QChip-Be16M4Ig.js";function v(e){let t=e.replace(/\u001b\[\d+m/g,``).trim();return/^warning:/i.test(t)}function y(e,t,n){for(let r=e.length-1;r>=0;r--){let i=e[r];if(i.kind!==`error`||i.category===`quota`||i.category===`other`&&v(i.message)||i.category===`other`&&(i.code===`result_drain_timeout`||i.code===`stream_idle_timeout`||!i.code&&(i.message===`Session force-ended: the SDK generator stayed open after its final result (drain watchdog).`||i.message===`Session force-ended by the liveness watchdog: no SDK activity within the deadline. If the agent was legitimately busy, this is a bug worth reporting.`)))continue;let a=t[r]??null;if(!(a&&n.has(a)))return{event:i,eventId:a}}return null}function b(e){switch(e?.reason){case`completed`:return`session.endedCompleted`;case`killed`:return`session.endedKilled`;case`error`:return`session.endedError`;case`watchdog`:return`session.endedWatchdog`;default:return`session.ended`}}function x(e){return e?.reason===`completed`}function S(){return{count:0,lastEvent:null,items:[],textItems:new Map,toolItems:new Map}}function C(e,t,n=!0,r){return w(S(),e,t,n,r)}function w(e,t,n,r=!0,i){let a=e.count>0&&t.length>=e.count&&t[e.count-1]===e.lastEvent,o=a?null:e.items;if(a||(e.count=0,e.lastEvent=null,e.items=[],e.textItems=new Map,e.toolItems=new Map),D(e,t,n,i,e.count,t.length),e.count=t.length,e.lastEvent=t.length>0?t[t.length-1]:null,O(e,r),o?.length){let t=new Map(o.map(e=>[JSON.stringify(e),e]));for(let n=0;n<e.items.length;n++){let r=e.items[n],i=t.get(JSON.stringify(r));if(i){if(e.items[n]=i,i.type===`text`){let t=e.textItems.get(i.messageId);t&&(t.item=i)}else if(i.type===`tool`){let t=e.toolItems.get(i.toolCallId);t&&(t.item=i)}}}}return e.items}function T(e,t,n){e[t.index]=n,t.item=n}function E(e,t){return!t||!e?e:[...e,t]}function D(e,t,n,r,i,a){let{items:o,textItems:s,toolItems:c}=e;for(let e=i;e<a;e++){let i=t[e],a=n?.[e],l=r?.[e]??void 0;switch(i.kind){case`message:text`:{let e=s.get(i.messageId);if(e)T(o,e,{...e.item,text:e.item.text+i.text,streaming:i.streaming,origin:i.origin??e.item.origin,eventIds:E(e.item.eventIds,l)});else{let e={type:`text`,messageId:i.messageId,text:i.text,streaming:i.streaming,origin:i.origin,ts:a,eventIds:l?[l]:void 0};s.set(i.messageId,{item:e,index:o.length}),o.push(e)}break}case`message:end`:{let e=s.get(i.messageId);e?.item.streaming&&T(o,e,{...e.item,streaming:!1});break}case`message:thinking`:o.push({type:`thinking`,messageId:i.messageId,text:i.text,origin:i.origin,ts:a,eventIds:l?[l]:void 0});break;case`tool:call`:{let e={type:`tool`,toolCallId:i.toolCallId,name:i.name,input:i.input,origin:i.origin,ts:a,eventIds:l?[l]:void 0};c.set(i.toolCallId,{item:e,index:o.length}),o.push(e);break}case`tool:result`:{let e=c.get(i.toolCallId);e&&T(o,e,{...e.item,result:{output:i.output,isError:i.isError},eventIds:E(e.item.eventIds,l)});break}case`session:started`:o.push({type:`session`,kind:`started`,detail:{engineSessionId:i.engineSessionId,model:i.model},ts:a,eventIds:l?[l]:void 0});break;case`session:ended`:o.push({type:`session`,kind:`ended`,detail:{reason:i.reason,exitCode:i.exitCode},ts:a,eventIds:l?[l]:void 0});break;case`session:compacted`:o.push({type:`session`,kind:`compacted`,ts:a,eventIds:l?[l]:void 0});break;case`error`:if(i.category===`quota`||i.category===`other`&&v(i.message))break;o.push({type:`error`,category:i.category,message:i.message,ts:a,eventIds:l?[l]:void 0})}}}function O(e,t){let{items:n}=e,r=-1;for(let t=0;t<n.length;t++){let i=n[t];i.type===`text`&&i.streaming&&(r>=0&&k(e,r),r=t)}r>=0&&!t&&k(e,r)}function k(e,t){let n=e.items[t];if(n.type!==`text`||!n.streaming)return;let r={...n,streaming:!1};e.items[t]=r;let i=e.textItems.get(n.messageId);i&&i.index===t&&(i.item=r)}function A(e){return e.ts??``}function j(e){for(let t=1;t<e.length;t++)if(A(e[t-1])>A(e[t]))return!1;return!0}function M(e,t){if(!j(e)||!j(t)){let n=[...e,...t];return n.sort((e,t)=>{let n=A(e),r=A(t);return n===r?0:n<r?-1:1}),n}let n=[],r=0,i=0;for(;r<e.length&&i<t.length;)n.push(A(e[r])<=A(t[i])?e[r++]:t[i++]);for(;r<e.length;)n.push(e[r++]);for(;i<t.length;)n.push(t[i++]);return n}function N(e,t){if(t.length===0)return e;let n=M(e,t.map(e=>({type:`user`,content:e.content,sender:e.sender,...e.source?{source:e.source}:{},ts:e.ts,eventIds:e.eventIds}))),r;for(let e of n)e.type===`user`&&e.sender!==`system-prompt`&&e.ts&&(!r||e.ts>r)&&(r=e.ts);if(r)for(let t=0;t<n.length;t++){let i=n[t];if(i.type!==`text`||!i.streaming||i.ts&&i.ts>=r)continue;let a={...i,streaming:!1};n[t]=a;let o=e.indexOf(i);o!==-1&&(e[o]=a)}return n}var P={"claude-code":!0,codex:!0};function F(e){return e?P[e]??!0:!0}var I={"claude-code":!0,codex:!0};function L(e){return e?I[e]??!0:!0}var R={"claude-code":!0,codex:!0};function z(e){return e?R[e]??!1:!1}var B={"claude-code":!0,codex:!1};function V(e){return e?B[e]??!1:!1}function H(e){let t=e=>Math.max(Date.parse(e.startedAt),Date.parse(e.endedAt??e.startedAt));return e.reduce((e,n)=>(n.activationOrder??0)<0?e:e?n.status===`running`==(e.status===`running`)?(n.activationOrder??0)===(e.activationOrder??0)?t(n)>t(e)?n:e:(n.activationOrder??0)>(e.activationOrder??0)?n:e:n.status===`running`?n:e:n,void 0)}var U=h(u({__name:`AutoLoopChip`,props:{workspace:{default:null}},setup(u){let d=u,{t:m}=p(),h=f(),v=l(()=>d.workspace??h.selectedWorkspace),y=l(()=>v.value?.id??null),b=l(()=>y.value?h.autoLoopStates[y.value]??null:null),x=l(()=>!!b.value?.auto_loop),S=l(()=>!!b.value?.auto_loop_ready),C=l(()=>y.value!==null&&h.selectedWorkspaceId===y.value),w=l(()=>C.value?h.tasks.filter(e=>e.status===`done`).length:b.value?.tasks_done??0),T=l(()=>C.value?h.tasks.length:b.value?.tasks_total??0);return(l,u)=>x.value&&(b.value?.state===`blocked`||b.value?.state===`waiting`)?(r(),o(_,{key:0,dense:``,square:``,size:`sm`,class:t([`q-ml-sm auto-loop-chip`,{"auto-loop-chip--blocked":b.value.state===`blocked`}])},{default:i(()=>[c(n(e(m)(`autoLoop.toggle`))+` · `+n(e(m)(`autoLoop.status.${b.value.state}`)),1)]),_:1},8,[`class`])):x.value&&!S.value?(r(),o(_,{key:1,dense:``,square:``,size:`sm`,color:`primary`,"text-color":`white`,icon:`hourglass_top`,class:`q-ml-sm`},{default:i(()=>[c(n(e(m)(`autoLoop.preparing`))+` `,1),a(g,null,{default:i(()=>[c(n(e(m)(`autoLoop.preparingTooltip`)),1)]),_:1})]),_:1})):x.value?(r(),o(_,{key:2,dense:``,square:``,size:`sm`,color:`amber-9`,"text-color":`white`,icon:`autorenew`,class:`q-ml-sm`},{default:i(()=>[c(n(e(m)(`autoLoop.progress`,{done:w.value,total:T.value})),1)]),_:1})):s(``,!0)}}),[[`__scopeId`,`data-v-c60d5ae9`]]);function W(e,t){if(e===``)return 0;let n=e.toLowerCase(),r=t.toLowerCase(),i=0,a=0,o=-2;for(let e of n){let t=-1;for(let n=a;n<r.length;n++)if(r[n]===e){t=n;break}if(t===-1)return null;i+=t===o+1?5:1;let n=t>0?r[t-1]:``;(t===0||n===`/`||n===`-`||n===`_`||n===`.`)&&(i+=2),o=t,a=t+1}return i-t.length*.01}function G(e,t,n,r=W){if(n<=0)return[];let i=[];for(let a of t){let t=r(e,a);if(t===null||i.length===n&&t<=i[n-1].score)continue;let o=i.length;for(;o>0&&i[o-1].score<t;)o--;i.splice(o,0,{item:a,score:t}),i.length>n&&i.pop()}return i.map(e=>e.item)}var K=new Set([`not-found`,`not-purged`,`workspace-busy`,`worktree-not-owned`,`project-unavailable`,`path-conflict`,`branch-in-use`,`recovery-source-unavailable`,`git-failed`]),q=`https://github.com/loicngr/kobo/blob/develop/CONFIGURATION.md#restoring-a-purged-workspace`;function J(){let e=f(),t=d(),{t:n}=p();async function r(r){if(!e.restoringWorktreeIds.includes(r))try{await e.restoreWorktree(r),t.notify({type:`positive`,message:n(`workspacePage.worktreeRestoreSuccess`),position:`top`})}catch(e){let r=e instanceof m&&e.code&&K.has(e.code)?e.code:`git-failed`;t.notify({type:`negative`,message:n(`workspacePage.restoreError.${r}`),position:`top`,actions:[{label:n(`common.details`),handler:()=>window.open(q,`_blank`,`noopener,noreferrer`)}]})}}return{restoreWorktree:r}}export{H as a,V as c,C as d,w as f,b as g,y as h,U as i,F as l,N as m,W as n,z as o,x as p,G as r,L as s,J as t,S as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{M as e,pt as t}from"./reactivity.esm-bundler-DY1JkAEA.js";import{L as n,d as r,l as i,p as a,r as o,u as s,y as c,z as l}from"./runtime-core.esm-bundler-Bqg71Vll.js";import{It as u,Jt as d,j as f,qt as p}from"./index-DPN7dSDH.js";import{t as m}from"./QSelect-CPE9LsIn.js";var h=[`aria-label`],g={class:`text-subtitle2 q-mb-xs`},_={class:`text-caption`},v=c({__name:`WorkflowPolicyEditor`,props:{modelValue:{},inherit:{type:Boolean}},emits:[`update:modelValue`],setup(c,{emit:u}){let d=c,v=u,{t:y}=p(),b=i(()=>[...d.inherit?[{label:y(`workflow.inherit`),value:``}]:[],{label:y(`workflow.manual`),value:`manual`},{label:y(`workflow.automatic`),value:`automatic`}]);function x(e,t){let n={...d.modelValue};t?n[e]=t:delete n[e],v(`update:modelValue`,n)}return(i,u)=>(n(),a(`section`,{class:`q-mb-md`,"aria-label":i.$t(`workflow.title`)},[s(`div`,g,t(i.$t(`workflow.title`)),1),s(`p`,_,t(i.$t(`workflow.hint`)),1),(n(!0),a(o,null,l(e(f),e=>(n(),r(m,{key:e,class:`q-mb-sm`,outlined:``,dense:``,label:i.$t(`workflow.${e}`),"model-value":c.modelValue[e]??``,options:b.value,"emit-value":``,"map-options":``,"onUpdate:modelValue":t=>x(e,t)},null,8,[`label`,`model-value`,`options`,`onUpdate:modelValue`]))),128))],8,h))}}),y=d(`workspace-templates`,{state:()=>({templates:[],loading:!1,loaded:!1}),getters:{findByName:e=>t=>{let n=t.trim().toLowerCase();if(n)return e.templates.find(e=>e.name.toLowerCase()===n)}},actions:{async fetchTemplates(){if(!this.loading){this.loading=!0;try{let e=await u(`/api/workspace-templates`);this.templates=e.templates,this.loaded=!0}catch(e){console.error(`[workspace-templates store] fetchTemplates failed:`,e)}finally{this.loading=!1}}},async createTemplate(e){let{template:t}=await u(`/api/workspace-templates`,{method:`POST`,body:e});return this.templates.push(t),t},async updateTemplate(e,t){let{template:n}=await u(`/api/workspace-templates/${encodeURIComponent(e)}`,{method:`PUT`,body:t}),r=this.templates.findIndex(t=>t.id===e);return r>=0?this.templates[r]=n:this.templates.push(n),n},async deleteTemplate(e){await u(`/api/workspace-templates/${encodeURIComponent(e)}`,{method:`DELETE`}),this.templates=this.templates.filter(t=>t.id!==e)}}});export{v as n,y as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./editor.api-
|
|
1
|
+
import{n as e}from"./editor.api-DDwuA_C9.js";var t={comments:{blockComment:[`<!--`,`-->`]},brackets:[[`<`,`>`]],autoClosingPairs:[{open:`<`,close:`>`},{open:`'`,close:`'`},{open:`"`,close:`"`}],surroundingPairs:[{open:`<`,close:`>`},{open:`'`,close:`'`},{open:`"`,close:`"`}],onEnterRules:[{beforeText:RegExp(`<([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:RegExp(`<(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),action:{indentAction:e.IndentAction.Indent}}]},n={defaultToken:``,tokenPostfix:`.xml`,ignoreCase:!0,qualifiedName:/(?:[\w\.\-]+:)?[\w\.\-]+/,tokenizer:{root:[[/[^<&]+/,``],{include:`@whitespace`},[/(<)(@qualifiedName)/,[{token:`delimiter`},{token:`tag`,next:`@tag`}]],[/(<\/)(@qualifiedName)(\s*)(>)/,[{token:`delimiter`},{token:`tag`},``,{token:`delimiter`}]],[/(<\?)(@qualifiedName)/,[{token:`delimiter`},{token:`metatag`,next:`@tag`}]],[/(<\!)(@qualifiedName)/,[{token:`delimiter`},{token:`metatag`,next:`@tag`}]],[/<\!\[CDATA\[/,{token:`delimiter.cdata`,next:`@cdata`}],[/&\w+;/,`string.escape`]],cdata:[[/[^\]]+/,``],[/\]\]>/,{token:`delimiter.cdata`,next:`@pop`}],[/\]/,``]],tag:[[/[ \t\r\n]+/,``],[/(@qualifiedName)(\s*=\s*)("[^"]*"|'[^']*')/,[`attribute.name`,``,`attribute.value`]],[/(@qualifiedName)(\s*=\s*)("[^">?\/]*|'[^'>?\/]*)(?=[\?\/]\>)/,[`attribute.name`,``,`attribute.value`]],[/(@qualifiedName)(\s*=\s*)("[^">]*|'[^'>]*)/,[`attribute.name`,``,`attribute.value`]],[/@qualifiedName/,`attribute.name`],[/\?>/,{token:`delimiter`,next:`@pop`}],[/(\/)(>)/,[{token:`tag`},{token:`delimiter`,next:`@pop`}]],[/>/,{token:`delimiter`,next:`@pop`}]],whitespace:[[/[ \t\r\n]+/,``],[/<!--/,{token:`comment`,next:`@comment`}]],comment:[[/[^<\-]+/,`comment.content`],[/-->/,{token:`comment`,next:`@pop`}],[/<!--/,`comment.content.invalid`],[/[<\-]/,`comment.content`]]}};export{t as conf,n as language};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./editor.api-
|
|
1
|
+
import{n as e}from"./editor.api-DDwuA_C9.js";var t={comments:{lineComment:`#`},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],folding:{offSide:!0},onEnterRules:[{beforeText:/:\s*$/,action:{indentAction:e.IndentAction.Indent}}]},n={tokenPostfix:`.yaml`,brackets:[{token:`delimiter.bracket`,open:`{`,close:`}`},{token:`delimiter.square`,open:`[`,close:`]`}],keywords:[`true`,`True`,`TRUE`,`false`,`False`,`FALSE`,`null`,`Null`,`Null`,`~`],numberInteger:/(?:0|[+-]?[0-9]+)/,numberFloat:/(?:0|[+-]?[0-9]+)(?:\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,numberOctal:/0o[0-7]+/,numberHex:/0x[0-9a-fA-F]+/,numberInfinity:/[+-]?\.(?:inf|Inf|INF)/,numberNaN:/\.(?:nan|Nan|NAN)/,numberDate:/\d{4}-\d\d-\d\d([Tt ]\d\d:\d\d:\d\d(\.\d+)?(( ?[+-]\d\d?(:\d\d)?)|Z)?)?/,escapes:/\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,tokenizer:{root:[{include:`@whitespace`},{include:`@comment`},[/%[^ ]+.*$/,`meta.directive`],[/---/,`operators.directivesEnd`],[/\.{3}/,`operators.documentEnd`],[/[-?:](?= )/,`operators`],{include:`@anchor`},{include:`@tagHandle`},{include:`@flowCollections`},{include:`@blockStyle`},[/@numberInteger(?![ \t]*\S+)/,`number`],[/@numberFloat(?![ \t]*\S+)/,`number.float`],[/@numberOctal(?![ \t]*\S+)/,`number.octal`],[/@numberHex(?![ \t]*\S+)/,`number.hex`],[/@numberInfinity(?![ \t]*\S+)/,`number.infinity`],[/@numberNaN(?![ \t]*\S+)/,`number.nan`],[/@numberDate(?![ \t]*\S+)/,`number.date`],[/(".*?"|'.*?'|[^#'"]*?)([ \t]*)(:)( |$)/,[`type`,`white`,`operators`,`white`]],{include:`@flowScalars`},[/.+?(?=(\s+#|$))/,{cases:{"@keywords":`keyword`,"@default":`string`}}]],object:[{include:`@whitespace`},{include:`@comment`},[/\}/,`@brackets`,`@pop`],[/,/,`delimiter.comma`],[/:(?= )/,`operators`],[/(?:".*?"|'.*?'|[^,\{\[]+?)(?=: )/,`type`],{include:`@flowCollections`},{include:`@flowScalars`},{include:`@tagHandle`},{include:`@anchor`},{include:`@flowNumber`},[/[^\},]+/,{cases:{"@keywords":`keyword`,"@default":`string`}}]],array:[{include:`@whitespace`},{include:`@comment`},[/\]/,`@brackets`,`@pop`],[/,/,`delimiter.comma`],{include:`@flowCollections`},{include:`@flowScalars`},{include:`@tagHandle`},{include:`@anchor`},{include:`@flowNumber`},[/[^\],]+/,{cases:{"@keywords":`keyword`,"@default":`string`}}]],multiString:[[/^( +).+$/,`string`,`@multiStringContinued.$1`]],multiStringContinued:[[/^( *).+$/,{cases:{"$1==$S2":`string`,"@default":{token:`@rematch`,next:`@popall`}}}]],whitespace:[[/[ \t\r\n]+/,`white`]],comment:[[/#.*$/,`comment`]],flowCollections:[[/\[/,`@brackets`,`@array`],[/\{/,`@brackets`,`@object`]],flowScalars:[[/"([^"\\]|\\.)*$/,`string.invalid`],[/'([^'\\]|\\.)*$/,`string.invalid`],[/'[^']*'/,`string`],[/"/,`string`,`@doubleQuotedString`]],doubleQuotedString:[[/[^\\"]+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/"/,`string`,`@pop`]],blockStyle:[[/[>|][0-9]*[+-]?$/,`operators`,`@multiString`]],flowNumber:[[/@numberInteger(?=[ \t]*[,\]\}])/,`number`],[/@numberFloat(?=[ \t]*[,\]\}])/,`number.float`],[/@numberOctal(?=[ \t]*[,\]\}])/,`number.octal`],[/@numberHex(?=[ \t]*[,\]\}])/,`number.hex`],[/@numberInfinity(?=[ \t]*[,\]\}])/,`number.infinity`],[/@numberNaN(?=[ \t]*[,\]\}])/,`number.nan`],[/@numberDate(?=[ \t]*[,\]\}])/,`number.date`]],tagHandle:[[/\![^ ]*/,`tag`]],anchor:[[/[&*][^ ]+/,`namespace`]]}};export{t as conf,n as language};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang=en><head><title>Kōbō</title><link rel=icon type=image/svg+xml href=/favicon.svg><meta charset=utf-8><meta name=description content="Kōbō — multi-workspace agent manager for Claude Code"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"> <script type="module" crossorigin src="/assets/index-
|
|
2
|
-
<link rel="modulepreload" crossorigin href="/assets/reactivity.esm-bundler-
|
|
3
|
-
<link rel="modulepreload" crossorigin href="/assets/runtime-core.esm-bundler-
|
|
4
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
1
|
+
<!DOCTYPE html><html lang=en><head><title>Kōbō</title><link rel=icon type=image/svg+xml href=/favicon.svg><meta charset=utf-8><meta name=description content="Kōbō — multi-workspace agent manager for Claude Code"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"> <script type="module" crossorigin src="/assets/index-DPN7dSDH.js"></script>
|
|
2
|
+
<link rel="modulepreload" crossorigin href="/assets/reactivity.esm-bundler-DY1JkAEA.js">
|
|
3
|
+
<link rel="modulepreload" crossorigin href="/assets/runtime-core.esm-bundler-Bqg71Vll.js">
|
|
4
|
+
<link rel="modulepreload" crossorigin href="/assets/dom-BtYTvLeN.js">
|
|
5
|
+
<link rel="modulepreload" crossorigin href="/assets/QBtn-BUSdPaf4.js">
|
|
6
|
+
<link rel="modulepreload" crossorigin href="/assets/use-dark-BHObfh0O.js">
|
|
7
|
+
<link rel="modulepreload" crossorigin href="/assets/detached-fullscreen-Du3TcYdX.js">
|
|
5
8
|
<link rel="modulepreload" crossorigin href="/assets/defineProperty-BbfpZ9Tg.js">
|
|
6
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
7
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
8
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
9
|
-
<link rel="modulepreload" crossorigin href="/assets/use-id-b4A2I8LB.js">
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/private.use-form-vxvbh_VN.js">
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/use-checkbox-BAt9fjK-.js">
|
|
9
|
+
<link rel="modulepreload" crossorigin href="/assets/use-id-BrdYXce0.js">
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/private.use-form-DY1BkePL.js">
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/use-checkbox-v4aAbE6K.js">
|
|
12
12
|
<link rel="stylesheet" crossorigin href="/assets/index-C8zAZ-k-.css">
|
|
13
13
|
<link rel="manifest" href="/manifest.json"><meta name="theme-color" content="#6c63ff"><link rel="mask-icon" href="/icons/safari-pinned-tab.svg" color="#6c63ff"><meta name="mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="default"><meta name="apple-mobile-web-app-title" content="Kōbō"><link rel="apple-touch-icon" href="/icons/apple-icon-120x120.png"><link rel="apple-touch-icon" sizes="152x152" href="/icons/apple-icon-152x152.png"><link rel="apple-touch-icon" sizes="167x167" href="/icons/apple-icon-167x167.png"><link rel="apple-touch-icon" sizes="180x180" href="/icons/apple-icon-180x180.png"></head><body><div id=q-app></div></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
if(!self.define){let s,e={};const a=(a,r)=>(a=new URL(a+".js",r).href,e[a]||new Promise(e=>{if("document"in self){const s=document.createElement("script");s.src=a,s.onload=e,document.head.appendChild(s)}else s=a,importScripts(a),e()}).then(()=>{let s=e[a];if(!s)throw new Error(`Module ${a} didn’t register its module`);return s}));self.define=(r,i)=>{const c=s||("document"in self?document.currentScript.src:"")||location.href;if(e[c])return;let d={};const f=s=>a(s,c),b={module:{uri:c},exports:d,require:f};e[c]=Promise.all(r.map(s=>b[s]||f(s))).then(s=>(i(...s),d))}}define(["./workbox-778a14ff"],function(s){"use strict";s.setCacheNameDetails({prefix:"kobo-client"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.clientsClaim(),s.precacheAndRoute([{url:"manifest.json",revision:"73f02ba4eb4414fb70bbe5ca76cc9580"},{url:"index.html",revision:"09a7f2a8dddfda09882bb2a0f4a7e3c9"},{url:"favicon.svg",revision:"9d89ef10d49f14d08c25cfca9bd4ea75"},{url:"sounds/ready.wav",revision:"cd00e80e7a9d443a0e95272bb22bed6e"},{url:"sounds/neutral.wav",revision:"cb264f6e7eb97388229e82fe7d6fa5cf"},{url:"fonts/GeistMono-Variable.woff2",revision:"308360d8a547331fd40bc09a7145d59a"},{url:"fonts/Geist-Variable.woff2",revision:"dfa48d5a853753289194436953e3f202"},{url:"fonts/GEIST-LICENSE.txt",revision:"563d13575f813953c3151e1ecce3b76f"},{url:"assets/yaml-CnWF0ZRJ.js",revision:"18bb51ffa210b1da7de5e07de1799680"},{url:"assets/xml-DOY7F605.js",revision:"2351e5c3009cba2f3e636ff9aea0d5de"},{url:"assets/workspace-templates-TOa0yVyr.js",revision:"7c501f59ec523fdfe3ec2d18c2ad0f37"},{url:"assets/workspace-page-layout-Dw9NhZsL.js",revision:"0c933f7b6c6bf3c90ea1875abad85392"},{url:"assets/wgsl-DpFanUEy.js",revision:"4cf32279d7c6a601611a6e32a14f3b1e"},{url:"assets/vb-DV3o63ZY.js",revision:"a5b3a756d667f5e4a5da6da4013d7341"},{url:"assets/use-worktree-restore-C__ResAR.js",revision:"bcf371f7e12c422ba59652f7556ecb0c"},{url:"assets/use-worktree-restore-B-9jHocY.css",revision:"54449cd3d2d5c88b0bd7d88f53f581c3"},{url:"assets/use-tours-CTZuBZOi.css",revision:"2f6d79046e1409f0472f65179eaa76f3"},{url:"assets/use-tours-CM4E53aB.js",revision:"aed74c2d4ffc19ae6983fecaaee2be0e"},{url:"assets/use-slide-transition-C5eDGOmu.js",revision:"b90dcd38b96a2011b13e3cb1fad8c810"},{url:"assets/use-search-index-status-BzsGSHGh.js",revision:"4d77e391024fed16e4eb606807d7aef9"},{url:"assets/use-is-mobile-DLIZxEo9.js",revision:"4f97e87ed19624f38a21469b2bc9b625"},{url:"assets/use-id-b4A2I8LB.js",revision:"6794200f2a5efdc2931d9e372716b5a3"},{url:"assets/use-checkbox-BAt9fjK-.js",revision:"8248337ac7dde60a0536406645b4e3bf"},{url:"assets/typespec-B8J7ngcE.js",revision:"6c28560625f59db6a5897aa92de81033"},{url:"assets/typescript-BSLweq4l.js",revision:"4a02d1c3719eaa263a39a06588f78bde"},{url:"assets/twig-De2hgUGE.js",revision:"dfb4c76c8ec0d822070abac68d2bd473"},{url:"assets/tcl-DISqw1ZD.js",revision:"6d0ddaebd76ad41c47c96d484af119f8"},{url:"assets/systemverilog-Bz4Y3fRF.js",revision:"18e6d6e82eeb1107458d8d5531f82246"},{url:"assets/swift-Bxkupp3x.js",revision:"65b88f49188974d7c12e1a6cd12a9de5"},{url:"assets/st-DbInun42.js",revision:"d7294c4d47351db4e5edd4d91e445a21"},{url:"assets/sql-NEE52Syq.js",revision:"48352e15fff2141c7deaaab4e51e9565"},{url:"assets/sparql-D_Lu-MrJ.js",revision:"65390637b1a24614803db6844a0db77b"},{url:"assets/sophia-CRfGWb83.js",revision:"a330db913fee26a14679bed631a59043"},{url:"assets/solidity-BEEn4gHE.js",revision:"c2cd02221ec3d86f9a6bb09bfb1f8978"},{url:"assets/shell-CC2rA5mh.js",revision:"8362d325cda511ef760335e0847d3910"},{url:"assets/scss-gp-XZpBa.js",revision:"bf0805dd5cd80d90fef58c9866a7751e"},{url:"assets/scheme-BeGwcela.js",revision:"55c990715708ea012165486d065b3e2c"},{url:"assets/scala-DHpiXF5c.js",revision:"4eeea167d27954255e39d91412b62f87"},{url:"assets/sb-CcwsVR0C.js",revision:"93fc05f23a9cbb96d4f72dbc73e2e53b"},{url:"assets/rust-DdL9SqIa.js",revision:"356bac76300c8d83e8e9d76becf3c9ea"},{url:"assets/runtime-core.esm-bundler-DOiZcasU.js",revision:"c8b24ba609f8e3f7d98b4e4f2fcab5b0"},{url:"assets/ruby-DezsRK8O.js",revision:"95c3294c6d6cead3cccd7e4e973ab964"},{url:"assets/restructuredtext-BYgofb2h.js",revision:"f75377ae694f4e8f0bcccd05b5b9e65c"},{url:"assets/render-chat-markdown-CafzCcmu.js",revision:"336025fd68881d002bff5a7615ecb72f"},{url:"assets/redshift-DT7zqm-g.js",revision:"44e23f67b6a02e60d28c9947cd025207"},{url:"assets/redis-ClamHrr6.js",revision:"e3141183a6756253db43e10f8a305787"},{url:"assets/reactivity.esm-bundler-tuEvQ47f.js",revision:"132ddf3ef5e25c89e4757cb7f05605ba"},{url:"assets/razor-CyafkF-1.js",revision:"a1440b3fb1fad6b36addcab444052c13"},{url:"assets/r-BwWrilGY.js",revision:"f18d3e790ef07bc993539322d29548e4"},{url:"assets/qsharp-DkqhCAOL.js",revision:"c53fe08a83f8fcbcd81723105136a691"},{url:"assets/python-Bz-bbYMw.js",revision:"416d3e3ed25d3d83efc3f39bce2a68d1"},{url:"assets/pug-Z5eAx3Zn.js",revision:"6e3de6d5214d2cf61b90949e1d383b49"},{url:"assets/protobuf-C531GsRP.js",revision:"04e688a7fef2bde8cef525653497371f"},{url:"assets/project-color-i2bg2TfP.js",revision:"607f810b806976ca72c1b6375f00db67"},{url:"assets/private.use-form-vxvbh_VN.js",revision:"727ba8d79bb6c06c76f6f88d36809f1c"},{url:"assets/preload-helper-DjzSQ1t3.js",revision:"0d547ee95526688c66f48be0a9d9b335"},{url:"assets/powershell-DmHpPYUd.js",revision:"ff476e9c4398edc9dfd2eb0ee9356352"},{url:"assets/powerquery-D3hlyOfw.js",revision:"0cacccadbe7cd4415f9a3112763c89f3"},{url:"assets/postiats-43DmfD33.js",revision:"b5dbce3331b7ccb325853328702b4bd9"},{url:"assets/pla-CopQ2nXW.js",revision:"b31678678d642accba98d7e7249a20b2"},{url:"assets/php-nr791fC2.js",revision:"ee487693840b66c2abf7c2da872dd6a8"},{url:"assets/pgsql-DTj74zXo.js",revision:"75375029d157fc5e789a13718eed9da7"},{url:"assets/permissionModes-BDi77lhg.js",revision:"fc693d30e99a476b7206e606c6f7d66a"},{url:"assets/perl-oz_6vUea.js",revision:"fee6d319d328db438b336b52ac07a46a"},{url:"assets/pascaligo-D-ptJ9y-.js",revision:"88be4e81a252f44f049ac92f7b6ea518"},{url:"assets/pascal-DrH0SRf2.js",revision:"0d81121099a69b47e10701bf075fe3cd"},{url:"assets/objective-c-FvmIjYaQ.js",revision:"6d64543dd4430fb71bcd7a5347a0398c"},{url:"assets/notify-theme-I_sWGwy6.js",revision:"684476158fad8cc570f1f8faaa5ae942"},{url:"assets/network-auth-DVXmkvPH.js",revision:"318a034c3f5c199a745ea3048f183e6e"},{url:"assets/mysql-SOo6toE5.js",revision:"677c089d979324385539e96bd2eb11e4"},{url:"assets/msdax-DauUninz.js",revision:"a63bfea2dd041755a34fe3e307159413"},{url:"assets/monaco.contribution-DRQLCBp8.js",revision:"70886abdfcd845602e4170149af469f0"},{url:"assets/monaco-contributions-DvnCTJI2.css",revision:"964f32a36c06b4d5a66ac1b01556eb2b"},{url:"assets/monaco-contributions-Be_o6s3m.js",revision:"ef6caef0bfbfb81bfc1b50c0e131c640"},{url:"assets/mips-CIPQ_RoX.js",revision:"b22614ddc8855670a3f76290908877f5"},{url:"assets/mdx-hvP0EAwa.js",revision:"b0c533b11d81c41ec8321653ea5e22e1"},{url:"assets/markdown-Cimd5fb3.js",revision:"38eaa88ca7719b9da2894b7c26f2f65b"},{url:"assets/m3-D-oSqn_W.js",revision:"624c73b0332fe1ddfef6013306c5998d"},{url:"assets/lua-CsQS60Ue.js",revision:"5568edf60b64f912bd17561f26e03d44"},{url:"assets/liquid-0NoEATfB.js",revision:"4c47f701f9f0cfd51d1a28f0db15a98c"},{url:"assets/lexon-CfSJPG6W.js",revision:"32b224ffe991474a4cfcbed19971a98d"},{url:"assets/less-B9JPFI3C.js",revision:"c80573ae2313727c545a585d90d3ff36"},{url:"assets/latest-request-7rgsEfKZ.js",revision:"bb97b9af3de7ec34ee595bb901be1b11"},{url:"assets/kotlin-BOotOW0E.js",revision:"7c2a31b16b6ddc97b60891b09afa11b1"},{url:"assets/julia-Bri6UV-V.js",revision:"bb5062cdf870c17c7c9be635c1a8a3be"},{url:"assets/javascript-Cdfy_faM.js",revision:"5d9eaf0dfc324e29da89875f8b0b2053"},{url:"assets/java-BEtHBSE6.js",revision:"987edcd2170749acca47ea184dd9ab25"},{url:"assets/it--6niM3qU.js",revision:"225b1726e175bc5960ad2e4544d9f952"},{url:"assets/ini-sBoK_t0W.js",revision:"35f8ec10844ea4f62c2712d3f5c1e129"},{url:"assets/index-C8zAZ-k-.css",revision:"1488166e385bd7f03f15dbf2e6f4fc60"},{url:"assets/index-BVJWwOvK.js",revision:"eff6dbb5215792e8b827050c99e1e749"},{url:"assets/i18n-CPFleoLe.js",revision:"1b5bdfab012aa3186b1c6513ee316569"},{url:"assets/i18n-B9eF3pgw.js",revision:"d52da6a9c4be5445efe33a7df014b4fd"},{url:"assets/html-DKXLlkkM.js",revision:"cd78a5c5eed4144a187b842e73d6c559"},{url:"assets/hcl-CpzslTdj.js",revision:"f9ef1004e908957ec1c3bbea2049a0e9"},{url:"assets/handlebars-Bhl5yJrV.js",revision:"f7b78d4451ccb4adaeff7259f454b6dc"},{url:"assets/graphql-fmXr3nnJ.js",revision:"a51df1d5dca011f5d85dd09a2ffbe1e5"},{url:"assets/go-C-y9NEjX.js",revision:"9213c8381eb32996b86ca9600ca6a07e"},{url:"assets/fsharp-C8Ef5oNN.js",revision:"72f3de59be781f8a4ec49d16bac02119"},{url:"assets/freemarker2-BtVwKuc0.js",revision:"60ece4b2c2030b5b34307374f0fcdc60"},{url:"assets/fr-DbPOG-xd.js",revision:"c86e9352c8a35710cc1de874df9c288a"},{url:"assets/formatters-BZm4POkA.js",revision:"b9c3cf1cde3af9c6f3bec904531431aa"},{url:"assets/format-DoyK4IAn.css",revision:"51174980568a53694c8da3cc935fe4e6"},{url:"assets/flow9-C5_-GSwl.js",revision:"0e60dc6453d9684c059f20c846ae0ec4"},{url:"assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ-D-x-0Q06.woff2",revision:"a4160421d2605545f69a4cd6cd642902"},{url:"assets/expand-template-CTUNyJrv.css",revision:"a4033bbc7a564e856b2b0c42816a24f7"},{url:"assets/expand-template-BtpC0GKE.js",revision:"4bd3ca40adb989ebbeeefe7afbbb2598"},{url:"assets/es-B3_j4CWr.js",revision:"c22123ae882971067acf5b1fdde96332"},{url:"assets/elixir-6RTg0lbw.js",revision:"fb736f7429d9c6a596ed7905653dbf14"},{url:"assets/efforts-CNJXztO0.js",revision:"b28c24495e2fe7cebbd9bb4836031858"},{url:"assets/editor.worker-BLJF_oQx.js",revision:"73d3d20cadfc19535b465c224d29ba1b"},{url:"assets/editor.api-CBaHnF7Q.js",revision:"4172c65878bc878b88749dee955f8d12"},{url:"assets/editor-CmVjQp1O.css",revision:"dda9d7400b872282ecff92d1cb7da023"},{url:"assets/ecl-D05T4iGw.js",revision:"496ceca3c8bae12c563a8a781cf639f3"},{url:"assets/dockerfile-DZFCIeNp.js",revision:"6af03903b1e51179ae2120866bb68acd"},{url:"assets/defineProperty-BbfpZ9Tg.js",revision:"489a6e8420626ba7812b1b715b5ed17e"},{url:"assets/de-C_20Oxyv.js",revision:"dbf7dab6606c1c7c356fb45ab54f9b99"},{url:"assets/dart-onAF5SnQ.js",revision:"4fc14a4d2b7e030db6af8025d8fe831b"},{url:"assets/cypher-CVaqCwHa.js",revision:"75a568a8c6b29818b6a6c8675841ebf7"},{url:"assets/custom-sounds-Dfi-grUv.js",revision:"37b402bf0e4938031f20cb5ae5d3daaa"},{url:"assets/css-DIMkf-bt.js",revision:"368cd7c0ef4cdeca015fe9fe40ed1b2c"},{url:"assets/csp-bTuwJoIa.js",revision:"d13f525ef224dae69f8bde261bb48507"},{url:"assets/csharp-BKxtCVv1.js",revision:"e5831c8275e73409bc73a3991ceb194e"},{url:"assets/cpp-C7h46wYY.js",revision:"7fa3a56badaae54657cda12c403da2c7"},{url:"assets/coffee-Ba7i2nA0.js",revision:"1a1012b2a9bd329b3b1794297125c9a9"},{url:"assets/codicon-DF1abBS2.ttf",revision:"94829fd323d002e45660034255257955"},{url:"assets/clojure-Cm7r79vr.js",revision:"e3307e92ae8965ebb29ec9c9097774cd"},{url:"assets/clipboard-t9qe6lK7.js",revision:"04f746e11f1ac85a8652dff1abde80f4"},{url:"assets/cameligo-DMUM7wLl.js",revision:"ad01c48b3bff95a5fb691c7cd8427122"},{url:"assets/build-path-tree-fw6KlTB4.js",revision:"5e5cd51dced16a135c2ef3901ec29ab0"},{url:"assets/browser-CU7taghA.js",revision:"c3a8bc823ee8ab39f304e0c98b19c118"},{url:"assets/bicep-B5-_aFwp.js",revision:"b2c3f814c02ba6e4672b16282c0a1376"},{url:"assets/bat-i0X4ZdIN.js",revision:"914960f9abae1bfe5a2189a174a1e1c1"},{url:"assets/azcli-Bc_sGQ0U.js",revision:"c1dfc1889c57d0712d6415ecb14b66ed"},{url:"assets/apex-BWPQTe0t.js",revision:"eee56c5abf95c2575e288f36fdbb8737"},{url:"assets/abap-08VXUWAP.js",revision:"08897cd48182b5410786802ea9af6fa2"},{url:"assets/WorkspacePage-DQ-jvLEj.js",revision:"4b233022e2af7db3581f4caabbc52acc"},{url:"assets/WorkspacePage-Ba0jAHhn.css",revision:"dfe688e04c34aaff25cb9545145b0aee"},{url:"assets/WorkspaceAttentionLabels-jDKgkf3G.js",revision:"a44f0eeb8ad9803b331a335c5baad677"},{url:"assets/WorkspaceAttentionLabels-DSw8Upcp.css",revision:"4c648f6466a78473af69fd72824b79ad"},{url:"assets/TourReplayButton-uCZpvYlj.js",revision:"5c17f9dd55ff2a4e15cc0ad5294e5c03"},{url:"assets/TouchPan-DKpZbMAf.js",revision:"8a9fcedbd4adf593645cdca71d6dbfc6"},{url:"assets/ToolCallItem-DhjdG8vp.css",revision:"515c28b42f339bc39369af27a50ac1e7"},{url:"assets/ToolCallItem-BQmqNcfF.js",revision:"ea45b65dd97566a95adb26aecdd78a9f"},{url:"assets/TerminalPanel-auHWDK9i.js",revision:"8d43df238562e6c4e5b87f3e7a50e874"},{url:"assets/TerminalPanel-Dz9EE-Ph.css",revision:"9fd7805b12e550833d2ac46b5c24dc7a"},{url:"assets/SplitWorkspacePage-lWQO8xro.css",revision:"cabea8d2cabbc3e1012ffa88225e04d3"},{url:"assets/SplitWorkspacePage-BcdPVE9B.js",revision:"367e1674bc27b148104a7ff840e2b953"},{url:"assets/SettingsPage-CpykRKq2.css",revision:"52d883cca7d949994e0700cded5e7d17"},{url:"assets/SettingsPage-BPg3-Lhb.js",revision:"754f771c877074454c4fd6368c3b4a49"},{url:"assets/SearchPage-of0gPqV4.js",revision:"bbeae720b4d9a0635d7bbc6ee2babee2"},{url:"assets/SearchPage-BGc1oQSM.css",revision:"d988bd3c7ed5458189b7225097e4cdeb"},{url:"assets/SchedulePanel-CBM_GpS3.css",revision:"e4d8a73291701f8574305d69cb366164"},{url:"assets/SchedulePanel-BCiV6rMr.js",revision:"a43039b2ebaa9202986eb800694509b2"},{url:"assets/QTooltip-Dhy3hNTO.js",revision:"190567361274f611e6c6c8c1ccb9d146"},{url:"assets/QSpinnerDots-BsKmccpX.js",revision:"29e78fc1d0cffdebe6e180af9fd7e749"},{url:"assets/QSelect-DUuWu79L.js",revision:"ac2571a52d9b9eccf0c71fc4b91ada79"},{url:"assets/QScrollArea-BmBuij9J.js",revision:"45f125df7e425a091d72eccf33074e12"},{url:"assets/QPage-BCDXjfVj.js",revision:"f4a663b3a098f60ef913f57f9885cfeb"},{url:"assets/QMarkupTable-Ck2E2TaI.js",revision:"e1e278c223fbc58366668435c5b8b822"},{url:"assets/QList-Cw2xs69W.js",revision:"9d5d31cddea3e530a7775f94ddec8ce9"},{url:"assets/QItemSection-BhGnulVQ.js",revision:"e6e774bfab55604768864918c11b42c4"},{url:"assets/QExpansionItem-DmzCAbka.js",revision:"b9a0c8e28a2b5dcb60c54e588adbc5f0"},{url:"assets/QChip-Btg1Lp_6.js",revision:"35010dd5193a5cd352c02f373c1716d1"},{url:"assets/QBtnToggle-COL46j6W.js",revision:"d1f0790e2ebe910da26f6043bf2dea75"},{url:"assets/QBtnGroup-CUmAgBV8.js",revision:"5640a093f05cd905dba45fdbb96f3385"},{url:"assets/QBtnDropdown-D8I04HPE.js",revision:"07ab34fd4ba1b49a89a045bb522511cb"},{url:"assets/QBtn-b_baQtAt.js",revision:"81dd45c852de16ec87e5e5de1bca8316"},{url:"assets/QBanner-CtppfNDn.js",revision:"1eb985ad819cc09f504a9961bdf8fbf4"},{url:"assets/QBadge-rGILsUYl.js",revision:"0846eb34c673b322a25a167f541b928f"},{url:"assets/MainLayout-CeHg73-f.js",revision:"e3484ca233621627c95ff0c34e6a81a7"},{url:"assets/MainLayout-CFLswVqP.css",revision:"dee97b0ded6a1ce0475d1b5652dc410e"},{url:"assets/HealthPage-D_A6DTiH.js",revision:"169456b0f7dc8fe4544e72aa146341db"},{url:"assets/HealthPage-DT8FGrKA.css",revision:"e9cfc5cd6eff64124a91763108aab443"},{url:"assets/GitPanel-D6ZCZPbj.js",revision:"76b6c2570c837c0e9ce6fab1e57abe6d"},{url:"assets/GitPanel-C3blk_Pd.css",revision:"b1e525441f9ee27fccd4fd2de7bb63a1"},{url:"assets/DrawerToggleButton-CQVSfKpY.js",revision:"7e3c7433c3d368da5e0b5defa0f75041"},{url:"assets/DocumentsPanel-DCGgj9pc.js",revision:"9ae265bbbe43c01a16a267728a3f6135"},{url:"assets/DocumentsPanel-B8QY7FTj.css",revision:"676a3a838b07224f48fdd99e0cb6bbc8"},{url:"assets/DiffViewer-DfMqxOYw.js",revision:"9cb19c173f2036823f4224a03f4bde1b"},{url:"assets/DiffViewer-DEPOa3D7.css",revision:"7a2be47c13fe02cd2158e94eb0d320c5"},{url:"assets/DashboardPage-DydscFLA.js",revision:"de1651b3e6c7fd6f3d0e08260511dd54"},{url:"assets/DashboardPage-CtaHaVdf.css",revision:"729d05fd05c14a73cbbfd35f6d3be6fd"},{url:"assets/CreatePage-C7fLOpai.css",revision:"d7d5aee8a8da00f0f29d1c4d6bc6e253"},{url:"assets/CreatePage-BVNtCTdA.js",revision:"fa58361d2e192ce8a3f19e01e6a919ba"},{url:"assets/ComparisonPanel-azVvpfGW.js",revision:"646feac2cffb67d20c1ec118f57d52ac"},{url:"assets/ComparisonPanel-ByVbqYCs.css",revision:"40f8723a54937dbdb64e5de3d8bda349"},{url:"assets/ClosePopup-C1a82pL9.js",revision:"16e75558fa61b98a1e4334318655a3ec"},{url:"assets/ChangelogPage-YjWYsB_s.js",revision:"84e6c1e0ef399da45698daeff0a313bc"},{url:"assets/ChangelogPage-DVyx9ZjV.css",revision:"fd9c6a99457c6fb03e97d8137880243c"},{url:"assets/ActivityFeed-BfMUdSXQ.css",revision:"aaa2b13a0c242794fb4cf3e05ec0a55f"},{url:"assets/ActivityFeed-B8tJgXwD.js",revision:"cdc8b4a692692a51e43bd0c82d604661"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html"),{denylist:[/sw\.js$/,/workbox-(.)*\.js$/]}))});
|
|
1
|
+
if(!self.define){let s,e={};const a=(a,r)=>(a=new URL(a+".js",r).href,e[a]||new Promise(e=>{if("document"in self){const s=document.createElement("script");s.src=a,s.onload=e,document.head.appendChild(s)}else s=a,importScripts(a),e()}).then(()=>{let s=e[a];if(!s)throw new Error(`Module ${a} didn’t register its module`);return s}));self.define=(r,i)=>{const c=s||("document"in self?document.currentScript.src:"")||location.href;if(e[c])return;let d={};const f=s=>a(s,c),b={module:{uri:c},exports:d,require:f};e[c]=Promise.all(r.map(s=>b[s]||f(s))).then(s=>(i(...s),d))}}define(["./workbox-778a14ff"],function(s){"use strict";s.setCacheNameDetails({prefix:"kobo-client"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.clientsClaim(),s.precacheAndRoute([{url:"manifest.json",revision:"73f02ba4eb4414fb70bbe5ca76cc9580"},{url:"index.html",revision:"f9e32ec3bdeb68bd18ed5de336e29e08"},{url:"favicon.svg",revision:"9d89ef10d49f14d08c25cfca9bd4ea75"},{url:"sounds/ready.wav",revision:"cd00e80e7a9d443a0e95272bb22bed6e"},{url:"sounds/neutral.wav",revision:"cb264f6e7eb97388229e82fe7d6fa5cf"},{url:"fonts/GeistMono-Variable.woff2",revision:"308360d8a547331fd40bc09a7145d59a"},{url:"fonts/Geist-Variable.woff2",revision:"dfa48d5a853753289194436953e3f202"},{url:"fonts/GEIST-LICENSE.txt",revision:"563d13575f813953c3151e1ecce3b76f"},{url:"assets/yaml-DC__PKjj.js",revision:"f216e47926776951c43113958dad58e1"},{url:"assets/xml-Kyg_K_5X.js",revision:"b6ba6b6d836808e9821d4655ab288b67"},{url:"assets/workspace-templates-CSwgMrUf.js",revision:"d753fc864d35c242e2aa4d225e1e42c7"},{url:"assets/workspace-page-layout-Dw9NhZsL.js",revision:"0c933f7b6c6bf3c90ea1875abad85392"},{url:"assets/wgsl-DpFanUEy.js",revision:"4cf32279d7c6a601611a6e32a14f3b1e"},{url:"assets/vb-DV3o63ZY.js",revision:"a5b3a756d667f5e4a5da6da4013d7341"},{url:"assets/use-worktree-restore-D69uzYON.js",revision:"fa4d337b72be3b2c54a42d2bc261d16d"},{url:"assets/use-worktree-restore-B-9jHocY.css",revision:"54449cd3d2d5c88b0bd7d88f53f581c3"},{url:"assets/use-tours-CTZuBZOi.css",revision:"2f6d79046e1409f0472f65179eaa76f3"},{url:"assets/use-tours-CTNYIX-Q.js",revision:"4b550781436172c66e31a4f3249c9a40"},{url:"assets/use-slide-transition-B_Nu6u-t.js",revision:"00b155c171e638ef6fb5919cd6ebaf99"},{url:"assets/use-search-index-status-bIKbEP5q.js",revision:"a77a41c782f44926f84625732e5490d0"},{url:"assets/use-is-mobile-CDB_rzM9.js",revision:"736bff389e8d66a39ea1d2c842a28c82"},{url:"assets/use-id-BrdYXce0.js",revision:"2f38f32fe319b396537b34b776e791ce"},{url:"assets/use-dark-BHObfh0O.js",revision:"65f079943eb44c61f1a79c389fbe5e29"},{url:"assets/use-checkbox-v4aAbE6K.js",revision:"7eb92cef8192fe736bb1834ae8b13620"},{url:"assets/typespec-B8J7ngcE.js",revision:"6c28560625f59db6a5897aa92de81033"},{url:"assets/typescript-D62emDGo.js",revision:"81c8d8413f10171321399bac141dd4fd"},{url:"assets/twig-De2hgUGE.js",revision:"dfb4c76c8ec0d822070abac68d2bd473"},{url:"assets/tcl-DISqw1ZD.js",revision:"6d0ddaebd76ad41c47c96d484af119f8"},{url:"assets/systemverilog-Bz4Y3fRF.js",revision:"18e6d6e82eeb1107458d8d5531f82246"},{url:"assets/swift-Bxkupp3x.js",revision:"65b88f49188974d7c12e1a6cd12a9de5"},{url:"assets/st-DbInun42.js",revision:"d7294c4d47351db4e5edd4d91e445a21"},{url:"assets/sql-NEE52Syq.js",revision:"48352e15fff2141c7deaaab4e51e9565"},{url:"assets/sparql-D_Lu-MrJ.js",revision:"65390637b1a24614803db6844a0db77b"},{url:"assets/sophia-CRfGWb83.js",revision:"a330db913fee26a14679bed631a59043"},{url:"assets/solidity-BEEn4gHE.js",revision:"c2cd02221ec3d86f9a6bb09bfb1f8978"},{url:"assets/shell-CC2rA5mh.js",revision:"8362d325cda511ef760335e0847d3910"},{url:"assets/scss-gp-XZpBa.js",revision:"bf0805dd5cd80d90fef58c9866a7751e"},{url:"assets/scheme-BeGwcela.js",revision:"55c990715708ea012165486d065b3e2c"},{url:"assets/scala-DHpiXF5c.js",revision:"4eeea167d27954255e39d91412b62f87"},{url:"assets/sb-CcwsVR0C.js",revision:"93fc05f23a9cbb96d4f72dbc73e2e53b"},{url:"assets/rust-DdL9SqIa.js",revision:"356bac76300c8d83e8e9d76becf3c9ea"},{url:"assets/runtime-core.esm-bundler-Bqg71Vll.js",revision:"7feb349c2f329e619c68003a1cb3ca5b"},{url:"assets/ruby-DezsRK8O.js",revision:"95c3294c6d6cead3cccd7e4e973ab964"},{url:"assets/restructuredtext-BYgofb2h.js",revision:"f75377ae694f4e8f0bcccd05b5b9e65c"},{url:"assets/render-chat-markdown-CafzCcmu.js",revision:"336025fd68881d002bff5a7615ecb72f"},{url:"assets/redshift-DT7zqm-g.js",revision:"44e23f67b6a02e60d28c9947cd025207"},{url:"assets/redis-ClamHrr6.js",revision:"e3141183a6756253db43e10f8a305787"},{url:"assets/reactivity.esm-bundler-DY1JkAEA.js",revision:"f1cfbc11612769c44a0303b91e9b3cd2"},{url:"assets/razor-D_5X4O5M.js",revision:"a58552b1512f167b0bc3035e89f0e42b"},{url:"assets/r-BwWrilGY.js",revision:"f18d3e790ef07bc993539322d29548e4"},{url:"assets/qsharp-DkqhCAOL.js",revision:"c53fe08a83f8fcbcd81723105136a691"},{url:"assets/python-CKHf2s-D.js",revision:"51e450a0e889c3c32cb6d3869d22dec9"},{url:"assets/pug-Z5eAx3Zn.js",revision:"6e3de6d5214d2cf61b90949e1d383b49"},{url:"assets/protobuf-C531GsRP.js",revision:"04e688a7fef2bde8cef525653497371f"},{url:"assets/project-color-CBLQt6bM.js",revision:"b115d4a4dc76aa637362b9cca4ad540d"},{url:"assets/private.use-form-DY1BkePL.js",revision:"40d007f5f5d046d6278c001bec3ae86d"},{url:"assets/powershell-DmHpPYUd.js",revision:"ff476e9c4398edc9dfd2eb0ee9356352"},{url:"assets/powerquery-D3hlyOfw.js",revision:"0cacccadbe7cd4415f9a3112763c89f3"},{url:"assets/postiats-43DmfD33.js",revision:"b5dbce3331b7ccb325853328702b4bd9"},{url:"assets/pla-CopQ2nXW.js",revision:"b31678678d642accba98d7e7249a20b2"},{url:"assets/php-nr791fC2.js",revision:"ee487693840b66c2abf7c2da872dd6a8"},{url:"assets/pgsql-DTj74zXo.js",revision:"75375029d157fc5e789a13718eed9da7"},{url:"assets/permissionModes-DLWiBfdb.js",revision:"3553789e969961f62cb7167bedd5b8ae"},{url:"assets/perl-oz_6vUea.js",revision:"fee6d319d328db438b336b52ac07a46a"},{url:"assets/pascaligo-D-ptJ9y-.js",revision:"88be4e81a252f44f049ac92f7b6ea518"},{url:"assets/pascal-DrH0SRf2.js",revision:"0d81121099a69b47e10701bf075fe3cd"},{url:"assets/objective-c-FvmIjYaQ.js",revision:"6d64543dd4430fb71bcd7a5347a0398c"},{url:"assets/notify-theme-BXJypfo4.js",revision:"619375ff2ff317bdc1dede2e9f33f78f"},{url:"assets/network-auth-DXsDKXrM.js",revision:"fac3490560a36980b00616b65f8cd39b"},{url:"assets/mysql-SOo6toE5.js",revision:"677c089d979324385539e96bd2eb11e4"},{url:"assets/msdax-DauUninz.js",revision:"a63bfea2dd041755a34fe3e307159413"},{url:"assets/monaco.contribution-sN2BZtSW.js",revision:"29872e1f300d65adf9625093cb15e101"},{url:"assets/monaco-contributions-SMzL7GRn.js",revision:"d802a2488d5ee5f5903ff1db64e5af62"},{url:"assets/monaco-contributions-DvnCTJI2.css",revision:"964f32a36c06b4d5a66ac1b01556eb2b"},{url:"assets/mips-CIPQ_RoX.js",revision:"b22614ddc8855670a3f76290908877f5"},{url:"assets/mdx-TsWwhlKp.js",revision:"a26ac15312f04185668c8d917dcbfc0b"},{url:"assets/markdown-Cimd5fb3.js",revision:"38eaa88ca7719b9da2894b7c26f2f65b"},{url:"assets/m3-D-oSqn_W.js",revision:"624c73b0332fe1ddfef6013306c5998d"},{url:"assets/lua-CsQS60Ue.js",revision:"5568edf60b64f912bd17561f26e03d44"},{url:"assets/liquid-C5qQFvIu.js",revision:"e0622f49f607cfb83833862c38891541"},{url:"assets/lexon-CfSJPG6W.js",revision:"32b224ffe991474a4cfcbed19971a98d"},{url:"assets/less-B9JPFI3C.js",revision:"c80573ae2313727c545a585d90d3ff36"},{url:"assets/kotlin-BOotOW0E.js",revision:"7c2a31b16b6ddc97b60891b09afa11b1"},{url:"assets/julia-Bri6UV-V.js",revision:"bb5062cdf870c17c7c9be635c1a8a3be"},{url:"assets/javascript-BmeNra1c.js",revision:"d5e00ea2d42df5d08b9785c5f23d5db8"},{url:"assets/java-BEtHBSE6.js",revision:"987edcd2170749acca47ea184dd9ab25"},{url:"assets/it-B4rz5PZO.js",revision:"45ac1ae5e37a6587f5207f8efc86bd22"},{url:"assets/ini-sBoK_t0W.js",revision:"35f8ec10844ea4f62c2712d3f5c1e129"},{url:"assets/index-DPN7dSDH.js",revision:"174bd7183c1ad4666bc428bce61b67ff"},{url:"assets/index-C8zAZ-k-.css",revision:"1488166e385bd7f03f15dbf2e6f4fc60"},{url:"assets/i18n-v1pgIO4z.js",revision:"b454200d397c6a90cdda3a9c51769696"},{url:"assets/html-CnGW31DH.js",revision:"36c54a7bbe17eda50ecd8f046ec76031"},{url:"assets/hcl-CpzslTdj.js",revision:"f9ef1004e908957ec1c3bbea2049a0e9"},{url:"assets/handlebars-ChiPNy9j.js",revision:"93b7122658f56fff5615520f7f2f9c00"},{url:"assets/graphql-fmXr3nnJ.js",revision:"a51df1d5dca011f5d85dd09a2ffbe1e5"},{url:"assets/go-C-y9NEjX.js",revision:"9213c8381eb32996b86ca9600ca6a07e"},{url:"assets/fsharp-C8Ef5oNN.js",revision:"72f3de59be781f8a4ec49d16bac02119"},{url:"assets/freemarker2-DVQM2t3e.js",revision:"3b6edecfcdb0bdca2e8574eb237ac376"},{url:"assets/fr-CZhjMFZl.js",revision:"9c8cfd94918e09c218ecfd40bce63f90"},{url:"assets/formatters-DfLD95iT.js",revision:"e468cde3cbf5efd84a5a7d3fb3089103"},{url:"assets/format-DoyK4IAn.css",revision:"51174980568a53694c8da3cc935fe4e6"},{url:"assets/flow9-C5_-GSwl.js",revision:"0e60dc6453d9684c059f20c846ae0ec4"},{url:"assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ-D-x-0Q06.woff2",revision:"a4160421d2605545f69a4cd6cd642902"},{url:"assets/expand-template-LaRhdYUp.js",revision:"59ea165885871112d66b835520247a1f"},{url:"assets/expand-template-CTUNyJrv.css",revision:"a4033bbc7a564e856b2b0c42816a24f7"},{url:"assets/es-BvRPXBHq.js",revision:"35bf3a39bf8c6c4cff56a77d0d4036a3"},{url:"assets/elixir-6RTg0lbw.js",revision:"fb736f7429d9c6a596ed7905653dbf14"},{url:"assets/efforts-DU9dTnaN.js",revision:"b9d0f4a6c09e2a7543bded33de79361c"},{url:"assets/editor.worker-BLJF_oQx.js",revision:"73d3d20cadfc19535b465c224d29ba1b"},{url:"assets/editor.api-DDwuA_C9.js",revision:"c8f3506fc50e20789b2c8f42877e0d01"},{url:"assets/editor-CmVjQp1O.css",revision:"dda9d7400b872282ecff92d1cb7da023"},{url:"assets/ecl-D05T4iGw.js",revision:"496ceca3c8bae12c563a8a781cf639f3"},{url:"assets/dom-BtYTvLeN.js",revision:"ed94f94fd89f05be544a248d8aa2694e"},{url:"assets/dockerfile-DZFCIeNp.js",revision:"6af03903b1e51179ae2120866bb68acd"},{url:"assets/detached-fullscreen-Du3TcYdX.js",revision:"e1a742ca0ac13ba1d1d45fbce498c981"},{url:"assets/defineProperty-BbfpZ9Tg.js",revision:"489a6e8420626ba7812b1b715b5ed17e"},{url:"assets/de-YFD4X2nQ.js",revision:"50b3df9df44de84f509cd4b4dd1bce8a"},{url:"assets/dart-onAF5SnQ.js",revision:"4fc14a4d2b7e030db6af8025d8fe831b"},{url:"assets/cypher-CVaqCwHa.js",revision:"75a568a8c6b29818b6a6c8675841ebf7"},{url:"assets/custom-sounds-DTV-xHVv.js",revision:"4ca0e331537ee84f3eb92e592d9dfa86"},{url:"assets/css-DIMkf-bt.js",revision:"368cd7c0ef4cdeca015fe9fe40ed1b2c"},{url:"assets/csp-bTuwJoIa.js",revision:"d13f525ef224dae69f8bde261bb48507"},{url:"assets/csharp-BKxtCVv1.js",revision:"e5831c8275e73409bc73a3991ceb194e"},{url:"assets/cpp-C7h46wYY.js",revision:"7fa3a56badaae54657cda12c403da2c7"},{url:"assets/coffee-Ba7i2nA0.js",revision:"1a1012b2a9bd329b3b1794297125c9a9"},{url:"assets/codicon-DF1abBS2.ttf",revision:"94829fd323d002e45660034255257955"},{url:"assets/clojure-Cm7r79vr.js",revision:"e3307e92ae8965ebb29ec9c9097774cd"},{url:"assets/clipboard-t9qe6lK7.js",revision:"04f746e11f1ac85a8652dff1abde80f4"},{url:"assets/cameligo-DMUM7wLl.js",revision:"ad01c48b3bff95a5fb691c7cd8427122"},{url:"assets/build-path-tree-DFwB0SSs.js",revision:"fb3cd32cc67b6ed2c30805e45aa8b1c1"},{url:"assets/browser-DuFAaYHh.js",revision:"bbc71f0318315dc465cf3f14463c2a5a"},{url:"assets/bicep-B5-_aFwp.js",revision:"b2c3f814c02ba6e4672b16282c0a1376"},{url:"assets/bat-i0X4ZdIN.js",revision:"914960f9abae1bfe5a2189a174a1e1c1"},{url:"assets/azcli-Bc_sGQ0U.js",revision:"c1dfc1889c57d0712d6415ecb14b66ed"},{url:"assets/apex-BWPQTe0t.js",revision:"eee56c5abf95c2575e288f36fdbb8737"},{url:"assets/abap-08VXUWAP.js",revision:"08897cd48182b5410786802ea9af6fa2"},{url:"assets/WorkspacePage-C-JXKt-S.js",revision:"8cccfd395d61d4ccbba52ed2b3aeb83b"},{url:"assets/WorkspacePage-Ba0jAHhn.css",revision:"dfe688e04c34aaff25cb9545145b0aee"},{url:"assets/WorkspaceAttentionLabels-DSw8Upcp.css",revision:"4c648f6466a78473af69fd72824b79ad"},{url:"assets/WorkspaceAttentionLabels-CqlhQOqG.js",revision:"c7a206b3f07f88b8941c7376b3c1eadf"},{url:"assets/TourReplayButton-COI4vR7q.js",revision:"e9dc1347f9f3bc45de78635728f2514c"},{url:"assets/TouchPan-CxThkotY.js",revision:"fba00a0ac216d5eb712001793a83ac63"},{url:"assets/ToolCallItem-M3CSguac.js",revision:"fb0ea912f6a276c4783b32ed0d26e66e"},{url:"assets/ToolCallItem-DhjdG8vp.css",revision:"515c28b42f339bc39369af27a50ac1e7"},{url:"assets/TerminalPanel-Dz9EE-Ph.css",revision:"9fd7805b12e550833d2ac46b5c24dc7a"},{url:"assets/TerminalPanel-Bsrg96VZ.js",revision:"55edd76f4ba628caa9d239c0f387c5e0"},{url:"assets/SplitWorkspacePage-lWQO8xro.css",revision:"cabea8d2cabbc3e1012ffa88225e04d3"},{url:"assets/SplitWorkspacePage-Cjd_Lq-0.js",revision:"13d70306d93df055b66560dd5a797671"},{url:"assets/SettingsPage-oSGNwimG.js",revision:"fb5988dd7acd48161f6d75233f45ffee"},{url:"assets/SettingsPage-C1dcMqCO.css",revision:"300f7863c142e91763c2ff0e30e81947"},{url:"assets/SearchPage-Dr43rGji.js",revision:"901f766319f67a5a54fdc22ee898577b"},{url:"assets/SearchPage-BGc1oQSM.css",revision:"d988bd3c7ed5458189b7225097e4cdeb"},{url:"assets/SchedulePanel-DNwt3V1a.js",revision:"bc7a83be4a63b8bf662696e555798beb"},{url:"assets/SchedulePanel-CBM_GpS3.css",revision:"e4d8a73291701f8574305d69cb366164"},{url:"assets/QTooltip-CgVCYatx.js",revision:"98c42b1abd15b2e9a75704f4971a31c8"},{url:"assets/QSpinnerDots-xdWyaE1i.js",revision:"55b8a4269a2b5e98cf5814142583ffca"},{url:"assets/QSelect-CPE9LsIn.js",revision:"12a97eb673779ec749133da2c6558377"},{url:"assets/QScrollArea-bm6nYMnB.js",revision:"518d4b64a92ed09308a1cf7d908e12a3"},{url:"assets/QPage-CqkGHokx.js",revision:"8b288520e591a41f177e3791dc7faa23"},{url:"assets/QMarkupTable-UhP7fVUp.js",revision:"c92050ccd8960b77d3fe62f5f571e5d5"},{url:"assets/QList-Cx1UfaUm.js",revision:"cc5735e323efbe3482109703554ecfb7"},{url:"assets/QItemSection-MdJ1_ZK7.js",revision:"d550545b87d619522be2c2702c9a6d9f"},{url:"assets/QExpansionItem-BBTTV_37.js",revision:"3237139efa347f4d88631375650ee83f"},{url:"assets/QChip-Be16M4Ig.js",revision:"d217d603e5c6e691c02a888ffc1d213b"},{url:"assets/QBtnToggle-DccOOtbh.js",revision:"8c64e4c2fd1a993cb56403d1e62e6c09"},{url:"assets/QBtnGroup-CnM4vSJA.js",revision:"ddfd643b34c3c3ae7d3aa4a27bea664f"},{url:"assets/QBtnDropdown-B9xNOKD0.js",revision:"3739b399f876b54c549746978686abf5"},{url:"assets/QBtn-BUSdPaf4.js",revision:"d17c16beb07a97466b66d2d27b5a5ad8"},{url:"assets/QBanner-BT2ZemYu.js",revision:"5f6df26329a8dca94971f06f78162d70"},{url:"assets/QBadge-CW3Lw-kL.js",revision:"4f52dbd5f6dcaa77fd5b226d6053351a"},{url:"assets/MemoryProposalList-OmDpl3o5.css",revision:"eba7a0c30ad67b57e7c59179058128fc"},{url:"assets/MemoryProposalList-BnoVbFsj.js",revision:"3be1a560c898c8a8859d9e1e31d6f1ca"},{url:"assets/MemoryPanel-Ch3qeyQw.css",revision:"a080bd22ae7a7eb244df25c0a42d0f7c"},{url:"assets/MemoryPanel-BivQoMQ6.js",revision:"506137106f632932990b042ee5767b10"},{url:"assets/MainLayout-DWzXL1KW.js",revision:"48427b6d8b25d3787869a0e785dc91fc"},{url:"assets/MainLayout-DAcSwgUw.css",revision:"6e7f9b1cb6934ebda3a0a6f0b1d345eb"},{url:"assets/HealthPage-DT8FGrKA.css",revision:"e9cfc5cd6eff64124a91763108aab443"},{url:"assets/HealthPage-BSrTmp1k.js",revision:"7fa301275f6ca0e0aff8557b6184698d"},{url:"assets/GitPanel-DOugIJUS.js",revision:"e32d81b0bccc42cd27aa0a2dbb05657d"},{url:"assets/GitPanel-C3blk_Pd.css",revision:"b1e525441f9ee27fccd4fd2de7bb63a1"},{url:"assets/DrawerToggleButton-DcVhAbjN.js",revision:"71a462aed37f2447205b94eca99722b3"},{url:"assets/DocumentsPanel-BTp3J6Rq.js",revision:"16bfdfd26b29b6c2ed306ad982f4ad8a"},{url:"assets/DocumentsPanel-B8QY7FTj.css",revision:"676a3a838b07224f48fdd99e0cb6bbc8"},{url:"assets/DiffViewer-j7rwPKxU.js",revision:"c43ce428783707b89b7bf46fdf14846a"},{url:"assets/DiffViewer-DEPOa3D7.css",revision:"7a2be47c13fe02cd2158e94eb0d320c5"},{url:"assets/DashboardPage-Ds6Y8xlV.js",revision:"3f27424e63fc541195451ddfa5100f96"},{url:"assets/DashboardPage-CtaHaVdf.css",revision:"729d05fd05c14a73cbbfd35f6d3be6fd"},{url:"assets/CreatePage-DOamHqeH.js",revision:"52fc0871b754dde99da9162a07519702"},{url:"assets/CreatePage-C7fLOpai.css",revision:"d7d5aee8a8da00f0f29d1c4d6bc6e253"},{url:"assets/ComparisonPanel-kMWS9il3.js",revision:"12550d608bd555a4633d4547c44fe591"},{url:"assets/ComparisonPanel-ByVbqYCs.css",revision:"40f8723a54937dbdb64e5de3d8bda349"},{url:"assets/ClosePopup-CRV2hxHS.js",revision:"408af589ed45c4f8e5f53522bc47c5f2"},{url:"assets/ChangelogPage-DVyx9ZjV.css",revision:"fd9c6a99457c6fb03e97d8137880243c"},{url:"assets/ChangelogPage-B1rkKskD.js",revision:"fa3ae006271ed50f31d92a8d70a1d7b8"},{url:"assets/ActivityFeed-w8TNfMKd.js",revision:"b4f2ad04cf42721c8df833c8d3d74116"},{url:"assets/ActivityFeed-DdJvMzRI.css",revision:"0ba8a4ec4311b7276146ba90134bbe29"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html"),{denylist:[/sw\.js$/,/workbox-(.)*\.js$/]}))});
|
package/src/mcp-server/README.md
CHANGED
|
@@ -382,6 +382,29 @@ Stop the currently running agent session on a workspace, like the Stop action in
|
|
|
382
382
|
|
|
383
383
|
---
|
|
384
384
|
|
|
385
|
+
## Persistent memory tools
|
|
386
|
+
|
|
387
|
+
The same six memory tools are available on a workspace-bound agent server and on the global external MCP server: `list_memory_scopes`, `list_memories`, `read_memory`, `search_memories`, `list_memory_operations`, and `remember`. They call Kōbō's shared memory service; HTTP and stdio clients see the same stored scopes and entries. External calls do not create or resume a workspace, agent session, or native engine conversation.
|
|
388
|
+
|
|
389
|
+
| Tool | Purpose and important arguments |
|
|
390
|
+
|---|---|
|
|
391
|
+
| `list_memory_scopes` | Lists selectable scopes; external clients may pass `workspace_id` to list exactly the applicable global/project/workspace scopes. |
|
|
392
|
+
| `list_memories` | Bounded page of compact metadata; select one `scope_id`, or an applicable `workspace_id` externally. |
|
|
393
|
+
| `read_memory` | Reads a specific `scope_id` + `entry_id`; large bodies are returned as explicit fragments with a revision/code-point cursor. Set `repeat: true` only to intentionally spend budget rereading an unchanged range. |
|
|
394
|
+
| `search_memories` | Bounded search in a selected scope or external workspace view; results are metadata/excerpts, not a corpus dump. |
|
|
395
|
+
| `list_memory_operations` | Bounded content-free journal page for one scope or external workspace view. |
|
|
396
|
+
| `remember` | Creates/updates a concise fact. Supply `scope_id`, `expected_generation`, `key`, `title`, and `body`; updates also require `entry_id`, `expected_revision`, and `key`. |
|
|
397
|
+
|
|
398
|
+
Internal tools derive workspace/session/engine attribution and access from a short-lived launch capability. Do not send an actor field. A read-only plan/review/report launch cannot write, and stopping revokes its capability. External clients must choose a scope explicitly for writes and `read_memory`; they cannot forge an internal session, human actor, or use the workspace bridge to escape its scope. Memory MCP exposes no delete, promotion, proposal approval, or clear operation; a human performs those in Settings/the workspace drawer.
|
|
399
|
+
|
|
400
|
+
Mode applies to internal and external writes at call time: Manual denies agent writes, Hybrid applies workspace writes and proposes project/global changes, and Automatic applies the selected scope. A `remember` receipt reports denied/applied/proposed and revision/generation metadata, not a copy of the saved body. No mutation is retried automatically after a transport error; inspect the key/proposal before deciding whether to retry. Hybrid proposals stay pending until human approval; switching modes never approves them.
|
|
401
|
+
|
|
402
|
+
Each response is independently bounded, and native conversation memory output is cumulatively budgeted across resumes/restarts. Bootstrap targets 1,000 estimated tokens, ordinary tool output targets 1,000 with a hard 1,500 cap, and a native context epoch has a 6,000 cumulative estimated-token ceiling. Regular output stops at 5,500, reserving up to 500 tokens for one terminal budget-denial receipt. After that receipt, exhausted MCP calls return `isError: true` with `content: []`. The final serialized envelope has a separate 12,000-byte ceiling and includes 96 bytes of framing headroom in its cost. These values estimate only Kōbō memory output; Kōbō has no trustworthy full-context/window telemetry and cannot promise the rest of a provider conversation fits.
|
|
403
|
+
|
|
404
|
+
External `list_memory_scopes` returns scope IDs, levels, and generation/revision CAS values; pass the current generation to `remember` and rediscover after a clear/conflict. HTTP/global-stdio clients should reuse the opaque `memory_context_id` returned by receipts for one cooperative external conversation. This keeps its cumulative allowance across stateless requests; it is budget bookkeeping, not an authorization token and cannot reference an internal conversation ledger. Kōbō cannot detect external compaction or know that a new ID means an empty model context. External provenance records the normalized display client name and `http`/`stdio` transport, not an authenticated identity. Reuse the same id across calls and respect returned exhaustion receipts instead of looping.
|
|
405
|
+
|
|
406
|
+
Automatic mode means the agent deliberately calls `remember` when it has stable, reusable knowledge; there is no background transcript extraction or post-session model call. Clear prevents later Kōbō memory reads/injection but cannot retract text already transmitted to an engine or remove provider chat history. See [Persistent memory](../../CONFIGURATION.md#persistent-memory) for scope lifecycle, erasure and UI behavior.
|
|
407
|
+
|
|
385
408
|
## Implementation notes
|
|
386
409
|
|
|
387
410
|
- **Handlers** live in `kobo-tasks-handlers.ts` as pure functions taking the DB handle (and sometimes paths) as arguments. This keeps them unit-testable in isolation — see `src/__tests__/kobo-tasks-server.test.ts`.
|
|
@@ -4,6 +4,7 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
4
4
|
import { CallToolRequestSchema, ListToolsRequestSchema, type Tool } from '@modelcontextprotocol/sdk/types.js'
|
|
5
5
|
import type Database from 'better-sqlite3'
|
|
6
6
|
import { getDb } from '../server/db/index.js'
|
|
7
|
+
import { EXTERNAL_MEMORY_TOOL_DEFINITIONS, isMemoryToolName, MEMORY_TOOL_DEFINITIONS } from '../shared/memory-tools.js'
|
|
7
8
|
import { WORKSPACE_DIALOGUE_TOOLS } from '../shared/workspace-dialogue-tools.js'
|
|
8
9
|
import {
|
|
9
10
|
createTaskHandler,
|
|
@@ -26,6 +27,7 @@ import {
|
|
|
26
27
|
setWorkspaceAgentDescriptionHandler,
|
|
27
28
|
updateTaskHandler,
|
|
28
29
|
} from './kobo-tasks-handlers.js'
|
|
30
|
+
import { callMemoryTool, isMemoryOutputSuppressed } from './memory-client.js'
|
|
29
31
|
import { callWorkspaceDialogueTool } from './workspace-dialogue-client.js'
|
|
30
32
|
|
|
31
33
|
const handoffId = process.env.KOBO_HANDOFF_ID
|
|
@@ -598,10 +600,12 @@ const WORKSPACE_SCOPED_TOOLS: Tool[] = [
|
|
|
598
600
|
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
599
601
|
annotations: { destructiveHint: false, openWorldHint: false },
|
|
600
602
|
},
|
|
603
|
+
...MEMORY_TOOL_DEFINITIONS,
|
|
601
604
|
]
|
|
602
605
|
|
|
603
606
|
const GLOBAL_TOOLS: typeof WORKSPACE_SCOPED_TOOLS = [
|
|
604
607
|
...WORKSPACE_DIALOGUE_TOOLS,
|
|
608
|
+
...EXTERNAL_MEMORY_TOOL_DEFINITIONS,
|
|
605
609
|
{
|
|
606
610
|
name: 'list_workspaces',
|
|
607
611
|
description:
|
|
@@ -706,7 +710,11 @@ const GLOBAL_TOOLS: typeof WORKSPACE_SCOPED_TOOLS = [
|
|
|
706
710
|
const GLOBAL_TOOL_NAMES = new Set(GLOBAL_TOOLS.map((t) => t.name))
|
|
707
711
|
|
|
708
712
|
function availableTools(): Tool[] {
|
|
709
|
-
|
|
713
|
+
// A workspace process exposes the capability-bound memory tools exactly once.
|
|
714
|
+
// Unbound/global stdio exposes the external bridge variant instead.
|
|
715
|
+
const tools = workspaceId
|
|
716
|
+
? [...WORKSPACE_SCOPED_TOOLS, ...GLOBAL_TOOLS.filter((tool) => !isMemoryToolName(tool.name))]
|
|
717
|
+
: GLOBAL_TOOLS
|
|
710
718
|
return tools.filter((tool) =>
|
|
711
719
|
handoffId && handoffToken
|
|
712
720
|
? tool.name === 'submit_session_handoff' || tool.annotations?.readOnlyHint === true
|
|
@@ -763,6 +771,35 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
763
771
|
}),
|
|
764
772
|
)
|
|
765
773
|
}
|
|
774
|
+
if (isMemoryToolName(name)) {
|
|
775
|
+
if (!workspaceId) {
|
|
776
|
+
return await callWorkspaceDialogueTool(
|
|
777
|
+
backendUrl,
|
|
778
|
+
name,
|
|
779
|
+
a,
|
|
780
|
+
process.env.KOBO_NETWORK_TOKEN,
|
|
781
|
+
process.env.KOBO_MCP_CLIENT_NAME ?? server.getClientVersion()?.name,
|
|
782
|
+
)
|
|
783
|
+
}
|
|
784
|
+
// Workspace-bound memory is always dispatched to its launch-scoped capability.
|
|
785
|
+
// It must never fall through to the unrestricted external/global bridge.
|
|
786
|
+
if (!process.env.KOBO_MEMORY_SESSION_TOKEN)
|
|
787
|
+
return fail('Memory tools require the current workspace launch capability.')
|
|
788
|
+
const memoryResult = await callMemoryTool({
|
|
789
|
+
backendUrl,
|
|
790
|
+
name,
|
|
791
|
+
args: a,
|
|
792
|
+
capability: process.env.KOBO_MEMORY_SESSION_TOKEN,
|
|
793
|
+
networkToken: process.env.KOBO_NETWORK_TOKEN,
|
|
794
|
+
})
|
|
795
|
+
if (isMemoryOutputSuppressed(memoryResult)) return { content: [], isError: true }
|
|
796
|
+
return {
|
|
797
|
+
...ok(memoryResult),
|
|
798
|
+
...(memoryResult && typeof memoryResult === 'object' && 'budgetExhausted' in memoryResult
|
|
799
|
+
? { isError: true }
|
|
800
|
+
: {}),
|
|
801
|
+
}
|
|
802
|
+
}
|
|
766
803
|
if (WORKSPACE_DIALOGUE_TOOLS.some((tool) => tool.name === name)) {
|
|
767
804
|
if (workspaceId && a.workspace_id === workspaceId && name === 'send_workspace_message')
|
|
768
805
|
return fail('Use the normal conversation to communicate in your own workspace.')
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { isMemoryToolName, validateMemoryToolArguments } from '../shared/memory-tools.js'
|
|
2
|
+
|
|
3
|
+
export type MemoryFetch = typeof fetch
|
|
4
|
+
|
|
5
|
+
export function isMemoryOutputSuppressed(value: unknown): boolean {
|
|
6
|
+
return (
|
|
7
|
+
!!value &&
|
|
8
|
+
typeof value === 'object' &&
|
|
9
|
+
!Array.isArray(value) &&
|
|
10
|
+
'memoryOutputSuppressed' in value &&
|
|
11
|
+
value.memoryOutputSuppressed === true
|
|
12
|
+
)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export async function callMemoryTool(input: {
|
|
16
|
+
backendUrl: string
|
|
17
|
+
name: string
|
|
18
|
+
args: unknown
|
|
19
|
+
capability?: string
|
|
20
|
+
networkToken?: string
|
|
21
|
+
fetcher?: MemoryFetch
|
|
22
|
+
timeoutMs?: number
|
|
23
|
+
}): Promise<unknown> {
|
|
24
|
+
if (!isMemoryToolName(input.name)) throw new TypeError('Unknown memory tool')
|
|
25
|
+
if (!input.capability) throw new Error('Memory capability is unavailable for this process')
|
|
26
|
+
const args = validateMemoryToolArguments(input.name, input.args)
|
|
27
|
+
const headers: Record<string, string> = {
|
|
28
|
+
'Content-Type': 'application/json',
|
|
29
|
+
'X-Kobo-Memory-Session': input.capability,
|
|
30
|
+
}
|
|
31
|
+
if (input.networkToken) headers['X-Kobo-Token'] = input.networkToken
|
|
32
|
+
const timeoutMs = input.timeoutMs ?? 30_000
|
|
33
|
+
if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1) throw new TypeError('Memory request timeout must be positive')
|
|
34
|
+
const signal = AbortSignal.timeout(timeoutMs)
|
|
35
|
+
const response = await (input.fetcher ?? fetch)(
|
|
36
|
+
`${input.backendUrl.replace(/\/$/, '')}/api/memory/agent/${input.name}`,
|
|
37
|
+
{ method: 'POST', headers, body: JSON.stringify(args), signal },
|
|
38
|
+
)
|
|
39
|
+
const raw = await response.text()
|
|
40
|
+
let payload: unknown
|
|
41
|
+
try {
|
|
42
|
+
payload = raw ? JSON.parse(raw) : null
|
|
43
|
+
} catch {
|
|
44
|
+
payload = { error: 'Backend returned invalid JSON' }
|
|
45
|
+
}
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
const detail =
|
|
48
|
+
payload && typeof payload === 'object' && 'error' in payload ? String(payload.error) : response.statusText
|
|
49
|
+
throw new Error(`Memory backend returned ${response.status}: ${detail}`)
|
|
50
|
+
}
|
|
51
|
+
return payload
|
|
52
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js'
|
|
2
2
|
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'
|
|
3
|
+
import { isMemoryToolName, validateMemoryToolArguments } from '../shared/memory-tools.js'
|
|
3
4
|
import { validateDialogueArguments } from '../shared/workspace-dialogue-tools.js'
|
|
4
5
|
import { normalizeClientName } from '../shared/workspace-message-types.js'
|
|
5
6
|
|
|
@@ -11,7 +12,9 @@ export async function callWorkspaceDialogueTool(
|
|
|
11
12
|
token?: string,
|
|
12
13
|
clientName?: string,
|
|
13
14
|
) {
|
|
14
|
-
const arguments_ =
|
|
15
|
+
const arguments_ = isMemoryToolName(name)
|
|
16
|
+
? validateMemoryToolArguments(name, args, true)
|
|
17
|
+
: validateDialogueArguments(name, args)
|
|
15
18
|
const client = new Client({ name: 'kobo-stdio-bridge', version: '1.0.0' })
|
|
16
19
|
const signal = AbortSignal.timeout(30_000)
|
|
17
20
|
const transport = new StreamableHTTPClientTransport(new URL(`${backendUrl.replace(/\/$/, '')}/api/mcp`), {
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{M as e,S as t,dt as n,lt as r,p as i,st as a,v as o}from"./reactivity.esm-bundler-tuEvQ47f.js";import{C as s,F as c,J as l,L as u,N as d,O as f,P as p,T as m,Y as h,_ as g,d as _,f as v,g as y,j as ee,k as b,l as x,p as S,r as C,u as w,y as T,z as te}from"./runtime-core.esm-bundler-DOiZcasU.js";import{T as ne,Y as re,l as ie,lt as ae,mt as E,nt as D,t as O,x as oe}from"./QBtn-b_baQtAt.js";import{l as se,n as ce,o as le,t as ue}from"./latest-request-7rgsEfKZ.js";import{a as de}from"./i18n-CPFleoLe.js";import{O as fe,Rt as pe,T as me,Vt as k,ct as he,g as ge,jt as A,nt as _e,p as ve,rt as ye}from"./index-BVJWwOvK.js";import{t as be}from"./QSpinnerDots-BsKmccpX.js";import{t as xe}from"./QList-Cw2xs69W.js";import{t as Se}from"./QMarkupTable-Ck2E2TaI.js";import{c as j,l as M,s as N}from"./QSelect-DUuWu79L.js";import{t as P}from"./QItemSection-BhGnulVQ.js";import{t as Ce}from"./QExpansionItem-DmzCAbka.js";import{a as F,c as we,r as I,t as L}from"./ToolCallItem-BQmqNcfF.js";import{t as Te}from"./QScrollArea-BmBuij9J.js";import{a as R}from"./use-tours-CM4E53aB.js";import{f as Ee,g as z,m as De,p as Oe,u as ke}from"./use-worktree-restore-C__ResAR.js";import{t as B}from"./QTooltip-Dhy3hNTO.js";import{n as V}from"./render-chat-markdown-CafzCcmu.js";import{n as H}from"./WorkspacePage-DQ-jvLEj.js";function Ae(e,t){return s(`div`,e,[s(`table`,{class:`q-table`},t)])}var je={list:xe,table:Se},U=[`list`,`table`,`__qtable`],Me=D({name:`QVirtualScroll`,props:{...M,type:{type:String,default:`list`,validator:e=>U.includes(e)},items:{type:Array,default:()=>[]},itemsFn:Function,itemsSize:Number,scrollTarget:k},setup(e,{slots:n,attrs:r}){let i,a=t(null),o=x(()=>e.itemsSize>=0&&e.itemsFn!==void 0?Number.parseInt(e.itemsSize,10):Array.isArray(e.items)?e.items.length:0),{virtualScrollSliceRange:c,localResetVirtualScroll:u,padVirtualScroll:f,onVirtualScrollEvt:m}=j({virtualScrollLength:o,getVirtualScrollTarget:y,getVirtualScrollEl:v}),h=x(()=>{if(o.value===0)return[];let t=(e,t)=>({index:c.value.from+t,item:e});return e.itemsFn===void 0?e.items.slice(c.value.from,c.value.to).map(t):e.itemsFn(c.value.from,c.value.to-c.value.from).map(t)}),g=x(()=>`q-virtual-scroll q-virtual-scroll`+(e.virtualScrollHorizontal?`--horizontal`:`--vertical`)+(e.scrollTarget===void 0?` scroll`:``)),_=x(()=>e.scrollTarget===void 0?{tabindex:0}:{});l(o,()=>{u()}),l(()=>e.scrollTarget,()=>{C(),S()});function v(){let e=a.value;return e===null?null:e.$el||e}function y(){return i}function S(){let t=v();t!==null&&(i=pe(t,e.scrollTarget),i.addEventListener(`scroll`,m,re.passive))}function C(){i!==void 0&&(i.removeEventListener(`scroll`,m,re.passive),i=void 0)}function w(){let t=f(e.type===`list`?`div`:`tbody`,h.value.map(n.default));return n.before!==void 0&&(t=n.before().concat(t)),oe(n.after,t)}return u(),p(()=>{S()}),b(()=>{S()}),d(()=>{C()}),ee(()=>{C()}),()=>{if(n.default===void 0){console.error(`QVirtualScroll: default scoped slot is required for rendering`);return}return e.type===`__qtable`?Ae({ref:a,class:`q-table__middle `+g.value,tabindex:0},w()):s(je[e.type],{...r,ref:a,class:[r.class,g.value],..._.value},w)}}}),Ne=new Set([`setup`,`cleanup`,`archive`]);function Pe(e){switch(e.type){case`user`:return e.sender===`system-prompt`?`system-prompt`:Ne.has(e.sender)||me(e.sender)?`script`:`user`;case`session`:return`session`;default:return`agent`}}function Fe(e){let t=[],n=null,r=null;for(let i of e){let e=Pe(i),a=e===`session`||e===`system-prompt`,o=e===`script`&&i.type===`user`?`script:${i.sender}`:e===`user`&&i.type===`user`&&i.source?JSON.stringify([`mcp`,i.source.transport,i.source.clientName]):e;!n||r!==o||a?(n={speaker:e,ts:i.ts,items:[i]},r=o,t.push(n),a&&(n=null)):n.items.push(i)}return t}function W(e){switch(e.type){case`text`:return`text:${e.messageId}`;case`thinking`:return`thinking:${e.messageId}:${e.eventIds?.[0]??e.ts??``}`;case`tool`:return`tool:${e.toolCallId}`;case`session`:return`session:${e.kind}:${e.eventIds?.[0]??e.ts??``}`;case`user`:return`user:${e.eventIds?.[0]??`${e.sender}:${e.ts??``}`}`;case`error`:return`error:${e.eventIds?.[0]??`${e.category}:${e.ts??``}`}`}}function Ie(e){let t=e.items[0];return`${e.speaker}:${t?W(t):`empty`}`}function Le(e,t){let n=Math.min(t,e.length)-1;for(let t=n;t>=0;t--)if(e[t]?.speaker===`user`)return t;return-1}function Re(e,t,n){return new Promise(r=>{let i=!1,a=null,o=null,s=e=>{i||(i=!0,a!==null&&clearTimeout(a),a=null,o?.(),r(e))};if(o=l(e,e=>{t(e)&&s(!0)},{immediate:!0}),i){o();return}a=setTimeout(()=>s(!1),n)})}var ze={class:`agent-error-item`},Be={class:`agent-error-item__body`},Ve={class:`agent-error-item__title`},G={class:`agent-error-item__message`},He=R(T({__name:`AgentErrorItem`,props:{item:{}},setup(e){let t=e,{te:r}=de(),i=x(()=>{let e=`agent.error.${t.item.category}`;return r(e)?e:`agent.error.other`});return(t,r)=>(u(),S(`div`,ze,[g(ie,{name:`error_outline`,size:`16px`,class:`agent-error-item__icon`}),w(`div`,Be,[w(`div`,Ve,n(t.$t(i.value)),1),w(`div`,G,n(e.item.message),1)])]))}}),[[`__scopeId`,`data-v-e98c3c02`]]),Ue={class:`text-caption text-kobo-3`},We=T({__name:`SessionEventItem`,props:{item:{}},setup(e){let t=e,r=x(()=>{switch(t.item.kind){case`started`:return`session.started`;case`ended`:return z(t.item.detail);case`compacted`:return`session.compacted`;default:return`session.started`}});return(e,t)=>(u(),S(`span`,Ue,n(e.$t(r.value)),1))}}),K=new Map;function q(){for(let e of K.values())e.controller.abort(),e.blobUrl&&URL.revokeObjectURL(e.blobUrl);K.clear()}typeof window<`u`&&(window.addEventListener(`kobo:auth-token-changed`,q),window.addEventListener(`storage`,e=>{(e.key===`kobo:network-token`||e.key===null)&&q()}));function J(e){if(!/^\/api\/workspaces\/[^/]+\/images\/file\?path=/.test(e))throw Error(`Invalid workspace image URL`);let t=K.get(e);if(!t){let n=new AbortController,r={references:0,controller:n,ready:Promise.resolve(``)};r.ready=le(e,{signal:n.signal}).then(async e=>{if(!e.ok)throw await se(e);let t=await e.blob();if(n.signal.aborted)throw new DOMException(`Aborted`,`AbortError`);return r.blobUrl=URL.createObjectURL(t),r.blobUrl}),t=r,K.set(e,t)}t.references++;let n=!1,r=t;return{ready:r.ready,release(){n||(n=!0,!(--r.references>0)&&(r.controller.abort(),r.blobUrl&&URL.revokeObjectURL(r.blobUrl),K.get(e)===r&&K.delete(e)))}}}function Ge(e,t){let n=o(``),r=o(0),a=()=>{r.value++},s=e=>{(e.key===`kobo:network-token`||e.key===null)&&a()};return window.addEventListener(`kobo:auth-token-changed`,a),window.addEventListener(`storage`,s),i(()=>{window.removeEventListener(`kobo:auth-token-changed`,a),window.removeEventListener(`storage`,s)}),l([e,r],([e],r,i)=>{let a=!0,o=[],s=document.createElement(`template`);s.innerHTML=e;for(let e of s.content.querySelectorAll(`img`)){let r=e.getAttribute(`src`)??``;if(e.removeAttribute(`data-kobo-image-url`),!/^\/api\/workspaces\/[^/]+\/images\/file\?path=/.test(r))continue;e.removeAttribute(`src`);let i=J(r);o.push(i),i.ready.then(t=>{a&&(e.setAttribute(`src`,t),e.setAttribute(`data-kobo-image-url`,r),n.value=s.innerHTML)}).catch(()=>{a&&(e.setAttribute(`title`,t()),n.value=s.innerHTML)})}n.value=s.innerHTML,i(()=>{a=!1;for(let e of o)e.release()})},{immediate:!0}),n}function Ke(e,t){return t?e.replace(/\[image:\s+([^\]]+)\]/g,(e,n)=>{let r=String(n).trim();return/^(\.ai\/images\/|images\/)/.test(r)?`}/images/file?path=${encodeURIComponent(r)}`})`:e}):e}var qe=[`innerHTML`],Je=[`innerHTML`],Ye=[`src`],Y=R(T({__name:`UserMessageItem`,props:{item:{},workspaceId:{}},setup(t){let n=t,{t:r}=de(),a=x(()=>n.item.sender===`system-prompt`),s=Ge(x(()=>{let e=Ke(n.item.content,n.workspaceId);return V(e)}),()=>r(`network.login.unreachable`)),c=o(null),d=o(!1),f;function p(){d.value=!1,c.value=null,f?.release(),f=void 0}l(d,e=>{e||p()}),l(()=>n.workspaceId,p);let m=e=>{(e.key===`kobo:network-token`||e.key===null)&&p()};window.addEventListener(`storage`,m),window.addEventListener(`kobo:auth-token-changed`,p),i(()=>{p(),window.removeEventListener(`kobo:auth-token-changed`,p),window.removeEventListener(`storage`,m)});function y(e){let t=e.target;if(t?.tagName!==`IMG`)return;let n=t;n.src&&(p(),n.dataset.koboImageUrl&&(f=J(n.dataset.koboImageUrl),f.ready.catch(p)),c.value=n.src,d.value=!0)}return(t,n)=>(u(),S(C,null,[a.value?(u(),_(Ce,{key:0,dense:``,"dense-toggle":``,label:t.$t(`chat.systemPrompt`),"header-class":`text-kobo-2 text-caption`},{default:h(()=>[w(`div`,{class:`q-py-xs markdown-user-prompt`,innerHTML:e(s)},null,8,qe)]),_:1},8,[`label`])):(u(),S(`div`,{key:1,class:`markdown-message`,onClick:y},[w(`div`,{innerHTML:e(s)},null,8,Je)])),g(A,{modelValue:d.value,"onUpdate:modelValue":n[1]||=e=>d.value=e},{default:h(()=>[c.value?(u(),S(`img`,{key:0,src:c.value,alt:``,class:`image-lightbox-img`,onClick:n[0]||=e=>d.value=!1},null,8,Ye)):v(``,!0)]),_:1},8,[`modelValue`])],64))}}),[[`__scopeId`,`data-v-db2fc622`]]),Xe=[`data-event-ids`],X={class:`turn-header`},Ze={key:0,class:`turn-time`},Qe={class:`turn-time turn-time-updated`},$e={key:2,class:`turn-actions`},et={class:`turn-body`},tt={class:`ellipsis`},nt={class:`q-px-sm q-pb-sm`},rt={key:0,class:`turn-scroll-top`},it=R(T({__name:`TurnCard`,props:{turn:{},workspaceId:{},highlighted:{type:Boolean}},emits:[`scrollTo`],setup(t,{emit:i}){let s=t,c=i,{t:l}=de(),d=_e(),f=m(F),p=o(null);function ee(){let e=p.value;if(!e)return;let t=e.closest(`.q-scrollarea`)?.querySelector(`.q-scrollarea__content`);if(!t){e.scrollIntoView({behavior:`smooth`,block:`start`});return}let n=e.getBoundingClientRect().top-t.getBoundingClientRect().top;c(`scrollTo`,Math.max(0,n-8))}let b=x(()=>{switch(s.turn.speaker){case`user`:{let e=s.turn.items[0],t=e?.type===`user`?e.source:void 0;return{label:t?l(`chat.externalLlm`,{name:t.clientName}):l(`chat.you`),accent:`var(--kobo-turn-user)`,badgeClass:`turn-badge-user`}}case`agent`:return{label:l(`chat.agent`),accent:`var(--kobo-turn-agent)`,badgeClass:`turn-badge-agent`};case`system-prompt`:return{label:l(`chat.systemPrompt`),accent:`var(--kobo-text-3)`,badgeClass:`turn-badge-system`};case`session`:return{label:l(`chat.session`),accent:`var(--kobo-text-3)`,badgeClass:`turn-badge-session`};case`script`:{let e=s.turn.items[0],t=e?.type===`user`?e.sender:``;return{label:me(t)?l(`chat.hookScript`,{event:t.slice(5)}):l(t===`archive`?`chat.archiveScript`:t===`setup`?`chat.setupScript`:`chat.cleanupScript`),accent:`var(--kobo-success)`,badgeClass:`turn-badge-script`}}}});function T(e,t=!1){if(!e)return``;let n=new Date(e);return Number.isNaN(n.getTime())?``:n.toLocaleTimeString(void 0,t?{hour:`2-digit`,minute:`2-digit`,second:`2-digit`}:{hour:`2-digit`,minute:`2-digit`})}let ne=x(()=>T(s.turn.ts)),re=x(()=>s.turn.items.flatMap(e=>e.eventIds??[]).join(` `)),ae=x(()=>{let e=s.turn.items;if(e.length===0)return null;for(let t=e.length-1;t>=0;t--){let n=e[t].ts;if(n)return n}return null}),D=x(()=>{let e=s.turn.ts,t=ae.value;if(!t||!e||t===e)return``;let n=new Date(e).getTime(),r=new Date(t).getTime();return Number.isNaN(n)||Number.isNaN(r)||r<=n?``:T(t,r-n<6e4)}),oe=x(()=>D.value!==``);function se(e){return we(e.origin,Object.values(d.subagents[s.workspaceId]??{}),e.type===`tool`?e.toolCallId:void 0)}function ce(e){return e||l(`chat.subagentActivity`)}function le(e){return(e.type===`text`||e.type===`thinking`||e.type===`tool`)&&e.origin?.kind===`subagent`}let ue=x(()=>{let e=[];for(let t of s.turn.items){if(!le(t)){e.push({type:`item`,key:W(t),item:t});continue}let n=se(t),r=n?.toolUseId??t.origin?.toolCallId??t.origin?.threadId??W(t),i=e.at(-1);if(i?.type===`subagent`&&i.subagentKey===r){i.items.push(t);continue}e.push({type:`subagent`,key:`subagent:${W(t)}`,items:[t],subagentKey:r,subagentName:n?.description||null})}return e});function fe(e){e.origin&&f?.({origin:e.origin})}let pe=x(()=>s.turn.items.filter(e=>e.type===`tool`).length);return(i,o)=>(u(),S(`div`,{ref_key:`cardEl`,ref:p,class:a([`turn-card`,{"turn-card--user":t.turn.speaker===`user`,"turn-card--highlighted":t.highlighted}]),"data-event-ids":re.value,style:r({"--turn-accent":b.value.accent})},[w(`div`,X,[w(`span`,{class:a([`turn-badge`,b.value.badgeClass])},n(b.value.label),3),ne.value?(u(),S(`span`,Ze,n(ne.value),1)):v(``,!0),oe.value?(u(),S(C,{key:1},[g(ie,{name:`arrow_forward`,size:`10px`,color:`kobo-3`,class:`turn-time-arrow`}),w(`span`,Qe,[y(n(D.value)+` `,1),g(B,null,{default:h(()=>[y(n(e(l)(`chat.lastUpdatedAt`,{time:D.value})),1)]),_:1})])],64)):v(``,!0),pe.value>0?(u(),S(`span`,$e,` · `+n(e(l)(`chat.nActions`,{n:pe.value})),1)):v(``,!0)]),w(`div`,et,[(u(!0),S(C,null,te(ue.value,r=>(u(),S(C,{key:r.key},[r.type===`subagent`?(u(),_(Ce,{key:0,class:`turn-subagent-activity`,dense:``,label:ce(r.subagentName),caption:e(l)(`chat.nActions`,{n:r.items.length}),"default-opened":t.highlighted&&r.items.some(e=>e.eventIds?.some(e=>re.value.includes(e)))},{header:h(()=>[g(P,null,{default:h(()=>[g(N,{class:`row items-center no-wrap`,title:r.subagentName??void 0},{default:h(()=>[g(ie,{name:`hub`,size:`16px`,class:`q-mr-xs`},{default:h(()=>[g(B,null,{default:h(()=>[y(n(e(l)(`chat.subagentActivity`)),1)]),_:1})]),_:1}),w(`span`,tt,n(ce(r.subagentName)),1)]),_:2},1032,[`title`]),g(N,{caption:``},{default:h(()=>[y(n(e(l)(`chat.nActions`,{n:r.items.length})),1)]),_:2},1024)]),_:2},1024),g(P,{side:``},{default:h(()=>[g(O,{flat:``,round:``,dense:``,size:`sm`,icon:`open_in_new`,"aria-label":e(l)(`chat.openSubagentActivity`),onClick:E(e=>fe(r.items[0]),[`stop`])},{default:h(()=>[g(B,null,{default:h(()=>[y(n(e(l)(`chat.openSubagentActivity`)),1)]),_:1})]),_:1},8,[`aria-label`,`onClick`])]),_:2},1024)]),default:h(()=>[w(`div`,nt,[(u(!0),S(C,null,te(r.items,t=>(u(),S(C,{key:e(W)(t)},[t.type===`text`?(u(),_(I,{key:0,item:t},null,8,[`item`])):t.type===`thinking`?(u(),_(H,{key:1,item:t},null,8,[`item`])):t.type===`tool`?(u(),_(L,{key:2,item:t},null,8,[`item`])):v(``,!0)],64))),128))])]),_:2},1032,[`label`,`caption`,`default-opened`])):(u(),S(C,{key:1},[r.item.type===`text`?(u(),_(I,{key:0,item:r.item},null,8,[`item`])):r.item.type===`thinking`?(u(),_(H,{key:1,item:r.item},null,8,[`item`])):r.item.type===`tool`?(u(),_(L,{key:2,item:r.item},null,8,[`item`])):r.item.type===`user`?(u(),_(Y,{key:3,item:r.item,"workspace-id":t.workspaceId},null,8,[`item`,`workspace-id`])):r.item.type===`session`?(u(),_(We,{key:4,item:r.item},null,8,[`item`])):r.item.type===`error`?(u(),_(He,{key:5,item:r.item},null,8,[`item`])):v(``,!0)],64))],64))),128))]),t.turn.items.length>4?(u(),S(`div`,rt,[g(O,{flat:``,round:``,dense:``,size:`xs`,icon:`arrow_upward`,color:`kobo-3`,class:`turn-scroll-top-btn`,onClick:ee},{default:h(()=>[g(B,null,{default:h(()=>[y(n(e(l)(`chat.scrollToTurnTop`)),1)]),_:1})]),_:1})])):v(``,!0)],14,Xe))}}),[[`__scopeId`,`data-v-7f80d364`]]),at={key:0,class:`activity-feed-switching`},ot={key:1,class:`activity-feed-wrap`,"data-tour":`ws-chat`},st={key:0,role:`alert`,class:`q-pa-sm text-negative`},ct={key:1,"data-testid":`history-load-error`,role:`alert`,class:`q-pa-sm text-negative`},lt=[`aria-label`],ut={key:0,class:`activity-feed-compacting`},dt={class:`text-caption text-kobo-2`},ft={key:0,class:`text-center q-py-sm text-caption text-kobo-3`},pt={key:1,class:`activity-feed-empty q-pa-md`},mt={class:`activity-feed-empty__title`},ht={class:`activity-feed-empty__hint`},gt={key:2,class:`q-px-md q-pb-md`},_t=[`title`],vt={class:`ellipsis`},yt={class:`activity-feed-nav-cluster`},bt=300,xt=60,St=200,Ct=180,wt=255,Tt=3,Et=60,Dt=R(T({__name:`ActivityFeed`,props:{workspaceId:{}},setup(t){let{t:r}=de(),i=t,a=he(),s=fe(),d=_e(),m=ve(),ee=x(()=>m.isCompacting(i.workspaceId)),b=x(()=>d.selectedSessionId),T=x(()=>d.sessions.find(e=>e.id===b.value)?.engineSessionId??null),re=x(()=>{let e=d.sessions;return e.length!==0&&b.value===e[e.length-1].id});function E(e){return b.value?e?e===b.value||e===T.value:re.value:!0}let D=x(()=>(d.activityFeeds[i.workspaceId]??[]).filter(e=>e.type===`text`&&typeof e.content==`string`&&E(e.sessionId)).map(e=>({content:e.content,sender:e.meta?.sender??`user`,source:ge(e.meta?.source),ts:e.timestamp,sessionId:e.sessionId,eventIds:[e.id]}))),oe=x(()=>{let e=d.workspaces.find(e=>e.id===i.workspaceId);return ye(e?.status)}),pe=ke(),me=``,k=x(()=>{let e=a.eventsFor(i.workspaceId),t=a.timestampsFor(i.workspaceId),n=a.sessionIdsFor(i.workspaceId),r=a.eventIdsFor(i.workspaceId),o=[],c=[],l=[];for(let i=0;i<e.length;i++)E(n[i])&&(o.push(e[i]),c.push(t[i]),l.push(r[i]??null));let u=`${i.workspaceId}::${b.value??`*`}`;u!==me&&(pe=ke(),me=u);let d=Ee(pe,o,c,oe.value,l);return Fe(De(d,D.value).filter(e=>e.type===`thinking`?!1:e.type===`session`?e.kind===`ended`?s.showVerboseSystemMessages||!Oe(e.detail):s.showVerboseSystemMessages:!0))}),A=x(()=>s.showVerboseSystemMessages?a.eventsFor(i.workspaceId).filter(e=>e.kind===`message:raw`).map(e=>e.content):[]),xe=x(()=>{for(let e=k.value.length-1;e>=0;e--){let t=k.value[e]?.items??[];for(let e=t.length-1;e>=0;e--){let n=t[e];if(n){if(n.type===`text`&&!n.streaming)return{key:`text:${n.messageId}`,text:n.text};if(n.type===`tool`)return n.result?{key:`tool:${n.toolCallId}:end`,text:n.result.isError?r(`activity.a11y.toolFailed`,{name:n.name}):r(`activity.a11y.toolFinished`,{name:n.name})}:{key:`tool:${n.toolCallId}:start`,text:r(`activity.a11y.toolStarted`,{name:n.name})}}}}return null}),Se=o(``);l(xe,(e,t)=>{if(!e||e.key===t?.key)return;let n=e.key.startsWith(`text:`)?r(`activity.a11y.agentSaid`,{text:e.text.slice(0,bt)}):e.text;Se.value=n});let j=o(null),M=o(!0),N=o(!1),P=o(``),F=ue(),we=ue(),I=ue(),L=o(null),R=!1,z=!0,B=null,V=o(new Set),H=new Map,Ae=x(()=>{if(k.value.length>0||A.value.length>0)return!1;let e=i.workspaceId,t=b.value;return!!d.loadingSessions[e]||m.isSyncPending(e)||t!==null&&V.value.has(W(e,t))}),je=o(new Map),U=x(()=>k.value.length>0||A.value.length>0),Ne=x(()=>!!d.loadingSessions[i.workspaceId]||m.isSyncPending(i.workspaceId)||b.value!==null&&V.value.has(W(i.workspaceId,b.value)));function Pe(e){tt();let t=B;if(B=e.verticalSize,t!==null&&e.verticalSize>t&&M.value&&!N.value){q(0);return}let n=e.verticalSize-e.verticalPosition-e.verticalContainerSize;M.value=n<=xt,R&&e.verticalPosition<=St&&!N.value&&!P.value&&ze()&&He()}function W(e,t){return`${e}:${t}`}function ze(){let e=b.value;return e?je.value.get(W(i.workspaceId,e))??!0:a.hasMoreOlderFor(i.workspaceId)}function Be(e,t,n){je.value.set(W(e,t),n)}function Ve(e){if(!b.value)return a.oldestIdFor(e);let t=a.eventIdsFor(e),n=a.sessionIdsFor(e);for(let e=0;e<t.length;e++){if(!E(n[e]))continue;let r=t[e];if(r)return r}}let G=null;function He(){if(G)return G;let e=K().finally(()=>{G===e&&(G=null)});return G=e,G}function Ue(){F.abort(),we.abort(),I.abort(),N.value=!1,G=null;for(let e of V.value)Ft.delete(e);H.clear(),V.value.clear(),P.value=``}function We(){P.value=``,Nt.value===0&&b.value?It():He()}l(()=>[i.workspaceId,b.value],Ue,{flush:`sync`});async function K(){let e=i.workspaceId,t=b.value,n=Ve(e);if(!n)return;let r=F.begin();P.value=``,N.value=!0;try{let i=j.value;if(await f(),!F.isCurrent(r))return;let o=i?.getScroll().verticalSize??0,s=i?.getScroll().verticalPosition??0,c=new URLSearchParams({before:n,limit:`200`});t&&c.set(`session`,t);let l=await le(`/api/workspaces/${e}/events?${c.toString()}`,{signal:r});if(!l.ok)throw await se(l);let u=await l.json();if(!F.isCurrent(r))return;let p=u.events??[],m=p.filter(t=>t.type===`agent:event`&&t.workspaceId===e),h=p.filter(t=>t.type===`user:message`&&t.workspaceId===e),g=m.map(e=>e.payload),_=m.map(e=>e.createdAt),v=m.map(e=>e.sessionId??null),y=m.map(e=>e.id),ee=p.length>0?p[0].id:n;t&&Be(e,t,u.hasMore),a.prepend(e,g,_,{oldestId:ee,hasMoreOlder:t?a.hasMoreOlderFor(e):u.hasMore,sessionIds:v,eventIds:y});for(let t of h){let n=t.payload;typeof n.content==`string`&&d.addActivityItem(e,{id:t.id,type:`text`,content:n.content,timestamp:t.createdAt,sessionId:t.sessionId??void 0,meta:{sender:n.sender??`user`,source:ge(n.source)}})}if(await f(),i&&F.isCurrent(r)){let e=i.getScroll().verticalSize-o;if(e>0){let t=Math.max(s+e,250);i.setScrollPosition(`vertical`,t,0)}}}catch(e){if(ce(e)||!F.isCurrent(r))return;P.value=e instanceof Error?e.message:String(e),console.error(`[ActivityFeed] failed to load older events:`,e)}finally{F.isCurrent(r)&&(N.value=!1)}}async function q(e=0){let t=$();if(await f(),t!==$())return;let n=j.value;if(!n)return;let r=n.getScroll();n.setScrollPosition(`vertical`,r.verticalSize,e)}let J=null,Ge=0;function Ke(){if(J!=null)return;let e=performance.now()-Ge<Ct,t=$();J=requestAnimationFrame(()=>{J=null,t===$()&&(Ge=performance.now(),q(e?0:180))})}function qe(e){Q(),M.value=!1;let t=j.value;t&&t.setScrollPosition(`vertical`,Math.max(0,e),250)}function Je(){let e=window.location.hash,t=e.indexOf(`?`);if(t===-1||!new URLSearchParams(e.slice(t+1)).has(`eventId`))return;let n=e.slice(0,t);window.history.replaceState(window.history.state,``,`${window.location.pathname}${window.location.search}${n}`)}async function Ye(e){let t=e.detail;if(t?.workspaceId!==i.workspaceId||!t.eventId)return;Q(),M.value=!1;let n=I.begin(),r=i.workspaceId;try{let e=new URLSearchParams({around:t.eventId,limit:`200`});t.sessionId&&e.set(`session`,t.sessionId);let o=await le(`/api/workspaces/${r}/events?${e}`,{signal:n});if(!o.ok)throw await se(o);let s=await o.json();if(!I.isCurrent(n))return;let c=s.events??[],l=c.filter(e=>e.type===`agent:event`&&e.workspaceId===i.workspaceId),u=c.filter(e=>e.type===`user:message`&&e.workspaceId===i.workspaceId);a.reset(i.workspaceId,l.map(e=>e.payload),l.map(e=>e.createdAt),{oldestId:c[0]?.id,hasMoreOlder:s.hasMore??!1,sessionIds:l.map(e=>e.sessionId),eventIds:l.map(e=>e.id)});for(let e of u){let t=e.payload;typeof t.content==`string`&&d.addActivityItem(i.workspaceId,{id:e.id,type:`text`,content:t.content,timestamp:e.createdAt,sessionId:e.sessionId??void 0,meta:{sender:t.sender??`user`,source:ge(t.source)}})}if(await Re(Ae,e=>!e,5e3),await f(),await new Promise(e=>requestAnimationFrame(()=>requestAnimationFrame(()=>e()))),!I.isCurrent(n))return;let p=k.value.findIndex(e=>e.items.some(e=>e.eventIds?.includes(t.eventId)??!1));if(p<0)return;L.value=t.eventId,Y.value?.scrollTo(p,`center`),X.value=p,window.setTimeout(()=>{L.value===t.eventId&&(L.value=null)},1800)}catch(e){if(ce(e)||!I.isCurrent(n))return;P.value=e instanceof Error?e.message:String(e),console.error(`[ActivityFeed] failed to focus history event:`,e)}}let Y=o(null),Xe=o(null),X=o(0),Ze=o(!1),Qe=x(()=>{for(let e=k.value.length-1;e>=0;e--)if(k.value[e]?.speaker===`user`)return e;return-1}),$e=null;function et(){let e=Qe.value,t=j.value?.getScrollTarget(),n=t?.querySelector(`[data-turn-index="${e}"]`);if(!n||!t){Ze.value=!1;return}let r=t.getBoundingClientRect(),i=n.getBoundingClientRect();Ze.value=i.bottom>r.top&&i.top<r.bottom}function tt(){$e===null&&($e=requestAnimationFrame(()=>{$e=null,et()}))}function nt(e){return e.length<=wt?e:`${e.slice(0,252)}...`}let rt=x(()=>{let e=Qe.value,t=k.value[e];if(!t||X.value<=e||Ze.value)return null;let n=t.items.filter(e=>e.type===`user`).map(e=>e.content).join(`
|
|
2
|
-
`).trim();return n?{index:e,content:nt(n)}:null});function Dt(e){X.value=e.index,tt()}function Ot(){let e=rt.value;e&&(Q(),M.value=!1,Y.value?.scrollTo(e.index,`start`),X.value=e.index)}let kt=o(!1);async function At(){if(kt.value)return;Q(),M.value=!1,kt.value=!0;let e=i.workspaceId;try{let t=Le(k.value,X.value);if(t<0)for(let n=0;n<15;n++){if(e!==i.workspaceId)return;if(!ze())break;let n=k.value.length;if(await He(),await f(),e!==i.workspaceId)return;if(X.value+=k.value.length-n,t=Le(k.value,X.value),t>=0)break}t>=0&&e===i.workspaceId&&(Y.value?.scrollTo(t,`start`),X.value=t)}finally{kt.value=!1}}let Z=0;function jt(){return new Promise(e=>requestAnimationFrame(()=>e()))}async function Mt(){if(!z||!U.value||Ae.value)return;R=!1;let e=++Z;if(await f(),e!==Z||!z||(Xe.value=j.value?.getScrollTarget()??null,await f(),e!==Z||!z))return;k.value.length>0&&Y.value?.scrollTo(k.value.length-1,`end-force`),await jt();let t=-1,n=0;for(let r=0;r<Et&&n<Tt;r++){if(e!==Z||!z)return;await q(0),await jt();let r=j.value?.getScroll().verticalSize??0;B=r,n=r===t?n+1:0,t=r}e===Z&&!Ne.value&&(R=!0,z=!1)}function Q(){z=!1,!R&&(Z++,R=!0)}let Nt=x(()=>{let e=a.sessionIdsFor(i.workspaceId);if(!b.value)return e.length;let t=0;for(let n of e)E(n)&&t++;return t});l(Ae,async e=>{!e&&U.value&&await Mt(),e||f(()=>{Xe.value=j.value?.getScrollTarget()??null,tt()})}),l(Ne,(e,t)=>{!e&&t&&z&&U.value&&Mt()}),p(()=>{window.addEventListener(`kobo:focus-history-event`,Ye),f(()=>{Xe.value=j.value?.getScrollTarget()??null,tt()}),U.value&&Mt(),b.value&&It();let e=new URLSearchParams(window.location.hash.split(`?`)[1]??``).get(`eventId`);e&&(Ye(new CustomEvent(`kobo:focus-history-event`,{detail:{workspaceId:i.workspaceId,sessionId:b.value,eventId:e}})),Je())}),l([Nt,()=>D.value.length,()=>A.value.length],async([e,t,n])=>{N.value||z&&e+t+n>0&&await Mt()}),l([Qe,()=>k.value.length],()=>{f(tt)});let Pt=x(()=>a.liveAppendCountFor(i.workspaceId,E)),$=()=>`${i.workspaceId}\u0000${d.selectedSessionId??``}`;l([Pt,$],([e,t],[n,r])=>{t===r&&e>n&&M.value&&!N.value&&Ke()}),c(()=>{Z++,z=!1,Ue(),window.removeEventListener(`kobo:focus-history-event`,Ye),J!=null&&(cancelAnimationFrame(J),J=null),$e!==null&&cancelAnimationFrame($e)}),l([()=>i.workspaceId,()=>d.selectedSessionId],()=>{Z++,z=!0,B=null,M.value=!0,R=!1,It(),U.value&&Mt()});let Ft=new Set;async function It(){let e=i.workspaceId,t=b.value;if(!t||Nt.value>0)return;let n=W(e,t);if(Ft.has(n))return;Ft.add(n),V.value.add(n);let r=we.begin();H.set(n,r),P.value=``;try{let n=await le(`/api/workspaces/${e}/events?session=${encodeURIComponent(t)}&limit=500`,{signal:r});if(!n.ok)throw await se(n);let i=await n.json();if(!we.isCurrent(r))return;let o=i.events??[];if(o.length===0)return;let s=o.filter(t=>t.type===`agent:event`&&t.workspaceId===e),c=o.filter(t=>t.type===`user:message`&&t.workspaceId===e),l=s.map(e=>e.payload),u=s.map(e=>e.createdAt),f=s.map(e=>e.sessionId??null),p=s.map(e=>e.id);Be(e,t,i.hasMore),l.length>0&&a.prepend(e,l,u,{oldestId:o[0].id,hasMoreOlder:a.hasMoreOlderFor(e),sessionIds:f,eventIds:p});for(let t of c){let n=t.payload;typeof n.content==`string`&&d.addActivityItem(e,{id:t.id,type:`text`,content:n.content,timestamp:t.createdAt,sessionId:t.sessionId??void 0,meta:{sender:n.sender??`user`,source:ge(n.source)}})}}catch(e){if(ce(e)||!we.isCurrent(r)){(!H.has(n)||H.get(n)===r)&&Ft.delete(n);return}P.value=e instanceof Error?e.message:String(e),console.error(`[ActivityFeed] fetchSessionIfMissing failed:`,e),Ft.delete(n)}finally{H.get(n)===r&&(H.delete(n),V.value.delete(n))}}let Lt=x(()=>D.value.filter(e=>e.sender===`user`).length),Rt=x(()=>(d.activityFeeds[i.workspaceId]??[]).filter(e=>e.meta?.sender===`user`&&e.meta.pending&&E(e.sessionId)).length);l([Lt,Rt,$],async([e,t,n],[r,i,a])=>{let o=t>i;n===a&&(o||e>r&&M.value&&!N.value&&!Ne.value)&&(M.value=!0,await q(o?180:0))});async function zt(){M.value=!0,await q(250)}return(t,r)=>Ae.value?(u(),S(`div`,at,[g(be,{size:`40px`,color:`primary`})])):(u(),S(`div`,ot,[e(d).sessionsErrors[i.workspaceId]?(u(),S(`div`,st,[y(n(t.$t(`activity.sessionsError`,{message:e(d).sessionsErrors[i.workspaceId]}))+` `,1),g(O,{flat:``,dense:``,label:t.$t(`common.retry`),onClick:r[0]||=t=>e(d).fetchSessions(i.workspaceId)},null,8,[`label`])])):v(``,!0),P.value?(u(),S(`div`,ct,[y(n(t.$t(`activity.historyError`,{message:P.value}))+` `,1),g(O,{flat:``,dense:``,label:t.$t(`common.retry`),onClick:We},null,8,[`label`])])):v(``,!0),w(`div`,{"data-testid":`activity-live-region`,class:`sr-only`,role:`log`,"aria-live":`polite`,"aria-atomic":`true`,"aria-label":t.$t(`activity.a11y.region`)},n(Se.value),9,lt),g(ae,{name:`fade`},{default:h(()=>[ee.value?(u(),S(`div`,ut,[g(be,{size:`18px`,color:`primary`}),w(`span`,dt,n(t.$t(`activity.compacting`)),1)])):v(``,!0)]),_:1}),g(Te,{ref_key:`scrollRef`,ref:j,class:`activity-feed-scroll`,onScroll:Pe,onWheelPassive:Q,onTouchstartPassive:Q,onKeydown:Q},{default:h(()=>[N.value?(u(),S(`div`,ft,[g(ne,{size:`sm`}),y(` `+n(t.$t(`activity.loading_older`)),1)])):v(``,!0),g(Me,{ref_key:`virtualScrollRef`,ref:Y,class:`q-pa-md`,items:k.value,"scroll-target":Xe.value??void 0,"virtual-scroll-item-size":160,"virtual-scroll-slice-size":20,onVirtualScroll:Dt},{default:h(({item:t,index:n})=>[(u(),_(it,{key:e(Ie)(t),turn:t,"workspace-id":i.workspaceId,"data-turn-index":n,highlighted:t.items.some(e=>e.eventIds?.includes(L.value??``)??!1),onScrollTo:qe},null,8,[`turn`,`workspace-id`,`data-turn-index`,`highlighted`]))]),_:1},8,[`items`,`scroll-target`]),k.value.length===0&&A.value.length===0&&!N.value?(u(),S(`div`,pt,[g(ie,{name:`forum`,size:`28px`}),w(`div`,mt,n(t.$t(`activity.empty`)),1),w(`div`,ht,n(t.$t(`activity.emptyHint`)),1)])):v(``,!0),A.value.length?(u(),S(`div`,gt,[g(Ce,{label:t.$t(`activity.raw_lines`,{n:A.value.length}),dense:``},{default:h(()=>[(u(!0),S(C,null,te(A.value,(e,t)=>(u(),S(`div`,{key:t,class:`text-caption text-kobo-3 q-pa-xs`},n(e),1))),128))]),_:1},8,[`label`])])):v(``,!0)]),_:1},512),rt.value?(u(),S(`button`,{key:2,type:`button`,class:`activity-feed-last-user`,"data-testid":`latest-user-message`,title:rt.value.content,onClick:Ot},[g(ie,{name:`person`,size:`16px`}),w(`span`,vt,n(rt.value.content),1)],8,_t)):v(``,!0),w(`div`,yt,[M.value?v(``,!0):(u(),_(O,{key:0,round:``,dense:``,unelevated:``,color:`kobo-surface-2`,"text-color":`kobo-1`,icon:`arrow_downward`,size:`sm`,class:`activity-feed-nav-btn`,title:t.$t(`activity.scroll_to_bottom`),"aria-label":t.$t(`activity.scroll_to_bottom`),onClick:zt},null,8,[`title`,`aria-label`])),g(O,{round:``,dense:``,unelevated:``,color:`kobo-surface-2`,"text-color":`kobo-1`,icon:`arrow_upward`,size:`sm`,class:`activity-feed-nav-btn`,title:t.$t(`activity.prev_user_message`),"aria-label":t.$t(`activity.prev_user_message`),loading:kt.value,disable:kt.value,onClick:At},null,8,[`title`,`aria-label`,`loading`,`disable`])])]))}}),[[`__scopeId`,`data-v-58324159`]]);export{Dt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{M as e,dt as t,v as n}from"./reactivity.esm-bundler-tuEvQ47f.js";import{L as r,P as i,Y as a,_ as o,d as s,f as c,p as l,r as u,u as d,y as f,z as p}from"./runtime-core.esm-bundler-DOiZcasU.js";import{t as m}from"./QBtn-b_baQtAt.js";import{l as h,o as g}from"./latest-request-7rgsEfKZ.js";import{Jt as _,Kt as v,i as y}from"./index-BVJWwOvK.js";import{a as b,i as x,n as S}from"./use-tours-CM4E53aB.js";import{n as C}from"./render-chat-markdown-CafzCcmu.js";import{t as w}from"./QChip-Btg1Lp_6.js";import{t as T}from"./QPage-BCDXjfVj.js";import{t as E}from"./DrawerToggleButton-CQVSfKpY.js";import{t as D}from"./TourReplayButton-uCZpvYlj.js";var O={class:`row items-center q-mb-md`},k={class:`text-h6 q-ml-sm`},A={key:0,class:`text-kobo-3 text-center q-pa-lg`},j={key:1,class:`text-negative text-center q-pa-lg`},M={key:2,class:`text-kobo-3 text-center q-pa-lg`},N={key:3,class:`column q-gutter-md`,"data-tour":`changelog-list`},P={key:0,class:`text-caption text-kobo-3`},F={class:`row items-center q-mb-sm`},I={class:`text-subtitle1 text-kobo-2`,style:{"font-family":`var(--kobo-font-mono, monospace)`}},L=[`innerHTML`],R=b(f({__name:`ChangelogPage`,setup(f){let b=y(),{scheduleAutoRun:R}=S(),z=n([]),B=n(``),V=n(!1),H=n(null);function U(e){return C(e)}async function W(){V.value=!0,H.value=null;try{let e=await g(`/api/changelog`);if(!e.ok)throw await h(e);let t=await e.json();B.value=t.currentVersion??``,z.value=t.versions??[]}catch(e){H.value=e instanceof Error?e.message:String(e)}finally{V.value=!1}}return i(()=>{W(),R(`changelog`)}),(n,i)=>(r(),s(T,{class:`q-pa-md`,style:{"max-width":`900px`,margin:`0 auto`}},{default:a(()=>[d(`div`,O,[o(E,{class:`q-mr-xs`}),o(m,{flat:``,dense:``,round:``,icon:`arrow_back`,onClick:i[0]||=t=>e(b).back()}),d(`div`,k,t(n.$t(`changelog.title`)),1),o(x),o(m,{flat:``,dense:``,icon:`refresh`,loading:V.value,label:n.$t(`common.refresh`),onClick:W},null,8,[`loading`,`label`]),o(D,{"tour-id":`changelog`,class:`q-ml-xs`})]),V.value&&z.value.length===0?(r(),l(`div`,A,t(n.$t(`common.loading`)),1)):H.value?(r(),l(`div`,j,t(H.value),1)):z.value.length===0?(r(),l(`div`,M,t(n.$t(`changelog.empty`)),1)):(r(),l(`div`,N,[B.value?(r(),l(`div`,P,t(n.$t(`changelog.currentVersion`,{version:B.value})),1)):c(``,!0),(r(!0),l(u,null,p(z.value,e=>(r(),s(v,{key:e.version,dark:``,flat:``,bordered:``},{default:a(()=>[o(_,null,{default:a(()=>[d(`div`,F,[d(`div`,I,` v`+t(e.version),1),e.version===B.value?(r(),s(w,{key:0,dense:``,size:`sm`,color:`primary`,"text-color":`kobo-1`,label:n.$t(`changelog.current`),class:`q-ml-sm`},null,8,[`label`])):c(``,!0)]),d(`div`,{class:`changelog-notes`,innerHTML:U(e.notes)},null,8,L)]),_:2},1024)]),_:2},1024))),128))]))]),_:1}))}}),[[`__scopeId`,`data-v-4032778f`]]);export{R as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{H as e,rt as t}from"./QBtn-b_baQtAt.js";import{g as n,h as r}from"./use-id-b4A2I8LB.js";function i(e){return e===!1?0:e===!0||e===void 0?1:Number.parseInt(e,10)||0}function a(e){let t=e.currentTarget,i=t.__qclosepopup;i!==0&&setTimeout(()=>{let a=n(t);a!==void 0&&r(a,e,i)},0)}function o(t){e(t,13)&&a(t)}var s=t({name:`close-popup`,beforeMount(e,{value:t}){e.__qclosepopup=i(t),e.addEventListener(`click`,a),e.addEventListener(`keyup`,o)},updated(e,{value:t,oldValue:n}){t!==n&&e.__qclosepopup!==void 0&&(e.__qclosepopup=i(t))},beforeUnmount(e){e.__qclosepopup!==void 0&&(e.removeEventListener(`click`,a),e.removeEventListener(`keyup`,o),e.__qclosepopup=void 0)}});export{s as t};
|