@loicngr/kobo 2.1.22 → 2.1.24
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 +72 -1
- package/CHANGELOG.md +8 -0
- package/CONFIGURATION.md +145 -3
- package/dist/mcp-server/kobo-tasks-server.js +7 -6
- package/dist/server/index.js +21 -6
- package/dist/server/routes/mcp.js +13 -7
- package/dist/server/services/agent/orchestrator.js +1 -0
- package/dist/server/services/dev-server-service.js +44 -72
- package/dist/server/services/lifecycle-hook-service.js +21 -2
- package/dist/server/services/mcp-message-delivery-service.js +1 -1
- package/dist/server/services/mcp-message-request-service.js +11 -5
- package/dist/server/services/settings-service.js +51 -0
- package/dist/server/services/workspace-dialogue-service.js +2 -0
- package/dist/server/services/workspace-message-service.js +61 -5
- package/dist/server/utils/dev-server-instance.js +58 -0
- package/dist/server/utils/script-runner.js +6 -1
- package/dist/shared/launch-instructions.js +8 -4
- package/dist/shared/mcp-attachments.js +58 -0
- package/dist/shared/memory-tools.js +2 -2
- package/dist/shared/workspace-creation-tools.js +4 -28
- package/dist/shared/workspace-dialogue-tools.js +18 -6
- package/docker-compose.vps.yml +1 -1
- package/docs/deployment-vps.md +11 -0
- package/package.json +1 -1
- package/scripts/kobo-update +6 -2
- package/src/client/dist/pwa/assets/ActivityFeed-BYspOKKg.js +2 -0
- package/src/client/dist/pwa/assets/{ActivityFeed-DdJvMzRI.css → ActivityFeed-CmAFv-2c.css} +1 -1
- package/src/client/dist/pwa/assets/{AutoLoopFinalReviewSettings-CwnNUWCh.js → AutoLoopFinalReviewSettings-DXX3CqrY.js} +1 -1
- package/src/client/dist/pwa/assets/{ChangelogPage-D9ke0TYz.js → ChangelogPage-DKkI5IU-.js} +1 -1
- package/src/client/dist/pwa/assets/{ComparisonPanel-ytDu1L7a.js → ComparisonPanel-Cw5Dkan0.js} +1 -1
- package/src/client/dist/pwa/assets/{CreatePage-YQ_jGilf.js → CreatePage-B7PLFOH6.js} +1 -1
- package/src/client/dist/pwa/assets/{DashboardPage-C-PyArla.js → DashboardPage-Dw8nfkYR.js} +1 -1
- package/src/client/dist/pwa/assets/{DiffViewer-CPobwSwm.js → DiffViewer-DFlDwkmd.js} +3 -3
- package/src/client/dist/pwa/assets/{DocumentsPanel-BjZGNI-p.js → DocumentsPanel-CH0KzdJV.js} +1 -1
- package/src/client/dist/pwa/assets/{DrawerToggleButton-Dtd6fhYu.js → DrawerToggleButton-CZVpU8HH.js} +1 -1
- package/src/client/dist/pwa/assets/{GitPanel-BHJ3lpJZ.js → GitPanel-DjKL30gM.js} +3 -3
- package/src/client/dist/pwa/assets/{HealthPage-Lv_IdF1l.js → HealthPage-DnPp8GSx.js} +1 -1
- package/src/client/dist/pwa/assets/{MainLayout-DYumlWcP.js → MainLayout-1PaKfzdy.js} +2 -2
- package/src/client/dist/pwa/assets/{MemoryPanel-DS2F3x-S.js → MemoryPanel-BarliK2r.js} +1 -1
- package/src/client/dist/pwa/assets/{MemoryProposalList-D_KDS3uX.js → MemoryProposalList-BtVjVPp7.js} +1 -1
- package/src/client/dist/pwa/assets/{QBtnDropdown-XkBxmJO9.js → QBtnDropdown-Rzurb7nO.js} +1 -1
- package/src/client/dist/pwa/assets/{QExpansionItem-B5vbHxJ2.js → QExpansionItem-CaKEBcyx.js} +1 -1
- package/src/client/dist/pwa/assets/{QScrollArea-BE_fAg20.js → QScrollArea-hrsAyyJf.js} +1 -1
- package/src/client/dist/pwa/assets/{QSelect-BjZk4-r8.js → QSelect-Dr7rAt6u.js} +1 -1
- package/src/client/dist/pwa/assets/{QTooltip-Dhn6VXWR.js → QTooltip-CNMsXTmD.js} +1 -1
- package/src/client/dist/pwa/assets/{SchedulePanel-BDhIt9pX.js → SchedulePanel-nDw2eZ9K.js} +1 -1
- package/src/client/dist/pwa/assets/{SearchPage-CJrtIenZ.js → SearchPage-BXJ6iVt1.js} +1 -1
- package/src/client/dist/pwa/assets/SettingsPage-Dcq1Jeoo.css +1 -0
- package/src/client/dist/pwa/assets/SettingsPage-SHpE2q9Z.js +9 -0
- package/src/client/dist/pwa/assets/{SplitWorkspacePage-BV62otQw.js → SplitWorkspacePage-tfZ1kAdZ.js} +1 -1
- package/src/client/dist/pwa/assets/{TerminalPanel-TQUHtZ-q.js → TerminalPanel-Cw8R7lAw.js} +1 -1
- package/src/client/dist/pwa/assets/{ToolCallItem-DxdYefuz.js → ToolCallItem-DEKhFJEv.js} +2 -2
- package/src/client/dist/pwa/assets/{TouchPan-CtwfZgkX.js → TouchPan-DybGzRRK.js} +1 -1
- package/src/client/dist/pwa/assets/{TourReplayButton-DEC_Yt6E.js → TourReplayButton-BNdlAZUR.js} +1 -1
- package/src/client/dist/pwa/assets/{WorkspaceAttentionLabels-BehGsWhI.js → WorkspaceAttentionLabels-B0H9omcK.js} +1 -1
- package/src/client/dist/pwa/assets/{WorkspacePage-Bk-WWOYM.css → WorkspacePage-B-82Rw9T.css} +1 -1
- package/src/client/dist/pwa/assets/{WorkspacePage-CQz6QL5L.js → WorkspacePage-tWGXnmrz.js} +3 -3
- package/src/client/dist/pwa/assets/{browser-B3bGJv7H.js → browser-DUTZhU-w.js} +1 -1
- package/src/client/dist/pwa/assets/{build-path-tree-Bwwe_8vU.js → build-path-tree-ZThcsIN5.js} +1 -1
- package/src/client/dist/pwa/assets/{custom-sounds-1Rb1a5LA.js → custom-sounds-CquHn2gw.js} +1 -1
- package/src/client/dist/pwa/assets/{de-bfOiFUu1.js → de-B3H0T-ft.js} +2 -2
- package/src/client/dist/pwa/assets/{editor.api-D2PTZoSF.js → editor.api-pSvhgban.js} +1 -1
- package/src/client/dist/pwa/assets/{efforts-JkWc_mU5.js → efforts-DJaFsLgd.js} +1 -1
- package/src/client/dist/pwa/assets/{es-C5Sk8pec.js → es-B4lACW6k.js} +2 -2
- package/src/client/dist/pwa/assets/{expand-template-C-aGZz7k.js → expand-template-C5D_p5eV.js} +1 -1
- package/src/client/dist/pwa/assets/{format-BbXB3nKS.js → format-DRfnkeRP.js} +1 -1
- package/src/client/dist/pwa/assets/{formatters-Bu3lC0Jk.js → formatters-Cog2icjt.js} +1 -1
- package/src/client/dist/pwa/assets/{fr-BNVJp67K.js → fr-3uNi02Jz.js} +2 -2
- package/src/client/dist/pwa/assets/{freemarker2-qq6O820q.js → freemarker2-W-OLsqOk.js} +1 -1
- package/src/client/dist/pwa/assets/{handlebars-nXATCa7t.js → handlebars-Kt5RbWuO.js} +1 -1
- package/src/client/dist/pwa/assets/{html-ZSNyTQeY.js → html-D5VKPBbB.js} +1 -1
- package/src/client/dist/pwa/assets/i18n-CEzCwMir.js +1 -0
- package/src/client/dist/pwa/assets/{index-BZKHE14f.js → index-BZwhT2-I.js} +4 -4
- package/src/client/dist/pwa/assets/{it-B9g24VRZ.js → it-DtFWyLHb.js} +2 -2
- package/src/client/dist/pwa/assets/{javascript-B3Elzrc0.js → javascript-DBjx8Bg2.js} +1 -1
- package/src/client/dist/pwa/assets/{liquid-CrMGh9mA.js → liquid-DYT4a7D7.js} +1 -1
- package/src/client/dist/pwa/assets/{mdx-C6nxSGQ5.js → mdx-9L1kysEY.js} +1 -1
- package/src/client/dist/pwa/assets/{monaco-contributions-WtuTHJJ8.js → monaco-contributions-DAme5TZS.js} +1 -1
- package/src/client/dist/pwa/assets/{monaco.contribution--KeSH1BU.js → monaco.contribution-C58k7TPw.js} +2 -2
- package/src/client/dist/pwa/assets/{network-auth-DknPaiQS.js → network-auth-BDUlgV-U.js} +1 -1
- package/src/client/dist/pwa/assets/{notify-theme-DTaB0RsK.js → notify-theme-DrQB-mrb.js} +1 -1
- package/src/client/dist/pwa/assets/{project-color-bm_jpHka.js → project-color-BlV5PUUW.js} +1 -1
- package/src/client/dist/pwa/assets/{python-CQI_FwfK.js → python-DJIlKr-Y.js} +1 -1
- package/src/client/dist/pwa/assets/{razor-BT2wh4_7.js → razor-CC3uqdaH.js} +1 -1
- package/src/client/dist/pwa/assets/{typescript-D3ibItMf.js → typescript-BnnkT9oE.js} +1 -1
- package/src/client/dist/pwa/assets/{use-search-index-status-BnFR-_2l.js → use-search-index-status-CExdHIar.js} +1 -1
- package/src/client/dist/pwa/assets/{use-tours-CsPhvrxf.js → use-tours-DOUjqO2f.js} +2 -2
- package/src/client/dist/pwa/assets/{use-worktree-restore-B5s0BuHk.js → use-worktree-restore-zIOYNIcb.js} +1 -1
- package/src/client/dist/pwa/assets/{workspace-templates-GLO1mBlj.js → workspace-templates-DXJG6flv.js} +1 -1
- package/src/client/dist/pwa/assets/{xml-EIEQlO3Y.js → xml-DJtVmsJT.js} +1 -1
- package/src/client/dist/pwa/assets/{yaml-CJdHLr6G.js → yaml-Dwuw8FcP.js} +1 -1
- package/src/client/dist/pwa/index.html +1 -1
- package/src/client/dist/pwa/sw.js +1 -1
- package/src/mcp-server/README.md +48 -4
- package/src/mcp-server/kobo-tasks-server.ts +8 -10
- package/src/client/dist/pwa/assets/ActivityFeed-2wu6qXx1.js +0 -2
- package/src/client/dist/pwa/assets/SettingsPage-BSwN45zt.js +0 -9
- package/src/client/dist/pwa/assets/SettingsPage-CNIpxG-U.css +0 -1
- package/src/client/dist/pwa/assets/i18n-B_b02gtS.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./editor.api-
|
|
1
|
+
import{n as e}from"./editor.api-pSvhgban.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,4 +1,4 @@
|
|
|
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-
|
|
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-BZwhT2-I.js"></script>
|
|
2
2
|
<link rel="modulepreload" crossorigin href="/assets/reactivity.esm-bundler-DY1JkAEA.js">
|
|
3
3
|
<link rel="modulepreload" crossorigin href="/assets/runtime-core.esm-bundler-Bqg71Vll.js">
|
|
4
4
|
<link rel="modulepreload" crossorigin href="/assets/dom-BtYTvLeN.js">
|
|
@@ -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:"179a9b96a6d4e6150ebc51dd164b4668"},{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-CJdHLr6G.js",revision:"d8c3f9581f1025ced1c90de2a012779e"},{url:"assets/xml-EIEQlO3Y.js",revision:"9c0df3401357e40e20cd0498b9761b69"},{url:"assets/workspace-templates-GLO1mBlj.js",revision:"b2feba57ae0e1072f7df83d1f350f790"},{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-B5s0BuHk.js",revision:"3efa5e485d81dad7442c5abd4b6a47d0"},{url:"assets/use-worktree-restore-B-9jHocY.css",revision:"54449cd3d2d5c88b0bd7d88f53f581c3"},{url:"assets/use-tours-CsPhvrxf.js",revision:"9094b766c716a6f3ab5d3ed6439e693f"},{url:"assets/use-tours-CTZuBZOi.css",revision:"2f6d79046e1409f0472f65179eaa76f3"},{url:"assets/use-slide-transition-B_Nu6u-t.js",revision:"00b155c171e638ef6fb5919cd6ebaf99"},{url:"assets/use-search-index-status-BnFR-_2l.js",revision:"8a65f9dd62e0019fc87c5af329f65d79"},{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-D3ibItMf.js",revision:"605b79c025f6c177df013a2d24cd468c"},{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-BT2wh4_7.js",revision:"719790de6ffc34c5748c6e2201d07e22"},{url:"assets/r-BwWrilGY.js",revision:"f18d3e790ef07bc993539322d29548e4"},{url:"assets/qsharp-DkqhCAOL.js",revision:"c53fe08a83f8fcbcd81723105136a691"},{url:"assets/python-CQI_FwfK.js",revision:"ca695450fcb9f91349e1b319e281dba7"},{url:"assets/pug-Z5eAx3Zn.js",revision:"6e3de6d5214d2cf61b90949e1d383b49"},{url:"assets/protobuf-C531GsRP.js",revision:"04e688a7fef2bde8cef525653497371f"},{url:"assets/project-color-bm_jpHka.js",revision:"e9b282ca91f878d28439078252c01a87"},{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-DTaB0RsK.js",revision:"2c4e06b8e9f551f5b82d2defe053bd13"},{url:"assets/network-auth-DknPaiQS.js",revision:"ab6993ae97fd2cac87ff0b54b5e0b3cd"},{url:"assets/mysql-SOo6toE5.js",revision:"677c089d979324385539e96bd2eb11e4"},{url:"assets/msdax-DauUninz.js",revision:"a63bfea2dd041755a34fe3e307159413"},{url:"assets/monaco.contribution--KeSH1BU.js",revision:"ac7b211b3a4dfe5ce478824fda3e6026"},{url:"assets/monaco-contributions-WtuTHJJ8.js",revision:"0c189e1f181a4b1316d69d87e46f13f6"},{url:"assets/monaco-contributions-DvnCTJI2.css",revision:"964f32a36c06b4d5a66ac1b01556eb2b"},{url:"assets/mips-CIPQ_RoX.js",revision:"b22614ddc8855670a3f76290908877f5"},{url:"assets/mdx-C6nxSGQ5.js",revision:"54bbe9eebd9362aa3672c0c0709219a3"},{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-CrMGh9mA.js",revision:"af0f870ebc8a5a9ec5def44563b21783"},{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-B3Elzrc0.js",revision:"f2903803e6aa3e3c4bb6572127ed366b"},{url:"assets/java-BEtHBSE6.js",revision:"987edcd2170749acca47ea184dd9ab25"},{url:"assets/it-B9g24VRZ.js",revision:"b2ee8a0d091596ad25d2f037bbee8152"},{url:"assets/ini-sBoK_t0W.js",revision:"35f8ec10844ea4f62c2712d3f5c1e129"},{url:"assets/index-C8zAZ-k-.css",revision:"1488166e385bd7f03f15dbf2e6f4fc60"},{url:"assets/index-BZKHE14f.js",revision:"de4bbbc26320f37643397c9028e7f9c4"},{url:"assets/i18n-B_b02gtS.js",revision:"d0c216e3ee312f736529c203eef29951"},{url:"assets/html-ZSNyTQeY.js",revision:"428799b6d613f512474b4d4841f32b79"},{url:"assets/hcl-CpzslTdj.js",revision:"f9ef1004e908957ec1c3bbea2049a0e9"},{url:"assets/handlebars-nXATCa7t.js",revision:"d4aac4c305a0455d32ae6e4414f03f49"},{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-qq6O820q.js",revision:"18fee3daaa716a6af96ec74ce420fbd6"},{url:"assets/fr-BNVJp67K.js",revision:"1a7ab6908371a2a3cf53e5f81c933f51"},{url:"assets/formatters-Bu3lC0Jk.js",revision:"7457248d56b4ed9bf33b3edeb35f5907"},{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-C-aGZz7k.js",revision:"c1323e84b0856e0f48e99bac7259dd3b"},{url:"assets/es-C5Sk8pec.js",revision:"5eb89ad3486257a2287abc3c32aede7b"},{url:"assets/elixir-6RTg0lbw.js",revision:"fb736f7429d9c6a596ed7905653dbf14"},{url:"assets/efforts-JkWc_mU5.js",revision:"cdc90cb5e12ae05c29ee72cfb0943f15"},{url:"assets/editor.worker-BLJF_oQx.js",revision:"73d3d20cadfc19535b465c224d29ba1b"},{url:"assets/editor.api-D2PTZoSF.js",revision:"d7684adaf1bfc8c21a66468f07383cff"},{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-bfOiFUu1.js",revision:"59a3824b3911a0bd65abaa4db06638ec"},{url:"assets/dart-onAF5SnQ.js",revision:"4fc14a4d2b7e030db6af8025d8fe831b"},{url:"assets/cypher-CVaqCwHa.js",revision:"75a568a8c6b29818b6a6c8675841ebf7"},{url:"assets/custom-sounds-1Rb1a5LA.js",revision:"99490263c572d7012433c739d56b3ef7"},{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-Bwwe_8vU.js",revision:"e1d48940fd19b6748d3414eafe63b007"},{url:"assets/browser-B3bGJv7H.js",revision:"390edd93f6b3fb03027f126168e83961"},{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-CQz6QL5L.js",revision:"aa0ba6ad22664109cbc4ca555cb1ecd5"},{url:"assets/WorkspacePage-Bk-WWOYM.css",revision:"8bba8f2de0ec132566d5d52b5d6fb252"},{url:"assets/WorkspaceAttentionLabels-BehGsWhI.js",revision:"4eaebb499a09a227b0fef46c33884aa7"},{url:"assets/WorkspaceAttentionLabels-B9LE8HtU.css",revision:"8670216f1246dc6e0f51ef50b62f0243"},{url:"assets/TourReplayButton-DEC_Yt6E.js",revision:"b21bf48c4df6656a440f4ce1c0434efa"},{url:"assets/TouchPan-CtwfZgkX.js",revision:"328b71917cfaaf3a87d44058005d2473"},{url:"assets/ToolCallItem-m-YnWEbv.css",revision:"ff71b53979cd34e71a0d7ac68ba39695"},{url:"assets/ToolCallItem-DxdYefuz.js",revision:"9758cb476e8737c51c6e7bd6987e7714"},{url:"assets/TerminalPanel-TQUHtZ-q.js",revision:"c3892b40fc526c84eade7f3620152694"},{url:"assets/TerminalPanel-Dz9EE-Ph.css",revision:"9fd7805b12e550833d2ac46b5c24dc7a"},{url:"assets/SplitWorkspacePage-lWQO8xro.css",revision:"cabea8d2cabbc3e1012ffa88225e04d3"},{url:"assets/SplitWorkspacePage-BV62otQw.js",revision:"003cad46ea9ae33fb812d439ed32c536"},{url:"assets/SettingsPage-CNIpxG-U.css",revision:"9e8c9eb74a019c28eeb2cde61107cbb2"},{url:"assets/SettingsPage-BSwN45zt.js",revision:"6026f9cbfdcd373e5e8cfd94f09b2418"},{url:"assets/SearchPage-CJrtIenZ.js",revision:"721fbd66fbae2e17cedefb8309456b86"},{url:"assets/SearchPage-BGc1oQSM.css",revision:"d988bd3c7ed5458189b7225097e4cdeb"},{url:"assets/SchedulePanel-BDhIt9pX.js",revision:"32ec677318535a8c6a3cab2ba2207180"},{url:"assets/SchedulePanel-AugvL_tp.css",revision:"cfd82a05588bdf00917646754909fe75"},{url:"assets/QTooltip-Dhn6VXWR.js",revision:"61e705626deca90ac56d2d0bca3e6e38"},{url:"assets/QSpinnerDots-xdWyaE1i.js",revision:"55b8a4269a2b5e98cf5814142583ffca"},{url:"assets/QSelect-BjZk4-r8.js",revision:"5338cfc807b2df033ef42e41b01315ac"},{url:"assets/QScrollArea-BE_fAg20.js",revision:"6925805c8aa7607bccd5f1debf097bee"},{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-B5vbHxJ2.js",revision:"a89ef2e97d167034657951188044ba04"},{url:"assets/QChip-Be16M4Ig.js",revision:"d217d603e5c6e691c02a888ffc1d213b"},{url:"assets/QBtnToggle-DccOOtbh.js",revision:"8c64e4c2fd1a993cb56403d1e62e6c09"},{url:"assets/QBtnGroup-CnM4vSJA.js",revision:"ddfd643b34c3c3ae7d3aa4a27bea664f"},{url:"assets/QBtnDropdown-XkBxmJO9.js",revision:"22d6f2dd388a575c5852eb336aa66728"},{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-D_KDS3uX.js",revision:"9c421d74934c76bf52cde490188bf499"},{url:"assets/MemoryPanel-DS2F3x-S.js",revision:"3b0a08b36901251ef92fb959354fc49e"},{url:"assets/MemoryPanel-Ch3qeyQw.css",revision:"a080bd22ae7a7eb244df25c0a42d0f7c"},{url:"assets/MainLayout-DoAEgANU.css",revision:"2e7b4665a554e739954e8539183b1b22"},{url:"assets/MainLayout-DYumlWcP.js",revision:"2539ab3531ddd2d6d83808de6b80a8eb"},{url:"assets/HealthPage-Lv_IdF1l.js",revision:"6e83a5d90c9041d8d79137b4a7b0ba0a"},{url:"assets/HealthPage-Cnlhrn--.css",revision:"937880bb96f3708c02608a026c875bbb"},{url:"assets/GitPanel-CNFtj6k0.css",revision:"f6efc5e9ebcba7653d66444f4cdef69f"},{url:"assets/GitPanel-BHJ3lpJZ.js",revision:"deefa6a79f4d6e5a6833742d5f7ca178"},{url:"assets/DrawerToggleButton-Dtd6fhYu.js",revision:"4efb5717f6351707e8e5fe8f16234e49"},{url:"assets/DocumentsPanel-BjZGNI-p.js",revision:"3236d9b99cb1badde419ea04de400365"},{url:"assets/DocumentsPanel-B8QY7FTj.css",revision:"676a3a838b07224f48fdd99e0cb6bbc8"},{url:"assets/DiffViewer-DEPOa3D7.css",revision:"7a2be47c13fe02cd2158e94eb0d320c5"},{url:"assets/DiffViewer-CPobwSwm.js",revision:"7d2e77aee24e0d7b06df637d29c8ff91"},{url:"assets/DashboardPage-CtaHaVdf.css",revision:"729d05fd05c14a73cbbfd35f6d3be6fd"},{url:"assets/DashboardPage-C-PyArla.js",revision:"d74a7b118b0d5bfc4adbf779159e831a"},{url:"assets/CreatePage-YQ_jGilf.js",revision:"60295f2483cd6695dc587f40fb22b8c2"},{url:"assets/CreatePage-DxOes_cF.css",revision:"343616e2ae2ef668bcfc74313d88d69f"},{url:"assets/ComparisonPanel-ytDu1L7a.js",revision:"cd98ba5facbaf6e3cd51fecee3f5a426"},{url:"assets/ComparisonPanel-ByVbqYCs.css",revision:"40f8723a54937dbdb64e5de3d8bda349"},{url:"assets/ClosePopup-CRV2hxHS.js",revision:"408af589ed45c4f8e5f53522bc47c5f2"},{url:"assets/ChangelogPage-DVyx9ZjV.css",revision:"fd9c6a99457c6fb03e97d8137880243c"},{url:"assets/ChangelogPage-D9ke0TYz.js",revision:"560dce799d0281d2178daf47c3494e87"},{url:"assets/AutoLoopFinalReviewSettings-Q-OlSQ1c.css",revision:"a2e7b8d9f10da2fb2302213449f9428e"},{url:"assets/AutoLoopFinalReviewSettings-CwnNUWCh.js",revision:"fa24d3b0bfdac1c3627a4f81c80336bd"},{url:"assets/ActivityFeed-DdJvMzRI.css",revision:"0ba8a4ec4311b7276146ba90134bbe29"},{url:"assets/ActivityFeed-2wu6qXx1.js",revision:"f656f60fe2861ba6c8477193e1dfa701"}],{}),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,c)=>{const i=s||("document"in self?document.currentScript.src:"")||location.href;if(e[i])return;let d={};const f=s=>a(s,i),b={module:{uri:i},exports:d,require:f};e[i]=Promise.all(r.map(s=>b[s]||f(s))).then(s=>(c(...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:"4593cda76f13edf9c2449ff8351f7d0c"},{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-Dwuw8FcP.js",revision:"d41f368dde12b06dcb6f6b003d610142"},{url:"assets/xml-DJtVmsJT.js",revision:"a59eca25ad1d8616e97f0c23cfc5bc1b"},{url:"assets/workspace-templates-DXJG6flv.js",revision:"b2707be1af7da0cfddbfc41714c5b36d"},{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-zIOYNIcb.js",revision:"b4b881194fee07cf01d80ddbebcd2654"},{url:"assets/use-worktree-restore-B-9jHocY.css",revision:"54449cd3d2d5c88b0bd7d88f53f581c3"},{url:"assets/use-tours-DOUjqO2f.js",revision:"ffa985b17cd6e489bcc887f030ef8f74"},{url:"assets/use-tours-CTZuBZOi.css",revision:"2f6d79046e1409f0472f65179eaa76f3"},{url:"assets/use-slide-transition-B_Nu6u-t.js",revision:"00b155c171e638ef6fb5919cd6ebaf99"},{url:"assets/use-search-index-status-CExdHIar.js",revision:"40e51be13800f4e91aaa1b867e9548ad"},{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-BnnkT9oE.js",revision:"36b140d179a73cab52c41afb1d4d7b35"},{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-CC3uqdaH.js",revision:"3b2b98032fb02a629dc75632e01d8beb"},{url:"assets/r-BwWrilGY.js",revision:"f18d3e790ef07bc993539322d29548e4"},{url:"assets/qsharp-DkqhCAOL.js",revision:"c53fe08a83f8fcbcd81723105136a691"},{url:"assets/python-DJIlKr-Y.js",revision:"c94ed7e6396c36a3e55abce3e7b9d327"},{url:"assets/pug-Z5eAx3Zn.js",revision:"6e3de6d5214d2cf61b90949e1d383b49"},{url:"assets/protobuf-C531GsRP.js",revision:"04e688a7fef2bde8cef525653497371f"},{url:"assets/project-color-BlV5PUUW.js",revision:"0fb051aecd9db9eb47a26c0694884ffe"},{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-DrQB-mrb.js",revision:"db24c806a7e62e2ad40f1d2b6c870644"},{url:"assets/network-auth-BDUlgV-U.js",revision:"6db0d11f3b25dd8ce16b430b17bec56e"},{url:"assets/mysql-SOo6toE5.js",revision:"677c089d979324385539e96bd2eb11e4"},{url:"assets/msdax-DauUninz.js",revision:"a63bfea2dd041755a34fe3e307159413"},{url:"assets/monaco.contribution-C58k7TPw.js",revision:"8c1ba58ee2ae7b966200ed721cab079c"},{url:"assets/monaco-contributions-DvnCTJI2.css",revision:"964f32a36c06b4d5a66ac1b01556eb2b"},{url:"assets/monaco-contributions-DAme5TZS.js",revision:"e086ff61c2783d6e625cf0a1b8974fbe"},{url:"assets/mips-CIPQ_RoX.js",revision:"b22614ddc8855670a3f76290908877f5"},{url:"assets/mdx-9L1kysEY.js",revision:"9b1a0ea0b036aed2609235b17489a9d6"},{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-DYT4a7D7.js",revision:"461eca5d533353077a97792111c0351c"},{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-DBjx8Bg2.js",revision:"041abffae063df1296b68c20b7f09aff"},{url:"assets/java-BEtHBSE6.js",revision:"987edcd2170749acca47ea184dd9ab25"},{url:"assets/it-DtFWyLHb.js",revision:"f248b7d06bb5dbeb8a44d5ccbf912b00"},{url:"assets/ini-sBoK_t0W.js",revision:"35f8ec10844ea4f62c2712d3f5c1e129"},{url:"assets/index-C8zAZ-k-.css",revision:"1488166e385bd7f03f15dbf2e6f4fc60"},{url:"assets/index-BZwhT2-I.js",revision:"465e1efcea3662855ce773c01f9b2441"},{url:"assets/i18n-CEzCwMir.js",revision:"f42c952f1df995de3fd91a3aefd0268c"},{url:"assets/html-D5VKPBbB.js",revision:"145759ee90e4d4239665ade6d564f683"},{url:"assets/hcl-CpzslTdj.js",revision:"f9ef1004e908957ec1c3bbea2049a0e9"},{url:"assets/handlebars-Kt5RbWuO.js",revision:"805f3058da50add1f81372fce98525dc"},{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-W-OLsqOk.js",revision:"0f25504ca4683a0fd066fc6e1e9e6dbd"},{url:"assets/fr-3uNi02Jz.js",revision:"a4251062d15c256e175321dceefea472"},{url:"assets/formatters-Cog2icjt.js",revision:"0d5c924dfd03c3a14ebd7ae2c722e242"},{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-C5D_p5eV.js",revision:"6046861d1ed734cacf10094993d918d8"},{url:"assets/es-B4lACW6k.js",revision:"d49556527abf9476e4025bcecc4bc40d"},{url:"assets/elixir-6RTg0lbw.js",revision:"fb736f7429d9c6a596ed7905653dbf14"},{url:"assets/efforts-DJaFsLgd.js",revision:"6f643fd310437a4968e84e1cfdf35cee"},{url:"assets/editor.worker-BLJF_oQx.js",revision:"73d3d20cadfc19535b465c224d29ba1b"},{url:"assets/editor.api-pSvhgban.js",revision:"b9bb7621ca91276583b288d909c4020d"},{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-B3H0T-ft.js",revision:"262a72b2ccae4cddafad32db0ef6b53f"},{url:"assets/dart-onAF5SnQ.js",revision:"4fc14a4d2b7e030db6af8025d8fe831b"},{url:"assets/cypher-CVaqCwHa.js",revision:"75a568a8c6b29818b6a6c8675841ebf7"},{url:"assets/custom-sounds-CquHn2gw.js",revision:"009fa781492950edf5ea81fe8168312b"},{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-ZThcsIN5.js",revision:"2ed343b2394e81886fe7a5759af0c5c8"},{url:"assets/browser-DUTZhU-w.js",revision:"dce1d68e086b92133bcfd046b606f78a"},{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-tWGXnmrz.js",revision:"b8f3b9295912e49959c61b80433aa516"},{url:"assets/WorkspacePage-B-82Rw9T.css",revision:"0b9bca229ca951828e20df629c691dca"},{url:"assets/WorkspaceAttentionLabels-B9LE8HtU.css",revision:"8670216f1246dc6e0f51ef50b62f0243"},{url:"assets/WorkspaceAttentionLabels-B0H9omcK.js",revision:"f75dc59c9f013aaf34b836280b1d8cf9"},{url:"assets/TourReplayButton-BNdlAZUR.js",revision:"26859731c7cddc469267f4d4c67deae8"},{url:"assets/TouchPan-DybGzRRK.js",revision:"e63991dd103cebb48a08cd0928128190"},{url:"assets/ToolCallItem-m-YnWEbv.css",revision:"ff71b53979cd34e71a0d7ac68ba39695"},{url:"assets/ToolCallItem-DEKhFJEv.js",revision:"1cf082a18dcfc4f353f8976f4c283c6e"},{url:"assets/TerminalPanel-Dz9EE-Ph.css",revision:"9fd7805b12e550833d2ac46b5c24dc7a"},{url:"assets/TerminalPanel-Cw8R7lAw.js",revision:"844562f3905c998bc5eb866fed58dca4"},{url:"assets/SplitWorkspacePage-tfZ1kAdZ.js",revision:"15b26e5bdc69cd375ce68349e1e38e89"},{url:"assets/SplitWorkspacePage-lWQO8xro.css",revision:"cabea8d2cabbc3e1012ffa88225e04d3"},{url:"assets/SettingsPage-SHpE2q9Z.js",revision:"30fda2500b4947c20bbd2795998976e3"},{url:"assets/SettingsPage-Dcq1Jeoo.css",revision:"a823535042077d3c24eaf895ef5ba449"},{url:"assets/SearchPage-BXJ6iVt1.js",revision:"b5e043e0bf882971af46e4fb25660b0a"},{url:"assets/SearchPage-BGc1oQSM.css",revision:"d988bd3c7ed5458189b7225097e4cdeb"},{url:"assets/SchedulePanel-nDw2eZ9K.js",revision:"088eeaf32774544c0e5f44668d92c595"},{url:"assets/SchedulePanel-AugvL_tp.css",revision:"cfd82a05588bdf00917646754909fe75"},{url:"assets/QTooltip-CNMsXTmD.js",revision:"55ad56c763a167e6f6f0c694c37c7370"},{url:"assets/QSpinnerDots-xdWyaE1i.js",revision:"55b8a4269a2b5e98cf5814142583ffca"},{url:"assets/QSelect-Dr7rAt6u.js",revision:"7174845d8cbc41a5da2318b222622a31"},{url:"assets/QScrollArea-hrsAyyJf.js",revision:"cf0837b49409956205fc0ad3211c32a1"},{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-CaKEBcyx.js",revision:"83b96fb87a0c0c2e1a696f28c2ad4cc4"},{url:"assets/QChip-Be16M4Ig.js",revision:"d217d603e5c6e691c02a888ffc1d213b"},{url:"assets/QBtnToggle-DccOOtbh.js",revision:"8c64e4c2fd1a993cb56403d1e62e6c09"},{url:"assets/QBtnGroup-CnM4vSJA.js",revision:"ddfd643b34c3c3ae7d3aa4a27bea664f"},{url:"assets/QBtnDropdown-Rzurb7nO.js",revision:"ce63a4525b2d177d84c6bef1ca8de825"},{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-BtVjVPp7.js",revision:"376ac4e3317f30871bc41c6108dc41bd"},{url:"assets/MemoryPanel-Ch3qeyQw.css",revision:"a080bd22ae7a7eb244df25c0a42d0f7c"},{url:"assets/MemoryPanel-BarliK2r.js",revision:"30fbea93f244cf5d75fd28d3ac93ca9b"},{url:"assets/MainLayout-DoAEgANU.css",revision:"2e7b4665a554e739954e8539183b1b22"},{url:"assets/MainLayout-1PaKfzdy.js",revision:"e85ceb7d6190b173f23495c29fb878aa"},{url:"assets/HealthPage-DnPp8GSx.js",revision:"0935efc5ecc6f4b8879432fb0b24c57d"},{url:"assets/HealthPage-Cnlhrn--.css",revision:"937880bb96f3708c02608a026c875bbb"},{url:"assets/GitPanel-DjKL30gM.js",revision:"efefebee02e1190685d5fb1891ebf6fb"},{url:"assets/GitPanel-CNFtj6k0.css",revision:"f6efc5e9ebcba7653d66444f4cdef69f"},{url:"assets/DrawerToggleButton-CZVpU8HH.js",revision:"ba0ab5ede2f1d559b299df012966cfcc"},{url:"assets/DocumentsPanel-CH0KzdJV.js",revision:"bd2b132b4d16fd78c7c08002ada97b26"},{url:"assets/DocumentsPanel-B8QY7FTj.css",revision:"676a3a838b07224f48fdd99e0cb6bbc8"},{url:"assets/DiffViewer-DFlDwkmd.js",revision:"533ce049fd19c8651a6efcd92571d268"},{url:"assets/DiffViewer-DEPOa3D7.css",revision:"7a2be47c13fe02cd2158e94eb0d320c5"},{url:"assets/DashboardPage-Dw8nfkYR.js",revision:"83a454f77d6822894684de7c493d661a"},{url:"assets/DashboardPage-CtaHaVdf.css",revision:"729d05fd05c14a73cbbfd35f6d3be6fd"},{url:"assets/CreatePage-DxOes_cF.css",revision:"343616e2ae2ef668bcfc74313d88d69f"},{url:"assets/CreatePage-B7PLFOH6.js",revision:"99171795b004cddacac516c5335fc134"},{url:"assets/ComparisonPanel-Cw5Dkan0.js",revision:"54558362fbfe3d764ededd9af741941d"},{url:"assets/ComparisonPanel-ByVbqYCs.css",revision:"40f8723a54937dbdb64e5de3d8bda349"},{url:"assets/ClosePopup-CRV2hxHS.js",revision:"408af589ed45c4f8e5f53522bc47c5f2"},{url:"assets/ChangelogPage-DVyx9ZjV.css",revision:"fd9c6a99457c6fb03e97d8137880243c"},{url:"assets/ChangelogPage-DKkI5IU-.js",revision:"3539765a0a4398f854aeec9ea669853f"},{url:"assets/AutoLoopFinalReviewSettings-Q-OlSQ1c.css",revision:"a2e7b8d9f10da2fb2302213449f9428e"},{url:"assets/AutoLoopFinalReviewSettings-DXX3CqrY.js",revision:"f03eca1f93e213f13af85e4b5e9a2ac5"},{url:"assets/ActivityFeed-CmAFv-2c.css",revision:"c38db0a8b8c5935086648fa3a8dc5fa6"},{url:"assets/ActivityFeed-BYspOKKg.js",revision:"782d2d92c7dbab788dd11580ccd16b97"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html"),{denylist:[/sw\.js$/,/workbox-(.)*\.js$/]}))});
|
package/src/mcp-server/README.md
CHANGED
|
@@ -60,7 +60,7 @@ Leave `KOBO_WORKSPACE_ID` unset or empty for an external client. Use the same da
|
|
|
60
60
|
| `get_workspace` | `workspace_id` | Workspace metadata, tasks and active/latest session. |
|
|
61
61
|
| `list_workspace_sessions` | `workspace_id` | Workspace sessions with their IDs and status. |
|
|
62
62
|
| `read_workspace_messages` | `workspace_id`, optional `session_id`, `after_cursor`, `limit` | Chronological conversation fragments, `nextCursor`, `hasMore`, `workspaceStatus`, `activeSessionId`. |
|
|
63
|
-
| `send_workspace_message` | `workspace_id`, `content`, optional `session_id`, `idempotency_key` | `{ accepted: true, sessionId }`; keyed sends also return `requestId`, `eventId`, and `replayed` on a successful retry. |
|
|
63
|
+
| `send_workspace_message` | `workspace_id`, `content` and/or `attachments`, optional `session_id`, `idempotency_key` | `{ accepted: true, sessionId }`; keyed sends also return `requestId`, `eventId`, and `replayed` on a successful retry. |
|
|
64
64
|
| `get_workspace_questions` | `workspace_id` | Pending `questions` and `requiresHumanApproval` for a permission request at the head of the queue. |
|
|
65
65
|
| `answer_workspace_question` | `workspace_id`, `tool_call_id`, `answers` | `{ accepted: true }` after answering the current question. |
|
|
66
66
|
|
|
@@ -68,13 +68,44 @@ Typical dialogue:
|
|
|
68
68
|
|
|
69
69
|
1. Call `list_workspaces`, then `get_workspace` and optionally `list_workspace_sessions` to select the conversation.
|
|
70
70
|
2. Read existing messages, following `nextCursor` while `hasMore` is true. Keep the final cursor.
|
|
71
|
-
3. Call `send_workspace_message` with the workspace ID and your text. An inactive agent is resumed; a selected session must belong to this workspace and must be the running session if one is already running.
|
|
71
|
+
3. Call `send_workspace_message` with the workspace ID and your text and/or inline attachments. An inactive agent is resumed; a selected session must belong to this workspace and must be the running session if one is already running.
|
|
72
72
|
4. Poll `read_workspace_messages` with the saved cursor for the reply. Acceptance means the message was delivered, not that the agent finished its work. `workspaceStatus` and `get_workspace_questions` expose progress and blockers.
|
|
73
73
|
5. To answer a question, pass the current `toolCallId` as `tool_call_id`, and map its question identifiers to string answers in `answers` (Codex uses question IDs; Claude questions use their question text). Tool permission requests must be approved by the human in Kōbō.
|
|
74
74
|
|
|
75
75
|
Each message fragment has `{ id, sessionId, role, text, messageId, createdAt }`, optionally `source` and `clientMessageId`. Concatenate assistant fragments sharing a `messageId` and `sessionId` in returned order. `limit` bounds **source events scanned**, from 1 to 200 (default 100): a page can contain no text while still advancing its cursor. Session filtering also includes older untagged events (`sessionId: null`). Keep the same session filter when continuing a cursor. Cursors are workspace-specific; if retention removes a cursor, the tool returns an explicit error and reading must restart without it.
|
|
76
76
|
|
|
77
|
-
Messages use the workspace's configured engine and permission mode, and pause an active auto-loop just like chat input. Archived or purged workspaces must be restored first; messages are refused during compaction or while a question/permission is pending. A workspace-bound stdio agent cannot send to itself. Message content is limited to 100,000 characters
|
|
77
|
+
Messages use the workspace's configured engine and permission mode, and pause an active auto-loop just like chat input. Archived or purged workspaces must be restored first; messages are refused during compaction or while a question/permission is pending. A workspace-bound stdio agent cannot send to itself. Message content is limited to 100,000 characters. Text-only HTTP request bodies remain limited to 1 MiB. Creation and message tools with attachments allow base64 expansion of the 50 MiB decoded file limit plus 1 MiB of envelope metadata, through both SDK HTTP and stdio transports.
|
|
78
|
+
|
|
79
|
+
### Sending files and images
|
|
80
|
+
|
|
81
|
+
`create_workspace` and `send_workspace_message` accept the same `attachments`
|
|
82
|
+
array: up to **10 files, 50 MiB decoded total**, using the same image/document
|
|
83
|
+
formats as the interface (PNG, JPEG, GIF, WebP, PDF, Markdown, text, CSV, JSON,
|
|
84
|
+
YAML, XML, logs and TOML). Provide canonical base64 bytes, a filename (no path),
|
|
85
|
+
and a MIME type. A path on the client's PC is not a path on a remote Kōbō server.
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"workspace_id": "<workspace ID>",
|
|
90
|
+
"content": "Read this note",
|
|
91
|
+
"attachments": [
|
|
92
|
+
{ "name": "note.md", "mime_type": "text/markdown", "data_base64": "IyBOb3RlCg==" }
|
|
93
|
+
],
|
|
94
|
+
"idempotency_key": "<one UUID for this message and these files>"
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Omit `content` for an attachment-only message. Images are stored in `.ai/images/`
|
|
99
|
+
and documents in `.ai/attachments/` in the destination worktree. The agent and
|
|
100
|
+
chat receive file references, never the base64 payload. Validation happens before
|
|
101
|
+
writes; rejected deliveries before engine dispatch remove their uploaded files.
|
|
102
|
+
Ambiguous deliveries retain the files because the agent may already use them.
|
|
103
|
+
Retries with the same key reuse the receipt without another upload; changing
|
|
104
|
+
file names, MIME types, bytes or order produces an idempotency conflict.
|
|
105
|
+
|
|
106
|
+
This works through workspace-bound stdio, external global stdio and HTTP. The
|
|
107
|
+
existing prohibition on sending to one's own workspace and restricted-launch
|
|
108
|
+
permissions still apply. Group-message tools remain text-only.
|
|
78
109
|
|
|
79
110
|
### Retrying messages safely
|
|
80
111
|
|
|
@@ -310,11 +341,21 @@ request fails, fall back to the saved database status.
|
|
|
310
341
|
**Output:** `DevServerStatus` — status, instance/project names, HTTP port, URL, and matched containers. See the [Docker status contract](../../CONFIGURATION.md#dev-server).
|
|
311
342
|
Without a configured start command, the backend returns `not_configured` with
|
|
312
343
|
`configured: false`. The database fallback returns `{ workspaceId, status }`.
|
|
344
|
+
`running` describes lifecycle state, not application readiness. Before dependent
|
|
345
|
+
tests, check the project's documented health endpoint or another non-mutating
|
|
346
|
+
service probe with a timeout and bounded retries; inspect logs on failure.
|
|
313
347
|
|
|
314
348
|
---
|
|
315
349
|
|
|
316
350
|
#### `start_dev_server`
|
|
317
351
|
Start the dev server configured for the current workspace (via backend).
|
|
352
|
+
Use it when an authorized task needs workspace services for backend, frontend,
|
|
353
|
+
integration or E2E tests and `get_dev_server_status` reports `stopped`. Reuse an
|
|
354
|
+
existing instance. Do not invoke the configured startup script or Docker Compose
|
|
355
|
+
directly: the backend owns lifecycle tracking. Read-only launches cannot start
|
|
356
|
+
services. Missing configuration or startup failure is a blocker to diagnose with
|
|
357
|
+
status/log tools, not permission to launch a separate stack. Delegates follow the
|
|
358
|
+
same rule and ask their parent to coordinate if they lack these MCP tools.
|
|
318
359
|
|
|
319
360
|
**Input:** none
|
|
320
361
|
**Output:** `DevServerStatus`
|
|
@@ -323,6 +364,9 @@ Start the dev server configured for the current workspace (via backend).
|
|
|
323
364
|
|
|
324
365
|
#### `stop_dev_server`
|
|
325
366
|
Stop the dev server of the current workspace (via backend).
|
|
367
|
+
Use this tool for an explicitly requested stop or a necessary authorized restart,
|
|
368
|
+
instead of direct shell shutdown commands. Finishing tests alone is not a reason
|
|
369
|
+
to stop the workspace instance. Read-only launches cannot stop services.
|
|
326
370
|
|
|
327
371
|
**Input:** none
|
|
328
372
|
**Output:** `DevServerStatus`
|
|
@@ -422,7 +466,7 @@ Example with final review:
|
|
|
422
466
|
|
|
423
467
|
If creation fails after PR checkout, Kōbō removes only the checkout created by that request when its directory, branch and HEAD are unchanged, it has no local or ignored files, and no workspace adopted it. The PR branch and earlier checkout decisions remain intact. Existing, modified or adopted checkouts are preserved. Errors include `details.checkoutRecovery` with the path, `removed` outcome and a reason when retained. An uncertain creation outcome preserves the checkout for inspection; do not retry automatically.
|
|
424
468
|
|
|
425
|
-
Creation requests have no automatic retry or exactly-once guarantee. After a disconnect/timeout, inspect `list_workspaces` before trying again: checkout or creation may have completed. The stdio bridge allows up to 15 minutes for creation; external clients should configure their own request timeout for slow setup scripts. Ordinary MCP requests retain the 1 MiB envelope limit; creation
|
|
469
|
+
Creation requests have no automatic retry or exactly-once guarantee. After a disconnect/timeout, inspect `list_workspaces` before trying again: checkout or creation may have completed. The stdio bridge allows up to 15 minutes for creation; external clients should configure their own request timeout for slow setup scripts. Ordinary MCP requests retain the 1 MiB envelope limit; creation and messages with attachments allow base64 expansion of the 50 MiB upload limit plus 1 MiB metadata, including at the SDK HTTP and stdio transport boundaries.
|
|
426
470
|
|
|
427
471
|
#### `diagnose_workspace_pr`
|
|
428
472
|
|
|
@@ -4,13 +4,10 @@ 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 { MAX_MCP_ATTACHMENT_REQUEST_BYTES } from '../shared/mcp-attachments.js'
|
|
7
8
|
import { EXTERNAL_MEMORY_TOOL_DEFINITIONS, isMemoryToolName, MEMORY_TOOL_DEFINITIONS } from '../shared/memory-tools.js'
|
|
8
9
|
import { INTERNAL_PROGRESS_BAR_TOOLS, isProgressBarTool, PROGRESS_BAR_TOOLS } from '../shared/progress-bar-tools.js'
|
|
9
|
-
import {
|
|
10
|
-
isWorkspaceCreationTool,
|
|
11
|
-
MAX_MCP_CREATION_REQUEST_BYTES,
|
|
12
|
-
WORKSPACE_CREATION_TOOLS,
|
|
13
|
-
} from '../shared/workspace-creation-tools.js'
|
|
10
|
+
import { isWorkspaceCreationTool, WORKSPACE_CREATION_TOOLS } from '../shared/workspace-creation-tools.js'
|
|
14
11
|
import { WORKSPACE_DIALOGUE_TOOLS } from '../shared/workspace-dialogue-tools.js'
|
|
15
12
|
import { isWorkspaceGroupMessageTool, WORKSPACE_GROUP_MESSAGE_TOOLS } from '../shared/workspace-group-message-tools.js'
|
|
16
13
|
import { isWorkspaceLifecycleTool, WORKSPACE_LIFECYCLE_TOOLS } from '../shared/workspace-lifecycle-tools.js'
|
|
@@ -468,27 +465,28 @@ const WORKSPACE_SCOPED_TOOLS: Tool[] = [
|
|
|
468
465
|
{
|
|
469
466
|
name: 'get_dev_server_status',
|
|
470
467
|
description:
|
|
471
|
-
'CALL BEFORE asking the user whether the app is running
|
|
468
|
+
'CALL BEFORE backend, frontend, integration or E2E tests that need workspace services, or before asking the user whether the app is running. Reuse the existing instance and its returned URL/container names. Returns `not_configured` when this project has no dev server: report the blocker, do not launch one manually. Otherwise returns running/stopped/starting/error + URL, port, container names. Running is lifecycle status, not application readiness: use the documented health check with bounded retries before dependent tests.',
|
|
472
469
|
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
473
470
|
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
474
471
|
},
|
|
475
472
|
{
|
|
476
473
|
name: 'start_dev_server',
|
|
477
|
-
description:
|
|
474
|
+
description:
|
|
475
|
+
'CALL WHEN an authorized task needs workspace services for app checks or backend/frontend/integration/E2E tests and get_dev_server_status reports stopped. Kōbō runs the configured startup command and tracks the instance. Use this tool instead of shell lifecycle commands such as make dev-docker, sh/dev-docker.sh, docker compose up or npm run dev. Respect launch permissions; read-only sessions cannot start services. On failure, inspect get_dev_server_logs and report the blocker, without a manual shell fallback.',
|
|
478
476
|
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
479
477
|
annotations: { destructiveHint: false, openWorldHint: false },
|
|
480
478
|
},
|
|
481
479
|
{
|
|
482
480
|
name: 'stop_dev_server',
|
|
483
481
|
description:
|
|
484
|
-
'CALL WHEN the user explicitly asks to stop the dev server, or
|
|
482
|
+
'CALL WHEN the user explicitly asks to stop the dev server, or when an authorized operation requires a restart. Use this tool instead of shell shutdown commands such as docker compose down or killing the server process directly. Respect launch permissions; read-only sessions cannot stop services. Do not stop a shared workspace instance merely because your tests finished.',
|
|
485
483
|
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
486
484
|
annotations: { destructiveHint: false, openWorldHint: false },
|
|
487
485
|
},
|
|
488
486
|
{
|
|
489
487
|
name: 'get_dev_server_logs',
|
|
490
488
|
description:
|
|
491
|
-
'CALL WHEN
|
|
489
|
+
'CALL WHEN diagnosing a dev-server startup failure or a runtime issue during app checks or tests. Returns the last N lines of logs (default 200). Use these logs with get_dev_server_status before reporting a blocker; do not bypass a failed managed startup with a shell launch.',
|
|
492
490
|
inputSchema: {
|
|
493
491
|
type: 'object',
|
|
494
492
|
properties: {
|
|
@@ -1152,7 +1150,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1152
1150
|
|
|
1153
1151
|
const transport = new StdioServerTransport(process.stdin, process.stdout, {
|
|
1154
1152
|
// Include the JSON-lines delimiter in addition to the HTTP envelope budget.
|
|
1155
|
-
maxBufferSize:
|
|
1153
|
+
maxBufferSize: MAX_MCP_ATTACHMENT_REQUEST_BYTES + 1,
|
|
1156
1154
|
})
|
|
1157
1155
|
server.connect(transport).catch((err) => {
|
|
1158
1156
|
console.error('[kobo-tasks-server] Fatal:', err)
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{M as e,S as t,dt as n,lt as r,p as i,pt as a,v as o}from"./reactivity.esm-bundler-DY1JkAEA.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-Bqg71Vll.js";import{$ as ne,K as re,M as E,f as ie,z as ae}from"./dom-BtYTvLeN.js";import{l as oe,t as D,u as se}from"./QBtn-BUSdPaf4.js";import{Kt as ce,O as le,Qt as ue,Ut as O,_t as de,at as fe,cn as pe,dn as k,j as me,m as he,mt as ge,pt as _e,st as ve,tn as A,v as ye}from"./index-BZKHE14f.js";import{t as be}from"./QSpinnerDots-xdWyaE1i.js";import{t as xe}from"./QList-Cx1UfaUm.js";import{t as Se}from"./QMarkupTable-UhP7fVUp.js";import{c as j,l as M,s as N}from"./QSelect-BjZk4-r8.js";import{t as P}from"./QItemSection-MdJ1_ZK7.js";import{t as Ce}from"./QExpansionItem-B5vbHxJ2.js";import{a as F,c as we,r as I,t as L}from"./ToolCallItem-DxdYefuz.js";import{t as Te}from"./QScrollArea-BE_fAg20.js";import{a as R}from"./use-tours-CsPhvrxf.js";import{f as Ee,g as z,m as De,p as Oe,u as ke}from"./use-worktree-restore-B5s0BuHk.js";import{t as B}from"./QTooltip-Dhn6VXWR.js";import{n as V}from"./render-chat-markdown-CafzCcmu.js";import{n as H}from"./WorkspacePage-CQz6QL5L.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=ae({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,E.passive))}function C(){i!==void 0&&(i.removeEventListener(`scroll`,m,E.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)),ie(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)||le(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:n}=ue(),r=x(()=>{let e=`agent.error.${t.item.category}`;return n(e)?e:`agent.error.other`});return(t,n)=>(u(),S(`div`,ze,[g(oe,{name:`error_outline`,size:`16px`,class:`agent-error-item__icon`}),w(`div`,Be,[w(`div`,Ve,a(t.$t(r.value)),1),w(`div`,G,a(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,n=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,a(e.$t(n.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=O(e,{signal:n.signal}).then(async e=>{if(!e.ok)throw await ce(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}=ue(),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}=ue(),d=fe(),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:le(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 re=x(()=>T(s.turn.ts)),E=x(()=>s.turn.items.flatMap(e=>e.eventIds??[]).join(` `)),ie=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}),ae=x(()=>{let e=s.turn.ts,t=ie.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)}),se=x(()=>ae.value!==``);function ce(e){return we(e.origin,Object.values(d.subagents[s.workspaceId]??{}),e.type===`tool`?e.toolCallId:void 0)}function O(e){return e||l(`chat.subagentActivity`)}function de(e){return(e.type===`text`||e.type===`thinking`||e.type===`tool`)&&e.origin?.kind===`subagent`}let pe=x(()=>{let e=[],t=new Map;for(let n of s.turn.items){if(!de(n)){e.push({type:`item`,key:W(n),item:n});continue}let r=ce(n),i=r?.toolUseId??n.origin?.toolCallId??n.origin?.threadId??W(n),a=t.get(i);if(a){a.items.push(n);continue}let o={type:`subagent`,key:`subagent:${W(n)}`,items:[n],subagentKey:i,subagentName:r?.description||null};t.set(i,o),e.push(o)}return e});function k(e){e.origin&&f?.({origin:e.origin})}let me=x(()=>s.turn.items.filter(e=>e.type===`tool`).length);return(i,o)=>(u(),S(`div`,{ref_key:`cardEl`,ref:p,class:r([`turn-card`,{"turn-card--user":t.turn.speaker===`user`,"turn-card--highlighted":t.highlighted}]),"data-event-ids":E.value,style:n({"--turn-accent":b.value.accent})},[w(`div`,X,[w(`span`,{class:r([`turn-badge`,b.value.badgeClass])},a(b.value.label),3),re.value?(u(),S(`span`,Ze,a(re.value),1)):v(``,!0),se.value?(u(),S(C,{key:1},[g(oe,{name:`arrow_forward`,size:`10px`,color:`kobo-3`,class:`turn-time-arrow`}),w(`span`,Qe,[y(a(ae.value)+` `,1),g(B,null,{default:h(()=>[y(a(e(l)(`chat.lastUpdatedAt`,{time:ae.value})),1)]),_:1})])],64)):v(``,!0),me.value>0?(u(),S(`span`,$e,` · `+a(e(l)(`chat.nActions`,{n:me.value})),1)):v(``,!0)]),w(`div`,et,[(u(!0),S(C,null,te(pe.value,n=>(u(),S(C,{key:n.key},[n.type===`subagent`?(u(),_(Ce,{key:0,class:`turn-subagent-activity`,dense:``,label:O(n.subagentName),caption:e(l)(`chat.nActions`,{n:n.items.length}),"default-opened":t.highlighted&&n.items.some(e=>e.eventIds?.some(e=>E.value.includes(e)))},{header:h(()=>[g(P,null,{default:h(()=>[g(N,{class:`row items-center no-wrap`,title:n.subagentName??void 0},{default:h(()=>[g(oe,{name:`hub`,size:`16px`,class:`q-mr-xs`},{default:h(()=>[g(B,null,{default:h(()=>[y(a(e(l)(`chat.subagentActivity`)),1)]),_:1})]),_:1}),w(`span`,tt,a(O(n.subagentName)),1)]),_:2},1032,[`title`]),g(N,{caption:``},{default:h(()=>[y(a(e(l)(`chat.nActions`,{n:n.items.length})),1)]),_:2},1024)]),_:2},1024),g(P,{side:``},{default:h(()=>[g(D,{flat:``,round:``,dense:``,size:`sm`,icon:`open_in_new`,"aria-label":e(l)(`chat.openSubagentActivity`),onClick:ne(e=>k(n.items[0]),[`stop`])},{default:h(()=>[g(B,null,{default:h(()=>[y(a(e(l)(`chat.openSubagentActivity`)),1)]),_:1})]),_:1},8,[`aria-label`,`onClick`])]),_:2},1024)]),default:h(()=>[w(`div`,nt,[(u(!0),S(C,null,te(n.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},[n.item.type===`text`?(u(),_(I,{key:0,item:n.item},null,8,[`item`])):n.item.type===`thinking`?(u(),_(H,{key:1,item:n.item},null,8,[`item`])):n.item.type===`tool`?(u(),_(L,{key:2,item:n.item},null,8,[`item`])):n.item.type===`user`?(u(),_(Y,{key:3,item:n.item,"workspace-id":t.workspaceId},null,8,[`item`,`workspace-id`])):n.item.type===`session`?(u(),_(We,{key:4,item:n.item},null,8,[`item`])):n.item.type===`error`?(u(),_(He,{key:5,item:n.item},null,8,[`item`])):v(``,!0)],64))],64))),128))]),t.turn.items.length>4?(u(),S(`div`,rt,[g(D,{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(a(e(l)(`chat.scrollToTurnTop`)),1)]),_:1})]),_:1})])):v(``,!0)],14,Xe))}}),[[`__scopeId`,`data-v-13bebb3d`]]),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:n}=ue(),r=t,i=de(),s=me(),d=fe(),m=he(),ee=x(()=>m.isCompacting(r.workspaceId)),b=x(()=>d.selectedSessionId),T=x(()=>d.sessions.find(e=>e.id===b.value)?.engineSessionId??null),ne=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:ne.value:!0}let ie=x(()=>(d.activityFeeds[r.workspaceId]??[]).filter(e=>e.type===`text`&&typeof e.content==`string`&&E(e.sessionId)).map(e=>({content:e.content,sender:e.meta?.sender??`user`,source:ye(e.meta?.source),ts:e.timestamp,sessionId:e.sessionId,eventIds:[e.id]}))),ae=x(()=>{let e=d.workspaces.find(e=>e.id===r.workspaceId);return ve(e?.status)}),le=ke(),pe=``,k=x(()=>{let e=i.eventsFor(r.workspaceId),t=i.timestampsFor(r.workspaceId),n=i.sessionIdsFor(r.workspaceId),a=i.eventIdsFor(r.workspaceId),o=[],c=[],l=[];for(let r=0;r<e.length;r++)E(n[r])&&(o.push(e[r]),c.push(t[r]),l.push(a[r]??null));let u=`${r.workspaceId}::${b.value??`*`}`;u!==pe&&(le=ke(),pe=u);let d=Ee(le,o,c,ae.value,l);return Fe(De(d,ie.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?i.eventsFor(r.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 r=t[e];if(r){if(r.type===`text`&&!r.streaming)return{key:`text:${r.messageId}`,text:r.text};if(r.type===`tool`)return r.result?{key:`tool:${r.toolCallId}:end`,text:r.result.isError?n(`activity.a11y.toolFailed`,{name:r.name}):n(`activity.a11y.toolFinished`,{name:r.name})}:{key:`tool:${r.toolCallId}:start`,text:n(`activity.a11y.toolStarted`,{name:r.name})}}}}return null}),Se=o(``);l(xe,(e,t)=>{if(!e||e.key===t?.key)return;let r=e.key.startsWith(`text:`)?n(`activity.a11y.agentSaid`,{text:e.text.slice(0,bt)}):e.text;Se.value=r});let j=o(null),M=o(!0),N=o(!1),P=o(``),F=_e(),we=_e(),I=_e(),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=r.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[r.workspaceId]||m.isSyncPending(r.workspaceId)||b.value!==null&&V.value.has(W(r.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(r.workspaceId,e))??!0:i.hasMoreOlderFor(r.workspaceId)}function Be(e,t,n){je.value.set(W(e,t),n)}function Ve(e){if(!b.value)return i.oldestIdFor(e);let t=i.eventIdsFor(e),n=i.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(()=>[r.workspaceId,b.value],Ue,{flush:`sync`});async function K(){let e=r.workspaceId,t=b.value,n=Ve(e);if(!n)return;let a=F.begin();P.value=``,N.value=!0;try{let r=j.value;if(await f(),!F.isCurrent(a))return;let o=r?.getScroll().verticalSize??0,s=r?.getScroll().verticalPosition??0,c=new URLSearchParams({before:n,limit:`200`});t&&c.set(`session`,t);let l=await O(`/api/workspaces/${e}/events?${c.toString()}`,{signal:a});if(!l.ok)throw await ce(l);let u=await l.json();if(!F.isCurrent(a))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),i.prepend(e,g,_,{oldestId:ee,hasMoreOlder:t?i.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:ye(n.source)}})}if(await f(),r&&F.isCurrent(a)){let e=r.getScroll().verticalSize-o;if(e>0){let t=Math.max(s+e,250);r.setScrollPosition(`vertical`,t,0)}}}catch(e){if(ge(e)||!F.isCurrent(a))return;P.value=e instanceof Error?e.message:String(e),console.error(`[ActivityFeed] failed to load older events:`,e)}finally{F.isCurrent(a)&&(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!==r.workspaceId||!t.eventId)return;Q(),M.value=!1;let n=I.begin(),a=r.workspaceId;try{let e=new URLSearchParams({around:t.eventId,limit:`200`});t.sessionId&&e.set(`session`,t.sessionId);let o=await O(`/api/workspaces/${a}/events?${e}`,{signal:n});if(!o.ok)throw await ce(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===r.workspaceId),u=c.filter(e=>e.type===`user:message`&&e.workspaceId===r.workspaceId);i.reset(r.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(r.workspaceId,{id:e.id,type:`text`,content:t.content,timestamp:e.createdAt,sessionId:e.sessionId??void 0,meta:{sender:t.sender??`user`,source:ye(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(ge(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=r.workspaceId;try{let t=Le(k.value,X.value);if(t<0)for(let n=0;n<15;n++){if(e!==r.workspaceId)return;if(!ze())break;let n=k.value.length;if(await He(),await f(),e!==r.workspaceId)return;if(X.value+=k.value.length-n,t=Le(k.value,X.value),t>=0)break}t>=0&&e===r.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=i.sessionIdsFor(r.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:r.workspaceId,sessionId:b.value,eventId:e}})),Je())}),l([Nt,()=>ie.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(()=>i.liveAppendCountFor(r.workspaceId,E)),$=()=>`${r.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([()=>r.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=r.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 a=we.begin();H.set(n,a),P.value=``;try{let n=await O(`/api/workspaces/${e}/events?session=${encodeURIComponent(t)}&limit=500`,{signal:a});if(!n.ok)throw await ce(n);let r=await n.json();if(!we.isCurrent(a))return;let o=r.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,r.hasMore),l.length>0&&i.prepend(e,l,u,{oldestId:o[0].id,hasMoreOlder:i.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:ye(n.source)}})}}catch(e){if(ge(e)||!we.isCurrent(a)){(!H.has(n)||H.get(n)===a)&&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)===a&&(H.delete(n),V.value.delete(n))}}let Lt=x(()=>ie.value.filter(e=>e.sender===`user`).length),Rt=x(()=>(d.activityFeeds[r.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,n)=>Ae.value?(u(),S(`div`,at,[g(be,{size:`40px`,color:`primary`})])):(u(),S(`div`,ot,[e(d).sessionsErrors[r.workspaceId]?(u(),S(`div`,st,[y(a(t.$t(`activity.sessionsError`,{message:e(d).sessionsErrors[r.workspaceId]}))+` `,1),g(D,{flat:``,dense:``,label:t.$t(`common.retry`),onClick:n[0]||=t=>e(d).fetchSessions(r.workspaceId)},null,8,[`label`])])):v(``,!0),P.value?(u(),S(`div`,ct,[y(a(t.$t(`activity.historyError`,{message:P.value}))+` `,1),g(D,{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`)},a(Se.value),9,lt),g(re,{name:`fade`},{default:h(()=>[ee.value?(u(),S(`div`,ut,[g(be,{size:`18px`,color:`primary`}),w(`span`,dt,a(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(se,{size:`sm`}),y(` `+a(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":r.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(oe,{name:`forum`,size:`28px`}),w(`div`,mt,a(t.$t(`activity.empty`)),1),w(`div`,ht,a(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`},a(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(oe,{name:`person`,size:`16px`}),w(`span`,vt,a(rt.value.content),1)],8,_t)):v(``,!0),w(`div`,yt,[M.value?v(``,!0):(u(),_(D,{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(D,{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};
|