@sma1lboy/rove 0.9.250 → 0.9.251

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/dist/cli/chunk-032g0ahy.js +3 -0
  2. package/dist/cli/{chunk-h86p4zzr.js → chunk-094cgrcc.js} +1 -1
  3. package/dist/cli/{chunk-5bfern2b.js → chunk-11wyec8z.js} +1 -1
  4. package/dist/cli/{chunk-kxaqge09.js → chunk-14f459aa.js} +1 -1
  5. package/dist/cli/{chunk-8gmxg77t.js → chunk-1exaxwyv.js} +1 -1
  6. package/dist/cli/{chunk-mptaj95j.js → chunk-1tebqkdv.js} +1 -1
  7. package/dist/cli/{chunk-h9cg0j3a.js → chunk-21ek142k.js} +1 -1
  8. package/dist/cli/{chunk-9q1m5qz0.js → chunk-28wjmb9f.js} +1 -1
  9. package/dist/cli/chunk-29kvfqeh.js +23 -0
  10. package/dist/cli/chunk-2dpr8gps.js +2 -0
  11. package/dist/cli/{chunk-mn6qth54.js → chunk-2g2w5vvn.js} +1 -1
  12. package/dist/cli/{chunk-7xttx9m1.js → chunk-2pen6b1t.js} +1 -1
  13. package/dist/cli/{chunk-a82ec09z.js → chunk-2wd4744g.js} +1 -1
  14. package/dist/cli/chunk-3msnqacf.js +2 -0
  15. package/dist/cli/{chunk-wtdj8n93.js → chunk-4rx3nhvq.js} +1 -1
  16. package/dist/cli/{chunk-2vgc5cyj.js → chunk-4z01vg3t.js} +1 -1
  17. package/dist/cli/{chunk-y2bga5cw.js → chunk-5456ttpr.js} +3 -3
  18. package/dist/cli/{chunk-f7zjggfv.js → chunk-568q390y.js} +2 -2
  19. package/dist/cli/chunk-5q08srg6.js +2 -0
  20. package/dist/cli/chunk-5r71q63g.js +2 -0
  21. package/dist/cli/chunk-6ahc8w4p.js +87 -0
  22. package/dist/cli/{chunk-3c58659p.js → chunk-6f01fsje.js} +1 -1
  23. package/dist/cli/{chunk-rvqse0aa.js → chunk-6h0n4b5t.js} +2 -2
  24. package/dist/cli/chunk-6rrzq5et.js +3 -0
  25. package/dist/cli/chunk-719avf77.js +2 -0
  26. package/dist/cli/chunk-76n3d9x3.js +2 -0
  27. package/dist/cli/{chunk-jh11snb1.js → chunk-7j00hbq5.js} +1 -1
  28. package/dist/cli/{chunk-8n19nb0s.js → chunk-7vv6160d.js} +1 -1
  29. package/dist/cli/{chunk-gc77ewk2.js → chunk-7z9yfnjd.js} +1 -1
  30. package/dist/cli/{chunk-4xns5j33.js → chunk-84bmcqyz.js} +1 -1
  31. package/dist/cli/{chunk-hm6qe86k.js → chunk-86chrjqr.js} +1 -1
  32. package/dist/cli/{chunk-kqc0kym1.js → chunk-88czbfqx.js} +1 -1
  33. package/dist/cli/{chunk-r07zjer5.js → chunk-8ezc1ban.js} +2 -2
  34. package/dist/cli/{chunk-ntrwd6ks.js → chunk-8ja7jrhc.js} +2 -2
  35. package/dist/cli/chunk-8s0mz115.js +52 -0
  36. package/dist/cli/{chunk-rjxj5tf4.js → chunk-8sbbzs5g.js} +1 -1
  37. package/dist/cli/{chunk-rtdr5bm8.js → chunk-8spmjwwz.js} +1 -1
  38. package/dist/cli/{chunk-wqfp8d9w.js → chunk-91sykzqq.js} +2 -2
  39. package/dist/cli/{chunk-jk8knad0.js → chunk-963er0h4.js} +3 -3
  40. package/dist/cli/{chunk-y7mg74jx.js → chunk-964z8ccb.js} +1 -1
  41. package/dist/cli/chunk-9h940gnr.js +2 -0
  42. package/dist/cli/{chunk-z0ewb9k9.js → chunk-9v568ape.js} +1 -1
  43. package/dist/cli/{chunk-tbrkck2f.js → chunk-9xtg2k54.js} +1 -1
  44. package/dist/cli/{chunk-xv8fhxxm.js → chunk-a7m7w6d1.js} +1 -1
  45. package/dist/cli/{chunk-3pdg2afa.js → chunk-apfzdw7g.js} +2 -2
  46. package/dist/cli/{chunk-fxqp6zt5.js → chunk-ayr5dpgc.js} +1 -1
  47. package/dist/cli/{chunk-j3c4kygc.js → chunk-bvqwgrar.js} +1 -1
  48. package/dist/cli/{chunk-ktzbg4jg.js → chunk-cb1dg7nz.js} +1 -1
  49. package/dist/cli/{chunk-nhakrm1f.js → chunk-cmp64q4j.js} +1 -1
  50. package/dist/cli/chunk-cp5jp5mq.js +3 -0
  51. package/dist/cli/{chunk-78xjh4gg.js → chunk-crdyt04z.js} +1 -1
  52. package/dist/cli/chunk-d99385f2.js +22 -0
  53. package/dist/cli/chunk-daw4mxq3.js +2 -0
  54. package/dist/cli/{chunk-wtb8cycx.js → chunk-dcjxtwdb.js} +1 -1
  55. package/dist/cli/{chunk-78kh1fet.js → chunk-dgbcpkr2.js} +1 -1
  56. package/dist/cli/{chunk-easxds8p.js → chunk-e003wm6d.js} +2 -2
  57. package/dist/cli/{chunk-2mrwdd50.js → chunk-e1xvz3sv.js} +1 -1
  58. package/dist/cli/chunk-f7rmd4zk.js +6 -0
  59. package/dist/cli/{chunk-7mq1ascs.js → chunk-fktvtdkb.js} +1 -1
  60. package/dist/cli/{chunk-2r696a8v.js → chunk-fsdh66fa.js} +1 -1
  61. package/dist/cli/{chunk-06d596z0.js → chunk-g5rr5fpn.js} +1 -1
  62. package/dist/cli/chunk-g872swb8.js +82 -0
  63. package/dist/cli/{chunk-t8v9rpdx.js → chunk-g8wrdp7n.js} +1 -1
  64. package/dist/cli/{chunk-fxm1cmp9.js → chunk-ga5f2pyc.js} +1 -1
  65. package/dist/cli/{chunk-ce16ecse.js → chunk-gaf6n1ea.js} +1 -1
  66. package/dist/cli/{chunk-53cyns0f.js → chunk-gp991c3v.js} +1 -1
  67. package/dist/cli/chunk-h9kzwj14.js +2 -0
  68. package/dist/cli/{chunk-yjs6d5w1.js → chunk-jfnr89qj.js} +1 -1
  69. package/dist/cli/{chunk-d5xc67hp.js → chunk-jrdwedn2.js} +1 -1
  70. package/dist/cli/{chunk-wnwzj8am.js → chunk-k9spgfmx.js} +1 -1
  71. package/dist/cli/{chunk-41r8zj46.js → chunk-kb3zvtkj.js} +1 -1
  72. package/dist/cli/{chunk-vb2tzcde.js → chunk-m4wy9ja5.js} +1 -1
  73. package/dist/cli/chunk-md094j05.js +3 -0
  74. package/dist/cli/{chunk-09y4jh6p.js → chunk-mdnrrj16.js} +1 -1
  75. package/dist/cli/{chunk-whbm14qr.js → chunk-meyfwc50.js} +1 -1
  76. package/dist/cli/{chunk-wkt6h5cf.js → chunk-mf7fb92r.js} +1 -1
  77. package/dist/cli/chunk-mnm9n2vr.js +2 -0
  78. package/dist/cli/chunk-mnpewdhd.js +17 -0
  79. package/dist/cli/chunk-mq06xpqr.js +3 -0
  80. package/dist/cli/{chunk-93r6tgf1.js → chunk-mre9g9vq.js} +1 -1
  81. package/dist/cli/{chunk-c01899mr.js → chunk-mv0hp5cv.js} +1 -1
  82. package/dist/cli/{chunk-21xgqgmv.js → chunk-n52x0ehz.js} +1 -1
  83. package/dist/cli/{chunk-g8fjjbnj.js → chunk-ncrr0fa3.js} +1 -1
  84. package/dist/cli/{chunk-k39sf30b.js → chunk-nep425b6.js} +1 -1
  85. package/dist/cli/{chunk-pe6wnsww.js → chunk-nj53wrzz.js} +1 -1
  86. package/dist/cli/{chunk-ap3r73bm.js → chunk-nsqsvgry.js} +3 -3
  87. package/dist/cli/{chunk-p83wf4zw.js → chunk-nxe45n7k.js} +2 -2
  88. package/dist/cli/{chunk-38s9e8dh.js → chunk-ny12rama.js} +1 -1
  89. package/dist/cli/{chunk-q8q22wq3.js → chunk-p2jeq98m.js} +1 -1
  90. package/dist/cli/chunk-q3xt0mqt.js +3 -0
  91. package/dist/cli/{chunk-7s67c0kw.js → chunk-q5bhq11t.js} +1 -1
  92. package/dist/cli/chunk-q6qhk171.js +2 -0
  93. package/dist/cli/{chunk-9aydqazr.js → chunk-q854fweb.js} +1 -1
  94. package/dist/cli/chunk-qft75bkm.js +2 -0
  95. package/dist/cli/{chunk-p18ehv9y.js → chunk-qstjfseh.js} +1 -1
  96. package/dist/cli/chunk-qxzrdfh7.js +11 -0
  97. package/dist/cli/{chunk-bvqazrbz.js → chunk-qyfmfpjg.js} +1 -1
  98. package/dist/cli/{chunk-gcxcq22q.js → chunk-r0etyq15.js} +1 -1
  99. package/dist/cli/{chunk-hbn1t161.js → chunk-r2c5nbcq.js} +1 -1
  100. package/dist/cli/chunk-r7tbzgt7.js +2 -0
  101. package/dist/cli/{chunk-s57vy3k3.js → chunk-ra40m849.js} +1 -1
  102. package/dist/cli/chunk-regtterm.js +9 -0
  103. package/dist/cli/{chunk-pvm3fc44.js → chunk-rf0jrh3q.js} +1 -1
  104. package/dist/cli/chunk-rhq87p4r.js +2 -0
  105. package/dist/cli/chunk-rkgnrfga.js +2 -0
  106. package/dist/cli/chunk-rqpwy31f.js +2 -0
  107. package/dist/cli/{chunk-8mfpv3fh.js → chunk-rt4tg426.js} +1 -1
  108. package/dist/cli/{chunk-n5dea05t.js → chunk-s2t9acrv.js} +1 -1
  109. package/dist/cli/{chunk-fz17c524.js → chunk-s5a5dyab.js} +1 -1
  110. package/dist/cli/{chunk-8gqkrbyr.js → chunk-s5k3g5ra.js} +1 -1
  111. package/dist/cli/{chunk-des00203.js → chunk-sgegp9x9.js} +1 -1
  112. package/dist/cli/chunk-sqp33pwr.js +2 -0
  113. package/dist/cli/chunk-t33z2kdv.js +3 -0
  114. package/dist/cli/{chunk-fvmee0tr.js → chunk-t71nxngb.js} +1 -1
  115. package/dist/cli/{chunk-ng12dprz.js → chunk-tntdcyra.js} +1 -1
  116. package/dist/cli/{chunk-4nt1gnwq.js → chunk-v312167r.js} +1 -1
  117. package/dist/cli/{chunk-j4cqwqnc.js → chunk-v6d6kvmk.js} +1 -1
  118. package/dist/cli/chunk-vd8qqev9.js +4 -0
  119. package/dist/cli/{chunk-vej49hnt.js → chunk-vgknea9y.js} +2 -2
  120. package/dist/cli/chunk-vwg79maj.js +20 -0
  121. package/dist/cli/{chunk-99n8qsw9.js → chunk-w4cpkhzj.js} +1 -1
  122. package/dist/cli/{chunk-3dey6b3r.js → chunk-w7yg0bbz.js} +1 -1
  123. package/dist/cli/{chunk-85q2tgmg.js → chunk-ws6yep7z.js} +1 -1
  124. package/dist/cli/{chunk-9jsm6h5y.js → chunk-x0rvg54z.js} +1 -1
  125. package/dist/cli/{chunk-enq6vwz5.js → chunk-x7cv6deh.js} +1 -1
  126. package/dist/cli/{chunk-qb1agm2c.js → chunk-y1cb8pj5.js} +1 -1
  127. package/dist/cli/{chunk-cbjh43yc.js → chunk-y5dk90tw.js} +1 -1
  128. package/dist/cli/{chunk-zfvg4w3t.js → chunk-yjyjg7sk.js} +1 -1
  129. package/dist/cli/{chunk-0gz3an4p.js → chunk-yknavm97.js} +1 -1
  130. package/dist/cli/{chunk-hhvvcwjq.js → chunk-zcadc92x.js} +1 -1
  131. package/dist/cli/{chunk-3hcsvyeq.js → chunk-zcwgmz5p.js} +1 -1
  132. package/dist/cli/chunk-zk5qkkb1.js +3 -0
  133. package/dist/cli/index.js +9 -9
  134. package/dist/cli/pty-host-node.mjs +10 -2
  135. package/dist/cli/rove-run.js +1 -1
  136. package/dist/cli/rove.js +1 -1
  137. package/dist/web/assets/{index-BYv91-Cs.css → index-BZjPWX0N.css} +1 -1
  138. package/dist/web/assets/index-DHlgMx7L.js +109 -0
  139. package/dist/web/index.html +2 -2
  140. package/package.json +4 -4
  141. package/dist/cli/chunk-191gy3f0.js +0 -2
  142. package/dist/cli/chunk-2kshjtcs.js +0 -2
  143. package/dist/cli/chunk-5fft208x.js +0 -2
  144. package/dist/cli/chunk-66r43sfd.js +0 -3
  145. package/dist/cli/chunk-6axpatfy.js +0 -2
  146. package/dist/cli/chunk-79hrybcd.js +0 -2
  147. package/dist/cli/chunk-7q43tysm.js +0 -3
  148. package/dist/cli/chunk-86tw1190.js +0 -4
  149. package/dist/cli/chunk-8kx2k2s8.js +0 -52
  150. package/dist/cli/chunk-8m5crcy5.js +0 -82
  151. package/dist/cli/chunk-8pna13mr.js +0 -2
  152. package/dist/cli/chunk-9853bbb9.js +0 -18
  153. package/dist/cli/chunk-asy33vdy.js +0 -2
  154. package/dist/cli/chunk-cmss5e88.js +0 -3
  155. package/dist/cli/chunk-e8d5951a.js +0 -2
  156. package/dist/cli/chunk-fe7kwz48.js +0 -3
  157. package/dist/cli/chunk-g4k86vkr.js +0 -2
  158. package/dist/cli/chunk-gcdm2jke.js +0 -2
  159. package/dist/cli/chunk-gpb49qs3.js +0 -3
  160. package/dist/cli/chunk-hzfq0sst.js +0 -2
  161. package/dist/cli/chunk-kecy2zcc.js +0 -9
  162. package/dist/cli/chunk-knfnbv60.js +0 -17
  163. package/dist/cli/chunk-m3sq1vgk.js +0 -40
  164. package/dist/cli/chunk-pkk9j80z.js +0 -7
  165. package/dist/cli/chunk-vt6ghz8y.js +0 -2
  166. package/dist/cli/chunk-vt7bc8d6.js +0 -87
  167. package/dist/cli/chunk-w594v1n8.js +0 -2
  168. package/dist/cli/chunk-x8fd9y51.js +0 -3
  169. package/dist/cli/chunk-zh30b87y.js +0 -9
  170. package/dist/cli/chunk-zwq8cb8p.js +0 -2
  171. package/dist/web/assets/index-DaovU92T.js +0 -109
package/dist/cli/index.js CHANGED
@@ -1,29 +1,29 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{matchPathGlob}from"./chunk-kg11c1py.js";import{failureHint}from"./chunk-bvqazrbz.js";import{switchFlag}from"./chunk-zsfyj36g.js";import{connectIfRunning}from"./chunk-gc77ewk2.js";import"./chunk-ce16ecse.js";import"./chunk-jh11snb1.js";import{expandTilde}from"./chunk-ag3txfg2.js";import{errorMessage}from"./chunk-2brn8e1y.js";import{BUILTIN_VENDORS,coerceVendorId,isBuiltinVendor}from"./chunk-h2m7em1e.js";import{CURRENT_VERSION}from"./chunk-fe7kwz48.js";import{rejectionReason}from"./chunk-3342qzve.js";import"./chunk-a7kq09ke.js";import"./chunk-prqeddy7.js";import{ROVE_PRODUCT_NAME}from"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-66r43sfd.js";import"./chunk-cmss5e88.js";import"./chunk-nhakrm1f.js";import"./chunk-fz17c524.js";import"./chunk-x8fd9y51.js";import"./chunk-hq9tbzqa.js";import{pathSyntax}from"./chunk-pn5ygqn6.js";import"./chunk-npwzmmv9.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import{__require}from"./chunk-wqfp8d9w.js";import{resolve as resolve2}from"path";function debugEnabled(env){return env.ROVE_DEBUG==="1"||env.ROVE_DEBUG==="1"}function failureSubject(cliName,argv){let verb=argv[2];return verb&&!verb.startsWith("-")&&!verb.includes("/")?`${cliName} ${verb}`:cliName}function summarizeCliGitError(message,cwd){if(!/not a git repository/i.test(message))return null;return`${cwd} is not a git repository \u2014 run this inside one, or pass a repo path.`}function formatCliFailure(err,opts){let subject=failureSubject(opts.cliName,opts.argv);if(debugEnabled(opts.env))return`${subject}: ${String(err instanceof Error?err.stack??err:err)}
3
+ import{matchPathGlob}from"./chunk-kg11c1py.js";import{failureHint}from"./chunk-qyfmfpjg.js";import{switchFlag}from"./chunk-zsfyj36g.js";import{connectIfRunning}from"./chunk-7z9yfnjd.js";import"./chunk-7j00hbq5.js";import"./chunk-gaf6n1ea.js";import{expandTilde}from"./chunk-ag3txfg2.js";import{errorMessage}from"./chunk-2brn8e1y.js";import{BUILTIN_VENDORS,coerceVendorId,isBuiltinVendor}from"./chunk-h2m7em1e.js";import{CURRENT_VERSION}from"./chunk-cp5jp5mq.js";import{rejectionReason}from"./chunk-3342qzve.js";import"./chunk-a7kq09ke.js";import"./chunk-prqeddy7.js";import{ROVE_PRODUCT_NAME}from"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-032g0ahy.js";import"./chunk-q3xt0mqt.js";import"./chunk-cmp64q4j.js";import"./chunk-s5a5dyab.js";import"./chunk-md094j05.js";import"./chunk-hq9tbzqa.js";import{pathSyntax}from"./chunk-pn5ygqn6.js";import"./chunk-npwzmmv9.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import{__require}from"./chunk-91sykzqq.js";import{resolve as resolve2}from"path";function debugEnabled(env){return env.ROVE_DEBUG==="1"||env.ROVE_DEBUG==="1"}function failureSubject(cliName,argv){let verb=argv[2];return verb&&!verb.startsWith("-")&&!verb.includes("/")?`${cliName} ${verb}`:cliName}function summarizeCliGitError(message,cwd){if(!/not a git repository/i.test(message))return null;return`${cwd} is not a git repository \u2014 run this inside one, or pass a repo path.`}function formatCliFailure(err,opts){let subject=failureSubject(opts.cliName,opts.argv);if(debugEnabled(opts.env))return`${subject}: ${String(err instanceof Error?err.stack??err:err)}
4
4
  ${failureHint(err,opts.cliName)}`;let raw=errorMessage(err),git=summarizeCliGitError(raw,opts.cwd);return`${subject}: ${git??`${raw}
5
- ${failureHint(err,opts.cliName)}`}`}var DYNAMIC_COMMANDS=new Map([["completions",async(args)=>{let{runCompletionsSubcommand}=await import("./chunk-jk8knad0.js");await runCompletionsSubcommand(args)}],["export",async(args)=>{let{runExportSubcommand}=await import("./chunk-vej49hnt.js");await runExportSubcommand(args)}],["repo",async(args)=>{let{runRepoSubcommand}=await import("./chunk-easxds8p.js");await runRepoSubcommand(args)}],["api",async(args)=>{let{runApiSubcommand}=await import("./chunk-5fft208x.js");await runApiSubcommand(args)}],["update",async(args)=>{let{runUpdateSubcommand}=await import("./chunk-knfnbv60.js");await runUpdateSubcommand(args)}],["theme",async(args)=>{let{runThemeSubcommand}=await import("./chunk-4nt1gnwq.js");await runThemeSubcommand(args)}],["feedback",async(args)=>{let{runFeedbackSubcommand}=await import("./chunk-7s67c0kw.js");await runFeedbackSubcommand(args)}],["daemon",async(args)=>{let{runDaemonSubcommand}=await import("./chunk-zh30b87y.js");await runDaemonSubcommand(args)}],["machine",async(args)=>{let{runMachineSubcommand}=await import("./chunk-p83wf4zw.js");await runMachineSubcommand(args)}],["weixin",async(args)=>{let{runChannelCli}=await import("./chunk-w594v1n8.js");await runChannelCli("weixin",args)}],["doctor",async(args)=>{let{runDoctorSubcommand}=await import("./chunk-r07zjer5.js");await runDoctorSubcommand(args)}],["config",async(args)=>{let{runConfigSubcommand}=await import("./chunk-p18ehv9y.js");await runConfigSubcommand(args)}],["reset",async(args)=>{let{runResetSubcommand}=await import("./chunk-c01899mr.js");await runResetSubcommand(args)}],["pty-host",async(args)=>{let{runPtyHostSubcommand}=await import("./chunk-hm6qe86k.js");await runPtyHostSubcommand(args)}],["skill",async(args)=>{let{runSkillSubcommand}=await import("./chunk-ap3r73bm.js");await runSkillSubcommand(args)}],["plugin",async(args)=>{let{runPluginSubcommand}=await import("./chunk-y2bga5cw.js");await runPluginSubcommand(args)}],["hook",async(args)=>{let{runHookSubcommand}=await import("./chunk-hzfq0sst.js");await runHookSubcommand(args)}]]);import{statSync}from"fs";import{resolve}from"path";async function openLocalOrchestrator(){let{TaskIndexStore}=await import("./chunk-pe6wnsww.js"),{GitWorktreeManager}=await import("./chunk-9q1m5qz0.js"),{Orchestrator}=await import("./chunk-8pna13mr.js"),store=new TaskIndexStore;return await store.load(),new Orchestrator({store,worktrees:new GitWorktreeManager})}async function withDaemonOrLocal(bridge){let client=await connectIfRunning();if(client)try{return await bridge.daemon(client)}finally{client.close()}let orch=await openLocalOrchestrator();return bridge.local(orch)}function isPathLikeArg(arg){return arg==="."||arg===".."||arg.startsWith("./")||arg.startsWith("../")||arg.startsWith(".\\")||arg.startsWith("..\\")||pathSyntax(arg).isAbsolute(arg)||arg.startsWith("/")||arg==="~"||arg.startsWith("~/")||arg.startsWith("~\\")}async function projectRootFor(dir){let{isGitRepo,resolveRepoRoot}=await import("./chunk-ng12dprz.js"),{projectRejection}=await import("./chunk-2vgc5cyj.js"),top=resolveRepoRoot(dir);if(top!==dir)return null;return projectRejection(top,isGitRepo,"explicit")?null:top}async function runOpenDirectory(arg){let dir=resolve(process.cwd(),expandTilde(arg)),isDir=!1;try{isDir=statSync(dir).isDirectory()}catch{isDir=!1}if(!isDir)process.stderr.write(`${ROVE_PRODUCT_NAME}: "${arg}" is not a directory (resolved to ${dir}).
6
- `),process.exit(1);let projectRoot=await projectRootFor(dir);await withDaemonOrLocal({daemon:async(client)=>{let taskId;if(projectRoot)taskId=(await client.request("task.ensureMain",{repo:projectRoot})).task.id;else taskId=(await client.request("task.openDir",{dir})).taskId;await client.request("task.setActive",{taskId})},local:async(orch)=>{let task=projectRoot?await orch.ensureMainTask(projectRoot):await orch.openDirectoryTask({dir}),{writeLastActiveTaskId}=await import("./chunk-ktzbg4jg.js");writeLastActiveTaskId(String(task.id))}});let{publishRoveTerminalTitle}=await import("./chunk-t8v9rpdx.js");publishRoveTerminalTitle();let{launchTui}=await import("./chunk-gcdm2jke.js");await launchTui()}function topLevelUsage(cliName=ROVE_PRODUCT_NAME){return[`${cliName} ${CURRENT_VERSION}`,"",`Usage: ${cliName} [command] [options]`,"","Run with no command to launch PureTUI.",`Run \`${cliName} .\` (or \`${cliName} <path>\`) to open a directory as a standalone task.`,"","Commands:"," completions <shell> Generate shell completion script (bash/zsh/fish)"," add [path] Save a repo path for the new-task picker"," remove [path] Forget a saved project (inverse of add; non-destructive)"," adopt [glob] Import existing git worktrees as tasks"," export [--csv|--json] Print the task list (json/csv/table; daemon-free)"," repo <verb> Per-repo init script + first prompt (show|set|unset)",` api <verb> Scriptable RPC surface for agents (see \`${cliName} api --help\`)`," daemon <verb> Manage the daemon (start|stop|status|restart)"," machine <verb> Other computers running Rove (add|remove|list)"," weixin <verb> Talk to Rove from WeChat (login|logout|status|allow|deny)"," doctor [--report|--fix] Diagnose daemon/PTY/engines/git; --fix walks the remedies",` config [--path] Open ${cliName}'s config file (state.json) in your editor`," reset [--hard] Stop runtimes; optionally wipe task/UI state"," theme <verb> Manage user themes (list|add|remove)",` skill <verb> Install the ${cliName} agent skill (install|status|command|print)`," plugin <verb> Install and run plugins (install|link|list|action|\u2026)"," feedback Send feedback to GitHub Discussions",` update [version|channel|list] Self-update ${cliName}, switch channel, or list versions`,"","Options:"," -v, --version Print version"," -h, --help Print this help"," --skill Print the agent skill file and exit"," --web [bridge flags] Serve the browser client on 127.0.0.1 and print its link"].join(`
5
+ ${failureHint(err,opts.cliName)}`}`}var DYNAMIC_COMMANDS=new Map([["completions",async(args)=>{let{runCompletionsSubcommand}=await import("./chunk-963er0h4.js");await runCompletionsSubcommand(args)}],["export",async(args)=>{let{runExportSubcommand}=await import("./chunk-vgknea9y.js");await runExportSubcommand(args)}],["repo",async(args)=>{let{runRepoSubcommand}=await import("./chunk-e003wm6d.js");await runRepoSubcommand(args)}],["api",async(args)=>{let{runApiSubcommand}=await import("./chunk-3msnqacf.js");await runApiSubcommand(args)}],["update",async(args)=>{let{runUpdateSubcommand}=await import("./chunk-mnpewdhd.js");await runUpdateSubcommand(args)}],["theme",async(args)=>{let{runThemeSubcommand}=await import("./chunk-v312167r.js");await runThemeSubcommand(args)}],["feedback",async(args)=>{let{runFeedbackSubcommand}=await import("./chunk-q5bhq11t.js");await runFeedbackSubcommand(args)}],["daemon",async(args)=>{let{runDaemonSubcommand}=await import("./chunk-qxzrdfh7.js");await runDaemonSubcommand(args)}],["machine",async(args)=>{let{runMachineSubcommand}=await import("./chunk-nxe45n7k.js");await runMachineSubcommand(args)}],["weixin",async(args)=>{let{runChannelCli}=await import("./chunk-rhq87p4r.js");await runChannelCli("weixin",args)}],["doctor",async(args)=>{let{runDoctorSubcommand}=await import("./chunk-8ezc1ban.js");await runDoctorSubcommand(args)}],["config",async(args)=>{let{runConfigSubcommand}=await import("./chunk-qstjfseh.js");await runConfigSubcommand(args)}],["reset",async(args)=>{let{runResetSubcommand}=await import("./chunk-mv0hp5cv.js");await runResetSubcommand(args)}],["pty-host",async(args)=>{let{runPtyHostSubcommand}=await import("./chunk-86chrjqr.js");await runPtyHostSubcommand(args)}],["skill",async(args)=>{let{runSkillSubcommand}=await import("./chunk-nsqsvgry.js");await runSkillSubcommand(args)}],["plugin",async(args)=>{let{runPluginSubcommand}=await import("./chunk-5456ttpr.js");await runPluginSubcommand(args)}],["hook",async(args)=>{let{runHookSubcommand}=await import("./chunk-5r71q63g.js");await runHookSubcommand(args)}]]);import{statSync}from"fs";import{resolve}from"path";async function openLocalOrchestrator(){let{TaskIndexStore}=await import("./chunk-nj53wrzz.js"),{GitWorktreeManager}=await import("./chunk-28wjmb9f.js"),{Orchestrator}=await import("./chunk-h9kzwj14.js"),store=new TaskIndexStore;return await store.load(),new Orchestrator({store,worktrees:new GitWorktreeManager})}async function withDaemonOrLocal(bridge){let client=await connectIfRunning();if(client)try{return await bridge.daemon(client)}finally{client.close()}let orch=await openLocalOrchestrator();return bridge.local(orch)}function isPathLikeArg(arg){return arg==="."||arg===".."||arg.startsWith("./")||arg.startsWith("../")||arg.startsWith(".\\")||arg.startsWith("..\\")||pathSyntax(arg).isAbsolute(arg)||arg.startsWith("/")||arg==="~"||arg.startsWith("~/")||arg.startsWith("~\\")}async function projectRootFor(dir){let{isGitRepo,resolveRepoRoot}=await import("./chunk-tntdcyra.js"),{projectRejection}=await import("./chunk-4z01vg3t.js"),top=resolveRepoRoot(dir);if(top!==dir)return null;return projectRejection(top,isGitRepo,"explicit")?null:top}async function runOpenDirectory(arg){let dir=resolve(process.cwd(),expandTilde(arg)),isDir=!1;try{isDir=statSync(dir).isDirectory()}catch{isDir=!1}if(!isDir)process.stderr.write(`${ROVE_PRODUCT_NAME}: "${arg}" is not a directory (resolved to ${dir}).
6
+ `),process.exit(1);let projectRoot=await projectRootFor(dir);await withDaemonOrLocal({daemon:async(client)=>{let taskId;if(projectRoot)taskId=(await client.request("task.ensureMain",{repo:projectRoot})).task.id;else taskId=(await client.request("task.openDir",{dir})).taskId;await client.request("task.setActive",{taskId})},local:async(orch)=>{let task=projectRoot?await orch.ensureMainTask(projectRoot):await orch.openDirectoryTask({dir}),{writeLastActiveTaskId}=await import("./chunk-cb1dg7nz.js");writeLastActiveTaskId(String(task.id))}});let{publishRoveTerminalTitle}=await import("./chunk-g8wrdp7n.js");publishRoveTerminalTitle();let{launchTui}=await import("./chunk-daw4mxq3.js");await launchTui()}function topLevelUsage(cliName=ROVE_PRODUCT_NAME){return[`${cliName} ${CURRENT_VERSION}`,"",`Usage: ${cliName} [command] [options]`,"","Run with no command to launch PureTUI.",`Run \`${cliName} .\` (or \`${cliName} <path>\`) to open a directory as a standalone task.`,"","Commands:"," completions <shell> Generate shell completion script (bash/zsh/fish)"," add [path] Save a repo path for the new-task picker"," remove [path] Forget a saved project (inverse of add; non-destructive)"," adopt [glob] Import existing git worktrees as tasks"," export [--csv|--json] Print the task list (json/csv/table; daemon-free)"," repo <verb> Per-repo init script + first prompt (show|set|unset)",` api <verb> Scriptable RPC surface for agents (see \`${cliName} api --help\`)`," daemon <verb> Manage the daemon (start|stop|status|restart)"," machine <verb> Other computers running Rove (add|remove|list)"," weixin <verb> Talk to Rove from WeChat (login|logout|status|allow|deny)"," doctor [--report|--fix] Diagnose daemon/PTY/engines/git; --fix walks the remedies",` config [--path] Open ${cliName}'s config file (state.json) in your editor`," reset [--hard] Stop runtimes; optionally wipe task/UI state"," theme <verb> Manage user themes (list|add|remove)",` skill <verb> Install the ${cliName} agent skill (install|status|command|print)`," plugin <verb> Install and run plugins (install|link|list|action|\u2026)"," feedback Send feedback to GitHub Discussions",` update [version|channel|list] Self-update ${cliName}, switch channel, or list versions`,"","Options:"," -v, --version Print version"," -h, --help Print this help"," --skill Print the agent skill file and exit"," --web [bridge flags] Serve the browser client on 127.0.0.1 and print its link"].join(`
7
7
  `)}var CLI_NAME=ROVE_PRODUCT_NAME,ADD_USAGE=[`Usage: ${CLI_NAME} add [path]`,` ${CLI_NAME} add --remote --host <host> --user <user> --path <basePath> [--port N] [--key [path] | --password]`,"","Save a repo for the new-task picker. With --remote, register an SSH-backed","project whose worktrees live on <host>; engine launch over SSH is pending.",""].join(`
8
- `);async function runAddSubcommand(rest){let arg=rest[0];if(arg==="--help"||arg==="-h"||arg==="help"){process.stdout.write(ADD_USAGE);return}if(arg==="--remote"){let{runAddRemote}=await import("./chunk-53cyns0f.js");await runAddRemote(rest.slice(1));return}if(arg?.startsWith("-"))process.stderr.write(`${CLI_NAME} add: unknown flag "${arg}"
8
+ `);async function runAddSubcommand(rest){let arg=rest[0];if(arg==="--help"||arg==="-h"||arg==="help"){process.stdout.write(ADD_USAGE);return}if(arg==="--remote"){let{runAddRemote}=await import("./chunk-gp991c3v.js");await runAddRemote(rest.slice(1));return}if(arg?.startsWith("-"))process.stderr.write(`${CLI_NAME} add: unknown flag "${arg}"
9
9
 
10
- ${ADD_USAGE}`),process.exit(2);let target=resolve2(process.cwd(),expandTilde(arg&&arg.length>0?arg:".")),{addSavedRepo}=await import("./chunk-ng12dprz.js"),result=addSavedRepo(target);if(result.rejected)process.stderr.write(`${CLI_NAME} add: "${arg&&arg.length>0?arg:"."}" cannot be a project \u2014 ${rejectionReason(result.rejected)} (resolved to ${result.path}).
10
+ ${ADD_USAGE}`),process.exit(2);let target=resolve2(process.cwd(),expandTilde(arg&&arg.length>0?arg:".")),{addSavedRepo}=await import("./chunk-tntdcyra.js"),result=addSavedRepo(target);if(result.rejected)process.stderr.write(`${CLI_NAME} add: "${arg&&arg.length>0?arg:"."}" cannot be a project \u2014 ${rejectionReason(result.rejected)} (resolved to ${result.path}).
11
11
  `),process.exit(1);if(result.added)console.log(`added ${result.path} (${result.total} saved repo${result.total===1?"":"s"} total)`);else console.log(`already saved: ${result.path}`);await ensureProjectMainTask(result.path),await adoptAllWorktrees(result.path)}async function ensureProjectMainTask(repo){try{await withDaemonOrLocal({daemon:(client)=>client.request("task.ensureMain",{repo}),local:(orch)=>orch.ensureMainTask(repo)})}catch(err){console.error(`(skipped project main-task setup: ${errorMessage(err)}). Run ${CLI_NAME} doctor, then retry ${CLI_NAME} add.`)}}var PURGE_FLAG="--purge-credentials",REMOVE_USAGE=[`Usage: ${CLI_NAME} remove [path] [--purge-credentials]`,"","Forget a saved project (drop it from the new-task picker). Non-destructive:","the repo's files, worktrees, branches and tasks all stay on disk. A remote","(ssh://) project also has its stored connection config dropped.",""," path defaults to the current directory. Pass an exact saved entry (e.g. a"," remote `ssh://user@host` key) to remove it verbatim. Run with no match to"," print the current saved projects.",""," --purge-credentials also delete the remote project's SSH password from"," the OS keychain. Off by default: forgetting a project"," should not silently destroy a stored secret.",""].join(`
12
12
  `);async function runRemoveSubcommand(rest){let purgeCredentials=switchFlag(rest,PURGE_FLAG),arg=rest.filter((a)=>a!==PURGE_FLAG&&!a.startsWith(`${PURGE_FLAG}=`))[0];if(arg==="--help"||arg==="-h"||arg==="help"){process.stdout.write(REMOVE_USAGE);return}if(purgeCredentials===void 0)process.stderr.write(`${CLI_NAME} remove: ${PURGE_FLAG} takes true or false
13
13
 
14
14
  ${REMOVE_USAGE}`),process.exit(2);if(arg?.startsWith("-"))process.stderr.write(`${CLI_NAME} remove: unknown flag "${arg}"
15
15
 
16
- ${REMOVE_USAGE}`),process.exit(2);let{getRemoteRepoConfig,getSavedRepos,resolveRepoRoot}=await import("./chunk-ng12dprz.js"),saved=getSavedRepos();if(saved.length===0){console.log("no saved projects to remove.");return}let raw=arg&&arg.length>0?arg:".",target=saved.includes(raw)?raw:(()=>{let abs=resolve2(process.cwd(),expandTilde(raw)),top=resolveRepoRoot(abs);if(saved.includes(top))return top;if(saved.includes(abs))return abs;return null})();if(target===null){process.stderr.write(`${CLI_NAME} remove: "${raw}" is not a saved project.
16
+ ${REMOVE_USAGE}`),process.exit(2);let{getRemoteRepoConfig,getSavedRepos,resolveRepoRoot}=await import("./chunk-tntdcyra.js"),saved=getSavedRepos();if(saved.length===0){console.log("no saved projects to remove.");return}let raw=arg&&arg.length>0?arg:".",target=saved.includes(raw)?raw:(()=>{let abs=resolve2(process.cwd(),expandTilde(raw)),top=resolveRepoRoot(abs);if(saved.includes(top))return top;if(saved.includes(abs))return abs;return null})();if(target===null){process.stderr.write(`${CLI_NAME} remove: "${raw}" is not a saved project.
17
17
 
18
18
  Saved projects:
19
19
  `);for(let p of saved)process.stderr.write(` ${p}
20
- `);process.exit(1)}let auth=getRemoteRepoConfig(target)?.auth,keychainRef=auth?.kind==="password"?auth.keychainRef:null;await withDaemonOrLocal({daemon:(client)=>client.request("project.forget",{repo:target}),local:(orch)=>orch.forgetProject(target)});let remaining=getSavedRepos().length;if(console.log(`removed ${target} (${remaining} saved repo${remaining===1?"":"s"} left)`),keychainRef)await reportCredentialExit(keychainRef,purgeCredentials)}async function reportCredentialExit(ref,purge){let{deleteKeychainPassword,isKeychainSupported}=await import("./chunk-fvmee0tr.js");if(!purge){console.log(`note: its SSH password is still in the OS keychain (${ref.service}/${ref.account}).`),console.log(` re-run with ${PURGE_FLAG} to delete it.`);return}if(!isKeychainSupported()){console.error("--purge-credentials: the OS keychain is only wired for macOS; nothing deleted.");return}if(deleteKeychainPassword(ref))console.log(`purged the keychain password (${ref.service}/${ref.account})`);else console.error(`--purge-credentials: no keychain item found for ${ref.service}/${ref.account}`)}async function adoptAllWorktrees(repo){let orch=await openLocalOrchestrator(),candidates;try{candidates=await orch.discoverAdoptableWorktrees(repo)}catch(err){console.error(`(skipped worktree scan: ${errorMessage(err)}). Run git worktree list in the repository, then retry ${CLI_NAME} add.`);return}if(candidates.length===0)return;console.log(`scanning ${repo}: ${candidates.length} unlinked worktree(s) \u2192 importing`),await adoptWorktreesInto(orch,repo,candidates,coerceVendorId(void 0))}async function adoptWorktreesInto(orch,repo,list,vendor){for(let w of list){let adopted=await withDaemonOrLocal({daemon:async(client)=>(await client.request("worktree.adopt",{repo,worktreePath:w.path,branch:w.branch,vendor})).task,local:async()=>orch.adoptWorktree({repo,worktreePath:w.path,branch:w.branch,vendor})});console.log(` adopted ${w.branch} \u2192 task ${adopted.id} (${adopted.title})`)}}var ADOPT_USAGE=[`Usage: ${CLI_NAME} adopt [glob] [--repo <path>] [--vendor <v>] [--yes]`,"",`Import existing git worktrees in a repo as ${CLI_NAME} tasks.`,"No glob \u2192 dry-run listing. With a glob \u2192 list matches; --yes adopts them.","","Options:"," --repo <path> Repo to scan (default: current directory)"," --vendor <v> Engine vendor for adopted tasks"," -y, --yes Actually adopt the matched worktrees"," -h, --help Print this help",""].join(`
20
+ `);process.exit(1)}let auth=getRemoteRepoConfig(target)?.auth,keychainRef=auth?.kind==="password"?auth.keychainRef:null;await withDaemonOrLocal({daemon:(client)=>client.request("project.forget",{repo:target}),local:(orch)=>orch.forgetProject(target)});let remaining=getSavedRepos().length;if(console.log(`removed ${target} (${remaining} saved repo${remaining===1?"":"s"} left)`),keychainRef)await reportCredentialExit(keychainRef,purgeCredentials)}async function reportCredentialExit(ref,purge){let{deleteKeychainPassword,isKeychainSupported}=await import("./chunk-t71nxngb.js");if(!purge){console.log(`note: its SSH password is still in the OS keychain (${ref.service}/${ref.account}).`),console.log(` re-run with ${PURGE_FLAG} to delete it.`);return}if(!isKeychainSupported()){console.error("--purge-credentials: the OS keychain is only wired for macOS; nothing deleted.");return}if(deleteKeychainPassword(ref))console.log(`purged the keychain password (${ref.service}/${ref.account})`);else console.error(`--purge-credentials: no keychain item found for ${ref.service}/${ref.account}`)}async function adoptAllWorktrees(repo){let orch=await openLocalOrchestrator(),candidates;try{candidates=await orch.discoverAdoptableWorktrees(repo)}catch(err){console.error(`(skipped worktree scan: ${errorMessage(err)}). Run git worktree list in the repository, then retry ${CLI_NAME} add.`);return}if(candidates.length===0)return;console.log(`scanning ${repo}: ${candidates.length} unlinked worktree(s) \u2192 importing`),await adoptWorktreesInto(orch,repo,candidates,coerceVendorId(void 0))}async function adoptWorktreesInto(orch,repo,list,vendor){for(let w of list){let adopted=await withDaemonOrLocal({daemon:async(client)=>(await client.request("worktree.adopt",{repo,worktreePath:w.path,branch:w.branch,vendor})).task,local:async()=>orch.adoptWorktree({repo,worktreePath:w.path,branch:w.branch,vendor})});console.log(` adopted ${w.branch} \u2192 task ${adopted.id} (${adopted.title})`)}}var ADOPT_USAGE=[`Usage: ${CLI_NAME} adopt [glob] [--repo <path>] [--vendor <v>] [--yes]`,"",`Import existing git worktrees in a repo as ${CLI_NAME} tasks.`,"No glob \u2192 dry-run listing. With a glob \u2192 list matches; --yes adopts them.","","Options:"," --repo <path> Repo to scan (default: current directory)"," --vendor <v> Engine vendor for adopted tasks"," -y, --yes Actually adopt the matched worktrees"," -h, --help Print this help",""].join(`
21
21
  `);function adoptUsageError(message){process.stderr.write(`${CLI_NAME} adopt: ${message}
22
22
 
23
23
  ${ADOPT_USAGE}
24
24
  `),process.exit(2)}async function runAdoptSubcommand(args){let glob,repoArg,vendorArg,yes=!1;for(let i=0;i<args.length;i++){let a=args[i];if(a==="--help"||a==="-h"||a==="help"){process.stdout.write(`${ADOPT_USAGE}
25
- `);return}if(a==="--repo"){if(repoArg=args[++i],repoArg===void 0)adoptUsageError("--repo requires a value")}else if(a==="--vendor"){if(vendorArg=args[++i],vendorArg===void 0)adoptUsageError("--vendor requires a value")}else if(a==="--yes"||a==="-y")yes=!0;else if(a&&!a.startsWith("-")&&glob===void 0)glob=a;else adoptUsageError(`unexpected argument "${a}"`)}let{getCustomEngineIds,resolveRepoRoot}=await import("./chunk-ng12dprz.js"),repo=resolveRepoRoot(resolve2(process.cwd(),expandTilde(repoArg&&repoArg.length>0?repoArg:"."))),typed=vendorArg?.trim();if(typed&&!isBuiltinVendor(typed)&&!getCustomEngineIds().includes(typed)){let known=[...BUILTIN_VENDORS,...getCustomEngineIds()].join(", ");adoptUsageError(`unknown engine "${typed}" \u2014 no task was created. Known engines: ${known}`)}let vendor=coerceVendorId(vendorArg),orch=await openLocalOrchestrator(),worktrees=await orch.discoverAdoptableWorktrees(repo);if(worktrees.length===0){console.log(`no adoptable worktrees for ${repo} \u2014 every git worktree here is already a task`);return}let isMatch=(w)=>!glob||matchPathGlob(glob,w.path);console.log(`adoptable worktrees in ${repo}:`);for(let w of worktrees){let hit=glob?isMatch(w)?"*":" ":"-",tags=[w.dirty===!0?"dirty":w.dirty===null?"dirty?":"",w.roveManaged?"":"external"].filter(Boolean).join(",");console.log(` ${hit} ${w.branch} ${w.path}${tags?` (${tags})`:""}`)}if(!glob){console.log(`
25
+ `);return}if(a==="--repo"){if(repoArg=args[++i],repoArg===void 0)adoptUsageError("--repo requires a value")}else if(a==="--vendor"){if(vendorArg=args[++i],vendorArg===void 0)adoptUsageError("--vendor requires a value")}else if(a==="--yes"||a==="-y")yes=!0;else if(a&&!a.startsWith("-")&&glob===void 0)glob=a;else adoptUsageError(`unexpected argument "${a}"`)}let{getCustomEngineIds,resolveRepoRoot}=await import("./chunk-tntdcyra.js"),repo=resolveRepoRoot(resolve2(process.cwd(),expandTilde(repoArg&&repoArg.length>0?repoArg:"."))),typed=vendorArg?.trim();if(typed&&!isBuiltinVendor(typed)&&!getCustomEngineIds().includes(typed)){let known=[...BUILTIN_VENDORS,...getCustomEngineIds()].join(", ");adoptUsageError(`unknown engine "${typed}" \u2014 no task was created. Known engines: ${known}`)}let vendor=coerceVendorId(vendorArg),orch=await openLocalOrchestrator(),worktrees=await orch.discoverAdoptableWorktrees(repo);if(worktrees.length===0){console.log(`no adoptable worktrees for ${repo} \u2014 every git worktree here is already a task`);return}let isMatch=(w)=>!glob||matchPathGlob(glob,w.path);console.log(`adoptable worktrees in ${repo}:`);for(let w of worktrees){let hit=glob?isMatch(w)?"*":" ":"-",tags=[w.dirty===!0?"dirty":w.dirty===null?"dirty?":"",w.roveManaged?"":"external"].filter(Boolean).join(",");console.log(` ${hit} ${w.branch} ${w.path}${tags?` (${tags})`:""}`)}if(!glob){console.log(`
26
26
  pass a path glob to adopt, e.g. ${CLI_NAME} adopt '${repo}/*' --yes`);return}let matched=worktrees.filter(isMatch);if(matched.length===0){console.log(`
27
27
  no worktrees match glob ${JSON.stringify(glob)}`);return}if(!yes){console.log(`
28
28
  ${matched.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await adoptWorktreesInto(orch,repo,matched,vendor),console.log(`done \u2014 adopted ${matched.length} worktree(s)`)}function printTopLevelUsage(out){out.write(`${topLevelUsage()}
29
- `)}var COMMANDS=new Map([["add",runAddSubcommand],["remove",runRemoveSubcommand],["adopt",runAdoptSubcommand],...DYNAMIC_COMMANDS]);async function main(){let[,,...rawArgs]=process.argv,[subcommand,...rest]=rawArgs;if(subcommand==="--version"||subcommand==="-v"||subcommand==="version"){let{CURRENT_VERSION:CURRENT_VERSION2}=await import("./chunk-e8d5951a.js");console.log(`${CLI_NAME} ${CURRENT_VERSION2}`);return}if(subcommand==="--help"||subcommand==="-h"||subcommand==="help"){printTopLevelUsage(process.stdout);return}if(subcommand==="--skill"){let{runSkillSubcommand}=await import("./chunk-ap3r73bm.js");await runSkillSubcommand(["print"]);return}if(subcommand==="--web"){let{runWebSubcommand}=await import("./chunk-3hcsvyeq.js");await runWebSubcommand(rest);return}let handler=subcommand!==void 0?COMMANDS.get(subcommand):void 0;if(handler){await handler(rest);return}if(subcommand!==void 0&&isPathLikeArg(subcommand)){await runOpenDirectory(subcommand);return}if(subcommand!==void 0)console.error(`${CLI_NAME}: unknown command '${subcommand}'`),printTopLevelUsage(process.stderr),process.exit(2);let{publishRoveTerminalTitle}=await import("./chunk-t8v9rpdx.js");publishRoveTerminalTitle();let{launchTui}=await import("./chunk-gcdm2jke.js");await launchTui()}main().catch((err)=>{console.error(formatCliFailure(err,{cliName:CLI_NAME,argv:process.argv,cwd:process.cwd(),env:process.env})),process.exit(1)});
29
+ `)}var COMMANDS=new Map([["add",runAddSubcommand],["remove",runRemoveSubcommand],["adopt",runAdoptSubcommand],...DYNAMIC_COMMANDS]);async function main(){let[,,...rawArgs]=process.argv,[subcommand,...rest]=rawArgs;if(subcommand==="--version"||subcommand==="-v"||subcommand==="version"){let{CURRENT_VERSION:CURRENT_VERSION2}=await import("./chunk-719avf77.js");console.log(`${CLI_NAME} ${CURRENT_VERSION2}`);return}if(subcommand==="--help"||subcommand==="-h"||subcommand==="help"){printTopLevelUsage(process.stdout);return}if(subcommand==="--skill"){let{runSkillSubcommand}=await import("./chunk-nsqsvgry.js");await runSkillSubcommand(["print"]);return}if(subcommand==="--web"){let{runWebSubcommand}=await import("./chunk-zcwgmz5p.js");await runWebSubcommand(rest);return}let handler=subcommand!==void 0?COMMANDS.get(subcommand):void 0;if(handler){await handler(rest);return}if(subcommand!==void 0&&isPathLikeArg(subcommand)){await runOpenDirectory(subcommand);return}if(subcommand!==void 0)console.error(`${CLI_NAME}: unknown command '${subcommand}'`),printTopLevelUsage(process.stderr),process.exit(2);let{publishRoveTerminalTitle}=await import("./chunk-g8wrdp7n.js");publishRoveTerminalTitle();let{launchTui}=await import("./chunk-daw4mxq3.js");await launchTui()}main().catch((err)=>{console.error(formatCliFailure(err,{cliName:CLI_NAME,argv:process.argv,cwd:process.cwd(),env:process.env})),process.exit(1)});
@@ -683,6 +683,13 @@ function ensureOwnerOnlyStateDir(homeDir) {
683
683
 
684
684
  // ../rove-daemon/src/daemon/automation-contracts.ts
685
685
  var ROUTINE_RESPONSE_WINDOW_MS = 2 * 60 * 60000;
686
+ // ../rove-plugin-sdk/dist/mod-tree.js
687
+ var ALLOWED = {
688
+ box: new Set(["type", "direction", "gap", "padding", "border", "children"]),
689
+ text: new Set(["type", "text", "tone", "bold"]),
690
+ button: new Set(["type", "key", "label", "tone"]),
691
+ input: new Set(["type", "key", "placeholder", "value"])
692
+ };
686
693
  // ../rove-plugin-sdk/dist/contract.js
687
694
  var DAEMON_CHANNELS = [
688
695
  "task.snapshot",
@@ -707,9 +714,9 @@ var DAEMON_CHANNELS = [
707
714
  "usage.snapshot",
708
715
  "usage.context",
709
716
  "ui.prompt",
710
- "graphics.write"
717
+ "graphics.write",
718
+ "mod.ui"
711
719
  ];
712
-
713
720
  // ../rove-daemon/src/daemon/channels.ts
714
721
  var CHANNEL_NAMES = DAEMON_CHANNELS;
715
722
  var CHANNEL_NAME_SET = new Set(CHANNEL_NAMES);
@@ -718,6 +725,7 @@ var DAEMON_PROTOCOL_VERSION = 5;
718
725
 
719
726
  // ../rove-daemon/src/daemon/protocol.ts
720
727
  var BLOCKING_RPCS = new Set([
728
+ "api.invoke",
721
729
  "ui.prompt",
722
730
  "task.land",
723
731
  "workitem.start",
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{migrateRoveClientStateLayout}from"./chunk-tdhk4dz8.js";import{updateStateFile}from"./chunk-7q43tysm.js";import"./chunk-mw0ysrpd.js";import"./chunk-a7kq09ke.js";import{kvStatePath}from"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-npwzmmv9.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import{__require}from"./chunk-wqfp8d9w.js";import{readFileSync}from"fs";var RENAMED_KEY_PREFIXES=[{from:"autoEffort.",to:"autoRouting."}],NOTHING={moved:0,superseded:0};function legacyRename(key){for(let{from,to}of RENAMED_KEY_PREFIXES)if(key.startsWith(from))return`${to}${key.slice(from.length)}`;return}function isStateObject(text){try{let parsed=JSON.parse(text);return typeof parsed==="object"&&parsed!==null&&!Array.isArray(parsed)}catch{return!1}}function migrateRenamedStateKeys(){let text;try{text=readFileSync(kvStatePath(),"utf8")}catch{return NOTHING}if(!RENAMED_KEY_PREFIXES.some(({from})=>text.includes(`"${from}`)))return NOTHING;if(!isStateObject(text))return NOTHING;let moved=0,superseded=0;try{updateStateFile((state)=>{for(let[key,value]of Object.entries(state)){let renamed=legacyRename(key);if(renamed===void 0)continue;if(renamed in state)superseded+=1;else state[renamed]=value,moved+=1;delete state[key]}return moved+superseded>0})}catch{return NOTHING}return{moved,superseded}}function prepareCliStateLayout(env=process.env){let result=migrateRoveClientStateLayout(env);for(let warning of result.warnings)console.error(`[rove] state migration will retry: ${warning}. Check the source/destination permissions, then relaunch Rove.`);migrateRenamedStateKeys()}prepareCliStateLayout();await import("./index.js");
3
+ import{migrateRoveClientStateLayout}from"./chunk-tdhk4dz8.js";import{updateStateFile}from"./chunk-zk5qkkb1.js";import"./chunk-mw0ysrpd.js";import"./chunk-a7kq09ke.js";import{kvStatePath}from"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-npwzmmv9.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import{__require}from"./chunk-91sykzqq.js";import{readFileSync}from"fs";var RENAMED_KEY_PREFIXES=[{from:"autoEffort.",to:"autoRouting."}],NOTHING={moved:0,superseded:0};function legacyRename(key){for(let{from,to}of RENAMED_KEY_PREFIXES)if(key.startsWith(from))return`${to}${key.slice(from.length)}`;return}function isStateObject(text){try{let parsed=JSON.parse(text);return typeof parsed==="object"&&parsed!==null&&!Array.isArray(parsed)}catch{return!1}}function migrateRenamedStateKeys(){let text;try{text=readFileSync(kvStatePath(),"utf8")}catch{return NOTHING}if(!RENAMED_KEY_PREFIXES.some(({from})=>text.includes(`"${from}`)))return NOTHING;if(!isStateObject(text))return NOTHING;let moved=0,superseded=0;try{updateStateFile((state)=>{for(let[key,value]of Object.entries(state)){let renamed=legacyRename(key);if(renamed===void 0)continue;if(renamed in state)superseded+=1;else state[renamed]=value,moved+=1;delete state[key]}return moved+superseded>0})}catch{return NOTHING}return{moved,superseded}}function prepareCliStateLayout(env=process.env){let result=migrateRoveClientStateLayout(env);for(let warning of result.warnings)console.error(`[rove] state migration will retry: ${warning}. Check the source/destination permissions, then relaunch Rove.`);migrateRenamedStateKeys()}prepareCliStateLayout();await import("./index.js");
package/dist/cli/rove.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{join as n}from"node:path";import{createInterface as a}from"node:readline/promises";import{pathToFileURL as ss}from"node:url";import{spawnSync as Q}from"node:child_process";import{constants as V,accessSync as R}from"node:fs";import{homedir as e}from"node:os";import{basename as I,delimiter as U,dirname as o,join as y}from"node:path";import{fileURLToPath as T}from"node:url";var H={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/rove",version:"0.9.250",description:"Rove — the agent multiplexer for your terminal. Run coding agents on parallel tasks with isolated worktrees and persistent sessions.",keywords:["terminal","tui","cli","multiplexer","ai-agents","coding-agent","ai-coding-assistant","agentic-ai","parallel-agents","git-worktree","claude-code","codex","llm","developer-tools"],type:"module",packageManager:"bun@1.3.13",bin:{rove:"dist/cli/rove.js"},files:["dist/cli","dist/completions","dist/web","dist/web-ui","dist/skills","dist/*.wav","README.md","LICENSE"],publishConfig:{access:"public"},repository:{type:"git",url:"git+https://github.com/Sma1lboy/rove.git"},homepage:"https://rove.run",bugs:{url:"https://github.com/Sma1lboy/rove/issues"},engines:{bun:">=1.3.11"},scripts:{dev:"ROVE_DEV=1 bun --conditions=browser ./src/cli/rove.ts","dev:mock":"ROVE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:sandbox":"bun run scripts/dev-sandbox.ts run","dev:sandbox:reset":"bun run scripts/dev-sandbox.ts reset",build:"bun run scripts/build.ts","build:rubric":"bun run scripts/build-tier-rubric.ts",compile:"bun run scripts/compile.ts",typecheck:"tsc --noEmit","check-i18n":"bun run scripts/check-i18n.ts",test:"bun run test:fast && bun run test:socket","perf:golden":"bun scripts/perf-golden.ts","pty:soak":"bun scripts/pty-soak.ts","test:fast":"vitest run --passWithNoTests --minWorkers=1 --maxWorkers=8","test:socket":"ROVE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests","test:socket:coverage":"ROVE_INCLUDE_SOCKET=1 ROVE_COVERAGE_DAEMON=1 vitest run test/daemon --coverage --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests","test:behavior":"ROVE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --pool forks --minWorkers=1 --maxWorkers=1 --retry=2 --passWithNoTests","test:render":"bun scripts/render-track.mjs",coverage:"vitest run --coverage --passWithNoTests",bench:"vitest bench --run",lint:"biome check .",knip:"knip-bun",postinstall:"bun run scripts/check-preview-deps.ts || true",prepublishOnly:"bun run typecheck && bun run build","plugin-sandbox":"bun run scripts/plugin-sandbox.ts"},"//":"biome.json + bunfig.toml live at the monorepo root since they apply repo-wide; bun.lock also lives at root (workspace-shared).",dependencies:{"@ansi-tools/parser":"^1.0.15","@opentui/core":"0.4.3","@opentui/react":"0.4.3","@xterm/addon-serialize":"^0.14.0","@xterm/addon-unicode11":"^0.9.0","@xterm/headless":"^6.0.0","node-pty":"^1.1.0",react:"^19.2.8","smol-toml":"^1.7.1",ws:"^8.21.3"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/rove-daemon":"0.7.21","@tsconfig/bun":"1.0.11","@types/bun":"1.3.14","@types/node":"25.6.2","@types/react":"^19.2.0","@vitest/coverage-v8":"2.1.9",knip:"^6.14.2","react-devtools-core":"^7.0.1","rove-bridge":"0.0.11","rove-weixin":"0.0.11",typescript:"5.8.2",vitest:"2.1.9"},trustedDependencies:[]};var q="rove";var k=q;var z="ROVE_BUN",_="ROVE_NO_BUN_BOOTSTRAP",F="ROVE_SKIP_BUN_CHECK",$=H.engines.bun.match(/\d+\.\d+\.\d+/)?.[0]??"0.0.0",L=(s)=>{try{return R(s,V.X_OK),!0}catch{return!1}},B=(s)=>s==="win32"?"bun.exe":"bun",f=(s)=>{let t=Q(s,["--version"],{encoding:"utf8",timeout:5000});if(t.error||t.status!==0)return null;return t.stdout?.split(`
2
+ import{join as n}from"node:path";import{createInterface as a}from"node:readline/promises";import{pathToFileURL as ss}from"node:url";import{spawnSync as Q}from"node:child_process";import{constants as V,accessSync as R}from"node:fs";import{homedir as e}from"node:os";import{basename as I,delimiter as U,dirname as o,join as y}from"node:path";import{fileURLToPath as T}from"node:url";var H={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/rove",version:"0.9.251",description:"Rove — the agent multiplexer for your terminal. Run coding agents on parallel tasks with isolated worktrees and persistent sessions.",keywords:["terminal","tui","cli","multiplexer","ai-agents","coding-agent","ai-coding-assistant","agentic-ai","parallel-agents","git-worktree","claude-code","codex","llm","developer-tools"],type:"module",packageManager:"bun@1.3.13",bin:{rove:"dist/cli/rove.js"},files:["dist/cli","dist/completions","dist/web","dist/web-ui","dist/skills","dist/*.wav","README.md","LICENSE"],publishConfig:{access:"public"},repository:{type:"git",url:"git+https://github.com/Sma1lboy/rove.git"},homepage:"https://rove.run",bugs:{url:"https://github.com/Sma1lboy/rove/issues"},engines:{bun:">=1.3.11"},scripts:{dev:"ROVE_DEV=1 bun --conditions=browser ./src/cli/rove.ts","dev:mock":"ROVE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:sandbox":"bun run scripts/dev-sandbox.ts run","dev:sandbox:reset":"bun run scripts/dev-sandbox.ts reset",build:"bun run scripts/build.ts","build:rubric":"bun run scripts/build-tier-rubric.ts",compile:"bun run scripts/compile.ts",typecheck:"tsc --noEmit","check-i18n":"bun run scripts/check-i18n.ts",test:"bun run test:fast && bun run test:socket","perf:golden":"bun scripts/perf-golden.ts","pty:soak":"bun scripts/pty-soak.ts","test:fast":"vitest run --passWithNoTests --minWorkers=1 --maxWorkers=8","test:socket":"ROVE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests","test:socket:coverage":"ROVE_INCLUDE_SOCKET=1 ROVE_COVERAGE_DAEMON=1 vitest run test/daemon --coverage --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests","test:behavior":"ROVE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --pool forks --minWorkers=1 --maxWorkers=1 --retry=2 --passWithNoTests","test:render":"bun scripts/render-track.mjs",coverage:"vitest run --coverage --passWithNoTests",bench:"vitest bench --run",lint:"biome check .",knip:"knip-bun",postinstall:"bun run scripts/check-preview-deps.ts || true",prepublishOnly:"bun run typecheck && bun run build","plugin-sandbox":"bun run scripts/plugin-sandbox.ts"},"//":"biome.json + bunfig.toml live at the monorepo root since they apply repo-wide; bun.lock also lives at root (workspace-shared).",dependencies:{"@ansi-tools/parser":"^1.0.15","@opentui/core":"0.4.3","@opentui/react":"0.4.3","@xterm/addon-serialize":"^0.14.0","@xterm/addon-unicode11":"^0.9.0","@xterm/headless":"^6.0.0","node-pty":"^1.1.0",react:"^19.2.8","smol-toml":"^1.7.1",ws:"^8.21.3"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/rove-daemon":"0.7.22","@tsconfig/bun":"1.0.11","@types/bun":"1.3.14","@types/node":"25.6.2","@types/react":"^19.2.0","@vitest/coverage-v8":"2.1.9",knip:"^6.14.2","react-devtools-core":"^7.0.1","rove-bridge":"0.0.12","rove-weixin":"0.0.12",typescript:"5.8.2",vitest:"2.1.9"},trustedDependencies:[]};var q="rove";var k=q;var z="ROVE_BUN",_="ROVE_NO_BUN_BOOTSTRAP",F="ROVE_SKIP_BUN_CHECK",$=H.engines.bun.match(/\d+\.\d+\.\d+/)?.[0]??"0.0.0",L=(s)=>{try{return R(s,V.X_OK),!0}catch{return!1}},B=(s)=>s==="win32"?"bun.exe":"bun",f=(s)=>{let t=Q(s,["--version"],{encoding:"utf8",timeout:5000});if(t.error||t.status!==0)return null;return t.stdout?.split(`
3
3
  `)[0]?.trim()??""};function J(s){return s.trim().match(/^v?(\d+\.\d+\.\d+)/)?.[1]??null}function X(s,t=$){let c=J(s),W=J(t);if(!c||!W)return!0;let b=c.split(".").map(Number),g=W.split(".").map(Number);for(let x=0;x<3;x++){let i=b[x]??0,r=g[x]??0;if(i!==r)return i>r}return!0}function Y(s=process.env){return s[F]==="1"}function A(s={}){let t=s.env??process.env,c=s.platform??process.platform,W=s.home??t.HOME??t.USERPROFILE??e(),b=B(c),g=[],x=t[z]?.trim();if(x)g.push(x);for(let G of(t.PATH??t.Path??"").split(U))if(G)g.push(y(G,b));let i=t.BUN_INSTALL?.trim();if(i)g.push(y(i,"bin",b));if(W)g.push(y(W,".bun","bin",b));let r=s.launcherDir;if(r)g.push(y(r,"..","..","node_modules","bun","bin",b)),g.push(y(r,"..","..","..","bun","bin",b));return g}function N(s={}){let t=s.isExecutable??L;return A(s).find((c)=>t(c))??null}function Z(s={}){let t=s.isExecutable??L,c=s.bunVersionOf??f;if(Y(s.env??process.env))return{bun:N(s),stale:null,unusable:null};let W=null,b=null;for(let g of A(s)){if(!t(g))continue;let x=c(g);if(x===null){b??=g;continue}if(X(x))return{bun:g,stale:W,unusable:b};W??={path:g,version:J(x)??x}}return{bun:null,stale:W,unusable:b}}function h(s){return o(T(s))}function C(s){return I(T(s)).replace(/\.[cm]?[jt]s$/,"")}function u(s=process.platform){return s==="win32"?["powershell","-NoProfile","-Command","irm bun.sh/install.ps1 | iex"]:["bash","-c","curl -fsSL https://bun.sh/install | bash"]}function D(s=k,t=process.platform){let c=t==="win32"?'powershell -c "irm bun.sh/install.ps1 | iex"':"curl -fsSL https://bun.sh/install | bash";return[`${s}: Rove runs on the Bun runtime, and no Bun was found on this machine.`,"","Install Bun, then run this command again:",` ${c}`," npm install -g bun # any platform, if you already have npm","","Or install Bun and Rove together in one step:"," curl -fsSL https://rove.run/install.sh | sh","",`Already have Bun somewhere unusual? Point Rove at it: ${z}=/path/to/bun`,""].join(`
4
4
  `)}function j(s,t,c=k){return[`${c}: this machine's Bun is too old for Rove — found ${t} at ${s}, need ${$} or newer.`,"","Rove's terminals are built on Bun's PTY API. An older Bun ignores it silently,","so every terminal and engine tab would open empty and stay empty.","","Upgrade Bun, then run this command again:"," bun upgrade # Bun installed itself (~/.bun)"," brew upgrade bun # Homebrew"," npm install -g bun@latest # npm-managed Bun","",`Have a newer Bun elsewhere? Point Rove at it: ${z}=/path/to/bun`,`Run on this one anyway (unsupported, terminals will be blank): ${F}=1`,""].join(`
5
5
  `)}function v(s,t=k){return[`${t}: the Bun at ${s} could not be run — \`${s} --version\` failed or never returned.`,"","Rove skipped it rather than starting through it, which would hang or fail","with a message from that binary instead of this one.","","Reinstall Bun, then run this command again:"," curl -fsSL https://bun.sh/install | bash","",`Have a working Bun elsewhere? Point Rove at it: ${z}=/path/to/bun`,""].join(`
@@ -1 +1 @@
1
- @font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAASIABAAAAAACQQAAAQuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVF4AdBEICoRkhAALIAABNgIkAzoEIAWFAAeBFAwHG2oHKJ6DceNW4lJEFHn9tEOE37LNsvkjHr7f739rn3u+OSrSxLQytE91Dw2PYtNVq3Qaw/vJ7fUBMdOj/u2ImB98cT5WUx9F13ZKt06mU7tG1sAYcM26yCRX4f/0904bmwq8hwkUUMTRX61pa9C3xlpAGYw1vOu8C2SBZZFlld7DAW82RJWmwYMI1AJCKBNCIASqdZGFmtPSNQRhMpR0EKjWTwm6z6sJ+4jqhxjovTinVdRpZaQjaQzAYjI8NgAKDJCokgunCn9oUQE8VZd/F//+v6P4F1U9gLr58yNI/dJX9BAshEoJbTDogz7ocKoUsPvES8UK/aQIUQgpGgECBVLkOEV6iASTYgNAPKdNXayhDPL7IJuAZnEYSZ0eOLc9i5Rv5/+lEi3sW/kfnCf/+fTe0sxS7CKLx5erRJkKOixEqQaoqrvx5HN4iz4VhX0gS6DjFIWUzn/fIXJRVFY1NFRVNVeFt+SYmrK6vCU6eJsnKnJj5HTESMTQZOTI3Y/tzr3rUcOsiRy/ciP50s3Mycgxmhz9GMXhjzVH30ut796NHP0UUa31/Zoa6vCH6iPvdIM0IRANaT60FablmZlZd+UKNFy9NrvnFGxb5NC2CRxR0/rIyF/WNn+35sv9r+tHVhkseuWGKkCPPh96+GXt8Lc/Sh24ujfjf+tNw1lZWreiPuHb/PSpyjdv2rf/++ZE5TSKjFdZxYsBvr1sEHl5STuHZqYR7jGYGvGBBdjcaB5bODY1GAxMjsd0wDMIzXAXODRd74DxNMtO4YuYHclgLQRzp9KlUmxptCwv9bYgvWGD2xBW7r9413fdJu+mxzvzAUYeeONQvZP4kgfqZle4jhH/MWh+UbxgtJdrLdXLymNL53PRU0D3Q6FcXTfGqGcul6vrqhgLGAVSv+IVIfZOHpu+mlLqSlnj903j8mazXDsba/wbxhS/4Oubh1c5/uXDgt4j5KtnGEy5BIJHo0ur+jD+r2qCkuP1aRVM8EpUoRYSJyqNRA38uwDvHBNo0AejO2Z+ZYLLal1QiFyFh1EDQOgSCSCpjwwKU8yDbIjroEwne0G5Qca49cYp4AlqtQNZfWTQoFb1tRpFYAmRD+HXTkV4uQhG2bg4OKmyoypAsUGtWgQXyFxYrkpODeUxvGqIZA61erXo0sFG1UBGuPgpuon8RNUG2DhovAjZCBuZwtXrU3mQGki9+pm0eVZAXoWxLWTQoYHBPrJR4WunNxIFbCHfkTyPK+sqxjxDmGArZvf79JGJ3GwEqjwc7a7NIrl/7bJ7Nzu4+n1Ow6shEPnUrtVo7cnd5Wi5qCUbBIQbNKCP95FMCSZylEV5VCiiMqqiOmrKZ/I/C0gI1fyuulVcM2E1r4MhtcV/fbCD+HwEvVzH1dGNAzFE0FTbKzyQz3gootrNbN2a4PuG0j0JOgE=)format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAAbUAA8AAAAACOgAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAABgAAAAcABQABEdQT1MAAAFwAAAAHgAAAB5EdEx1R1NVQgAAAZAAAAAnAAAAKLj8uOpPUy8yAAABuAAAAFEAAABgFwRca1NUQVQAAAIMAAAARgAAAF7mY9MfY21hcAAAAlQAAABRAAAAdAyHCodnYXNwAAACqAAAAAgAAAAIAAAAEGdseWYAAAKwAAAB6QAAAl7g5OpvaGVhZAAABJwAAAA2AAAANhSQ8UNoaGVhAAAE1AAAAB8AAAAkAcoBImhtdHgAAAT0AAAAHgAAADofBAM2bG9jYQAABRQAAAAgAAAAIATcBZ9tYXhwAAAFNAAAABwAAAAgAIcCb25hbWUAAAVQAAABEgAAAoA4pV3kcG9zdAAABmQAAABwAAAAlNdzMTB42mNgZGBg4GGAAEYgZAWTjCAeAAG0ABkAAQAAAAoAHAAcAAFERkxUAAgABAAAAAD//wAAAAAAAHjaY2BkYGDgYlADQiYXN58QBqGcxJI8Bj4GEGABEf//g0gAWkkFVQB42mNgYYpinMDAysDA1MUUwcDA4A2hGeMYjBgdgKIMDJwMUMDEzoAEvJyAxAEGXpaXzH/+XWFgYP7DqKPAwDj//nWgSjWmW0BZBQZWABNDDdYAAAB42kXIIQIBARQFwHl/QQIkWXInUAANXMOBJCcTd+KIGCjMNViq9/H0CM6P/S0j0bOwUqh08iEb8kPTXn3RiMoYhD90Nwc3AAB42lXIRwHCQBAF0JceehWAlTjhjikUgAVQA4mJLbdk5neUqHBVKWSv3XF2VCnt3AyevkVZv+sxBBbbq/6HfFP4hEcYQgEK82v1aHQ5RTs3FRQAAAAAAQAB//8AD3jabZA1tNRAFEDfTGDdfXHI2QQnZJJvK5ngDs13Welwt/78CtcS7xvcrcHKbXCtceh+wgtu437nXRCgC4BY9AGOXOAFYNHR0dzoKCGju8gJ6xiZaF3DWqcPBiSV5i2geaCgAlAJ77ghgjfiLC7KojvOZEmSXS63emXr5W7lsTLtXFMkRmks4ly+cYOEnvO2YLDNANv+9oJwhkpAAJAcHPG/1RC2BERc1ZGGMxYVWDyVSjc0NMaZELUf9e4JhCgNB3b2PiJRctuqZ0WPR8zilxutN/ji97vUBYMAnGjtzxjtK3wrDaMABo+R9KjWwNRUMppwuWS1QdfFZCIlMF2TxDGuJJlYW7OmVlvD+sx86b1hvC/l8yXf2hqZ66xbZ80yWzyD9/fzGaRzA58+nSOzYC+gw9AP+vyNqUAUhoD4lSnputbgUFPJ5O9Y+ReWlxkrc96naX08b3zk/KORb+E+VjYPmH1M6+UHeVlDtCzzGZ9FY8YMA8gPMsQA0jqaGkHT6cYSdVwl7Zs9Wzx+DyWUugPujd03T52ikrUvM26kF9PIcRmycuDBKcd3XRhPDgtnQACINzJ3fVl1tTB++3bc2S7kyD3cCQIQNMcSKaY2YOciE+d0zFbGjps6u0PILTFlRZHNJfAFnfeHtgAAAAABAAAAAjYEro52gl8PPPUAAwPoAAAAANvSppoAAAAA29rQ8vk5/tQEkgP8AAAABgACAAAAAAAAeNpjYGRgYP7z7woDA8uGn5Z/+1kmAUVQAR8Ar8AG6gB42mOKYIgCYiMkrAzCUHEbJJoBikHgCkMPAPDwCFUAAAAAABoAOwBGAFEAbwB3AKkAsQDmAQkBCQEJAQkBFgEveNpjYGRgYOBn3MGQx7CFgQ3MQwBmBiYALRoB+HjajJADbgVQEEXPZ20bQW3bthvXbr8Vp4to1KV0AV1Wb9JvZzJvzhvcB6CQL0wYzHnAj6E/yAYaDeVBNlJsMAfZxCy/QTbTy3eQLdTzGWQr3VwGuZhx2v/ZAIVUB9kc0TSUKJ8f5FIRHGPjnWs+2MKt+MYzt1xwr/jIk3JymR0X0wzIXKo7VbXjFvfLn3lTtCn7qPoB6+yyzb3qy8pdq/6hrj11fMj7OFbtEY+mrlU/516rVFCdVobplw/JEjVaCaqIYlUiUzOaW9aa/Q1idmlPXZHbCagW/B10XwaRi06VuVdMf+9DnIov6rlF8yzhUXxC/4c66Uz48UepqEN9N/Tzt2RwjOljsUUfj581AbaEXsIAAHjaY2BiAIP/qQxGQIqRAR3wA7EKw0lGJgYbRmZGFkZWRjZGdgZmRg5GTkYuRm42x6Si1LJU9tK8TAMTR1cI7WoB5btB+Zas6Ym5uYlgnoGjAZNzEF9icmlJanJ+bpJecmJxKg9IxtjADMwBAKDtHJg=)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2)format("woff2"),url(/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2)format("woff2"),url(/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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)format("woff2"),url(/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,d09GMgABAAAAAASAABAAAAAACNgAAAQlAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVEwAdBEICoRkg3gLIAABNgIkAzoEIAWEaAeBFAwHGzgHSJ4DbjN9OmtkIy0becnT/RjJ4uGfw99974/GXrhoTCqLok66NY3jTloEUdrmwCevn/Ls30xSpFlZ6UJMrW+fTNwAEdSuvSzCRANvEgnjUmw8swT+87+w7I/7qb8XlIB7NpGBjXiUjRX0b7ZpJ8+orRLzvGhWYCMdAU3BbRdPuqOeKAXuRKAWEEJJCIEQqNbLD9osq2kBviL8A4Fq4yLgAa+6DNaiAwcYOrqYHfgQcMgL3AFgG4fHHqREEUBSxUtmBfzNWxXADfviy8Kff7dA4QfFBQG6fnoX5Dh+gEEcIVRKtMIYhc/kCgsCDiarQY4QWpEKQoYTAAIJUcaHAHIXIN9BooBWhEAr0j7QzAkh1RnEWOY4wuRW8uX/f5o5W8gXcjriOUb9z/wjACRuWaWrpKIyLMQ/DUDN/TT+ErgHRpPBIRQrKCcZCvxBBCBEkSD4lKMjRblQlCvpQHPsSZE9R6K2o/vpXkGboKWbbltxx2feLT+a6KJb5293n7vTt53uwOzUO4gYc5eedhvS+a1bbdNuIiSA89cuGo25IZh6DXrJJIIUUibFUG0zt+ijO+cvnj8fjVm4cKlvN90DwzrdMmy8H9GjDyv90Xz2W10PVj3oTY7LLfwfmxMHoef+8n33R0duOxF3LPCYFXtymWNdcLBD3VF4S91+GWf8c9k7sZC6fPpnbENnCmayerBNki0ZbFUXiHV/wkxWklGmydCkaR5o0oZnlj3oSVdnZKjTITaXStOyWGYakzUgTSt1gvSs/otJL1FkzE/3e+aXvj7n+TOv9HkZ6evS4e3OXafCx8iqJfNGpQLM7rkt0ppRJ8N3gd1IjHLaROM0cLkhdf2NQjZ4bmjo2mBWKJ4CPA4IZXX9hFlPBnhxWhXzgBGQ88QeRD3j1/AD5a/JxMnL5gK5deaC2H7HvK98gngBbzfWLKD0g2ufeA7nMsQepBwDgpdhy90BzC+8DSCers8O6KKloYn0RCtKo9EM9LsAd7AgNBhFGEAsvl4K1LpCiCIF3IZHFUKvX5AqfUPBgkO+ovHpUNJtOJSN6hDWWxAigkCt9hbEXdaOHLvI6lM5gQA79LRYOpUsWBpKYu2klOQULGlGCwOzHIkSmYmZKBlQrlmCQ0mDv5SeiVyiemVqVJGyEDJhKemY1dLT0YsnpKch0UbKxExJTydIigQpkiUvYA3SVFDqFH2uNggh343VmPs2ycX0DIYwPYTigMak5AjS0ohI8zmoo4EJwypS4iVcDOuDuvRMgytHPa5LTjnoc1YiCcT0tBI3qjXxqqFomJf2PylAOHMDRp1HGBaDQCTiIC7iQSH4iEICRHMZkUlqk/KsOmVSGlOK7NIseRNZFp3NkbNaLateTmKScHGTAyu2WqQf6lD8rMNg1+lKTcpwkfvQ/7eRMwAA)format("woff2"),url(data:font/woff;base64,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)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-cyrillic-700-normal-BWTpRfYl.woff2)format("woff2"),url(/assets/jetbrains-mono-cyrillic-700-normal-CEoEElIJ.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-greek-700-normal-C6CZE3T8.woff2)format("woff2"),url(/assets/jetbrains-mono-greek-700-normal-DEigVDxa.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,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)format("woff2"),url(/assets/jetbrains-mono-vietnamese-700-normal-BDLVIk2r.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-latin-ext-700-normal-CZipNAKV.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-ext-700-normal-CxPITLHs.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-latin-700-normal-BYuf6tUa.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-700-normal-D3wTyLJW.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper:#141413;--surface:#1a1917;--inset:#2b2a27;--line:#3a3835;--line-active:#5c5853;--ink:#eae7df;--muted:#a9a39a;--subtle:#6b665f;--accent:#cc785c;--accent-soft:color-mix(in srgb, var(--accent) 14%, transparent);--focus:var(--accent);--info:#61aaf2;--diff-added:var(--success);--diff-removed:var(--error);--diff-added-bg:#9aca861a;--diff-removed-bg:#d475631a;--error:#d47563;--success:#9aca86;--warning:#e8c96b;--mono:"JetBrains Mono", "IBM Plex Mono", "SF Mono", Menlo, Consolas, ui-monospace, monospace;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--radius:8px;--radius-sm:6px;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--paper);color:var(--ink);font:13px / 1.4 var(--sans);-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}button:focus-visible,.input:focus-visible{outline:1px solid var(--focus);outline-offset:1px}.muted{color:var(--muted)}.error{color:var(--error)}.wordmark{font:700 14px var(--mono);letter-spacing:.02em;white-space:nowrap}.bracket{color:var(--accent)}.kicker{font:500 11px var(--mono);letter-spacing:.11em;text-transform:uppercase;color:var(--muted);margin:0}.kicker.is-accent{color:var(--accent)}.app{grid-template-rows:1fr auto;grid-template-columns:minmax(220px,280px) 1fr;height:100%;display:grid}.rail{border-right:1px solid var(--line);flex-direction:column;grid-row:1;min-height:0;display:flex}.rail-head{justify-content:space-between;align-items:baseline;gap:8px;padding:14px 14px 10px;display:flex}.rail-body{flex:1;padding:4px 6px 12px;overflow-y:auto}.project-head:not(:first-child){margin-top:18px}.rail:focus{outline:none}.rail:focus-within .is-cursor{box-shadow:inset 0 0 0 1px var(--focus)}.rail-search{gap:4px;padding:0 14px 8px;font-size:12px;display:flex}.rail-search .caret{color:var(--accent);animation:1s step-end infinite blink}.rail-search .muted{margin-left:6px}@keyframes blink{50%{opacity:0}}.project-head{font:700 12px var(--mono);color:var(--muted);align-items:center;gap:8px;margin:6px 8px 4px;display:flex}.project-head .rule{background:var(--line);flex:1;height:1px}.row{border-radius:var(--radius-sm);text-align:left;align-items:center;gap:8px;width:100%;min-height:26px;padding:3px 8px;display:flex;position:relative}.row:hover{background:var(--accent-soft)}.row.is-selected{background:var(--inset)}.row.is-selected:before{content:"";background:var(--focus);border-radius:1px;width:2px;position:absolute;top:4px;bottom:4px;left:-6px}.tab-row{color:var(--muted);padding-left:26px}.tab-row.is-selected{color:var(--ink)}.glyph{width:1ch;font-family:var(--mono);text-align:center;flex:none}.row-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.chips{font:11px var(--mono);flex:none;gap:6px;display:flex}.tone-accent{color:var(--accent)}.tone-muted,.chip.muted{color:var(--subtle)}.tone-attention{color:var(--error)}.tone-warning{color:var(--warning)}.tone-success{color:var(--success)}.tone-ink{color:var(--ink)}.empty{font-family:var(--mono);padding:16px 10px;font-size:12px}.empty p{margin:0 0 4px}.workspace{flex-direction:column;grid-row:1;gap:6px;min-width:0;min-height:0;padding:8px 10px 8px 8px;display:flex}.tab-strip{font-family:var(--mono);align-items:center;gap:2px;min-width:0;font-size:12px;display:flex}.tab{border-radius:var(--radius-sm);color:var(--muted);white-space:nowrap;align-items:center;gap:6px;padding:4px 10px;display:flex}.tab:hover{background:var(--accent-soft)}.tab.is-active{color:var(--ink);background:var(--inset)}.tab-index{color:var(--subtle)}.tab.is-active .tab-index{color:var(--accent)}.tab-strip-title{color:var(--subtle);text-overflow:ellipsis;white-space:nowrap;font-family:var(--sans);margin-left:auto;padding-left:12px;overflow:hidden}.pane{border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);flex:1;min-height:0;display:flex;overflow:hidden}.placeholder{font:12px var(--mono);color:var(--subtle);margin:auto}.term-pane{flex:1;min-width:0;display:flex;position:relative}.term-host{flex:1;min-width:0;padding:6px 4px 4px 8px}.term-host .xterm{height:100%}.term-notice{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);font:11px var(--mono);color:var(--muted);padding:5px 10px;position:absolute;bottom:10px;right:10px}.term-notice.is-error{color:var(--error)}.status{border-top:1px solid var(--line);background:var(--surface);font:11px var(--mono);color:var(--muted);grid-column:1/-1;align-items:center;gap:8px;padding:4px 12px;display:flex}.status .spacer{flex:1}.usage{white-space:nowrap;gap:16px;display:flex;overflow:hidden}.tone-ok{color:var(--success)}.tone-warn{color:var(--warning)}.tone-crit{color:var(--error)}.dot{background:var(--subtle);border-radius:50%;width:6px;height:6px}.dot.state-open{background:var(--success)}.dot.state-retrying{background:var(--warning)}.link{color:var(--accent)}.link:hover{text-decoration:underline}.connect{place-items:center;height:100%;padding:24px;display:grid}.connect-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);flex-direction:column;gap:12px;width:min(460px,100%);padding:24px;display:flex}.connect-card p{margin:0}.input{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);width:100%;color:var(--ink);font:12px var(--mono);padding:8px 10px}.actions{justify-content:flex-end;align-items:center;gap:14px;display:flex}.button{border-radius:var(--radius-sm);background:var(--accent);color:var(--paper);font:600 12px var(--mono);padding:6px 14px}.button:active,.row:active,.tab:active{transform:scale(.97)}@media (prefers-reduced-motion:reduce){.button:active,.row:active,.tab:active{transform:none}}.machine-head{font:700 12px var(--mono);color:var(--ink);align-items:center;gap:8px;margin:18px 8px 4px;display:flex}.machine-head .rule{background:var(--line);flex:1;height:1px}.machine-head.is-stale{color:var(--subtle)}.row.in-machine{width:calc(100% - 12px);margin-left:12px}.project-head.in-machine{margin-left:20px}.row.is-stale .row-title,.row.is-stale .glyph,.project-head.is-stale{color:var(--subtle)}.remote-notice{font:12px / 1.5 var(--mono);text-align:left;flex-direction:column;gap:8px;padding:14px;display:flex}.overlay{z-index:20;background:#0a0a098c;place-items:start center;padding-top:12vh;display:grid;position:fixed;inset:0}.dialog{color:inherit;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);flex-direction:column;gap:12px;width:min(440px,100vw - 32px);max-height:76vh;margin:0;padding:18px 20px;display:flex;position:static;box-shadow:0 12px 40px #00000059}.dialog.is-wide{width:min(620px,100vw - 32px)}.dialog-body{flex-direction:column;gap:12px;min-height:0;display:flex;overflow-y:auto}.dialog-body p{margin:0}.field{flex-direction:column;gap:6px;display:flex}.textarea{resize:vertical;min-height:72px;line-height:1.45}select.input{appearance:none;cursor:pointer}.chips-row{flex-wrap:wrap;gap:6px;display:flex}.chip-button{border:1px solid var(--line);border-radius:var(--radius-sm);font:12px var(--mono);color:var(--muted);padding:4px 10px}.chip-button:hover{background:var(--accent-soft)}.chip-button.is-active{border-color:var(--accent);color:var(--ink);background:var(--accent-soft)}.choices{margin:0;padding:0;list-style:none}.button.is-danger{background:var(--error)}.button:disabled{opacity:.5;cursor:default}.menu{z-index:30;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);flex-direction:column;min-width:200px;padding:4px;display:flex;position:fixed;box-shadow:0 8px 28px #00000059}.menu-item{border-radius:var(--radius-sm);text-align:left;justify-content:space-between;gap:24px;padding:5px 10px;font-size:13px;display:flex}.menu-key{font:11px var(--mono);color:var(--subtle)}.menu-item.is-selected{background:var(--accent-soft)}.menu-item.is-danger{color:var(--error)}.toasts{z-index:40;flex-direction:column;gap:6px;display:flex;position:fixed;bottom:34px;right:14px}.toast{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);max-width:420px;color:var(--ink);font:12px var(--mono);text-align:left;cursor:pointer;overflow-wrap:anywhere;padding:7px 12px}.toast.is-error{color:var(--error)}.inbox h2.kicker{margin-top:4px}.inbox-hints{color:var(--subtle)}.cards{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.inbox-card{flex-direction:column;align-items:stretch;gap:2px;padding:6px 10px}.inbox-line{align-items:baseline;gap:10px;min-width:0;display:flex}.inbox-badge,.inbox-age{font:11px var(--mono);flex:none}.inbox-age{color:var(--subtle)}.inbox-sub{font:11px var(--mono);color:var(--muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mono{font:12px var(--mono)}.inbox-chip:hover{color:var(--accent)}.new-task{width:auto;color:var(--muted);margin:4px 6px 10px}.tab-new{color:var(--subtle)}div.placeholder{flex-direction:column;align-items:center;gap:12px;display:flex}div.placeholder p{margin:0}.settings{grid-template-columns:140px 1fr;gap:18px;min-height:360px;display:grid}.settings-nav{border-right:1px solid var(--line);flex-direction:column;gap:2px;padding-right:10px;display:flex}.settings-tab{text-align:left;border-radius:var(--radius-sm);color:var(--muted);padding:5px 10px}.settings-tab:hover{background:var(--accent-soft)}.settings-tab.is-active{color:var(--ink);background:var(--inset)}.settings-body{flex-direction:column;gap:18px;max-height:60vh;display:flex;overflow-y:auto}.settings-group{flex-direction:column;gap:8px;display:flex}.settings-group p{margin:0;font-size:12px}.settings-rows{flex-direction:column;display:flex}.engine-row{border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:6px 4px;display:flex}.engine-check input{accent-color:var(--accent)}.engine-main{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.engine-detail{text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.engine-actions{font:11px var(--mono);gap:10px;display:flex}.prefix-hud{z-index:40;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);min-width:220px;color:var(--ink);padding:8px 12px;font-size:12px;position:fixed;bottom:34px;left:12px;box-shadow:0 8px 24px #00000059}.prefix-hud-head{margin-bottom:2px}.prefix-hud-row{color:var(--muted);gap:12px;display:flex}.prefix-hud-key{min-width:3ch;color:var(--accent)}.dialog:focus{outline:none}.page{border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);flex:1;min-height:0;padding:14px 18px;overflow-y:auto}.page:focus{outline:none}.page-title{font:700 14px var(--sans);margin:0 0 6px}.page-group{margin-top:12px}.page-group .project-head{margin-left:0}.wt-row{border-radius:var(--radius-sm);padding:5px 8px}.wt-row.is-cursor{background:var(--inset);box-shadow:inset 2px 0 0 var(--accent)}.wt-line{align-items:baseline;gap:8px;font-size:13px;display:flex}.wt-line.mono{justify-content:space-between;font-size:11px}.wt-branch{font-family:var(--mono)}.wt-path{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.page-hints{margin-top:16px;font-size:11px}.page-head{justify-content:space-between;align-items:baseline;display:flex}.update-versions b{margin-right:10px}.update-actions{flex-direction:column;margin:10px 0;display:flex}.update-action{border-radius:var(--radius-sm);text-align:left;gap:12px;padding:4px 8px;font-size:13px;display:flex}.update-action.is-cursor{background:var(--inset);box-shadow:inset 2px 0 0 var(--accent)}.update-label{min-width:14ch}.update-chip{color:var(--warning)}.release-notes h2{margin:14px 0 4px;font-size:13px}.release-notes pre,.whats-new-body pre{white-space:pre-wrap;font:12px / 1.5 var(--mono);color:var(--muted);margin:0}.whats-new-body{max-height:55vh;overflow-y:auto}.files{outline:none;flex-direction:column;grid-row:1;min-width:0;min-height:0;padding:10px 6px 8px 0;display:flex}.files:focus-within .files-tab.is-active{color:var(--accent)}.files-actions{font:11px var(--mono);justify-content:flex-end;gap:14px;padding:0 8px 8px;display:flex}.files-tabs{gap:4px;padding:0 4px 6px;display:flex}.files-tab{border-radius:var(--radius-sm);font:600 12px var(--mono);color:var(--muted);padding:3px 10px}.files-tab.is-active{color:var(--ink);background:var(--inset)}.files-scope{font:11px var(--mono);color:var(--muted);flex-wrap:wrap;gap:4px 10px;padding:0 8px 8px;display:flex}.files-body{flex:1;min-height:0;overflow-y:auto}.file-row{min-height:24px;font:12px var(--mono)}.files:not(:focus) .file-row.is-selected:before{background:var(--line-active)}.status-M{color:var(--warning)}.status-A,.status-untracked{color:var(--success)}.status-D{color:var(--error)}.status-R{color:var(--accent)}.placeholder-line{font:12px var(--mono);color:var(--subtle);margin:12px 10px}.tab-preview{cursor:default}.tab-close{color:var(--subtle);padding:0 2px}.tab-close:hover{color:var(--accent)}.term-slot{flex:1;min-width:0;display:flex}.term-slot.is-hidden{display:none}.preview{outline:none;flex-direction:column;flex:1;min-width:0;display:flex}.preview-body{min-height:0;font:12px / 1.5 var(--mono);flex:1;padding:6px 0;overflow:auto}.diff-row{white-space:pre;cursor:default;grid-template-columns:4ch 4ch 2ch 1fr;gap:0 8px;padding:0 12px;display:grid}.diff-row .gutter{color:var(--subtle);text-align:right}.diff-row .code{min-width:0}.diff-row.kind-add{background:var(--diff-added-bg)}.diff-row.kind-add .sign,.diff-row.kind-add .code{color:var(--diff-added)}.diff-row.kind-del{background:var(--diff-removed-bg)}.diff-row.kind-del .sign,.diff-row.kind-del .code{color:var(--diff-removed)}.diff-row.kind-hunk,.diff-row.kind-meta{color:var(--subtle)}.diff-row.kind-file{color:var(--ink);border-top:1px solid var(--line);margin-top:8px;padding-top:4px;font-weight:700}.diff-row.is-noted .sign{color:var(--accent)}.diff-row.is-noted{box-shadow:inset 2px 0 0 var(--accent)}.preview:focus .diff-row.is-cursor{background:var(--accent-soft)}.diff-row.is-cursor{background:var(--inset)}.preview-footer{border-top:1px solid var(--line);font:11px var(--mono);color:var(--muted);gap:10px;padding:5px 12px;display:flex}.preview-footer .spacer{flex:1}.pref-row,.pref-cycle,.pref-readonly{text-align:left;align-items:baseline;gap:10px;width:100%;padding:5px 4px;font-size:13px;display:flex}.pref-row{cursor:pointer}.pref-cycle:hover:not(:disabled){background:var(--accent-soft)}.pref-cycle .pref-label:after{content:" ›";color:var(--accent)}.pref-row input[type=checkbox]{accent-color:var(--accent);align-self:center}.pref-label{font-family:var(--mono);font-size:12px}.pref-hint{margin:0;font-size:11px}.pref-field{border:0;flex-direction:column;gap:6px;min-width:0;margin:0;padding:4px;display:flex}.pref-field legend{float:left;width:100%;margin-bottom:6px;padding:0}.pref-field .chips-row{clear:both}.pref-number{width:9ch;padding:3px 6px}.pref-readonly .pref-label{color:var(--muted)}.tier-row{border-bottom:1px solid var(--line);flex-direction:column;gap:3px;padding:8px 4px;display:flex}.tier-head{align-items:baseline;gap:12px;display:flex}.tier-head .link{margin-left:auto}.tier-editor{flex-direction:column;gap:8px;padding:8px 0 2px;display:flex}.hook-rows{font:12px var(--mono);gap:18px;padding:10px 4px;display:flex}.confirm-inline{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);flex-direction:column;gap:6px;padding:8px 10px;display:flex}.confirm-inline p{margin:0}.tone-diff-added{color:var(--diff-added)}.tone-diff-removed{color:var(--diff-removed)}.task-mark{border-radius:2px;flex:none;align-self:stretch;width:3px;margin:2px 0}.tab-row.is-two-row{align-items:flex-start}.row-caption{font-size:11px;display:block}html[data-running-title=shimmer] .task-row.is-running .row-title{background:linear-gradient(90deg, var(--ink) 0%, var(--ink) 35%, var(--accent) 50%, var(--ink) 65%, var(--ink) 100%) 0 0 / 300% 100%;color:#0000;-webkit-background-clip:text;background-clip:text;animation:2.4s linear infinite shimmer}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.pane:focus-within{border-color:var(--focus)}html[data-working-border=flow] .pane.is-working{background:linear-gradient(var(--paper), var(--paper)) padding-box, linear-gradient(90deg, var(--line), var(--task-ink,var(--focus)), var(--line), var(--task-ink,var(--focus)), var(--line)) border-box;background-size:100% 100%,300% 100%;border-color:#0000;animation:3s linear infinite flow-border}@keyframes flow-border{0%{background-position:0 0,0 0}to{background-position:0 0,-200% 0}}.tab-strip.is-tabs-hidden .tab:not(.tab-new):not(.tab-preview){display:none}@media (prefers-reduced-motion:reduce){html[data-running-title=shimmer] .task-row.is-running .row-title{color:inherit;background:0 0;animation:none}html[data-working-border=flow] .pane.is-working{animation:none}}.app{grid-template-columns:var(--rail-w,minmax(220px, 280px)) 1fr minmax(240px, 300px)}.app.is-zen{grid-template-columns:var(--rail-w,minmax(220px, 280px)) 1fr}.app.is-narrow{grid-template-columns:minmax(0,1fr)}.app.narrow-content .rail,.app.narrow-sidebar .workspace{display:none}.narrow-back{align-self:flex-start;padding:2px 6px;font-size:12px;font-weight:700}.recent-row .glyph{font-weight:700}.rail{position:relative}.rail-grip{cursor:col-resize;z-index:5;touch-action:none;width:6px;position:absolute;top:0;bottom:0;right:-3px}.rail-grip:hover,.rail-grip:active{background:var(--accent-soft)}.rail-fold-btn{color:var(--muted);z-index:6;padding:0 4px;font-weight:700;position:absolute;bottom:2px;right:8px}.rail-fold-btn:hover{color:var(--accent)}.rail.is-folded{align-items:center;overflow:hidden}.rail-fold-btn:only-child,.rail.is-folded .rail-fold-btn{right:50%;transform:translate(50%)}.rail-folded-list{flex:1;width:100%;min-height:0;padding:10px 0 24px;overflow-y:auto}.rail-folded-group{flex-direction:column;align-items:center;display:flex}.rail-folded-rule{border-top:1px solid var(--line);width:60%;margin:6px 0}.rail-folded-cell{width:100%;font:13px var(--mono);text-align:center;padding:3px 0}.rail-folded-list.is-initials .rail-folded-cell{justify-content:center;gap:8px;display:flex}.rail-folded-initials{color:var(--muted)}.rail-folded-list.is-hairline .rail-folded-cell{padding:3px 0;line-height:1}.rail-folded-cell.is-selected{background:var(--inset);box-shadow:inset 2px 0 0 var(--accent)}.hint-bar{white-space:nowrap;color:var(--muted);flex-shrink:0;align-items:baseline;font-size:11px;display:inline-flex}.hint-sep{margin:0 6px}.hint-bar .link:disabled{opacity:.5;cursor:default}.shortcut-badge{border:1px solid var(--accent);border-radius:var(--radius-sm);background:var(--surface);color:var(--accent);cursor:pointer;z-index:8;padding:1px 5px;font-size:10px;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.row.new-task,.inbox-chip,.badge-host,.hint-bar>span{position:relative}.rail-head .shortcut-badge{top:100%;right:0;transform:none}.split{flex:1;min-width:0;position:relative}.split-leaf{box-sizing:border-box;min-width:0;min-height:0;display:flex;position:absolute}.split.is-box .split-leaf{border:1px solid var(--line);border-radius:var(--radius-sm)}.split.is-line .split-leaf.has-left{border-left:1px solid var(--line)}.split.is-line .split-leaf.has-top{border-top:1px solid var(--line)}.split.is-rail .split-leaf{border-left:2px solid var(--line)}.split.is-rail .split-leaf.has-top{--mt:6px}.split.is-rule .split-leaf{border-top:1px solid var(--line)}.split.is-rule .split-leaf.has-left{--ml:8px}.split.is-rule .split-name{top:-8px}.split.is-box .split-leaf.is-active,.split.is-line .split-leaf.is-active.has-left,.split.is-line .split-leaf.is-active.has-top,.split.is-rail .split-leaf.is-active,.split.is-rule .split-leaf.is-active{border-color:var(--accent)}.split-name{background:var(--paper);color:var(--subtle);font:10px var(--mono);pointer-events:none;z-index:3;padding:0 4px;position:absolute;top:2px;right:8px}.split-leaf.is-active .split-name{color:var(--accent)}.term-scrolled{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);z-index:4;gap:12px;padding:4px 10px;font-size:11px;display:flex;position:absolute;bottom:10px;right:10px}.tone-info{color:var(--accent)}.term-search{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);font:12px var(--mono);z-index:5;align-items:center;gap:10px;padding:4px 10px;display:flex;position:absolute;bottom:8px;left:8px;right:8px}.term-search-input{min-width:0;color:var(--ink);font:inherit;background:0 0;border:0;outline:none;flex:1}.prefix-guide{z-index:40;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);width:min(560px,100vw - 24px);max-height:60vh;padding:8px 12px;font-size:12px;position:fixed;bottom:76px;left:12px;overflow-y:auto;box-shadow:0 8px 24px #00000059}.prefix-guide-head{justify-content:space-between;gap:16px;margin-bottom:6px;display:flex}.prefix-guide-body{columns:2 220px;column-gap:20px}.prefix-guide-group{break-inside:avoid;margin-bottom:8px}.prefix-guide-row{width:100%;color:var(--ink);text-align:left;gap:10px;padding:1px 0;display:flex}.prefix-guide-row:hover:not(:disabled){background:var(--accent-soft)}.prefix-guide-row:disabled{cursor:default}.palette-list{margin:8px 0;overflow-y:auto}.palette-row{border-radius:var(--radius-sm);width:100%;color:var(--ink);font:12px var(--mono);text-align:left;white-space:pre;justify-content:space-between;gap:16px;padding:3px 6px;display:flex}.palette-row.is-selected{background:var(--accent-soft)}.palette-chord{color:var(--accent)}.help-head{justify-content:space-between;gap:16px;display:flex}.help-corner{flex-direction:column;align-items:flex-end;font-size:11px;display:flex}.help-scroll{max-height:52vh;margin-top:8px;overflow-y:auto}.help-section{margin-bottom:10px}.help-title{font:700 12px var(--sans);color:var(--accent);margin:0 0 4px}.help-row{gap:12px;padding:1px 0;font-size:12px;display:flex}.help-cap{min-width:14ch;color:var(--ink)}.help-desc{flex:1}.pane-hint{white-space:nowrap;text-overflow:ellipsis;margin:0;padding:4px 14px;font-size:11px;overflow:hidden}.app-shell{flex-direction:column;height:100%;display:flex}.app-shell>.app{flex:1;height:auto;min-height:0}.daemon-banner{border-bottom:1px solid var(--warning);background:var(--inset);color:var(--warning);flex-wrap:wrap;align-items:baseline;gap:12px;padding:4px 14px;font-size:12px;display:flex}.daemon-banner span{color:var(--muted)}.taskops-hint{font:11px var(--mono);color:var(--subtle)}.taskops-path{font:12px var(--mono);word-break:break-all}.brief{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);max-height:38vh;font:12px / 1.5 var(--mono);white-space:pre-wrap;word-break:break-word;margin:0;padding:10px 12px;overflow:auto}.notes{flex-direction:column;gap:8px;max-height:44vh;display:flex;overflow-y:auto}.note{border-radius:var(--radius-sm);text-align:left;flex-direction:column;gap:2px;width:100%;padding:6px 10px;display:flex}.note.is-selected,.note:focus-visible{background:var(--accent-soft);outline:none}.note-head{font:11px var(--mono);color:var(--accent);white-space:pre}.note-text{color:var(--ink);white-space:pre-wrap;word-break:break-word}.note-confirm{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);flex-direction:column;gap:8px;padding:10px 12px;display:flex}.note-confirm p{margin:0}.row.is-moving,.project-head.is-moving{background:var(--accent-soft);box-shadow:inset 2px 0 0 var(--accent)}.project-head.is-moving:after{content:"move";font:500 10px var(--mono);letter-spacing:.11em;text-transform:uppercase;color:var(--accent)}.taskops-body{white-space:pre-line}.suggest{position:relative}.suggest-list{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);max-height:188px;font:12px var(--mono);margin:4px 0 0;padding:2px;list-style:none;overflow-y:auto}.suggest-row{text-align:left;width:100%;font:inherit;border-radius:var(--radius-sm);color:var(--muted);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;padding:3px 8px;display:block;overflow:hidden}.suggest-row.is-cursor{background:var(--accent-soft);color:var(--ink)}.suggest-row.is-accent{color:var(--accent)}.newtask-legend{font:11px var(--mono);color:var(--subtle);margin:8px 0 0}.dialog-body+div>.dialog-body{margin-top:14px}.rail-nav{flex-direction:column;padding:0 6px 8px;display:flex}.rail-nav-row{border-radius:var(--radius-sm);color:var(--muted);text-align:left;align-items:center;padding:3px 8px;display:flex}.rail-nav-row:hover{background:var(--inset)}.rail-nav-row.is-active{color:var(--ink);font-weight:700}.mono{font-family:var(--mono)}.pg-top{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.pg-top .page-title{margin:0}.pg-hint{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:11px;overflow:hidden}.pg-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.kb-page{flex-direction:column;gap:8px;display:flex;overflow:hidden}.kb-project{align-items:baseline;gap:12px;min-width:0;display:flex}.kb-project-name{color:var(--accent);white-space:nowrap;font-weight:700}.kb-project-path{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:11px;overflow:hidden}.kb-empty{margin-left:auto;font-size:12px}.kb-board{flex:1;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;min-height:0;display:grid}.kb-single{flex-direction:column;flex:1;gap:8px;min-height:0;display:flex}.kb-strip{gap:16px;font-size:12px;display:flex}.kb-strip .is-active{color:var(--accent);font-weight:700}.kb-lane{border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;min-height:0;padding:8px;display:flex}.kb-single .kb-lane{flex:1}.kb-lane-head{font:700 12px var(--mono);color:var(--muted);justify-content:space-between;gap:8px;margin:0 0 8px;display:flex}.kb-lane-in_progress .kb-lane-head{color:var(--accent)}.kb-lane-parked .kb-lane-head{color:var(--warning)}.kb-lane-done .kb-lane-head{color:var(--success)}.kb-cards{flex-direction:column;flex:1;gap:8px;min-height:0;display:flex;overflow-y:auto}.kb-cards p{margin:0;font-size:11px}.kb-card{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;flex-direction:column;flex:none;gap:4px;padding:8px 10px;display:flex}.kb-card:hover{border-color:var(--line-active)}.kb-card.is-selected{border-color:var(--accent)}.kb-card.is-attention:not(.is-selected){border-color:var(--warning)}.kb-card.is-done .kb-card-title{color:var(--muted)}.kb-card-head{justify-content:space-between;gap:8px;display:flex}.kb-card-title{overflow-wrap:anywhere;min-width:0;font-weight:700}.kb-card-body{white-space:pre-wrap;overflow-wrap:anywhere;height:2.8em;font-size:12px;overflow:hidden}.kb-card-foot{justify-content:space-between;gap:8px;font-size:11px;display:flex}.dialog.kb-drawer{width:min(680px,100vw - 32px)}.kb-drawer-head{align-items:baseline;gap:14px;display:flex}.kb-label{align-items:baseline;gap:10px;display:flex}.kb-hint{text-transform:none;letter-spacing:0}.kb-body{font-family:var(--mono);min-height:160px}.kb-group{border-radius:var(--radius-sm);border:1px solid #0000;padding:4px}.kb-group:focus{border-color:var(--accent);outline:none}.kb-places{flex-direction:column;align-items:flex-start;gap:2px;display:flex}.kb-place{font:12px var(--mono);color:var(--muted);white-space:pre}.kb-place.is-active{color:var(--accent);font-weight:700}.kb-legend{font-size:11px}.kb-section{flex-direction:column;gap:4px;display:flex}.kb-section p{margin:0}.kb-event{gap:8px;font-size:12px;display:flex}.kb-age{text-align:right;min-width:4ch}.pg-list{flex-direction:column;gap:6px;margin-top:10px;display:flex}.pg-row{border:1px solid var(--line);border-radius:var(--radius-sm);cursor:pointer;align-items:baseline;gap:10px;min-width:0;padding:7px 10px;display:flex}.pg-row.is-cursor{border-color:var(--accent);background:var(--inset)}.pg-row .pg-name{white-space:nowrap;font-weight:700}.pg-row.is-off .pg-name{color:var(--muted)}.pg-row .pg-grow{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.pg-detail{border:1px solid var(--line);border-radius:var(--radius);gap:24px;margin-top:10px;padding:12px;display:flex}.pg-detail>div{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.pg-detail p,.pg-detail h2{margin:0}.pg-prompt{white-space:pre-wrap;overflow-wrap:anywhere}.pg-run{font-size:12px}.pg-response{white-space:pre-wrap;overflow-wrap:anywhere;font-size:12px}.pg-notice{margin:8px 0 0;font-size:12px}.pg-cron{gap:18px;padding:6px 4px;display:flex}.pg-cron button{border-radius:var(--radius-sm);text-align:left;min-width:5ch;font:13px var(--mono);border:1px solid #0000;flex-direction:column;gap:2px;padding:4px 6px;display:flex}.pg-cron button span{color:var(--subtle);font-size:10px}.pg-cron button.is-active{border-color:var(--accent);color:var(--accent);font-weight:700}.pg-cron:focus{outline:none}.pg-issue-line{align-items:baseline;gap:10px;min-width:0;display:flex}.pg-issue-line .pg-num{color:var(--muted);white-space:nowrap}.pg-issue-sub{color:var(--muted);gap:10px;padding-left:4ch;font-size:12px;display:flex}.pg-issue-sub .pg-grow{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.pg-issue{border-radius:var(--radius-sm);cursor:pointer;border-left:2px solid #0000;flex-direction:column;gap:2px;padding:6px 10px;display:flex}.pg-issue.is-cursor{background:var(--inset);border-left-color:var(--accent)}.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}.welcome{max-width:72ch;font:12px / 1.5 var(--mono);flex-direction:column;gap:10px;margin:0 auto;padding:28px 20px;display:flex;overflow-y:auto}.welcome p,.welcome dl,.welcome dd{margin:0}.welcome-title{font:600 14px var(--mono);color:var(--accent);margin:0}.welcome-steps{flex-direction:column;gap:2px;padding-top:6px;display:flex}.welcome-step{gap:14px;display:flex}.welcome-cap{color:var(--accent);flex:0 0 8ch}.welcome-env,.welcome-start{flex-direction:column;gap:6px;padding-top:6px;display:flex}.welcome-start .button{align-self:flex-start}.welcome-fix{flex-direction:column;gap:2px;display:flex}.welcome-docs{opacity:.7;padding-top:6px}
1
+ @font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAASIABAAAAAACQQAAAQuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVF4AdBEICoRkhAALIAABNgIkAzoEIAWFAAeBFAwHG2oHKJ6DceNW4lJEFHn9tEOE37LNsvkjHr7f739rn3u+OSrSxLQytE91Dw2PYtNVq3Qaw/vJ7fUBMdOj/u2ImB98cT5WUx9F13ZKt06mU7tG1sAYcM26yCRX4f/0904bmwq8hwkUUMTRX61pa9C3xlpAGYw1vOu8C2SBZZFlld7DAW82RJWmwYMI1AJCKBNCIASqdZGFmtPSNQRhMpR0EKjWTwm6z6sJ+4jqhxjovTinVdRpZaQjaQzAYjI8NgAKDJCokgunCn9oUQE8VZd/F//+v6P4F1U9gLr58yNI/dJX9BAshEoJbTDogz7ocKoUsPvES8UK/aQIUQgpGgECBVLkOEV6iASTYgNAPKdNXayhDPL7IJuAZnEYSZ0eOLc9i5Rv5/+lEi3sW/kfnCf/+fTe0sxS7CKLx5erRJkKOixEqQaoqrvx5HN4iz4VhX0gS6DjFIWUzn/fIXJRVFY1NFRVNVeFt+SYmrK6vCU6eJsnKnJj5HTESMTQZOTI3Y/tzr3rUcOsiRy/ciP50s3Mycgxmhz9GMXhjzVH30ut796NHP0UUa31/Zoa6vCH6iPvdIM0IRANaT60FablmZlZd+UKNFy9NrvnFGxb5NC2CRxR0/rIyF/WNn+35sv9r+tHVhkseuWGKkCPPh96+GXt8Lc/Sh24ujfjf+tNw1lZWreiPuHb/PSpyjdv2rf/++ZE5TSKjFdZxYsBvr1sEHl5STuHZqYR7jGYGvGBBdjcaB5bODY1GAxMjsd0wDMIzXAXODRd74DxNMtO4YuYHclgLQRzp9KlUmxptCwv9bYgvWGD2xBW7r9413fdJu+mxzvzAUYeeONQvZP4kgfqZle4jhH/MWh+UbxgtJdrLdXLymNL53PRU0D3Q6FcXTfGqGcul6vrqhgLGAVSv+IVIfZOHpu+mlLqSlnj903j8mazXDsba/wbxhS/4Oubh1c5/uXDgt4j5KtnGEy5BIJHo0ur+jD+r2qCkuP1aRVM8EpUoRYSJyqNRA38uwDvHBNo0AejO2Z+ZYLLal1QiFyFh1EDQOgSCSCpjwwKU8yDbIjroEwne0G5Qca49cYp4AlqtQNZfWTQoFb1tRpFYAmRD+HXTkV4uQhG2bg4OKmyoypAsUGtWgQXyFxYrkpODeUxvGqIZA61erXo0sFG1UBGuPgpuon8RNUG2DhovAjZCBuZwtXrU3mQGki9+pm0eVZAXoWxLWTQoYHBPrJR4WunNxIFbCHfkTyPK+sqxjxDmGArZvf79JGJ3GwEqjwc7a7NIrl/7bJ7Nzu4+n1Ow6shEPnUrtVo7cnd5Wi5qCUbBIQbNKCP95FMCSZylEV5VCiiMqqiOmrKZ/I/C0gI1fyuulVcM2E1r4MhtcV/fbCD+HwEvVzH1dGNAzFE0FTbKzyQz3gootrNbN2a4PuG0j0JOgE=)format("woff2"),url(data:font/woff;base64,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)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2)format("woff2"),url(/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2)format("woff2"),url(/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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)format("woff2"),url(/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,d09GMgABAAAAAASAABAAAAAACNgAAAQlAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVEwAdBEICoRkg3gLIAABNgIkAzoEIAWEaAeBFAwHGzgHSJ4DbjN9OmtkIy0becnT/RjJ4uGfw99974/GXrhoTCqLok66NY3jTloEUdrmwCevn/Ls30xSpFlZ6UJMrW+fTNwAEdSuvSzCRANvEgnjUmw8swT+87+w7I/7qb8XlIB7NpGBjXiUjRX0b7ZpJ8+orRLzvGhWYCMdAU3BbRdPuqOeKAXuRKAWEEJJCIEQqNbLD9osq2kBviL8A4Fq4yLgAa+6DNaiAwcYOrqYHfgQcMgL3AFgG4fHHqREEUBSxUtmBfzNWxXADfviy8Kff7dA4QfFBQG6fnoX5Dh+gEEcIVRKtMIYhc/kCgsCDiarQY4QWpEKQoYTAAIJUcaHAHIXIN9BooBWhEAr0j7QzAkh1RnEWOY4wuRW8uX/f5o5W8gXcjriOUb9z/wjACRuWaWrpKIyLMQ/DUDN/TT+ErgHRpPBIRQrKCcZCvxBBCBEkSD4lKMjRblQlCvpQHPsSZE9R6K2o/vpXkGboKWbbltxx2feLT+a6KJb5293n7vTt53uwOzUO4gYc5eedhvS+a1bbdNuIiSA89cuGo25IZh6DXrJJIIUUibFUG0zt+ijO+cvnj8fjVm4cKlvN90DwzrdMmy8H9GjDyv90Xz2W10PVj3oTY7LLfwfmxMHoef+8n33R0duOxF3LPCYFXtymWNdcLBD3VF4S91+GWf8c9k7sZC6fPpnbENnCmayerBNki0ZbFUXiHV/wkxWklGmydCkaR5o0oZnlj3oSVdnZKjTITaXStOyWGYakzUgTSt1gvSs/otJL1FkzE/3e+aXvj7n+TOv9HkZ6evS4e3OXafCx8iqJfNGpQLM7rkt0ppRJ8N3gd1IjHLaROM0cLkhdf2NQjZ4bmjo2mBWKJ4CPA4IZXX9hFlPBnhxWhXzgBGQ88QeRD3j1/AD5a/JxMnL5gK5deaC2H7HvK98gngBbzfWLKD0g2ufeA7nMsQepBwDgpdhy90BzC+8DSCers8O6KKloYn0RCtKo9EM9LsAd7AgNBhFGEAsvl4K1LpCiCIF3IZHFUKvX5AqfUPBgkO+ovHpUNJtOJSN6hDWWxAigkCt9hbEXdaOHLvI6lM5gQA79LRYOpUsWBpKYu2klOQULGlGCwOzHIkSmYmZKBlQrlmCQ0mDv5SeiVyiemVqVJGyEDJhKemY1dLT0YsnpKch0UbKxExJTydIigQpkiUvYA3SVFDqFH2uNggh343VmPs2ycX0DIYwPYTigMak5AjS0ohI8zmoo4EJwypS4iVcDOuDuvRMgytHPa5LTjnoc1YiCcT0tBI3qjXxqqFomJf2PylAOHMDRp1HGBaDQCTiIC7iQSH4iEICRHMZkUlqk/KsOmVSGlOK7NIseRNZFp3NkbNaLateTmKScHGTAyu2WqQf6lD8rMNg1+lKTcpwkfvQ/7eRMwAA)format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAAbAAA8AAAAACLwAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAABgAAAAcABQABEdQT1MAAAFwAAAAHgAAAB5EdEx1R1NVQgAAAZAAAAAnAAAAKLj8uOpPUy8yAAABuAAAAFEAAABgGDBcS1NUQVQAAAIMAAAAPgAAAEzrJ8wpY21hcAAAAkwAAABRAAAAdAyHCodnYXNwAAACoAAAAAgAAAAIAAAAEGdseWYAAAKoAAAB6wAAAmCgFyn6aGVhZAAABJQAAAA2AAAANhSU8UNoaGVhAAAEzAAAAB8AAAAkAc0A/2htdHgAAATsAAAAHwAAADoe9gKVbG9jYQAABQwAAAAgAAAAIATdBZ9tYXhwAAAFLAAAABwAAAAgAIcCb25hbWUAAAVIAAABBwAAAmg1nlsfcG9zdAAABlAAAABwAAAAlNdzMTB42mNgZGBg4GGAAEYgZAWTjCAeAAG0ABkAAQAAAAoAHAAcAAFERkxUAAgABAAAAAD//wAAAAAAAHjaY2BkYGDgYlADQiYXN58QBqGcxJI8Bj4GEGABEf//g0gAWkkFVQB42mNgYYpi2sPAysDA1MUUwcDA4A2hGeMYjBgdgKIMDJwMUMDEzoAEvJyAxAIGXpaXzH/+XWFgYP7DqKPAwDj//nWgSjWmW0BZBQZWAB8jDeMAAAB42gXBsQ1AABQFwHufiI5CYQBDaVVIlBLLmckM7kT0CpPCop79uIPz3q4MojUrSFcvtVIfGlEZQfgB9IwGBAAAeNpVyEcBwkAQBdCXHnoVgJU44Y4pFIAFUAOJiS23ZOZ3lKhwVSlkr91xdlQp7dwMnr5FWb/rMQQW26v+h3xT+IRHGEIBCvNr9Wh0OUU7NxUUAAAAAAEAAf//AA942m0QNZQUMfQn2Zt1Gcdhd2Dt/DLJrOLu0OHu7u4uJf3D+odLhUOLu0MLJVQ7S3C4u+S7/w8EJgIgFz8XkgR+ACrH5V5xGaH4RHTSPY7q3KsCH+LnlWQLLrqAi4DBAsBM5HghBkBVqlopy6vSVDKZkiSvdenY5e3p6+k+R+qCMUKioe/Jp08j82bzGEUZ0wTV6s8K5AJOAgIQncPd2rNGBEVgCms/0U1oVCbUNAyTc8ehRP70eNfKsEI8cnjZzsfIj+5VuhVisUK3itvofhX1fmViCTwAQGBo9QuO4Y8QEZ4eADWJJJNtTlsMXdYkKdXCGbN0zSCU2UkrIemobtGGDYsWbcjNGcKd57ncc0c0DqybjfKz166d7d7pP9NZUrYXL7bLaMhkViox0TNTHYkbcVL09P/Tswlk6ATWj55Jxmz+vauh6/+2Tf1tO2huPj930E/KC2+LxbcFzooBNrPfoX4zGJ/+nfEFBdalCyu878DyeQbod2dQAUxGqNoNm6bDHQEqJfrnWzvmeQM+LJ7HXyPN3Xbz3DmcdM/pmR4B8WI9NR2Nqjw/B4DgOsmiM+QCEADVod7rC/euJNnDh4VnK0mgF8ITBkDielQzaAsXTEJ1o6fPyFpW7YzpJDG+fzydjvcfD98ArHSFeAAAAQAAAAI2BCpkDTZfDzz1AAMD6AAAAADb0qaaAAAAANva0PL5PP7UBJID/AABAAYAAgAAAAAAAHjaY2BkYGD+8+8KAwPLhp82f3NYJgFFUAEfAK0mBsoAeNpjimCIAmJlJCwOxR5ArIlEM0AxCBxiqAMA3bsHpgAAAAAaADsARgBRAG4AdgCoALAA5QEKAQoBCgEKARcBMHjaY2BkYGDgZ9zBkMewhYENzEMAZgYmAC0aAfh42oyQA25FUQBET20EtW27DWrbcfVtcx1dzV9V40adpLdmXiZzMnfmCSjlnhyycouATFa14SwaeTScTSEPhnOYJmM4l+7XbR71pA3n08ml4XL12585C0qpNpz/ds+sCuXFhitFcIwPD9d42SIsd+Pglgsscht2ZZIuPyHmGWFEfksQh5KweFhy4Jb7lNp0fsA6u2xjIcyysmsceNXaU8MrDSn14eaOc3WCaI9OaGWcYWlM19d16+u+9XX/1l9gW+nCv55q/NdnrEh+EgRf/4LejlEk0akSi/z3tzwkKHeqc4v2LBGR25UFUZPeL3/WhgM11LthmKclg2NGH4st+nj8qQkARipb8wB42mNgYgCD/6kMRkCKkQEd8AOxCsNJRiYGG0ZmRhZGVkY2RnYGZkYORk5GLkZuNsekotSyVPbSvEwDE0dXCO1qAeW7QfmWrOmJubmJYJ6BowGTcxBfYnJpSWpyfm6SXnJicSoPSMbYwAzMAQCg7RyY)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-cyrillic-700-normal-BWTpRfYl.woff2)format("woff2"),url(/assets/jetbrains-mono-cyrillic-700-normal-CEoEElIJ.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-greek-700-normal-C6CZE3T8.woff2)format("woff2"),url(/assets/jetbrains-mono-greek-700-normal-DEigVDxa.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,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)format("woff2"),url(/assets/jetbrains-mono-vietnamese-700-normal-BDLVIk2r.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-latin-ext-700-normal-CZipNAKV.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-ext-700-normal-CxPITLHs.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-latin-700-normal-BYuf6tUa.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-700-normal-D3wTyLJW.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper:#141413;--surface:#1a1917;--inset:#2b2a27;--line:#3a3835;--line-active:#5c5853;--ink:#eae7df;--muted:#a9a39a;--subtle:#6b665f;--accent:#cc785c;--accent-soft:color-mix(in srgb, var(--accent) 14%, transparent);--focus:var(--accent);--info:#61aaf2;--diff-added:var(--success);--diff-removed:var(--error);--diff-added-bg:#9aca861a;--diff-removed-bg:#d475631a;--error:#d47563;--success:#9aca86;--warning:#e8c96b;--mono:"JetBrains Mono", "IBM Plex Mono", "SF Mono", Menlo, Consolas, ui-monospace, monospace;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--radius:8px;--radius-sm:6px;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--paper);color:var(--ink);font:13px / 1.4 var(--sans);-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}button:focus-visible,.input:focus-visible{outline:1px solid var(--focus);outline-offset:1px}.muted{color:var(--muted)}.error{color:var(--error)}.wordmark{font:700 14px var(--mono);letter-spacing:.02em;white-space:nowrap}.bracket{color:var(--accent)}.kicker{font:500 11px var(--mono);letter-spacing:.11em;text-transform:uppercase;color:var(--muted);margin:0}.kicker.is-accent{color:var(--accent)}.app{grid-template-rows:1fr auto;grid-template-columns:minmax(220px,280px) 1fr;height:100%;display:grid}.rail{border-right:1px solid var(--line);flex-direction:column;grid-row:1;min-height:0;display:flex}.rail-head{justify-content:space-between;align-items:baseline;gap:8px;padding:14px 14px 10px;display:flex}.rail-body{flex:1;padding:4px 6px 12px;overflow-y:auto}.project-head:not(:first-child){margin-top:18px}.rail:focus{outline:none}.rail:focus-within .is-cursor{box-shadow:inset 0 0 0 1px var(--focus)}.rail-search{gap:4px;padding:0 14px 8px;font-size:12px;display:flex}.rail-search .caret{color:var(--accent);animation:1s step-end infinite blink}.rail-search .muted{margin-left:6px}@keyframes blink{50%{opacity:0}}.project-head{font:700 12px var(--mono);color:var(--muted);align-items:center;gap:8px;margin:6px 8px 4px;display:flex}.project-head .rule{background:var(--line);flex:1;height:1px}.row{border-radius:var(--radius-sm);text-align:left;align-items:center;gap:8px;width:100%;min-height:26px;padding:3px 8px;display:flex;position:relative}.row:hover{background:var(--accent-soft)}.row.is-selected{background:var(--inset)}.row.is-selected:before{content:"";background:var(--focus);border-radius:1px;width:2px;position:absolute;top:4px;bottom:4px;left:-6px}.tab-row{color:var(--muted);padding-left:26px}.tab-row.is-selected{color:var(--ink)}.glyph{width:1ch;font-family:var(--mono);text-align:center;flex:none}.row-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.chips{font:11px var(--mono);flex:none;gap:6px;display:flex}.tone-accent{color:var(--accent)}.tone-muted,.chip.muted{color:var(--subtle)}.tone-attention{color:var(--error)}.tone-warning{color:var(--warning)}.tone-success{color:var(--success)}.tone-ink{color:var(--ink)}.empty{font-family:var(--mono);padding:16px 10px;font-size:12px}.empty p{margin:0 0 4px}.workspace{flex-direction:column;grid-row:1;gap:6px;min-width:0;min-height:0;padding:8px 10px 8px 8px;display:flex}.tab-strip{font-family:var(--mono);align-items:center;gap:2px;min-width:0;font-size:12px;display:flex}.tab{border-radius:var(--radius-sm);color:var(--muted);white-space:nowrap;align-items:center;gap:6px;padding:4px 10px;display:flex}.tab:hover{background:var(--accent-soft)}.tab.is-active{color:var(--ink);background:var(--inset)}.tab-index{color:var(--subtle)}.tab.is-active .tab-index{color:var(--accent)}.tab-strip-title{color:var(--subtle);text-overflow:ellipsis;white-space:nowrap;font-family:var(--sans);margin-left:auto;padding-left:12px;overflow:hidden}.pane{border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);flex:1;min-height:0;display:flex;overflow:hidden}.placeholder{font:12px var(--mono);color:var(--subtle);margin:auto}.term-pane{flex:1;min-width:0;display:flex;position:relative}.term-host{flex:1;min-width:0;padding:6px 4px 4px 8px}.term-host .xterm{height:100%}.term-notice{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);font:11px var(--mono);color:var(--muted);padding:5px 10px;position:absolute;bottom:10px;right:10px}.term-notice.is-error{color:var(--error)}.status{border-top:1px solid var(--line);background:var(--surface);font:11px var(--mono);color:var(--muted);grid-column:1/-1;align-items:center;gap:8px;padding:4px 12px;display:flex}.status .spacer{flex:1}.usage{white-space:nowrap;gap:16px;display:flex;overflow:hidden}.tone-ok{color:var(--success)}.tone-warn{color:var(--warning)}.tone-crit{color:var(--error)}.dot{background:var(--subtle);border-radius:50%;width:6px;height:6px}.dot.state-open{background:var(--success)}.dot.state-retrying{background:var(--warning)}.link{color:var(--accent)}.link:hover{text-decoration:underline}.connect{place-items:center;height:100%;padding:24px;display:grid}.connect-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);flex-direction:column;gap:12px;width:min(460px,100%);padding:24px;display:flex}.connect-card p{margin:0}.input{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);width:100%;color:var(--ink);font:12px var(--mono);padding:8px 10px}.actions{justify-content:flex-end;align-items:center;gap:14px;display:flex}.button{border-radius:var(--radius-sm);background:var(--accent);color:var(--paper);font:600 12px var(--mono);padding:6px 14px}.button:active,.row:active,.tab:active{transform:scale(.97)}@media (prefers-reduced-motion:reduce){.button:active,.row:active,.tab:active{transform:none}}.machine-head{font:700 12px var(--mono);color:var(--ink);align-items:center;gap:8px;margin:18px 8px 4px;display:flex}.machine-head .rule{background:var(--line);flex:1;height:1px}.machine-head.is-stale{color:var(--subtle)}.row.in-machine{width:calc(100% - 12px);margin-left:12px}.project-head.in-machine{margin-left:20px}.row.is-stale .row-title,.row.is-stale .glyph,.project-head.is-stale{color:var(--subtle)}.remote-notice{font:12px / 1.5 var(--mono);text-align:left;flex-direction:column;gap:8px;padding:14px;display:flex}.overlay{z-index:20;background:#0a0a098c;place-items:start center;padding-top:12vh;display:grid;position:fixed;inset:0}.dialog{color:inherit;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);flex-direction:column;gap:12px;width:min(440px,100vw - 32px);max-height:76vh;margin:0;padding:18px 20px;display:flex;position:static;box-shadow:0 12px 40px #00000059}.dialog.is-wide{width:min(620px,100vw - 32px)}.dialog-body{flex-direction:column;gap:12px;min-height:0;display:flex;overflow-y:auto}.dialog-body p{margin:0}.field{flex-direction:column;gap:6px;display:flex}.textarea{resize:vertical;min-height:72px;line-height:1.45}select.input{appearance:none;cursor:pointer}.chips-row{flex-wrap:wrap;gap:6px;display:flex}.chip-button{border:1px solid var(--line);border-radius:var(--radius-sm);font:12px var(--mono);color:var(--muted);padding:4px 10px}.chip-button:hover{background:var(--accent-soft)}.chip-button.is-active{border-color:var(--accent);color:var(--ink);background:var(--accent-soft)}.choices{margin:0;padding:0;list-style:none}.button.is-danger{background:var(--error)}.button:disabled{opacity:.5;cursor:default}.menu{z-index:30;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);flex-direction:column;min-width:200px;padding:4px;display:flex;position:fixed;box-shadow:0 8px 28px #00000059}.menu-item{border-radius:var(--radius-sm);text-align:left;justify-content:space-between;gap:24px;padding:5px 10px;font-size:13px;display:flex}.menu-key{font:11px var(--mono);color:var(--subtle)}.menu-item.is-selected{background:var(--accent-soft)}.menu-item.is-danger{color:var(--error)}.toasts{z-index:40;flex-direction:column;gap:6px;display:flex;position:fixed;bottom:34px;right:14px}.toast{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);max-width:420px;color:var(--ink);font:12px var(--mono);text-align:left;cursor:pointer;overflow-wrap:anywhere;padding:7px 12px}.toast.is-error{color:var(--error)}.inbox h2.kicker{margin-top:4px}.inbox-hints{color:var(--subtle)}.cards{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.inbox-card{flex-direction:column;align-items:stretch;gap:2px;padding:6px 10px}.inbox-line{align-items:baseline;gap:10px;min-width:0;display:flex}.inbox-badge,.inbox-age{font:11px var(--mono);flex:none}.inbox-age{color:var(--subtle)}.inbox-sub{font:11px var(--mono);color:var(--muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mono{font:12px var(--mono)}.inbox-chip:hover{color:var(--accent)}.new-task{width:auto;color:var(--muted);margin:4px 6px 10px}.tab-new{color:var(--subtle)}div.placeholder{flex-direction:column;align-items:center;gap:12px;display:flex}div.placeholder p{margin:0}.settings{grid-template-columns:140px 1fr;gap:18px;min-height:360px;display:grid}.settings-nav{border-right:1px solid var(--line);flex-direction:column;gap:2px;padding-right:10px;display:flex}.settings-tab{text-align:left;border-radius:var(--radius-sm);color:var(--muted);padding:5px 10px}.settings-tab:hover{background:var(--accent-soft)}.settings-tab.is-active{color:var(--ink);background:var(--inset)}.settings-body{flex-direction:column;gap:18px;max-height:60vh;display:flex;overflow-y:auto}.settings-group{flex-direction:column;gap:8px;display:flex}.settings-group p{margin:0;font-size:12px}.settings-rows{flex-direction:column;display:flex}.engine-row{border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:6px 4px;display:flex}.engine-check input{accent-color:var(--accent)}.engine-main{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.engine-detail{text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.engine-actions{font:11px var(--mono);gap:10px;display:flex}.prefix-hud{z-index:40;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);min-width:220px;color:var(--ink);padding:8px 12px;font-size:12px;position:fixed;bottom:34px;left:12px;box-shadow:0 8px 24px #00000059}.prefix-hud-head{margin-bottom:2px}.prefix-hud-row{color:var(--muted);gap:12px;display:flex}.prefix-hud-key{min-width:3ch;color:var(--accent)}.dialog:focus{outline:none}.page{border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);flex:1;min-height:0;padding:14px 18px;overflow-y:auto}.page:focus{outline:none}.page-title{font:700 14px var(--sans);margin:0 0 6px}.page-group{margin-top:12px}.page-group .project-head{margin-left:0}.wt-row{border-radius:var(--radius-sm);padding:5px 8px}.wt-row.is-cursor{background:var(--inset);box-shadow:inset 2px 0 0 var(--accent)}.wt-line{align-items:baseline;gap:8px;font-size:13px;display:flex}.wt-line.mono{justify-content:space-between;font-size:11px}.wt-branch{font-family:var(--mono)}.wt-path{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.page-hints{margin-top:16px;font-size:11px}.page-head{justify-content:space-between;align-items:baseline;display:flex}.update-versions b{margin-right:10px}.update-actions{flex-direction:column;margin:10px 0;display:flex}.update-action{border-radius:var(--radius-sm);text-align:left;gap:12px;padding:4px 8px;font-size:13px;display:flex}.update-action.is-cursor{background:var(--inset);box-shadow:inset 2px 0 0 var(--accent)}.update-label{min-width:14ch}.update-chip{color:var(--warning)}.release-notes h2{margin:14px 0 4px;font-size:13px}.release-notes pre,.whats-new-body pre{white-space:pre-wrap;font:12px / 1.5 var(--mono);color:var(--muted);margin:0}.whats-new-body{max-height:55vh;overflow-y:auto}.files{outline:none;flex-direction:column;grid-row:1;min-width:0;min-height:0;padding:10px 6px 8px 0;display:flex}.files:focus-within .files-tab.is-active{color:var(--accent)}.files-actions{font:11px var(--mono);justify-content:flex-end;gap:14px;padding:0 8px 8px;display:flex}.files-tabs{gap:4px;padding:0 4px 6px;display:flex}.files-tab{border-radius:var(--radius-sm);font:600 12px var(--mono);color:var(--muted);padding:3px 10px}.files-tab.is-active{color:var(--ink);background:var(--inset)}.files-scope{font:11px var(--mono);color:var(--muted);flex-wrap:wrap;gap:4px 10px;padding:0 8px 8px;display:flex}.files-body{flex:1;min-height:0;overflow-y:auto}.file-row{min-height:24px;font:12px var(--mono)}.files:not(:focus) .file-row.is-selected:before{background:var(--line-active)}.status-M{color:var(--warning)}.status-A,.status-untracked{color:var(--success)}.status-D{color:var(--error)}.status-R{color:var(--accent)}.placeholder-line{font:12px var(--mono);color:var(--subtle);margin:12px 10px}.tab-preview{cursor:default}.tab-close{color:var(--subtle);padding:0 2px}.tab-close:hover{color:var(--accent)}.term-slot{flex:1;min-width:0;display:flex}.term-slot.is-hidden{display:none}.preview{outline:none;flex-direction:column;flex:1;min-width:0;display:flex}.preview-body{min-height:0;font:12px / 1.5 var(--mono);flex:1;padding:6px 0;overflow:auto}.diff-row{white-space:pre;cursor:default;grid-template-columns:4ch 4ch 2ch 1fr;gap:0 8px;padding:0 12px;display:grid}.diff-row .gutter{color:var(--subtle);text-align:right}.diff-row .code{min-width:0}.diff-row.kind-add{background:var(--diff-added-bg)}.diff-row.kind-add .sign,.diff-row.kind-add .code{color:var(--diff-added)}.diff-row.kind-del{background:var(--diff-removed-bg)}.diff-row.kind-del .sign,.diff-row.kind-del .code{color:var(--diff-removed)}.diff-row.kind-hunk,.diff-row.kind-meta{color:var(--subtle)}.diff-row.kind-file{color:var(--ink);border-top:1px solid var(--line);margin-top:8px;padding-top:4px;font-weight:700}.diff-row.is-noted .sign{color:var(--accent)}.diff-row.is-noted{box-shadow:inset 2px 0 0 var(--accent)}.preview:focus .diff-row.is-cursor{background:var(--accent-soft)}.diff-row.is-cursor{background:var(--inset)}.preview-footer{border-top:1px solid var(--line);font:11px var(--mono);color:var(--muted);gap:10px;padding:5px 12px;display:flex}.preview-footer .spacer{flex:1}.pref-row,.pref-cycle,.pref-readonly{text-align:left;align-items:baseline;gap:10px;width:100%;padding:5px 4px;font-size:13px;display:flex}.pref-row{cursor:pointer}.pref-cycle:hover:not(:disabled){background:var(--accent-soft)}.pref-cycle .pref-label:after{content:" ›";color:var(--accent)}.pref-row input[type=checkbox]{accent-color:var(--accent);align-self:center}.pref-label{font-family:var(--mono);font-size:12px}.pref-hint{margin:0;font-size:11px}.pref-field{border:0;flex-direction:column;gap:6px;min-width:0;margin:0;padding:4px;display:flex}.pref-field legend{float:left;width:100%;margin-bottom:6px;padding:0}.pref-field .chips-row{clear:both}.pref-number{width:9ch;padding:3px 6px}.pref-readonly .pref-label{color:var(--muted)}.tier-row{border-bottom:1px solid var(--line);flex-direction:column;gap:3px;padding:8px 4px;display:flex}.tier-head{align-items:baseline;gap:12px;display:flex}.tier-head .link{margin-left:auto}.tier-editor{flex-direction:column;gap:8px;padding:8px 0 2px;display:flex}.hook-rows{font:12px var(--mono);gap:18px;padding:10px 4px;display:flex}.confirm-inline{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);flex-direction:column;gap:6px;padding:8px 10px;display:flex}.confirm-inline p{margin:0}.tone-diff-added{color:var(--diff-added)}.tone-diff-removed{color:var(--diff-removed)}.task-mark{border-radius:2px;flex:none;align-self:stretch;width:3px;margin:2px 0}.tab-row.is-two-row{align-items:flex-start}.row-caption{font-size:11px;display:block}html[data-running-title=shimmer] .task-row.is-running .row-title{background:linear-gradient(90deg, var(--ink) 0%, var(--ink) 35%, var(--accent) 50%, var(--ink) 65%, var(--ink) 100%) 0 0 / 300% 100%;color:#0000;-webkit-background-clip:text;background-clip:text;animation:2.4s linear infinite shimmer}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.pane:focus-within{border-color:var(--focus)}html[data-working-border=flow] .pane.is-working{background:linear-gradient(var(--paper), var(--paper)) padding-box, linear-gradient(90deg, var(--line), var(--task-ink,var(--focus)), var(--line), var(--task-ink,var(--focus)), var(--line)) border-box;background-size:100% 100%,300% 100%;border-color:#0000;animation:3s linear infinite flow-border}@keyframes flow-border{0%{background-position:0 0,0 0}to{background-position:0 0,-200% 0}}.tab-strip.is-tabs-hidden .tab:not(.tab-new):not(.tab-preview){display:none}@media (prefers-reduced-motion:reduce){html[data-running-title=shimmer] .task-row.is-running .row-title{color:inherit;background:0 0;animation:none}html[data-working-border=flow] .pane.is-working{animation:none}}.app{grid-template-columns:var(--rail-w,minmax(220px, 280px)) 1fr minmax(240px, 300px)}.app.is-zen{grid-template-columns:var(--rail-w,minmax(220px, 280px)) 1fr}.app.is-narrow{grid-template-columns:minmax(0,1fr)}.app.narrow-content .rail,.app.narrow-sidebar .workspace{display:none}.narrow-back{align-self:flex-start;padding:2px 6px;font-size:12px;font-weight:700}.recent-row .glyph{font-weight:700}.rail{position:relative}.rail-grip{cursor:col-resize;z-index:5;touch-action:none;width:6px;position:absolute;top:0;bottom:0;right:-3px}.rail-grip:hover,.rail-grip:active{background:var(--accent-soft)}.rail-fold-btn{color:var(--muted);z-index:6;padding:0 4px;font-weight:700;position:absolute;bottom:2px;right:8px}.rail-fold-btn:hover{color:var(--accent)}.rail.is-folded{align-items:center;overflow:hidden}.rail-fold-btn:only-child,.rail.is-folded .rail-fold-btn{right:50%;transform:translate(50%)}.rail-folded-list{flex:1;width:100%;min-height:0;padding:10px 0 24px;overflow-y:auto}.rail-folded-group{flex-direction:column;align-items:center;display:flex}.rail-folded-rule{border-top:1px solid var(--line);width:60%;margin:6px 0}.rail-folded-cell{width:100%;font:13px var(--mono);text-align:center;padding:3px 0}.rail-folded-list.is-initials .rail-folded-cell{justify-content:center;gap:8px;display:flex}.rail-folded-initials{color:var(--muted)}.rail-folded-list.is-hairline .rail-folded-cell{padding:3px 0;line-height:1}.rail-folded-cell.is-selected{background:var(--inset);box-shadow:inset 2px 0 0 var(--accent)}.hint-bar{white-space:nowrap;color:var(--muted);flex-shrink:0;align-items:baseline;font-size:11px;display:inline-flex}.hint-sep{margin:0 6px}.hint-bar .link:disabled{opacity:.5;cursor:default}.shortcut-badge{border:1px solid var(--accent);border-radius:var(--radius-sm);background:var(--surface);color:var(--accent);cursor:pointer;z-index:8;padding:1px 5px;font-size:10px;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.row.new-task,.inbox-chip,.badge-host,.hint-bar>span{position:relative}.rail-head .shortcut-badge{top:100%;right:0;transform:none}.split{flex:1;min-width:0;position:relative}.split-leaf{box-sizing:border-box;min-width:0;min-height:0;display:flex;position:absolute}.split.is-box .split-leaf{border:1px solid var(--line);border-radius:var(--radius-sm)}.split.is-line .split-leaf.has-left{border-left:1px solid var(--line)}.split.is-line .split-leaf.has-top{border-top:1px solid var(--line)}.split.is-rail .split-leaf{border-left:2px solid var(--line)}.split.is-rail .split-leaf.has-top{--mt:6px}.split.is-rule .split-leaf{border-top:1px solid var(--line)}.split.is-rule .split-leaf.has-left{--ml:8px}.split.is-rule .split-name{top:-8px}.split.is-box .split-leaf.is-active,.split.is-line .split-leaf.is-active.has-left,.split.is-line .split-leaf.is-active.has-top,.split.is-rail .split-leaf.is-active,.split.is-rule .split-leaf.is-active{border-color:var(--accent)}.split-name{background:var(--paper);color:var(--subtle);font:10px var(--mono);pointer-events:none;z-index:3;padding:0 4px;position:absolute;top:2px;right:8px}.split-leaf.is-active .split-name{color:var(--accent)}.term-scrolled{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);z-index:4;gap:12px;padding:4px 10px;font-size:11px;display:flex;position:absolute;bottom:10px;right:10px}.tone-info{color:var(--accent)}.term-search{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);font:12px var(--mono);z-index:5;align-items:center;gap:10px;padding:4px 10px;display:flex;position:absolute;bottom:8px;left:8px;right:8px}.term-search-input{min-width:0;color:var(--ink);font:inherit;background:0 0;border:0;outline:none;flex:1}.prefix-guide{z-index:40;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);width:min(560px,100vw - 24px);max-height:60vh;padding:8px 12px;font-size:12px;position:fixed;bottom:76px;left:12px;overflow-y:auto;box-shadow:0 8px 24px #00000059}.prefix-guide-head{justify-content:space-between;gap:16px;margin-bottom:6px;display:flex}.prefix-guide-body{columns:2 220px;column-gap:20px}.prefix-guide-group{break-inside:avoid;margin-bottom:8px}.prefix-guide-row{width:100%;color:var(--ink);text-align:left;gap:10px;padding:1px 0;display:flex}.prefix-guide-row:hover:not(:disabled){background:var(--accent-soft)}.prefix-guide-row:disabled{cursor:default}.palette-list{margin:8px 0;overflow-y:auto}.palette-row{border-radius:var(--radius-sm);width:100%;color:var(--ink);font:12px var(--mono);text-align:left;white-space:pre;justify-content:space-between;gap:16px;padding:3px 6px;display:flex}.palette-row.is-selected{background:var(--accent-soft)}.palette-chord{color:var(--accent)}.help-head{justify-content:space-between;gap:16px;display:flex}.help-corner{flex-direction:column;align-items:flex-end;font-size:11px;display:flex}.help-scroll{max-height:52vh;margin-top:8px;overflow-y:auto}.help-section{margin-bottom:10px}.help-title{font:700 12px var(--sans);color:var(--accent);margin:0 0 4px}.help-row{gap:12px;padding:1px 0;font-size:12px;display:flex}.help-cap{min-width:14ch;color:var(--ink)}.help-desc{flex:1}.pane-hint{white-space:nowrap;text-overflow:ellipsis;margin:0;padding:4px 14px;font-size:11px;overflow:hidden}.app-shell{flex-direction:column;height:100%;display:flex}.app-shell>.app{flex:1;height:auto;min-height:0}.daemon-banner{border-bottom:1px solid var(--warning);background:var(--inset);color:var(--warning);flex-wrap:wrap;align-items:baseline;gap:12px;padding:4px 14px;font-size:12px;display:flex}.daemon-banner span{color:var(--muted)}.taskops-hint{font:11px var(--mono);color:var(--subtle)}.taskops-path{font:12px var(--mono);word-break:break-all}.brief{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);max-height:38vh;font:12px / 1.5 var(--mono);white-space:pre-wrap;word-break:break-word;margin:0;padding:10px 12px;overflow:auto}.notes{flex-direction:column;gap:8px;max-height:44vh;display:flex;overflow-y:auto}.note{border-radius:var(--radius-sm);text-align:left;flex-direction:column;gap:2px;width:100%;padding:6px 10px;display:flex}.note.is-selected,.note:focus-visible{background:var(--accent-soft);outline:none}.note-head{font:11px var(--mono);color:var(--accent);white-space:pre}.note-text{color:var(--ink);white-space:pre-wrap;word-break:break-word}.note-confirm{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);flex-direction:column;gap:8px;padding:10px 12px;display:flex}.note-confirm p{margin:0}.row.is-moving,.project-head.is-moving{background:var(--accent-soft);box-shadow:inset 2px 0 0 var(--accent)}.project-head.is-moving:after{content:"move";font:500 10px var(--mono);letter-spacing:.11em;text-transform:uppercase;color:var(--accent)}.taskops-body{white-space:pre-line}.suggest{position:relative}.suggest-list{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);max-height:188px;font:12px var(--mono);margin:4px 0 0;padding:2px;list-style:none;overflow-y:auto}.suggest-row{text-align:left;width:100%;font:inherit;border-radius:var(--radius-sm);color:var(--muted);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;padding:3px 8px;display:block;overflow:hidden}.suggest-row.is-cursor{background:var(--accent-soft);color:var(--ink)}.suggest-row.is-accent{color:var(--accent)}.newtask-legend{font:11px var(--mono);color:var(--subtle);margin:8px 0 0}.dialog-body+div>.dialog-body{margin-top:14px}.rail-nav{flex-direction:column;padding:0 6px 8px;display:flex}.rail-nav-row{border-radius:var(--radius-sm);color:var(--muted);text-align:left;align-items:center;padding:3px 8px;display:flex}.rail-nav-row:hover{background:var(--inset)}.rail-nav-row.is-active{color:var(--ink);font-weight:700}.mono{font-family:var(--mono)}.pg-top{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.pg-top .page-title{margin:0}.pg-hint{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:11px;overflow:hidden}.pg-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.kb-page{flex-direction:column;gap:8px;display:flex;overflow:hidden}.kb-project{align-items:baseline;gap:12px;min-width:0;display:flex}.kb-project-name{color:var(--accent);white-space:nowrap;font-weight:700}.kb-project-path{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:11px;overflow:hidden}.kb-empty{margin-left:auto;font-size:12px}.kb-board{flex:1;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;min-height:0;display:grid}.kb-single{flex-direction:column;flex:1;gap:8px;min-height:0;display:flex}.kb-strip{gap:16px;font-size:12px;display:flex}.kb-strip .is-active{color:var(--accent);font-weight:700}.kb-lane{border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;min-height:0;padding:8px;display:flex}.kb-single .kb-lane{flex:1}.kb-lane-head{font:700 12px var(--mono);color:var(--muted);justify-content:space-between;gap:8px;margin:0 0 8px;display:flex}.kb-lane-in_progress .kb-lane-head{color:var(--accent)}.kb-lane-parked .kb-lane-head{color:var(--warning)}.kb-lane-done .kb-lane-head{color:var(--success)}.kb-cards{flex-direction:column;flex:1;gap:8px;min-height:0;display:flex;overflow-y:auto}.kb-cards p{margin:0;font-size:11px}.kb-card{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;flex-direction:column;flex:none;gap:4px;padding:8px 10px;display:flex}.kb-card:hover{border-color:var(--line-active)}.kb-card.is-selected{border-color:var(--accent)}.kb-card.is-attention:not(.is-selected){border-color:var(--warning)}.kb-card.is-done .kb-card-title{color:var(--muted)}.kb-card-head{justify-content:space-between;gap:8px;display:flex}.kb-card-title{overflow-wrap:anywhere;min-width:0;font-weight:700}.kb-card-body{white-space:pre-wrap;overflow-wrap:anywhere;height:2.8em;font-size:12px;overflow:hidden}.kb-card-foot{justify-content:space-between;gap:8px;font-size:11px;display:flex}.dialog.kb-drawer{width:min(680px,100vw - 32px)}.kb-drawer-head{align-items:baseline;gap:14px;display:flex}.kb-label{align-items:baseline;gap:10px;display:flex}.kb-hint{text-transform:none;letter-spacing:0}.kb-body{font-family:var(--mono);min-height:160px}.kb-group{border-radius:var(--radius-sm);border:1px solid #0000;padding:4px}.kb-group:focus{border-color:var(--accent);outline:none}.kb-places{flex-direction:column;align-items:flex-start;gap:2px;display:flex}.kb-place{font:12px var(--mono);color:var(--muted);white-space:pre}.kb-place.is-active{color:var(--accent);font-weight:700}.kb-legend{font-size:11px}.kb-section{flex-direction:column;gap:4px;display:flex}.kb-section p{margin:0}.kb-event{gap:8px;font-size:12px;display:flex}.kb-age{text-align:right;min-width:4ch}.pg-list{flex-direction:column;gap:6px;margin-top:10px;display:flex}.pg-row{border:1px solid var(--line);border-radius:var(--radius-sm);cursor:pointer;align-items:baseline;gap:10px;min-width:0;padding:7px 10px;display:flex}.pg-row.is-cursor{border-color:var(--accent);background:var(--inset)}.pg-row .pg-name{white-space:nowrap;font-weight:700}.pg-row.is-off .pg-name{color:var(--muted)}.pg-row .pg-grow{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.pg-detail{border:1px solid var(--line);border-radius:var(--radius);gap:24px;margin-top:10px;padding:12px;display:flex}.pg-detail>div{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.pg-detail p,.pg-detail h2{margin:0}.pg-prompt{white-space:pre-wrap;overflow-wrap:anywhere}.pg-run{font-size:12px}.pg-response{white-space:pre-wrap;overflow-wrap:anywhere;font-size:12px}.pg-notice{margin:8px 0 0;font-size:12px}.pg-cron{gap:18px;padding:6px 4px;display:flex}.pg-cron button{border-radius:var(--radius-sm);text-align:left;min-width:5ch;font:13px var(--mono);border:1px solid #0000;flex-direction:column;gap:2px;padding:4px 6px;display:flex}.pg-cron button span{color:var(--subtle);font-size:10px}.pg-cron button.is-active{border-color:var(--accent);color:var(--accent);font-weight:700}.pg-cron:focus{outline:none}.pg-issue-line{align-items:baseline;gap:10px;min-width:0;display:flex}.pg-issue-line .pg-num{color:var(--muted);white-space:nowrap}.pg-issue-sub{color:var(--muted);gap:10px;padding-left:4ch;font-size:12px;display:flex}.pg-issue-sub .pg-grow{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.pg-issue{border-radius:var(--radius-sm);cursor:pointer;border-left:2px solid #0000;flex-direction:column;gap:2px;padding:6px 10px;display:flex}.pg-issue.is-cursor{background:var(--inset);border-left-color:var(--accent)}.mods-page{flex-direction:column;gap:12px;display:flex}.mods-empty p{margin:4px 0}.mod-pane{border:1px solid var(--line);border-radius:var(--radius);font-family:var(--mono);padding:8px 12px 12px}.mod-pane-title{color:var(--ink);margin-bottom:8px;font-size:12px}.mod-box{align-items:flex-start;min-width:0;display:flex}.mod-box.is-framed{border:1px solid var(--line);border-radius:var(--radius-sm)}.mod-text{color:var(--ink);white-space:pre-wrap;overflow-wrap:anywhere}.mod-text.is-bold{font-weight:700}.mod-button{border-radius:var(--radius-sm);font:inherit;cursor:pointer;background:0 0;border:1px solid;padding:2px 10px;font-weight:700}.mod-button:hover,.mod-button.is-cursor{background:color-mix(in srgb, currentcolor 18%, transparent)}.mod-text.tone-info,.mod-button.tone-info{color:var(--info)}.mod-text.tone-success,.mod-button.tone-success{color:var(--success)}.mod-text.tone-warning,.mod-button.tone-warning{color:var(--warning)}.mod-text.tone-error,.mod-button.tone-error{color:var(--error)}.mod-text.tone-muted,.mod-button.tone-muted{color:var(--muted)}.mod-field{align-self:stretch;min-width:0;max-width:40em;display:flex}.mod-box.is-row>.mod-field{flex:12em;align-self:center}.mod-field .input{width:100%;font-family:var(--mono)}.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}.welcome{max-width:72ch;font:12px / 1.5 var(--mono);flex-direction:column;gap:10px;margin:0 auto;padding:28px 20px;display:flex;overflow-y:auto}.welcome p,.welcome dl,.welcome dd{margin:0}.welcome-title{font:600 14px var(--mono);color:var(--accent);margin:0}.welcome-steps{flex-direction:column;gap:2px;padding-top:6px;display:flex}.welcome-step{gap:14px;display:flex}.welcome-cap{color:var(--accent);flex:0 0 8ch}.welcome-env,.welcome-start{flex-direction:column;gap:6px;padding-top:6px;display:flex}.welcome-start .button{align-self:flex-start}.welcome-fix{flex-direction:column;gap:2px;display:flex}.welcome-docs{opacity:.7;padding-top:6px}