[{"data":1,"prerenderedAt":967},["ShallowReactive",2],{"navigation":3,"doc-/go-agent-and-cli/go-agent":217,"docs-all-paths":913},[4,19,39,63,87,111,127,195,211],{"title":5,"path":6,"stem":7,"children":8},"Welcome","/welcome","01.welcome",[9,11,15],{"title":5,"path":6,"stem":10},"01.welcome/index",{"title":12,"path":13,"stem":14},"Astar とは（5分）","/welcome/product-in-5-min","01.welcome/01.product-in-5-min",{"title":16,"path":17,"stem":18},"事業文脈","/welcome/business-context","01.welcome/02.business-context",{"title":20,"path":21,"stem":22,"children":23},"Getting Started","/getting-started","02.getting-started",[24,27,31,35],{"title":25,"path":21,"stem":26},"はじめかた","02.getting-started/index",{"title":28,"path":29,"stem":30},"リポジトリ取得と環境構築","/getting-started/repo-setup","02.getting-started/01.repo-setup",{"title":32,"path":33,"stem":34},"日々の開発ループ","/getting-started/dev-loop","02.getting-started/02.dev-loop",{"title":36,"path":37,"stem":38},"検証の 4 層","/getting-started/verification-tiers","02.getting-started/03.verification-tiers",{"title":40,"path":41,"stem":42,"children":43},"Architecture","/architecture","03.architecture",[44,47,51,55,59],{"title":45,"path":41,"stem":46},"アーキテクチャ","03.architecture/index",{"title":48,"path":49,"stem":50},"マルチテナンシーと RLS","/architecture/multi-tenancy-rls","03.architecture/01.multi-tenancy-rls",{"title":52,"path":53,"stem":54},"認可モデル","/architecture/authorization","03.architecture/02.authorization",{"title":56,"path":57,"stem":58},"AI サブシステム","/architecture/ai-subsystem","03.architecture/03.ai-subsystem",{"title":60,"path":61,"stem":62},"データモデル","/architecture/data-model","03.architecture/04.data-model",{"title":64,"path":65,"stem":66,"children":67},"Backend","/backend","04.backend",[68,71,75,79,83],{"title":69,"path":65,"stem":70},"バックエンド","04.backend/index",{"title":72,"path":73,"stem":74},"層構造","/backend/layering","04.backend/01.layering",{"title":76,"path":77,"stem":78},"規約","/backend/conventions","04.backend/02.conventions",{"title":80,"path":81,"stem":82},"テスト","/backend/testing","04.backend/03.testing",{"title":84,"path":85,"stem":86},"マイグレーション","/backend/migrations","04.backend/04.migrations",{"title":88,"path":89,"stem":90,"children":91},"Frontend","/frontend","05.frontend",[92,95,99,103,107],{"title":93,"path":89,"stem":94},"フロントエンド","05.frontend/index",{"title":96,"path":97,"stem":98},"モジュール内部構造","/frontend/module-anatomy","05.frontend/01.module-anatomy",{"title":100,"path":101,"stem":102},"API アクセスの一本道","/frontend/api-access-chain","05.frontend/02.api-access-chain",{"title":104,"path":105,"stem":106},"i18n","/frontend/i18n","05.frontend/03.i18n",{"title":108,"path":109,"stem":110},"デザインシステム","/frontend/design-system","05.frontend/04.design-system",{"title":112,"path":113,"stem":114,"children":115},"Go Agent And Cli","/go-agent-and-cli","06.go-agent-and-cli",[116,119,123],{"title":117,"path":113,"stem":118},"Go agent と CLI","06.go-agent-and-cli/index",{"title":120,"path":121,"stem":122},"Go agent","/go-agent-and-cli/go-agent","06.go-agent-and-cli/01.go-agent",{"title":124,"path":125,"stem":126},"CLI","/go-agent-and-cli/cli","06.go-agent-and-cli/02.cli",{"title":128,"path":129,"stem":130,"children":131},"Modules","/modules","07.modules",[132,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191],{"title":133,"path":129,"stem":134},"モジュール","07.modules/index",{"title":136,"path":137,"stem":138},"テーブル","/modules/table","07.modules/01.table",{"title":140,"path":141,"stem":142},"ドキュメントツリー","/modules/document","07.modules/02.document",{"title":144,"path":145,"stem":146},"AIチャット","/modules/ai","07.modules/03.ai",{"title":148,"path":149,"stem":150},"認証・権限","/modules/auth","07.modules/04.auth",{"title":152,"path":153,"stem":154},"AI取込","/modules/organize","07.modules/05.organize",{"title":156,"path":157,"stem":158},"ストレージ","/modules/storage","07.modules/06.storage",{"title":160,"path":161,"stem":162},"NAS同期","/modules/sync","07.modules/07.sync",{"title":164,"path":165,"stem":166},"ワークスペース","/modules/workspace","07.modules/08.workspace",{"title":168,"path":169,"stem":170},"テナントとメンバーシップ","/modules/tenant-membership","07.modules/09.tenant-membership",{"title":172,"path":173,"stem":174},"検索","/modules/search","07.modules/10.search",{"title":176,"path":177,"stem":178},"表示ビュー","/modules/display","07.modules/11.display",{"title":180,"path":181,"stem":182},"テンプレート","/modules/template","07.modules/12.template",{"title":184,"path":185,"stem":186},"メール","/modules/mail","07.modules/13.mail",{"title":188,"path":189,"stem":190},"電話","/modules/phone","07.modules/14.phone",{"title":192,"path":193,"stem":194},"リアルタイム","/modules/realtime","07.modules/15.realtime",{"title":196,"path":197,"stem":198,"children":199},"Infra And Deploy","/infra-and-deploy","08.infra-and-deploy",[200,203,207],{"title":201,"path":197,"stem":202},"インフラとデプロイ","08.infra-and-deploy/index",{"title":204,"path":205,"stem":206},"環境の種類","/infra-and-deploy/environments","08.infra-and-deploy/01.environments",{"title":208,"path":209,"stem":210},"セルフホスト構成","/infra-and-deploy/self-host","08.infra-and-deploy/02.self-host",{"title":212,"path":213,"stem":214,"children":215},"docs-map","/docs-map","09.docs-map/index",[216],{"title":212,"path":213,"stem":214},{"id":218,"title":219,"body":220,"description":907,"extension":908,"meta":909,"navigation":910,"path":121,"seo":911,"stem":122,"__hash__":912},"docs/06.go-agent-and-cli/01.go-agent.md","Go agent — NAS 同期エージェント",{"type":221,"value":222,"toc":892},"minimark",[223,227,244,248,265,268,289,297,371,378,632,650,654,668,678,681,685,722,744,748,786,846,860,863,882,888],[224,225,219],"h1",{"id":226},"go-agent-nas-同期エージェント",[228,229,230,234,235,238,239,243],"p",{},[231,232,233],"code",{},"agent/"," は顧客の NAS・PC 上で常駐する Go 製バイナリ（",[231,236,237],{},"astar-agent","）です。ファイルをクラウドにコピーせず、Astar の Web UI から",[240,241,242],"strong",{},"閲覧・検索・AI 抽出できる","ようにするのが目的です。ファイル本体は顧客のストレージに置かれたまま、agent がメタデータ（と要求時のみコンテンツ）を backend に流します。",[245,246,247],"h2",{"id":247},"動き方の要点",[249,250,251,259,262],"ol",{},[252,253,254,255,258],"li",{},"agent は backend に",[240,256,257],{},"アウトバウンドの WSS 接続","を張る（backend が agent にダイヤルインすることはない）。認証は WS 接続メッセージ内で行う in-band 方式で、HTTP ヘッダ認証ではない。",[252,260,261],{},"監視対象ディレクトリ（root）をスキャン・監視し、ファイルの追加・変更・削除を検知してイベントを backend に送る。",[252,263,264],{},"backend からのコマンド（ファイル読み取り・書き込み・削除・検索）を WebSocket 経由で受け取り、ローカルファイルシステムに対して実行する。",[245,266,267],{"id":267},"実パッケージ一覧",[228,269,270,273,274,277,278,281,282,281,285,288],{},[231,271,272],{},"ls agent/cmd/"," ",[231,275,276],{},"ls agent/internal/"," で確認できる実際の構成です。存在しないパッケージ名（",[231,279,280],{},"repositories/","・",[231,283,284],{},"pkg/",[231,286,287],{},"internal/handler","）を前提にしないでください。",[290,291,293,296],"h3",{"id":292},"agentcmd-補助バイナリ",[231,294,295],{},"agent/cmd/"," — 補助バイナリ",[298,299,300,313],"table",{},[301,302,303],"thead",{},[304,305,306,310],"tr",{},[307,308,309],"th",{},"パッケージ",[307,311,312],{},"役割",[314,315,316,331,348,361],"tbody",{},[304,317,318,324],{},[319,320,321],"td",{},[231,322,323],{},"fakecli",[319,325,326,327,330],{},"ローカル/dev テスト用の偽 CLI プロバイダ。",[231,328,329],{},"claude -p"," の stream-json 出力を再現する",[304,332,333,338],{},[319,334,335],{},[231,336,337],{},"generate-messages",[319,339,340,343,344,347],{},[231,341,342],{},"go:generate"," codegen。",[231,345,346],{},"asyncapi.yaml"," から Go の struct を生成する",[304,349,350,355],{},[319,351,352],{},[231,353,354],{},"mcpbridge",[319,356,357,360],{},[231,358,359],{},"astar-agent mcp-bridge"," サブコマンドの実体。Claude Code が agent を stdio MCP サーバーとして呼ぶときの橋渡し",[304,362,363,368],{},[319,364,365],{},[231,366,367],{},"pion-browser",[319,369,370],{},"WebRTC のデバッグ・ブラウザ確認用ヘルパーバイナリ",[290,372,374,377],{"id":373},"agentinternal-主要パッケージ",[231,375,376],{},"agent/internal/"," — 主要パッケージ",[298,379,380,389],{},[301,381,382],{},[304,383,384,386],{},[307,385,309],{},[307,387,388],{},"責務",[314,390,391,409,430,440,457,467,485,495,505,527,537,551,565,579,597,607],{},[304,392,393,398],{},[319,394,395],{},[231,396,397],{},"websocket",[319,399,400,401,404,405,408],{},"backend との永続 WS 接続（",[231,402,403],{},"Client","）とコマンドディスパッチ（",[231,406,407],{},"HandlerRegistry","、~30 個のハンドラファイル）。1 コマンド = 1 ハンドラファイルの規約",[304,410,411,416],{},[319,412,413],{},[231,414,415],{},"watcher",[319,417,418,421,422,425,426,429],{},[231,419,420],{},"scanner.go","（初期フルスキャン）→ fsnotify/fanotify/polling バックエンド（ライブ変更検知）→ ",[231,423,424],{},"file_event_debouncer.go","（バースト集約）→ ",[231,427,428],{},"notifier.go","（有限キュー、溢れたら古いものを破棄）のパイプライン",[304,431,432,437],{},[319,433,434],{},[231,435,436],{},"fileio",[319,438,439],{},"ファイルの読み取り・書き込み・削除の primitive、アップロードセッション、glob 展開",[304,441,442,447],{},[319,443,444],{},[231,445,446],{},"security",[319,448,449,452,453,456],{},[231,450,451],{},"path_validator.go"," — backend から渡されたパスをシンボリックリンク解決込みで検証し、",[231,454,455],{},".."," トラバーサル・null byte を拒否する",[304,458,459,464],{},[319,460,461],{},[231,462,463],{},"webrtc",[319,465,466],{},"NAS ファイルの直接ダウンロード機能（P2P 転送）の agent 側実装",[304,468,469,474],{},[319,470,471],{},[231,472,473],{},"messages",[319,475,476,477,480,481,484],{},"WebSocket プロトコルのメッセージ型。",[231,478,479],{},"BaseMessage","（手書き）+ ",[231,482,483],{},"messages_generated.go","（自動生成、後述）",[304,486,487,492],{},[319,488,489],{},[231,490,491],{},"config",[319,493,494],{},"設定の読み込み・優先順位解決、root（監視対象ディレクトリ）の定義、デバイス認証情報の保存",[304,496,497,502],{},[319,498,499],{},[231,500,501],{},"cliproviders",[319,503,504],{},"ローカル CLI プロバイダ（Claude Code / Codex）のサブプロセス管理と、承認・ツール呼び出し用の stdio MCP bridge",[304,506,507,512],{},[319,508,509],{},[231,510,511],{},"aiprovisioner",[319,513,514,515,518,519,522,523,526],{},"AI Member（",[231,516,517],{},"display_name"," を持ち ",[231,520,521],{},"isolation_mode != NONE"," の ServiceAccount）のために Claude Code / Codex サブプロセスを起動する ",[231,524,525],{},"Spawner"," 抽象化",[304,528,529,534],{},[319,530,531],{},[231,532,533],{},"containerctl",[319,535,536],{},"AI Member サブプロセスの分離実行に使うコンテナランタイム（docker / podman / containerd）を抽象化",[304,538,539,544],{},[319,540,541],{},[231,542,543],{},"mount",[319,545,546,547,550],{},"rclone + FUSE で WebDAV 経由の NAS をローカルにマウントする（",[231,548,549],{},"astar mount"," の実処理）",[304,552,553,558],{},[319,554,555],{},[231,556,557],{},"updater",[319,559,560,561,564],{},"自己更新（",[231,562,563],{},"version.json"," ポーリング、バイナリ検証、置換、Docker 環境向け更新）",[304,566,567,576],{},[319,568,569,572,573],{},[231,570,571],{},"docx"," / ",[231,574,575],{},"pdf",[319,577,578],{},"Office / PDF ファイルからのローカルテキスト抽出",[304,580,581,586],{},[319,582,583],{},[231,584,585],{},"errors",[319,587,588,589,592,593,596],{},"ユーザー向けエラー分類（",[231,590,591],{},"UserError"," — 日本語の actionable メッセージ + ",[231,594,595],{},"Unwrap()"," で生エラーを保持）",[304,598,599,604],{},[319,600,601],{},[231,602,603],{},"webui",[319,605,606],{},"agent 起動時にホストされるローカルセットアップ UI（登録コード入力）",[304,608,609,629],{},[319,610,611,572,614,572,617,572,620,572,623,572,626],{},[231,612,613],{},"logger",[231,615,616],{},"format",[231,618,619],{},"mimeutil",[231,621,622],{},"pathenv",[231,624,625],{},"parentwatch",[231,627,628],{},"systemd",[319,630,631],{},"ロギング・フォーマット・MIME判定・PATH補正・親プロセス監視・systemd連携の小さなインフラユーティリティ",[633,634,636],"callout",{"type":635},"warning",[228,637,638,641,642,645,646,649],{},[240,639,640],{},"watcher の auto モードは Linux/macOS で fsnotify に解決してはいけない。"," inotify/kqueue はディレクトリ単位で watch を張るため、",[231,643,644],{},"fs.inotify.max_user_watches"," の上限に達すると新規ファイルのイベントを静かに落とす。auto モードは fanotify かポーリングを選ぶ設計になっている（",[231,647,648],{},"ASTAR_AGENT_ENABLE_FANOTIFY=0"," で fanotify を強制無効化できる）。Windows の fsnotify はこの制約の対象外。",[245,651,653],{"id":652},"asyncapi-プロトコル契約","AsyncAPI プロトコル契約",[228,655,656,657,660,661,664,665,667],{},"WebSocket プロトコルの SSoT は Kotlin 側の ",[231,658,659],{},"AgentMessages.kt","。手で ",[231,662,663],{},"agent/asyncapi.yaml"," や ",[231,666,483],{}," を編集してはいけません。",[669,670,675],"pre",{"className":671,"code":673,"language":674},[672],"language-text","Kotlin AgentMessages.kt (SSoT)\n    │ ./gradlew generateAgentMessages\n    ▼\nagent/asyncapi.yaml           (自動生成)\n    │ go generate ./internal/messages/...\n    ▼\nmessages_generated.go          (自動生成)\n","text",[231,676,673],{"__ignoreMap":677},"",[228,679,680],{},"CI がこのチェーンの再生成 diff をチェックしており、生成物が古いままだとビルドが落ちます。",[245,682,684],{"id":683},"multi-root-対応","multi-root 対応",[228,686,687,688,691,692,695,696,699,700,703,704,707,708,711,712,711,715,718,719,721],{},"agent は",[240,689,690],{},"複数の監視対象ディレクトリ（root）を同時に扱える","よう multi-root 化されています。",[231,693,694],{},"config.Root"," が 1 つの root を表し、",[231,697,698],{},"internal/watcher/multiroot_manager.go"," の ",[231,701,702],{},"MultiRootManager"," が root ごとに watcher + scanner のペアをファンアウトします。",[231,705,706],{},"websocket.Client"," 側の呼び出し規約（",[231,709,710],{},"SetFileWatcher","/",[231,713,714],{},"SetScanner",[231,716,717],{},"performInitialScan"," など）は単一インスタンス時代のまま変わっておらず、",[231,720,702],{}," がその単一インスタンスであるかのように振る舞う設計です。",[228,723,724,725,728,729,732,733,728,736,739,740,743],{},"パスの扱いには注意が必要です。agent 側の ",[231,726,727],{},"RelativePath"," は ",[240,730,731],{},"basePath 相対","、backend 側の ",[231,734,735],{},"DocumentNode.relativePath",[240,737,738],{},"workspace 相対","で、両者は直接比較できません（",[231,741,742],{},"deviceRelativePath"," を介して変換する）。",[245,745,747],{"id":746},"開発時の起動テスト","開発時の起動・テスト",[669,749,753],{"className":750,"code":751,"language":752,"meta":677,"style":677},"language-bash shiki shiki-themes github-light github-dark","cd agent && go test ./...   # watcher/websocket の goleak リークテストを green に保つ\n","bash",[231,754,755],{"__ignoreMap":677},[756,757,760,764,768,772,776,779,782],"span",{"class":758,"line":759},"line",1,[756,761,763],{"class":762},"sj4cs","cd",[756,765,767],{"class":766},"sZZnC"," agent",[756,769,771],{"class":770},"sVt8B"," && ",[756,773,775],{"class":774},"sScJk","go",[756,777,778],{"class":766}," test",[756,780,781],{"class":766}," ./...",[756,783,785],{"class":784},"sJ8bj","   # watcher/websocket の goleak リークテストを green に保つ\n",[787,788,789,796,807,825],"ul",{},[252,790,791,792,795],{},"クロスコンパイルは ",[231,793,794],{},"agent/Makefile"," 経由。",[252,797,798,799,802,803,806],{},"Tauri サイドカービルドは ",[231,800,801],{},"CGO_ENABLED=0"," のバイナリを ",[231,804,805],{},"frontend/src-tauri/binaries/"," に生成する。",[252,808,809,812,813,816,817,820,821,824],{},[231,810,811],{},"dev-lifecycle"," skill（",[231,814,815],{},"lifecycle.sh start agent","）を使うと、ソースからビルドして worktree ごとのランタイムディレクトリに配置される（",[231,818,819],{},"Version=\"dev\""," により自己更新は無効化される）。設定ディレクトリは ",[231,822,823],{},"~/.astar-agent-dev/\u003Cport>/","（worktree slot で名前空間分離）。",[252,826,827,828,831,832,845],{},"手動でローカル起動する場合は ",[231,829,830],{},"--config-dir"," を明示すること。",[240,833,834,836,837,840,841,844],{},[231,835,830],{}," を省略した複数 agent は本番と同じ ",[231,838,839],{},"~/.astar-agent/"," を共有し、",[231,842,843],{},"device-auth.json"," を後勝ちで上書きし合う","既知のハザードがある。",[633,847,849],{"type":848},"info",[228,850,851,852,855,856,859],{},"ローカル Web UI のポートは本番が ",[231,853,854],{},"31415"," 固定、dev/worktree インスタンスは本番 agent と衝突しないよう ",[231,857,858],{},"31500 + slot"," を使う。",[245,861,862],{"id":862},"参照ソース",[787,864,865,871,877],{},[252,866,867,870],{},[231,868,869],{},"agent/CLAUDE.md","（2026-07-03 時点の規約・構造）",[252,872,873,876],{},[231,874,875],{},"agent/README.md","（インストール手順・配布経路）",[252,878,879,881],{},[231,880,376],{}," 実コード",[228,883,884,887],{},[231,885,886],{},"agent/REFACTORING.md","（2025-12）は当時のリファクタ計画の歴史文書で、現在の構造とは一致しない箇所があるため参照しないでください。",[889,890,891],"style",{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":677,"searchDepth":893,"depth":893,"links":894},2,[895,896,903,904,905,906],{"id":247,"depth":893,"text":247},{"id":267,"depth":893,"text":267,"children":897},[898,901],{"id":292,"depth":899,"text":900},3,"agent/cmd/ — 補助バイナリ",{"id":373,"depth":899,"text":902},"agent/internal/ — 主要パッケージ",{"id":652,"depth":893,"text":653},{"id":683,"depth":893,"text":684},{"id":746,"depth":893,"text":747},{"id":862,"depth":893,"text":862},"astar-agent の役割、agent/internal 配下の主要パッケージ、multi-root対応、開発時の起動・テスト方法。","md",{},{"title":120},{"title":219,"description":907},"aXzmmrbSfFiB_RnHcQNsZ7V5SwQqvhRSNWcdRNTUbr8",[914,916,917,919,920,921,922,923,924,925,926,927,929,930,931,932,933,935,936,937,938,939,941,942,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,962,963,964,965],{"path":13,"title":915},"Astar とは何か（5分で）",{"path":17,"title":16},{"path":6,"title":918},"ようこそ",{"path":29,"title":28},{"path":33,"title":32},{"path":37,"title":36},{"path":21,"title":25},{"path":49,"title":48},{"path":53,"title":52},{"path":57,"title":56},{"path":61,"title":60},{"path":41,"title":928},"システムアーキテクチャ",{"path":73,"title":72},{"path":77,"title":76},{"path":81,"title":80},{"path":85,"title":84},{"path":65,"title":934},"バックエンドガイド",{"path":97,"title":96},{"path":101,"title":100},{"path":105,"title":104},{"path":109,"title":108},{"path":89,"title":940},"フロントエンドガイド",{"path":121,"title":219},{"path":125,"title":943},"astar CLI",{"path":113,"title":117},{"path":137,"title":136},{"path":141,"title":140},{"path":145,"title":144},{"path":149,"title":148},{"path":153,"title":152},{"path":157,"title":156},{"path":161,"title":160},{"path":165,"title":164},{"path":169,"title":168},{"path":173,"title":172},{"path":177,"title":176},{"path":181,"title":180},{"path":185,"title":184},{"path":189,"title":188},{"path":193,"title":192},{"path":129,"title":961},"モジュール索引",{"path":205,"title":204},{"path":209,"title":208},{"path":197,"title":201},{"path":213,"title":966},"docs/ 地図",1785452455119]