1"use strict";(self.webpackChunkhomepage=self.webpackChunkhomepage||[]).push([["7418"],{3796(e,s,i){i.r(s),i.d(s,{metadata:()=>n,default:()=>o,frontMatter:()=>r,contentTitle:()=>l,toc:()=>h,assets:()=>c});var n=JSON.parse('{"id":"guide/web-ui","title":"Web UI","description":"SPECA \u306F CLI \u4E2D\u5FC3\u306E\u9053\u5177\u3067\u3059\u304C\u3001speca-web \u3067\u30D6\u30E9\u30A6\u30B6\u304B\u3089\u64CD\u4F5C\u3067\u304D\u308B Web UI \u3082\u540C\u68B1\u3057\u3066\u3044\u307E\u3059\u3002\u4F4D\u7F6E\u3065\u3051\u306F\u3042\u304F\u307E\u3067 CLI Client \u2014 scripts/run_phase.py \u3084 speca-cli (issue #3) \u3068\u540C\u3058\u64CD\u4F5C\u3092\u30D6\u30E9\u30A6\u30B6\u3067\u884C\u3046\u305F\u3081\u306E\u30D5\u30ED\u30F3\u30C8\u30A8\u30F3\u30C9\u3067\u3059\u3002","source":"@site/docs/guide/web-ui.md","sourceDirName":"guide","slug":"/guide/web-ui","permalink":"/docs/guide/web-ui","draft":false,"unlisted":false,"editUrl":"https://github.com/NyxFoundation/speca/tree/dev/website/docs/guide/web-ui.md","tags":[],"version":"current","sidebarPosition":5,"frontMatter":{"sidebar_position":5},"sidebar":"tutorialSidebar","previous":{"title":"\u30C6\u30B9\u30C8\u30EA\u30DD\u30B8\u30C8\u30EA\u3067\u76E3\u67FB\u3092\u4F53\u9A13","permalink":"/docs/tutorial/audit-walkthrough"},"next":{"title":"CLI \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9","permalink":"/docs/getting-started/cli-reference"}}'),d=i(4848),t=i(8453);let r={sidebar_position:5},l="Web UI",c={},h=[{value:"\u3067\u304D\u308B\u3053\u3068",id:"\u3067\u304D\u308B\u3053\u3068",level:2},{value:"\u8D77\u52D5",id:"\u8D77\u52D5",level:2},{value:"\u30ED\u30FC\u30AB\u30EB\u9650\u5B9A\u3067\u52D5\u304B\u3059",id:"\u30ED\u30FC\u30AB\u30EB\u9650\u5B9A\u3067\u52D5\u304B\u3059",level:2},{value:"Run \u8A73\u7D30 \u2014 phase \u9032\u6357 + \u4E88\u7B97\u30B2\u30FC\u30B8",id:"run-\u8A73\u7D30--phase-\u9032\u6357--\u4E88\u7B97\u30B2\u30FC\u30B8",level:2},{value:"Findings \u2014 DSL filter + \u30B3\u30FC\u30C9\u30CF\u30A4\u30E9\u30A4\u30C8",id:"findings--dsl-filter--\u30B3\u30FC\u30C9\u30CF\u30A4\u30E9\u30A4\u30C8",level:2},{value:"Chat \u30D1\u30CD\u30EB \u2014 multi-runtime \u5BFE\u5FDC",id:"chat-\u30D1\u30CD\u30EB--multi-runtime-\u5BFE\u5FDC",level:2},{value:"Settings \u2014 runtime / \u30C6\u30FC\u30DE / \u8A00\u8A9E",id:"settings--runtime--\u30C6\u30FC\u30DE--\u8A00\u8A9E",level:2},{value:"\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8",id:"\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8",level:2},{value:"\u30A2\u30FC\u30AD\u30C6\u30AF\u30C1\u30E3",id:"\u30A2\u30FC\u30AD\u30C6\u30AF\u30C1\u30E3",level:2},{value:"\u95A2\u9023\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8",id:"\u95A2\u9023\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8",level:2}];function a(e){let s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(s.header,{children:(0,d.jsx)(s.h1,{id:"web-ui",children:"Web UI"})}),"\n",(0,d.jsxs)(s.p,{children:["SPECA \u306F CLI \u4E2D\u5FC3\u306E\u9053\u5177\u3067\u3059\u304C\u3001",(0,d.jsx)(s.code,{children:"speca-web"})," \u3067\u30D6\u30E9\u30A6\u30B6\u304B\u3089\u64CD\u4F5C\u3067\u304D\u308B Web UI \u3082\u540C\u68B1\u3057\u3066\u3044\u307E\u3059\u3002\u4F4D\u7F6E\u3065\u3051\u306F\u3042\u304F\u307E\u3067 ",(0,d.jsx)(s.strong,{children:"CLI Client"})," \u2014 ",(0,d.jsx)(s.code,{children:"scripts/run_phase.py"})," \u3084 ",(0,d.jsx)(s.code,{children:"speca-cli"})," (",(0,d.jsx)(s.a,{href:"https://github.com/NyxFoundation/speca/issues/3",children:"issue #3"}),") \u3068\u540C\u3058\u64CD\u4F5C\u3092\u30D6\u30E9\u30A6\u30B6\u3067\u884C\u3046\u305F\u3081\u306E\u30D5\u30ED\u30F3\u30C8\u30A8\u30F3\u30C9\u3067\u3059\u3002"]}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.img,{alt:"SPECA dashboard",src:i(209).A+"",width:"1400",height:"925"})}),"\n",(0,d.jsx)(s.h2,{id:"\u3067\u304D\u308B\u3053\u3068",children:"\u3067\u304D\u308B\u3053\u3068"}),"\n",(0,d.jsxs)(s.ul,{children:["\n",(0,d.jsx)(s.li,{children:"\u904E\u53BB\u306E audit run \u306E\u4E00\u89A7\u3068\u8A73\u7D30\u3092\u773A\u3081\u308B"}),"\n",(0,d.jsx)(s.li,{children:"Phase \u306E\u9032\u6357\u3092 WebSocket \u3067\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u8868\u793A"}),"\n",(0,d.jsx)(s.li,{children:"Findings \u3092\u30D5\u30A3\u30EB\u30BF / \u30BD\u30FC\u30C8 / Markdown \u3067\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8"}
1),"\n",(0,d.jsx)(s.li,{children:"\u65B0\u898F audit \u3092 Picker / Wizard \u304B\u3089\u8D77\u52D5"}),"\n",(0,d.jsxs)(s.li,{children:["Chat \u30D1\u30CD\u30EB\u304B\u3089 ",(0,d.jsx)(s.strong,{children:"Claude / Codex / Gemini / Ollama / Copilot"})," \u3068\u5BFE\u8A71 (Settings \u3067\u5207\u66FF)"]}),"\n",(0,d.jsxs)(s.li,{children:["Settings \u304B\u3089\u5B9F\u884C runtime / \u30C6\u30FC\u30DE (light/dark/system/",(0,d.jsx)(s.strong,{children:"solarized"}),") / \u8A00\u8A9E (EN/JA) \u3092\u5207\u66FF"]}),"\n"]}),"\n",(0,d.jsxs)(s.p,{children:["\u8A73\u7D30\u306A\u6A5F\u80FD\u4E00\u89A7\u306F ",(0,d.jsx)(s.a,{href:"/docs/operations/web-ui-features",children:"Web UI \u306E\u6A5F\u80FD"})," \u3092\u3001runtime \u5207\u66FF\u306E\u8A73\u7D30\u306F ",(0,d.jsx)(s.a,{href:"/docs/operations/multi-runtime",children:"Multi-runtime \u30D0\u30C3\u30AF\u30A8\u30F3\u30C9"})," \u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002"]}),"\n",(0,d.jsx)(s.h2,{id:"\u8D77\u52D5",children:"\u8D77\u52D5"}),"\n",(0,d.jsx)(s.pre,{children:(0,d.jsx)(s.code,{className:"language-bash",children:"uv run speca-web --port 7411 --host 127.0.0.1 --serve-frontend\n"})}),"\n",(0,d.jsxs)(s.p,{children:[(0,d.jsx)(s.code,{children:"http://127.0.0.1:7411/"})," \u3092\u958B\u3051\u3070\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002claude.ai OAuth \u3067\u30ED\u30B0\u30A4\u30F3\u6E08 (",(0,d.jsx)(s.code,{children:"claude auth status"})," \u304C ",(0,d.jsx)(s.code,{children:"logged_in=true"})," \u3092\u8FD4\u3059\u72B6\u614B) \u3067\u3042\u308C\u3070\u3001\u81EA\u52D5\u7684\u306B\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u3078\u3002\u672A\u30ED\u30B0\u30A4\u30F3\u306A\u3089 paste-code OAuth or API \u30AD\u30FC\u5165\u529B\u3067\u8A8D\u8A3C\u3067\u304D\u307E\u3059:"]}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.img,{alt:"Login screen with paste-code OAuth",src:i(520).A+"",width:"1400",height:"925"})}),"\n",(0,d.jsx)(s.h2,{id:"\u30ED\u30FC\u30AB\u30EB\u9650\u5B9A\u3067\u52D5\u304B\u3059",children:"\u30ED\u30FC\u30AB\u30EB\u9650\u5B9A\u3067\u52D5\u304B\u3059"}),"\n",(0,d.jsxs)(s.p,{children:["\u65E2\u5B9A\u3067\u306F ",(0,d.jsx)(s.code,{children:"127.0.0.1"})," \u306E\u307F\u3067 bind \u3057\u3001LAN \u7D4C\u7531\u306E\u30A2\u30AF\u30BB\u30B9\u306F\u53D7\u3051\u4ED8\u3051\u307E\u305B\u3093\u3002\u540C\u4E00\u30DE\u30B7\u30F3\u4E0A\u306E\u30ED\u30FC\u30AB\u30EB\u4F7F\u7528\u524D\u63D0\u3067\u3059\u3002LAN \u7D4C\u7531\u3067\u4F7F\u3044\u305F\u3044\u5834\u5408\u306F ",(0,d.jsx)(s.code,{children:"--host 0.0.0.0"})," \u3092\u660E\u793A\u3057\u3066\u304F\u3060\u3055\u3044 (\u74B0\u5883\u6B21\u7B2C\u3067\u3059\u304C\u3001Firewall / NAT \u3067\u5B88\u3089\u308C\u3066\u3044\u306A\u3044\u74B0\u5883\u3067\u306F\u975E\u63A8\u5968)\u3002"]}),"\n",(0,d.jsx)(s.h2,{id:"run-\u8A73\u7D30--phase-\u9032\u6357--\u4E88\u7B97\u30B2\u30FC\u30B8",children:"Run \u8A73\u7D30 \u2014 phase \u9032\u6357 + \u4E88\u7B97\u30B2\u30FC\u30B8"}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.img,{alt:"Run detail with phase rows and budget gauge",src:i(5777).A+"",width:"1400",height:"900"})}),"\n",(0,d.jsxs)(s.p,{children:["\u5404 phase \u884C\u306F\u6298\u308A\u7573\u307F\u53EF\u80FD\u3002focus \u4E2D\u306B ",(0,d.jsx)(s.code,{children:"l"})," \u3092\u62BC\u305B\u3070\u30ED\u30B0\u30DA\u30A4\u30F3\u3078 scroll\u3001",(0,d.jsx)(s.code,{children:"f"})," \u3067\u5F53\u8A72 phase \u3060\u3051 force re-run \u3067\u304D\u307E\u3059\u3002\u4E88\u7B97\u30B2\u30FC\u30B8\u3092\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3068 ",(0,d.jsx)(s.strong,{children:"cap-bump \u30E2\u30FC\u30C0\u30EB"})," \u304C\u958B\u3044\u3066 ",(0,d.jsx)(s.code,{children:"max_budget_usd"})," \u3092\u5F15\u304D\u4E0A\u3052 / \u30AF\u30EA\u30A2\u3067\u304D\u307E\u3059:"]}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.img,{alt:"Budget cap-bump modal",src:i(8847).A+"",width:"1400",height:"900"})}),"\n",(0,d.jsx)(s.h2,{id:"findings--dsl-filter--\u30B3\u30FC\u30C9\u30CF\u30A4\u30E9\u30A4\u30C8",children:"Findings \u2014 DSL filter + \u30B3\u30FC\u30C9\u30CF\u30A4\u30E9\u30A4\u30C8"}),"\n",(0,d.jsx)(s.p,{children:"Findings \u4E00\u89A7\u306F severity / verdict / phase chip \u3067\u30B5\u30FC\u30D0\u5074\u30D5\u30A3\u30EB\u30BF\u3001\u8FFD\u52A0\u306E DSL \u5165\u529B\u3067\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u5074\u306E\u3055\u3089\u306B\u7D30\u304B\u3044 filter (path glob \u7B49) \u304C\u3067\u304D\u307E\u3059\u3002Markdown export \u3082\u3002"}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.img,{alt:"Findings list",src:i(1160).A+"",width:"1400",height:"5133"})}),"\n",(0,d.jsx)(s.p,{children:"\u884C\u3092\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3068\u8A73\u7D30\u30DA\u30FC\u30B8\u3067 evidence_snippet \u304C Prism \u3067\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u3055\u308C\u307E\u3059 (Solidity / TS / JS / Python / Rust / Go / Java / C / C++):"}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.img,{alt:"Finding detail with code highlight",src:i(2276).A+"",width:"1400",height:"900"})}),"\n",(0,d.jsx)(s.h2,{id:"chat-\u30D1\u30CD\u30EB--multi-runtime-\u5BFE\u5FDC",children:"Chat \u30D1\u30CD\u30EB \u2014 multi-runtime \u5BFE\u5FDC"}),"\n",(0,d.jsxs)(s.p,{children:["\u53F3\u5074\u306E ",(0,d.jsx)(s.strong,{children:"Chat"})," \u30DC\u30BF\u30F3 (\u307E\u305F\u306F\u30AD\u30FC\u30DC\u30FC\u30C9\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8 ",(0,d.jsx)(s.code,{children:"c"}),") \u3067\u30C1\u30E3\u30C3\u30C8\u30D1\u30CD\u30EB\u304C\u958B\u304D\u307E\u3059:"]}
1),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.img,{alt:"Chat panel",src:i(7698).A+"",width:"1400",height:"900"})}),"\n",(0,d.jsxs)(s.p,{children:["\u4F1A\u8A71\u306E\u99C6\u52D5\u5148\u306F Settings \u30DA\u30FC\u30B8\u304B\u3089 5 backend (",(0,d.jsx)(s.strong,{children:"Claude / Codex / Gemini / Ollama / Copilot"}),") \u306E\u3044\u305A\u308C\u304B\u3092\u9078\u3079\u307E\u3059\u3002\u8A73\u3057\u304F\u306F ",(0,d.jsx)(s.a,{href:"/docs/operations/multi-runtime",children:"Multi-runtime \u30D0\u30C3\u30AF\u30A8\u30F3\u30C9"})," \u3092\u53C2\u7167\u3002"]}),"\n",(0,d.jsx)(s.h2,{id:"settings--runtime--\u30C6\u30FC\u30DE--\u8A00\u8A9E",children:"Settings \u2014 runtime / \u30C6\u30FC\u30DE / \u8A00\u8A9E"}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.img,{alt:"Runtime selector in Settings",src:i(9922).A+"",width:"1400",height:"1587"})}),"\n",(0,d.jsxs)(s.p,{children:[(0,d.jsx)(s.strong,{children:"Chat runtime"})," \u30BB\u30AF\u30B7\u30E7\u30F3\u3067 5 backend \u3092\u5207\u66FF\u3001availability badge (",(0,d.jsx)(s.code,{children:"\u2713"})," / ",(0,d.jsx)(s.code,{children:"!"}),") \u3067\u5404 backend \u304C\u3059\u3050\u4F7F\u3048\u308B\u304B\u304C\u4E00\u76EE\u3067\u5206\u304B\u308A\u307E\u3059\u3002Advanced \u3092\u5C55\u958B\u3059\u308C\u3070 runtime \u3054\u3068\u306E model / Ollama host \u3092\u4E0A\u66F8\u304D\u53EF\u80FD\u3002"]}),"\n",(0,d.jsxs)(s.p,{children:["\u30C6\u30FC\u30DE\u306F light / dark / system \u306B\u52A0\u3048\u3066 ",(0,d.jsx)(s.strong,{children:"Solarized"})," \u306B\u5BFE\u5FDC:"]}),"\n",(0,d.jsxs)(s.table,{children:[(0,d.jsx)(s.thead,{children:(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.th,{children:"Default"}),(0,d.jsx)(s.th,{children:"Solarized"})]})}),(0,d.jsx)(s.tbody,{children:(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.td,{children:(0,d.jsx)(s.img,{alt:"dashboard default",src:i(209).A+"",width:"1400",height:"925"})}),(0,d.jsx)(s.td,{children:(0,d.jsx)(s.img,{alt:"dashboard solarized",src:i(6364).A+"",width:"1400",height:"925"})})]})})]}),"\n",(0,d.jsxs)(s.p,{children:["\u30D8\u30C3\u30C0\u306E ",(0,d.jsx)(s.code,{children:"L D A S"})," \u30DC\u30BF\u30F3\u3067 4-way \u5207\u66FF:"]}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.img,{alt:"Theme toggle 4 buttons",src:i(396).A+"",width:"1400",height:"928"})}),"\n",(0,d.jsx)(s.h2,{id:"\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8",children:"\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8"}),"\n",(0,d.jsxs)(s.p,{children:[(0,d.jsx)(s.code,{children:"?"})," \u3092\u62BC\u3059\u3068\u3044\u3064\u3067\u3082\u4E00\u89A7\u30E2\u30FC\u30C0\u30EB\u304C\u51FA\u307E\u3059:"]}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.img,{alt:"Keyboard shortcuts help",src:i(4385).A+"",width:"1400",height:"900"})}),"\n",(0,d.jsxs)(s.table,{children:[(0,d.jsx)(s.thead,{children:(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.th,{children:"\u30AD\u30FC"}),(0,d.jsx)(s.th,{children:"\u52D5\u4F5C"})]})}),(0,d.jsxs)(s.tbody,{children:[(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.td,{children:(0,d.jsx)(s.code,{children:"?"})}),(0,d.jsx)(s.td,{children:"\u30AD\u30FC\u30DC\u30FC\u30C9\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u4E00\u89A7\u30E2\u30FC\u30C0\u30EB"})]}),(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.td,{children:(0,d.jsx)(s.code,{children:"Esc"})}),(0,d.jsx)(s.td,{children:"\u958B\u3044\u3066\u3044\u308B\u30E2\u30FC\u30C0\u30EB / Chat \u30D1\u30CD\u30EB\u3092\u9589\u3058\u308B"})]}),(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.td,{children:(0,d.jsx)(s.code,{children:"c"})}),(0,d.jsx)(s.td,{children:"Chat \u30D1\u30CD\u30EB\u306E\u958B\u9589"})]}),(0,d.jsxs)(s.tr,{children:[(0,d.jsxs)(s.td,{children:[(0,d.jsx)(s.code,{children:"g r"})," / ",(0,d.jsx)(s.code,{children:"g s"})," / ",(0,d.jsx)(s.code,{children:"g d"})]}),(0,d.jsx)(s.td,{children:"Runs / Settings / Diagnostics \u3078"})]}),(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.td,{children:(0,d.jsx)(s.code,{children:"/"})}),(0,d.jsx)(s.td,{children:"Findings filter \u306B\u30D5\u30A9\u30FC\u30AB\u30B9"})]}),(0,d.jsxs)(s.tr,{children:[(0,d.jsxs)(s.td,{children:[(0,d.jsx)(s.code,{children:"j"})," / ",(0,d.jsx)(s.code,{children:"k"})]}),(0,d.jsx)(s.td,{children:"Findings \u884C\u3092\u6B21 / \u524D\u3078"})]}),(0,d.jsxs)(s.tr,{children:[(0,d.jsxs)(s.td,{children:["Phase \u884C focus \u4E2D: ",(0,d.jsx)(s.code,{children:"l"})," / ",(0,d.jsx)(s.code,{children:"f"})]}),(0,d.jsx)(s.td,{children:"\u30ED\u30B0\u5C55\u958B / \u305D\u306E phase \u3060\u3051 force re-run"})]})]})]}),"\n",(0,d.jsx)(s.p,{children:"\u3059\u3079\u3066 IME-safe (composition \u4E2D\u306F\u767A\u706B\u3057\u306A\u3044)\u3002"}),"\n",(0,d.jsx)(s.h2,{id:"\u30A2\u30FC\u30AD\u30C6\u30AF\u30C1\u30E3",children:"\u30A2\u30FC\u30AD\u30C6\u30AF\u30C1\u30E3"}),"\n",(0,d.jsxs)(s.ul,{children:["\n",(0,d.jsxs)(s.li,{children:[(0,d.jsx)(s.strong,{children:"\u30D0\u30C3\u30AF\u30A8\u30F3\u30C9"})," \u2014 FastAPI + uvicorn (",(0,d.jsx)(s.code,{children:"web/server/"}),")\u3002",(0,d.jsx)(s.code,{children:"scripts/run_phase.py"})," \u3092\u30B5\u30D6\u30D7\u30ED\u30BB\u30B9\u3067\u547C\u3093\u3067 pipeline \u3092\u99C6\u52D5\u3002orchestrator \u306E Python \u30B3\u30FC\u30C9\u3092\u76F4\u63A5 import \u306F\u3057\u307E\u305B\u3093 (decoupling)\u3002"]}),"\n",(0,d.jsxs)(s.li,{children:[(0,d.jsx)(s.strong,{children:"\u30D5\u30ED\u30F3\u30C8\u30A8\u30F3\u30C9"})," \u2014 React 19 + TypeScript + Vite (",(0,d.jsx)(s.code,{children:"web/frontend/"}),")\u3002TanStack Query \u3067 REST + WebSocket\u3001Zustand \u3067 UI state\u3001i18next \u3067 EN/JA\u3002"]}),"\n",(0,d.jsxs)(s.li,{children:[(0,d.jsx)(s.strong,{children:"\u72B6\u614B\u4FDD\u6301"})," \u2014 Run state \u306F ",(0,d.jsx)(s.code,{children:".speca/runs/<run_id>/state.json"}),"\u3001Chat \u5C65\u6B74\u306F ",(0,d.jsx)(s.code,{children:"~/.speca/chat/<conversation_id>.json"}),"\u3001Runtime \u8A2D\u5B9A\u306F ",(0,d.jsx)(s.code,{children:"~/.speca/runtime.json"}),"\u3002\u79D8\u5BC6\u60C5\u5831\u306F\u3069\u308C\u306B\u3082\u5165\u308A\u307E\u305B\u3093\u3002"]}),"\n"]}),"\n",(0,d.jsx)(s.h2,{id:"\u95A2\u9023\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8",children:"\u95A2\u9023\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8"}),"\n",(0,d.jsxs)(s.ul,{children:["\n",(0,d.jsx)(s.li,{children:(0,d.jsx)(s.a,{href:"/docs/getting-started/installation",children:"\u306F\u3058\u3081\u306B / \u30A4\u30F3\u30B9\u30C8\u30FC\u30EB"})}),"\n",(0,d.jsx)(s.li,{children:(0,d.jsx)(s.a,{href:"/docs/operations/web-ui-features",children:"Web UI \u306E\u6A5F\u80FD (\u5168\u7DB2\u7F85)"})}),"\n",(0,d.jsx)(s.li,{children:(0,d.jsx)(s.a,{href:"/docs/operations/multi-runtime",children:"Multi-runtime \u30D0\u30C3\u30AF\u30A8\u30F3\u30C9"})}),"\n"]})]})}function o(e={}){let{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,d.jsx)(s,{...e,children:(0,d.jsx)(a,{...e})}):a(e)}},209(e,s,i){i.d(s,{A:()=>n});let n=i.p+"assets/images/01_dashboard_default-5483de2c78e2d5910d8dccf478778573.png"},6364(e,s,i){i.d(s,{A:()=>n});
1let n=i.p+"assets/images/02_solarized_dashboard-5acc95bd7b0198f80ae09a4311f77c13.png"},1160(e,s,i){i.d(s,{A:()=>n});let n=i.p+"assets/images/03_findings_list-040639a45fc307314c6c1c97b2599d7e.png"},2276(e,s,i){i.d(s,{A:()=>n});let n=i.p+"assets/images/04_finding_detail_code_highlight-561f403df02a8380c23f44a1420ff7ff.png"},5777(e,s,i){i.d(s,{A:()=>n});let n=i.p+"assets/images/05_run_detail_budget_phases-312c5cc5c181fbe770892f9c60d545e6.png"},8847(e,s,i){i.d(s,{A:()=>n});let n=i.p+"assets/images/06_budget_cap_bump_modal-8806008466a9ea503045109297dfc7ee.png"},7698(e,s,i){i.d(s,{A:()=>n});let n=i.p+"assets/images/07_chat_panel_empty-aafc90e8a480ab1be6f9aba2465eddf9.png"},4385(e,s,i){i.d(s,{A:()=>n});let n=i.p+"assets/images/08_keyboard_shortcuts_help-ec683daa6cf24d7adae9da3b38971303.png"},396(e,s,i){i.d(s,{A:()=>n});let n=i.p+"assets/images/09_settings_theme_4buttons-f8d275504524fa4f415d4d6d6d3d2ce9.png"},520(e,s,i){i.d(s,{A:()=>n});let n=i.p+"assets/images/10_login_paste_code-14f5cbd05004a78ab3bf88a5977cb770.png"},9922(e,s,i){i.d(s,{A:()=>n});let n=i.p+"assets/images/11_runtime_selector-d588e98db4e4cfd0c6f9005de1623e91.png"},8453(e,s,i){i.d(s,{R:()=>r,x:()=>l});var n=i(6540);let d={},t=n.createContext(d);function r(e){let s=n.useContext(t);return n.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:r(e.components),n.createElement(t.Provider,{value:s},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.