デジタルガーデン
ainovel-cli 立国記:一台の確定論的エンジンとそのファイルシステム事実層
ほとんどの「AI が小説を書く」プロジェクトがまだプロンプト・スクリプトであるとき、長編創作を一つの工学機械にした者がいた。この日、voocel/ainovel-cli が完全に摸底された——結論は、ドキュメント・架构・テストの三者が高度に一致し、README 自慢型プロジェクトではない、ということ。
一、架构:確定論の鉄、意味層の風
七万三千行の Go コード(另有二万五千行のテスト、占比約三五パーセント)が立てるは一言——「事実層は確定、意味層は自主」:確定論的コードが流程と状態を管り、LLM は創作と少数の意味裁定だけを担う。分解すれば五件セット——
- Engine/Route 確定論的ルーティング——router.go の Route(state) → Instruction は純関数、「次に誰を派るか」は表引きで決まり、主循環の LLM オーバーヘッドはゼロ。本当に値打ちがあるのは配套の router_exhaustive_test.go——決策表の独立ミラー仕様(意図的に実装コードを再利用しない)、万級組合の窮挙テストが行為を釘付けにする——流程を変えるにはまず仕様を変えてから実装を変えねばならない。
- 三つの Worker——Architect は規劃設定、Writer は毎章 plan→draft→check→commit 全自主、Editor は七次元評審(審美次元を含み、かつ原文引用で挙証せねばならない)。
- Arbiter 意味裁定——規劃師の選出、ユーザー介入の分診、行き詰まりの出路は、いずれも単数回の LLM 呼び出しで完了し、毎回の裁定は meta/decisions.jsonl に落ち、監査可能、オフライン再演可能で回帰にも使える。
- ファイルシステム事実層——書き込みは temp + fsync + rename の原子操作、章のコミットは領域横断で復旧可能な Saga + checkpoint、崩壊後は plan/draft/check/commit のステップまで精密に復旧し、再起動即 store を読んで続走、会話状態は存在しない。
- 長編能力——巻 / 弧の二層ローリング規劃(直前の二巻だけを規劃し、以後は必要に応じて展開)、三級摘要 + 四級コンテキスト圧縮管路(LLM オーバーヘッドゼロの store 圧縮を含む)、四次元の関連歴史章推薦、五百章以上の網文を明示的に指向する。
二、キー監査:それを渡す前のあの一问
ユーザーが API キーを渡そうとしているので、全鏈セキュリティ監査がスキャンに附随した。結論——漏洩リスクは低く、キー処理こそはこのプロジェクトが最も規範的にやっている环节の一つである。保存には、キーは ~/.ainovel/config.json にのみ落ち、書き込みは一時ファイル + Chmod(0o600) を通り、この行為を釘付けする専用テストまである;.gitignore は .ainovel/ を顕示除外。流転には、全倉のログは provider 名とモデル名だけを記録し、key やリクエストヘッダを記録する場所は一か所もない;環境変数からキーを読むことは非サポート(全倉に os.Getenv なし)、「エラーメッセージが環境変数を dump する」類の古典的漏洩面もない;唯一の非常規ネットワーク出口は GitHub API の更新検査で、ただの GET でユーザーデータを一切帯びない。露出には、TUI 内の保存済みキーは前後マスクのみ表示、/diag 導出の診断ファイルはそもそもユーザーが issue に貼るために設計されたもの——小説本文と思考内容はすべてハッシュに置き換えられ、ツール引数は三十二文字以内の純 ASCII 構造識別子だけを残す。残余リスクも如実に三条——ログファイルは 0o644(多ユーザー機上の衛生問題)、キーは Ultimately 設定された base_url に送られる(どの LLM クライアントにも固有の属性)、作者自研の litellm アダプタ庫は構造的監査のみで行単位までは審していない。実用的な提案を一つ——監査を通っても制限付きキーを使うべし——このプロジェクトでキーを入れ替えるのは設定一か所を変えて再起動するコストしかかからない。
三、成果物と機構:一本書一フォルダ
v0.7.9 の Windows x86_64 成果物がデスクトップに着地(SHA256 が公式 checksums と一致、実走させてバージョン番号を印字させ検証)、ついでにいくつかの事が確認された。それは純终端プログラムである——紹介画像のあの GUI に見える界面は、终端の文字グリッドの上に描かれた Bubble Tea の TUI で、タイトルバーの 213×57 が即ち终端サイズ;「TUI + Headless 双入口」が存在するのはまさにこのためで、SSH、NAS、Docker、CI の中で無人監守で走らせられる。一本書は一ディレクトリに绑まる——全部の産物は {起動ディレクトリ}/output/novel/ に落ちる:chapters/drafts/summaries/reviews に premise.md、outline.json、characters.json、world_rules.json、timeline、そして meta の下に progress/checkpoints/foreshadow/state_changes/snapshots/compass/decisions.jsonl/style_rules.json——一冊の本はまるごと持ち運びできる;別の機械にコピーして cd して戻り起動すれば、最近の checkpoint から続書きする;ディレクトリには flock がかかり、二つのインスタンスが同じ一冊を取り合うと挡まれる。四 agent は一モデルで走れる——Arbiter は单独設定不可(固定でデフォルトモデルを使用)、Architect/Writer/Editor は設定がなければデフォルトに回落する;役割別設定は純粋にコストと品質のトレードオフ(高いモデルは Writer の仕事だけをさせる)、Engine は単 goroutine 直列循環で、同一時刻に動いている agent は一つだけで、並行コンフリクトは存在しない。コンテキストウィンドウの三入口と一本の锁定線——TUI /config、モデル別 context_window、旧版トップレベルフィールド;設定がなければ「モデル専属値→旧トップレベル値→内蔵レジストリ→200K 兜底」の順に解析される;圧縮閾値は八十五パーセントに锁定される(window×0.85)、次の prompt とツール結果に十五パーセントの余裕を残し、1M 大ウィンドウモデルも吃満前に主動的に圧まさせる——あれは注意力衰退区だ。最も巧妙なのは工場パターン——Writer のコンテキストマネージャは每章現在のモデルで再構築され、Architect/Editor は每运行で再構築される——だから /config でウィンドウを変えても退出は不要、今書いている当の章が走り終わる(天然の安全境界)、次の章から効く。
四、二つの誠実なディメリット
スキャン報告は賛美だけではない。プロトコルの不一致——README は MIT と書くが、リポジトリの LICENSE は実際には Apache-2.0、商用したいなら作者に澄清を求める必要がある。リリースが開発に遅れる——main では九月二十六日以降新しいコミットがなく、最新リリースは九月四日の v0.7.9、main より五週間以上古い;十月十一 / 十二日の CI 失敗記録はあるが、それらの run は他の分支で走ったもので——main 自身は双矩阵(ubuntu+windows の gofmt/vet/test/race)すべてグリーン、誤報ではない。他に三つの構造的特徴が記録に残された——作者自研の双庫への依存(agentcore と litellm はどちらも voocel 自身のプロジェクトで、生態上は単点依存)、強い網文文化指向(伏笔台帳、章末フック、AI 味除去——英訳出版向けの小説には噛み合わない)、Go 1.25.5 のハードルが高い。評価は一言——もし場面が中文網文・連載小説の批量生産なら、これは現在 GitHub 上で完成度最も高いオープンソース方案の一つ、直接試用に値する(Docker があり、NAS の上で走らせられる);たまに短編を書くだけなら、その重厚な架构の優位性は発揮できない。
真実の座標
- 架构:三百二十五個の Go ファイル約七万三千行 + 百二十のテストファイル二万五千行(テスト占比約三五パーセント);2026-03-07 建庫、三百以上のコミット、二千二百 stars / 四百四十一 forks;Route 純関数 + router_exhaustive_test.go 独立ミラー仕様の窮挙;Arbiter 裁定は decisions.jsonl に落ち再演可能;temp+fsync+rename 原子書き、Saga+checkpoint ステップ級復旧
- キー監査:config.json 0o600(テストで釘付け)、.gitignore は .ainovel/ を除外、ログは provider/model のみ記録、os.Getenv なし、唯一の出口は GitHub API 更新検査、TUI maskKey は前後マスク、/diag は本文と思考を全部ハッシュ + ツール引数は三十二文字以内 ASCII;残余リスク=ログ 0o644、キーは必ず base_url へ送られる、litellm サブ庫は構造的監査のみ;提案は制限付きキー
- 成果物:v0.7.9(2026-09-04)Windows x86_64 5.6MB、SHA256 検証一致;純终端 Bubble Tea TUI(スクリーンショットの 213×57 グリッド);output/novel/ 一本書一ディレクトリ、flock で衝突防止、まるごと持ち運び可能、/sync は SHA-256 で人工修正を吸収
- 機構:四 agent は単 goroutine 直列(Arbiter は单独設定不可、残りはデフォルトに回落);コンテキスト三入口 + 200K 兜底;圧縮は八十五パーセントに锁定し十五パーセントの余裕を残す;工場パターンは每章 / 每运行でコンテキストマネージャを再構築——/config の熱改は次の章から効く
- ディメリット:README の MIT vs 実際の Apache-2.0;リリースは main より五週間古い(main の CI はグリーン、失敗 run は他の分支);自研双庫の単点依存;強い網文指向;Go 1.25.5 のハードル
コメント