sync: update from private repo (2ef0fa6)
CI / build-and-test (push) Has been cancelled

This commit is contained in:
oss-sync
2026-06-17 05:23:28 +00:00
parent 517142c61d
commit 1602d52510
42 changed files with 3387 additions and 64 deletions
+16 -1
View File
@@ -97,13 +97,28 @@ API には Bash ツールが含まれるため、認証なしで LAN に晒す
## 5. Docker で起動
```bash
cp .env.example .env # OLLAMA_BASE_URL / OLLAMA_MODEL を設定
docker compose up -d
# http://localhost:9876
```
DB とワークスペースは named volume`maestro-data` / `maestro-workspaces`)に永続化される。Compose は既定で `127.0.0.1:9876` のみに公開する。`config.yaml` をホストからマウントする場合は `docker-compose.yml` のコメントを参照。
### ブラウザ・セットアップウィザード(`config.yaml` を編集しない)
LLM 未設定のまま起動すると、アプリの代わりに**全画面のセットアップウィザード**が出る。`npm run setup` のブラウザ版で、次を順に設定する。
1. **LLM** — 接続タイプ・エンドポイントを入れて疎通テスト、モデルを選択。即時反映・再起動不要。
2. **サーバーポート**(任意)— 再起動で反映。
3. **サインイン**(任意)— メール+パスワード(初回 admin)または Google/Gitea OAuth。再起動で反映。
ウィザードは admin アカウントを作成できるため、変更系の呼び出しには**ワンタイム・セットアップトークン**が必要。起動時にサーバーログへ出力されるので、次で読み取る。
```bash
docker compose logs | grep "setup token"
```
これをウィザード最初の入力欄に貼る。トークンは初回の無認証ウィンドウ中だけ有効で、LLM を設定した時点(または認証を有効化して再起動した時点)で失効する。非対話で設定したい場合は、`docker compose up` の前に `.env``cp .env.example .env`)へ `OLLAMA_BASE_URL` / `OLLAMA_MODEL` を設定しておけば、ウィザードは出ない。
## 6. 最初のタスク
1. UI を開き、新規タスクを作成(タイトル + 依頼内容を入力)。
+16 -1
View File
@@ -97,13 +97,28 @@ first. The upgrade script detects this and offers to set it for you.
## 5. Launch with Docker
```bash
cp .env.example .env # set OLLAMA_BASE_URL / OLLAMA_MODEL
docker compose up -d
# http://localhost:9876
```
The DB and workspaces are persisted in named volumes (`maestro-data` / `maestro-workspaces`). By default Compose exposes only `127.0.0.1:9876`. If you want to mount `config.yaml` from the host, see the comments in `docker-compose.yml`.
### Browser setup wizard (no `config.yaml` editing)
When you start with no LLM configured, opening the UI shows a **full-screen setup wizard** instead of the app — the browser equivalent of `npm run setup`. It walks you through:
1. **Language model** — connection type, endpoint, a live connection test, then pick a model. Applied immediately, no restart.
2. **Server port** (optional) — takes effect after a restart.
3. **Sign-in** (optional) — email + password (first admin) or Google/Gitea OAuth. Takes effect after a restart.
Because the wizard can bootstrap an admin account, mutating setup calls require a **one-time setup token**. It is printed to the server logs at startup — read it with:
```bash
docker compose logs | grep "setup token"
```
Paste that token into the wizard's first field. The token only exists during the initial no-auth window and stops working once an LLM is configured (or once auth is enabled and the server restarts). If you'd rather configure non-interactively, set `OLLAMA_BASE_URL` / `OLLAMA_MODEL` in a `.env` file (`cp .env.example .env`) before `docker compose up` — the wizard then doesn't appear.
## 6. Your first task
1. Open the UI and create a new task (enter a title + the request body).
+10
View File
@@ -147,6 +147,16 @@ SshDownload({
- 親ディレクトリは呼び出し側で作成済にしておくこと。`Write` 相当の mkdir-p は行わない (e.g. `output/foo/bar.txt` を指定するなら、事前に `Bash({command: "mkdir -p output/foo"})` 等で作成)
- `remote_path` の prefix 配下チェック、サイズ上限 (`ssh.max_download_size_mb`)、SSRF チェックは Upload と同じ
## Windows (OpenSSH) 接続先のパス
Windows の OpenSSH SFTP サーバはパス区切りに **フォワードスラッシュ (`/`)** を使い、ドライブ付き絶対パスを `/C:/Users/...` (先頭スラッシュ + スラッシュ区切り) という正規形で扱う。
`remote_path` と接続の `remote_path_prefix` は区切り文字を問わず受け付ける。`C:\Users\agent``C:/Users/agent``/C:/Users/agent` のいずれで書いても内部でスラッシュ正規形に統一され、SFTP には常に `/C:/Users/agent/...` の形で渡る。混在 (prefix はバックスラッシュ、パスはスラッシュ等) も可。
- prefix 例: `C:\Users\agent` または `/C:/Users/agent` のどちらでも可
- 転送先パス例: `SshUpload({ remote_path: "C:\\Users\\agent\\output\\report.csv" })` → SFTP には `/C:/Users/agent/output/report.csv` で送信
- UNC 共有 (`\\server\share\...`) は `//server/share/...` に正規化される
## Host key TOFU フロー (LLM 側で完結しない)
接続を新規作成した直後は host key が観測されていない (`host_key_b64 IS NULL`)。最初の `/test` 呼び出し (または最初の Exec/Upload/Download) で鍵を観測すると、`host_key_first_observe` エラーが返り、`host_key_b64` / `host_key_fingerprint` / `host_key_pending_token` が DB に書き込まれる。
+54
View File
@@ -0,0 +1,54 @@
# ReadUserAgents / UpdateUserAgents
ユーザーごとの常時指示書 `AGENTS.md` を読み書きするツール。`AGENTS.md` は各タスクのシステムプロンプトに自動注入される「このユーザーが常に守ってほしいこと」を書いた個人ファイル。memory(`UpdateUserMemory`)が事実の断片を貯めるのに対し、`AGENTS.md` は振る舞いの方針そのもの。
両ツールは META_TOOL(常時利用可能)。piece の `allowed_tools` に書かなくても使える。per-user 機能なので、認証済みユーザーのコンテキスト(`ctx.userId`)が必要。
## ReadUserAgents
引数なし。現在の `AGENTS.md` 全文を切り詰めずに返す。**編集前に必ず呼ぶこと** — `replace` は原文と完全一致する文字列が必要で、システムプロンプトへの注入版は 64KB で切り詰められている場合があるため。
ファイルが無い/空のときは、その旨と「`append` で新規作成できる」案内を返す(エラーではない)。
## UpdateUserAgents
`AGENTS.md` を 2 モードで編集する。書き込み前に旧版を `trash/agents-history/AGENTS.md.{timestamp}.bak` に自動退避(直近 10 件を保持)。事故時はそこから復元できる。
### パラメータ
| 名前 | 必須 | 説明 |
|---|---|---|
| `mode` | ○ | `"replace"` または `"append"` |
| `old_text` | replace時○ | 置換対象の既存文字列。**ちょうど 1 回だけ**一致する必要がある |
| `new_text` | ○ | replace の置換後テキスト/append で末尾に足すテキスト |
### mode="replace"
`old_text``new_text` に置き換える。コアの `Edit` ツールと同じ「一意一致」セマンティクス。
- 0 回一致 → エラー(`ReadUserAgents` で原文を確認するよう促す)
- 2 回以上一致 → エラー(前後の文脈を含めて一意にするよう促す)
- ファイルが空 → エラー(`append` を案内)
`new_text` 内の `$&``$1` は特殊扱いされない(リテラルとして入る)。
### mode="append"
`new_text` を末尾に追記する。既存末尾の空行を整理し、空行 1 行を挟んで足す。ファイルが空なら `new_text` がそのまま新規ファイルになる。
### 制限・エラー
- 結果が 64KB を超えると `writeUserAgentsMd` が拒否(`AGENTS.md exceeds 65536 bytes`
- `ctx.userId` が無い(認証なし)→ エラー
- 監査ログ `user_agents_updated`(mode / バイト数 / スナップショット有無)を記録
## 典型フロー
1. `ReadUserAgents` で現在の内容を取得
2. ユーザー依頼に応じて `UpdateUserAgents({ mode: "replace", old_text: "...", new_text: "..." })` または `mode: "append"`
3. 戻り値でバイト数とスナップショット退避を確認
## 関連
- `UpdateUserMemory` / `ReadUserMemory` — 事実の断片を貯める個人 memory(`docs/tools` の該当 doc 参照)
- UI からの編集は Settings 経由(HTTP `GET/PUT/DELETE /agents-md`