- TypeScript 88.4%
- JavaScript 7.1%
- Python 3.5%
- CSS 0.9%
- Nix 0.1%
|
Some checks are pending
Docker image / build (push) Waiting to run
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HBDKHcwkGhxUbE2CcsYVDz |
||
|---|---|---|
| .gitea/workflows | ||
| configs | ||
| docs | ||
| evals | ||
| examples | ||
| nix | ||
| scripts | ||
| src | ||
| test | ||
| .gitignore | ||
| .inle-worktree.json | ||
| AGENTS.md | ||
| compose.yaml | ||
| flake.lock | ||
| flake.nix | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
inle
ローカルのTypeScript agent harness。CLIとブラウザーのWeb UIが同じ実行状態を共有する(TUIは2026-11-02に削除した)。開発・利用にはNode.js 24以降が必要。
開発と起動
npm ci
npm test
npm run check
npm run demo
npm start -- run "…" --model-config configs/qwen-local.json
npm start -- ui
npm start -- ui --no-daemon --port 4317
npm start -- daemon status
npm testは、仮想デスクトップ・Chromium・フォントをflakeから一度ビルドして使う(scripts/test-tools.ts、node_modules/.cache/inle-test-tools。flake.nixかflake.lockが変わるとビルドし直す)。nixが無ければ、それらを使う試験は飛ばす。環境変数INLE_DESKTOP・INLE_DESKTOP_DEFAULT・INLE_CHROME・INLE_FONTCONFIG_DEFAULTを渡せば、そちらを使う。
接続先はconfigs/、各providerのログイン、または自分で動かすOpenAI互換サーバー(Web UIのSettings → Local modelsかinle config set --user localModels <name>=<URL>、モデルとwindowはサーバーから読む。詳細)から選ぶ。実モデルを呼ぶ前に試験方針と公開model ID・利用可否を確認する。通常の保存先は$INLE_HOME/store(既定~/.local/state/inle/store)。開発時のブラウザー・デスクトップ依存も含む環境はnix developで用意できる。
Tool契約
公開toolはflatなsnake_case名と同じ引数objectを持つ。hostのToolOutputはvalue / failure / annotations / referencesを分け、TS関数は値を返す(失敗はToolError)。agent表示の文章をparseし直さない。read/editは直接使える。providerのtool arrayはcore定義とload_toolsで取得した定義で、group indexは常に見える。未取得の利用可能なtoolも同じ名前で直接呼べる。独立した呼出しは1応答の通常の並列call、順序・派生・分岐はexecute_ts(batch・invoke_toolは2026-10-14に削除)。
TSセルではcanonical関数をglobal、または@inle/workからのnamed importで呼ぶ。iteration・並列・集計は普通のJS、観測はconsole logと最後の式で行う。tool surfaceやTS entryを選ぶ設定、別namespaceのSDK、help/searchによるtool差し替えはない。詳しくは統一toolとTSセル。
誰が何をしているかはharnessがstoreから作る状況表だけが示し、エージェントは任意のtodo(itemsは一覧全体の置換、noteは付記、どちらもなければ読む)を自分用に持てる。todoは何も導出・起動・待機しない。agent_spawnはpromptで子をその場で始め、後の段はwait({for:{agents:[id]}})等で待つ。受理・統合は親の判断であり、自動化や終了fence、旧board/task_update/asyncMode/planの互換経路はない。
セッションに作業フォルダを追加する
会話の入力欄で /folder add [--read-only] <path>、/folder list、/folder remove <path> を使う。空白のあるパスは引用符で囲む(例:/folder add --read-only "../reference docs")。相対パスはそのセッションの主workspace基準、~/も使える。登録は既存ディレクトリの実パスで保存し、同じパスを再追加すると読み取り専用/読み書きを切り替える。最大32件。主workspace・登録済みrootと重なるフォルダ、inleのstore内部やそれを含むフォルダは登録できない。
追加一覧はその会話に保存され、再開後も維持される。別の独立した会話には共有しない。通常のサブエージェントは主セッションの最新一覧を継承し、一覧の変更は主セッションでだけ行える(btwには継承しない)。/folder listは既存のDetails(/status)を開き、/contextでもパスと権限を確認できる。主workspace・既定cwd・Changesの比較基準は変わらないので、追加先の変更はそのリポジトリで明示的に確認する。追加先で作業する前に適用されるAGENTS.mdを読む(全文を自動注入する機能ではない)。
これは作業対象の追加であり、OS sandboxではない。登録は不足している操作権限を増やさず、shell isolationなしのexecは登録外にもアクセスできる。読み取り専用や解除は全プロセス・全アクセス経路に対する禁止ではない。変更は後続要求のpath/sandbox mount検証時点で反映する(競合するin-flight要求を原子的に取り消す機能ではない)。実行中job/TS cellのmountは維持して停止せず、既存cellからの新しいSDK呼出しは現在の登録で再検証する。削除済みフォルダも保存された実パスで解除できる。追加先へ適用される祖先AGENTS.md/CLAUDE.mdだけはread-onlyの子も直接読めるが、祖先の他のfileやsymlinkへのアクセスを広げず、登録解除でこの許可も消える。追加repoすべてのsnapshotを自動作成する機能ではない(既存の編集前snapshotには外部repoが含まれる場合がある)。共通セッション層に詳細。
外部プラグイン
inleのインストール先を変えず、別ディレクトリの信頼するコードを plugins.load に登録してtool・右ペイン・JSON APIを追加できる。使い方と公開API、依存packageなしのHello panel例を参照。server/ブラウザーのコードはsandboxではない。
リポジトリの地図
| 場所 | 内容 |
|---|---|
src/ |
harness、provider、統一tool/TSセル、永続化、CLI/web UI |
test/ |
決定的な単体試験、固定fixture、test/live/の実モデル確認 |
evals/ |
再利用する評価harness、採点、課題定義(使い方) |
configs/ |
接続設定・model catalog lock(秘密情報は入れない) |
scripts/ |
ビルド識別子、運用・配備・DB移行などの保守script |
examples/ |
npm run demoとpluginのモジュールの最小fixture |
flake.nix・nix/ |
Nix package、ブラウザー/desktop、Docker image |
.gitea/・compose.yaml |
image CIとコンテナ起動 |
docs/ |
現行の仕組み・操作・評価設計 |
ビルド・運用
nix build .#inle
nix run . -- --help
nix build .#docker-image
Linuxの既定packageはChromiumと仮想デスクトップ込み。最小構成や配備手順はDocker運用、常設serviceはdaemonを参照。scripts/deploy-inle.mjsは稼働serviceを変更する保守用scriptなので、許可された配備時だけ使う。
記録とアーカイブ
rawなlog・JSON・trace・一回限りのscriptはrepo外の/mnt/d2/centra/inle-evidence/<YYYYMMDD>-<topic>/へ置き、sha256 manifestを付ける。長く参照する知見だけ現行文書を更新する。
整理前の全fileはローカルのannotated tag archive/pre-tidy-20261010 にある(未push)。git ls-tree -r --name-only archive/pre-tidy-20261010 -- docs evalsで過去記録を探し、git show archive/pre-tidy-20261010:<path>で無改変の内容を読む。