Compare commits

...

124 Commits

Author SHA1 Message Date
e159e9d338
ticket: close builtin workflow resources 2026-06-11 17:52:36 +09:00
ef2099c10a
merge: builtin workflow knowledge resources 2026-06-11 17:50:54 +09:00
fb772e29bd
ticket: record builtin workflow review and companion progress intake 2026-06-11 17:50:54 +09:00
58666e3377
ticket: report builtin workflow resources 2026-06-11 17:46:50 +09:00
2418ad330e
feat: add builtin workflow resources 2026-06-11 17:44:42 +09:00
bf5b5bef48
ticket: accept builtin workflow knowledge resources 2026-06-11 17:30:48 +09:00
cd831ec432
ticket: add companion progress notification planning 2026-06-11 17:30:12 +09:00
ef1f5710b3
ticket: close panel orchestration worktree 2026-06-11 17:14:47 +09:00
735b0c048a
merge: panel orchestration worktree 2026-06-11 17:13:14 +09:00
d4dc41bb3f
ticket: record panel orchestration review 2026-06-11 17:13:14 +09:00
ab7ea17819
ticket: consolidate lifecycle commit policy 2026-06-11 17:11:22 +09:00
f2938f4e2e
ticket: record panel orchestration second fix 2026-06-11 17:10:54 +09:00
00e11b3df7
feat: launch orchestrator from worktree 2026-06-11 17:10:22 +09:00
dcc87973bd
ticket: refine builtin resource implementation 2026-06-11 17:05:24 +09:00
3b4bb0e62c
ticket: record panel orchestration fix loop 2026-06-11 17:04:50 +09:00
831c59bd12
ticket: report panel orchestration worktree 2026-06-11 16:55:33 +09:00
02979cb76f
ticket: accept panel orchestration worktree 2026-06-11 16:42:35 +09:00
b75e131478
ticket: add orchestrator worktree auto-create 2026-06-11 16:28:38 +09:00
1810debb58
fix: inherit default role profile config 2026-06-11 16:28:38 +09:00
730dab65b8
ticket: close orchestrator worktree layout 2026-06-11 14:00:12 +09:00
5f7b301542
merge: orchestrator worktree layout 2026-06-11 13:59:08 +09:00
7775ed4184
ticket: record orchestrator worktree review 2026-06-11 13:59:08 +09:00
93d4053cf3
ticket: record orchestrator worktree fix loop 2026-06-11 13:56:57 +09:00
e7c78f96df
feat: track orchestration workspace roots 2026-06-11 13:56:28 +09:00
3a291439b5
ticket: report orchestrator worktree roots 2026-06-11 13:46:50 +09:00
95fb8340eb
ticket: accept orchestrator worktree layout 2026-06-11 13:35:34 +09:00
53254ee1f8
ticket: refine orchestration worktree merge policy 2026-06-11 12:49:05 +09:00
d900bdc234
ticket: close workflow split design 2026-06-11 12:48:48 +09:00
af30d64152
ticket: add orchestration worktree planning 2026-06-11 12:48:00 +09:00
1c2cde51a4
merge: workflow public dogfood split 2026-06-11 12:47:27 +09:00
8789191787
ticket: add workflow split dossier 2026-06-11 11:33:40 +09:00
7265f4e7c2
ticket: record workflow split fix loop 2026-06-11 11:32:09 +09:00
21a25e127f
docs: split public and dogfood workflows 2026-06-11 11:31:41 +09:00
28d6246979
ticket: report workflow split design 2026-06-11 11:27:36 +09:00
50d826b11a
ticket: accept workflow split design 2026-06-11 11:24:33 +09:00
b7a3dae543
ticket: close builtin role profiles 2026-06-11 09:05:29 +09:00
7daecca8c5
merge: builtin role profiles 2026-06-11 09:04:05 +09:00
f8096bd306
ticket: add builtin role profile dossier 2026-06-11 00:26:39 +09:00
274e5d3dbf
ticket: record builtin role profile fix loop 2026-06-11 00:24:04 +09:00
85c06dc62e
feat: add builtin role profiles 2026-06-11 00:23:15 +09:00
fc32c459bd
ticket: report builtin role profiles 2026-06-11 00:15:42 +09:00
a901ebeb4f
ticket: accept builtin role profiles 2026-06-11 00:00:41 +09:00
a0b688e29a
ticket: record intake and companion closure 2026-06-11 00:00:02 +09:00
978d97a90a
ticket: record builtin role profile routing wait 2026-06-10 20:17:47 +09:00
e3a1292d75
ticket: close lua profile yoi api 2026-06-10 18:55:28 +09:00
15dc176e81
merge: lua profile yoi api 2026-06-10 18:53:17 +09:00
c8d30df05d
ticket: record lua profile api review 2026-06-10 18:53:17 +09:00
e4dd08f8b6
ticket: close file mutation serialization 2026-06-10 18:40:43 +09:00
29960c1589
merge: serialize file mutations 2026-06-10 18:38:04 +09:00
05bb33ed8e
ticket: record file mutation review 2026-06-10 18:38:04 +09:00
60e12a94d1
ticket: report lua profile api implementation 2026-06-10 18:37:07 +09:00
4e1a08c23d
feat: add yoi profile lua api 2026-06-10 18:36:40 +09:00
c88b8cccc0
ticket: accept lua profile yoi api 2026-06-10 18:32:32 +09:00
50f417593c
ticket: close setup model wizard 2026-06-10 18:31:50 +09:00
791ebbf576
ticket: close pod fresh-start path 2026-06-10 18:31:20 +09:00
021661b568
merge: setup model wizard 2026-06-10 18:29:47 +09:00
710d962ffe
ticket: record setup wizard review 2026-06-10 18:29:47 +09:00
15daadd015
ticket: report file mutation serialization 2026-06-10 18:29:12 +09:00
c06817b48b
fix: list setup command in help 2026-06-10 18:27:18 +09:00
66d6bf2e2a
fix: update setup packaging 2026-06-10 18:27:02 +09:00
401301438d
fix: serialize same-file mutations 2026-06-10 18:24:53 +09:00
536ff4dd57
ticket: accept file mutation serialization 2026-06-10 18:19:18 +09:00
5e716fb351
ticket: report setup wizard implementation 2026-06-10 18:17:10 +09:00
32be6075c1
feat: add setup model command 2026-06-10 18:16:23 +09:00
6bb023e9fe
merge develop into setup wizard worktree 2026-06-10 18:12:31 +09:00
9309cef4fb
ticket: record setup wizard routing blocker 2026-06-10 18:09:03 +09:00
6e0cff0830
ticket: close prompt resource centralization 2026-06-10 18:08:37 +09:00
9aaa3232ef
merge: prompt resource centralization 2026-06-10 18:07:29 +09:00
ed1b456284
ticket: add prompt resource merge dossier 2026-06-10 18:07:25 +09:00
41f7449008
ticket: record routing progress 2026-06-10 18:07:00 +09:00
16ceb3e22e
ticket: record prompt resource implementation 2026-06-10 17:11:58 +09:00
2cedd97d25
ticket: record additional queue notifications 2026-06-10 17:11:28 +09:00
342d5cf8dd
refactor: move ticket role prompts to resources 2026-06-10 17:10:47 +09:00
76165b47d6
ticket: accept wizard and prompt cleanup 2026-06-10 16:59:39 +09:00
095441dbd1
ticket: record new objectives and tickets 2026-06-10 16:58:12 +09:00
63524215f0
ticket: close base32 id migration 2026-06-09 22:26:03 +09:00
5f6c695b80
merge: unify project record ids 2026-06-09 22:24:40 +09:00
52c5c3afec
ticket: approve base32 id migration 2026-06-09 22:24:40 +09:00
bd9651bddd
ticket: record base32 implementation report 2026-06-09 22:12:35 +09:00
4203988d74
ticket: use base32 project record ids 2026-06-09 22:10:47 +09:00
2bc299c5b1
ticket: route base32 id implementation 2026-06-09 21:48:05 +09:00
0803bc3725
ticket: accept base32 id migration 2026-06-09 21:46:51 +09:00
264dfce3c5
ticket: close profile feature flags 2026-06-09 21:46:13 +09:00
c71a27275d
merge: gate tool surfaces by profile features 2026-06-09 21:42:57 +09:00
b43e6e8d72
ticket: approve profile feature flags 2026-06-09 21:42:49 +09:00
977313dd90
ticket: record project profile test fix 2026-06-09 21:38:35 +09:00
656048a0ad
test: cover project role feature profiles 2026-06-09 21:38:12 +09:00
2a0911ec30
ticket: close action attention cleanup 2026-06-09 21:33:31 +09:00
1e534b954b
merge: remove ticket attention fields 2026-06-09 21:32:36 +09:00
61c93990d1
ticket: record feature role fix and attention approval 2026-06-09 21:32:06 +09:00
507863f86a
fix: lock project role feature surfaces 2026-06-09 21:31:33 +09:00
4eb3e117e3
ticket: record feature cleanup review fixes 2026-06-09 21:22:21 +09:00
2fd37afb9e
fix: align pod feature flag naming 2026-06-09 21:21:40 +09:00
94db2dc8c9
fix: hide obsolete ticket fields in cli show 2026-06-09 21:19:42 +09:00
7f2a6568c3
ticket: route feature cleanup reviews 2026-06-09 21:10:26 +09:00
7b80a9b69c
ticket: record coder reports and intake refinement 2026-06-09 21:08:31 +09:00
3afdd894d8
ticket: remove action attention fields 2026-06-09 21:05:48 +09:00
f0f6cc92d8
feat: gate built-in tools by profile features 2026-06-09 21:05:38 +09:00
2bd4e43eaa
ticket: record feature and attention handoffs 2026-06-09 20:32:02 +09:00
41133e0cd5
ticket: route feature flags and attention cleanup 2026-06-09 20:30:37 +09:00
bebb0bd5da
ticket: close panel composer keys 2026-06-09 20:28:55 +09:00
57ed405890
merge: improve panel composer keys 2026-06-09 20:26:09 +09:00
bf701b9fed
ticket: record panel composer review 2026-06-09 20:26:09 +09:00
1611f61675
ticket: record panel composer fix loop 2026-06-09 20:21:17 +09:00
573b02fbfc
tui: clarify panel composer enter hints 2026-06-09 20:18:47 +09:00
774bb10c35
ticket: close analytics batching and record panel review 2026-06-09 20:07:52 +09:00
c837fbceb5
merge: add session analytics response batching 2026-06-09 20:04:28 +09:00
b2e1b91265
ticket: record analytics batching review 2026-06-09 20:04:28 +09:00
c306339e0a
ticket: record panel and analytics implementations 2026-06-09 19:55:50 +09:00
703176df7c
ticket: close ticket list output slimming 2026-06-09 19:53:50 +09:00
f2cdb6fd19
fix: align ticket list tests with tool context 2026-06-09 19:53:16 +09:00
963db29d96
analytics: add response batching metrics 2026-06-09 19:51:06 +09:00
20f06b3541
tui: clarify panel focus and composer keys 2026-06-09 19:49:26 +09:00
b6ac36e65e
merge: lighten ticket list output 2026-06-09 19:48:09 +09:00
81feb77433
ticket: close parallel queued routing 2026-06-09 19:47:56 +09:00
ad5d3bad64
merge: prefer parallel queued routing 2026-06-09 19:47:28 +09:00
c5a022bbdf
ticket: close tool execution context 2026-06-09 19:47:01 +09:00
89e768a658
ticket: record tool context and parallel reviews 2026-06-09 19:46:29 +09:00
4744548d27
merge: add tool execution context 2026-06-09 19:43:53 +09:00
a775a10d95
ticket: record tool context review and parallel guidance implementation 2026-06-09 19:43:13 +09:00
492fe06832
workflow: prefer parallel queued starts 2026-06-09 19:41:20 +09:00
762a18425f
ticket: record ticketlist implementation 2026-06-09 19:39:46 +09:00
7368416e54
ticket: lighten ticket list output 2026-06-09 19:38:09 +09:00
d8aed7befe
tool: add execution context 2026-06-09 19:31:11 +09:00
962 changed files with 13778 additions and 2246 deletions

View File

@ -3,7 +3,7 @@ title: "E2E テスト戦略"
state: "active"
created_at: "2026-06-09T07:09:26Z"
updated_at: "2026-06-09T07:09:26Z"
linked_tickets: ["20260527-000002-001"]
linked_tickets: ["00001KSKBP9YG"]
---
## Goal
@ -52,7 +52,7 @@ E2E は常時実行の軽いテストではなく、dogfooding 中に「この
## Decision context
- linked Ticket `20260527-000002-001` は、E2E harness の最初の concrete implementation Ticket として扱う。
- linked Ticket `00001KSKBP9YG` は、E2E harness の最初の concrete implementation Ticket として扱う。
- この Objective は E2E 全体の中長期方針・判断軸を保持する。個別 scenario の実装や harness の細部は concrete Ticket に分ける。
- TUI を直接 PTY で叩く方針は初期 harness では避け、protocol/client 経由を優先する。
- provider 全対応は初期 scope にしない。fixture / mock HTTP server を基礎にし、代表 provider から段階的に広げる。

View File

@ -0,0 +1,73 @@
---
title: "ネイティブGUIアプリケーション"
state: "active"
created_at: "2026-06-10T07:41:18Z"
updated_at: "2026-06-10T07:41:18Z"
linked_tickets: []
---
## Goal
Yoi の Pod / Ticket / Orchestrator / workflow 操作を、TUI だけでなくネイティブ GUI から扱えるようにする。
最初の到達点は、既存の runtime / Ticket backend / Pod protocol / Profile / workflow authority を再実装せずに、workspace の状態を視覚的に把握し、選択した Pod・Ticket・role action に対して安全に操作できる desktop GUI client を持つこと。GUI は core authority ではなく client surface とし、既存 CLI/TUI と同じ durable state・同じ protocol・同じ permission/prompt/workflow 境界を使う。
## Motivation / background
現在の TUI / Panel は dogfooding 可能な状態まで進んでいるが、複数 Pod・複数 Ticket・Orchestrator 状態・session output・role launch・review/merge dossier を同時に扱うには、terminal UI の表示密度・視覚的状態表現・スクロール/選択/比較操作に限界が出ている。
ネイティブ GUI があると、以下をより自然に扱える。
- live / stored Pod、Ticket lane、Orchestrator progress、Companion/Intake 状態の同時表示。
- Ticket body/thread/artifacts、Pod output、validation evidence、diff/report の並列閲覧。
- composer target、role action、queue/routing/attach/restore の明確な affordance。
- long-running orchestration の通知、状態変化、失敗診断の視覚化。
- 将来的な review / merge-ready dossier / plan board / settings editor の専用 UI。
一方で、GUI を理由に runtime authority を分散させたり、Ticket/Pod state を独自 DB として二重管理したり、prompt/workflow 文字列を GUI code に直書きしたりしてはいけない。
## Strategy / design direction
- GUI は Yoi core の上に乗る client として作る。
- Pod lifecycle、session/history、Ticket storage、Profile resolution、workflow/prompt authority は既存 core を正とする。
- GUI 固有 state は selection、layout、local UI preference などに限定する。
- 最初に toolkit / architecture の小さな spike を置く。
- 評価軸は Rust code reuse、async/runtime 統合、native packaging、Linux dogfooding しやすさ、testability、accessibility、long-running log/output 表示、将来の cross-platform 余地。
- toolkit 選定は Objective では固定しない。候補比較と採用理由を Ticket に残す。
- 実装は段階的に進める。
1. read-only workspace dashboard: Pod / Ticket / Orchestrator 状態を既存 backend から表示する。
2. attach / restore / open など、既存 protocol に乗る低リスク操作を追加する。
3. composer と role action: Companion / Intake / Orchestrator / coder / reviewer launch を既存 launcher 経由で扱う。
4. Ticket body/thread/artifacts、Pod output、validation evidence、review report を閲覧しやすくする。
5. 必要に応じて settings/profile/config editor や merge-ready dossier UI を追加する。
- TUI は廃止前提にしない。
- GUI 導入後も CLI/TUI は fallback / automation / terminal-first workflow として維持する。
- GUI で見つかった state model の改善は、TUI と共有できる pure data model / client API に寄せる。
- Prompt / workflow / role guidance は GUI code に直書きしない。
- LLM-facing prompt は `resources/prompts` または `.yoi/workflow` / configured resources を正とする。
- GUI は prompt 文言を所有せず、選択・起動・runtime context の入力面を担当する。
- Security / privacy / authority boundary を保つ。
- secret-like data は UI diagnostics / logs / model context に漏らさない。
- permission / scope / profile の authority は既存 resolver/policy に従う。
- GUI convenience action は durable Ticket/Pod state transition と対応付け、暗黙の side effect を避ける。
## Success criteria / exit conditions
- 明示コマンドまたは binary で native GUI を起動できる。
- GUI は既存 workspace config、Profile、Ticket backend、Pod registry/protocol を使い、独自の authority store を持たない。
- 最小 dashboard で live/stored Pod、Ticket lane/state、Orchestrator/role session の概況を確認できる。
- GUI から少なくとも attach/restore/open 相当の安全な Pod 操作ができる。
- GUI から Ticket Intake または既存 role launcher を使った role action を実行でき、既存の prompt/workflow/resource 境界を壊さない。
- Pod output / Ticket body/thread/artifacts を、TUI より見通しよく閲覧できる最小 UI がある。
- GUI 固有 state と core durable state の境界が文書化されている。
- toolkit / architecture 選定理由、採用しなかった選択肢、packaging 方針が Ticket artifact または design note として残っている。
- GUI で使う state transformation / action eligibility は pure model として test 可能で、主要な selection/action state の unit test がある。
- GUI 実装は CLI/TUI の既存 workflow を破壊せず、必要な targeted validation が定義されている。
## Decision context
- この Objective は中長期の方向性・判断軸を保持する。具体的な toolkit 選定、crate 構成、初期 dashboard 実装、role action 実装、packaging は個別 Ticket に分ける。
- GUI は TUI の単純な置換ではなく、複数 Pod / Ticket / Orchestrator を扱う workspace cockpit として設計する。
- authority は既存 core に残す。GUI は client/view/controller surface であり、Pod/Ticket/workflow/prompt の正本を所有しない。
- Prompt 直書き禁止方針を守る。GUI 実装中に LLM-facing 文言が必要になった場合は、`resources/prompts` または workflow/resource 側に置く。
- 初期 target は dogfooding しやすい desktop GUI とし、public release / cross-platform polish / installer は後続段階で扱う。

View File

@ -0,0 +1,63 @@
---
title: "MCP integration as external capability provider"
state: "active"
created_at: "2026-06-10T07:47:48Z"
updated_at: "2026-06-10T07:47:48Z"
linked_tickets: ["00001KST8H4M0", "00001KTR81P9X", "00001KTR82RB7"]
---
## Goal
Yoi が MCP (Model Context Protocol) server を external capability provider として安全に扱えるようにする。
到達点は、MCP server が提供する tools / resources / prompts を、Yoi の既存の Pod / Feature / ToolRegistry / permission / scope / history / bounded result 境界に乗せて利用できる状態にすること。MCP は Yoi の plugin model そのものではなく、protocol-bound bridge / external provider runtime として扱う。
## Motivation / background
MCP は AI application と外部 system を接続する標準 protocol になりつつあり、server は tools、resources、prompts などを提供する。Yoi にとって MCP support は有用だが、外部 server が返す schema、description、annotation、resource content、prompt template はすべて untrusted data であり、Yoi の instruction hierarchy、scope、permission、history persistence、prompt-context 加工原則を弱めてはいけない。
現行の `pod::feature` API は static descriptor / static tool contribution を中心にしており、MCP のように startup 時の initialize / capability negotiation / discovery によって surface が決まる provider には不足がある。そのため、MCP 実装だけを先に ad-hoc に入れるのではなく、まず外部 protocol-backed provider を扱える Feature API boundary を整え、その上に MCP implementation を載せる。
## Strategy / design direction
- Broad MCP integration Ticket は progress-container として使わず、この Objective に中期方針を移す。
- 実装 work item は concrete Ticket に分ける。
- `00001KTR81P9X`: `pod::feature` / Worker / ToolRegistry API を external protocol-backed provider に耐える形へ拡張する。
- `00001KTR82RB7`: MCP `2025-11-25` local stdio server-feature bridge を実装する。
- MCP 実装は local stdio transport から始める。
- Streamable HTTP、remote auth/OAuth、MCP Registry distribution、workspace-provided package auto-start は後続判断とする。
- tools / resources / prompts は無理に分けず、MCP server features として扱う。
- ただし resources/prompts は direct context injection ではなく、明示 tool operation の結果として history に残す。
- `resources/read` / `prompts/get` の結果を history に残らない形で context に注入しない。
- MCP server は untrusted external capability provider として扱う。
- server-provided schema/description/annotation/content/error は instruction ではなく data。
- ToolRegistry / PreToolCall permission / history / bounded result path を迂回しない。
- local process execution は explicit authority として扱う。
- filesystem/network authority から暗黙に subprocess 起動権限を派生させない。
- secrets は explicit secret/env references で扱い、diagnostics / logs / model context / project records に plaintext として残さない。
- dynamic discovery / list_changed は prompt/tool schema consistency を壊さない範囲で扱う。
- live refresh が危険なら next-turn refresh または restart/reinitialize-required diagnostic を選ぶ。
- silent stale state は避ける。
- Sampling / elicitation は external server が Yoi 側の LLM/user interaction を要求する強い authority なので、初期段階では fail-closed とし、必要なら別 Ticket で approval/resume/UI path を設計する。
## Success criteria / exit conditions
- `pod::feature` が external protocol-backed capability provider を表現できる。
- local subprocess execution authority が明示的に型・config・grant として扱われる。
- Feature-provided long-running service / connection manager を Pod lifetime に安全に接続できる。
- discovery 後の dynamic tool contribution が通常 ToolRegistry と permission path に統合される。
- MCP spec baseline `2025-11-25` に基づく local stdio server integration がある。
- MCP tools が namespaced stable Yoi tool として使える。
- MCP resources/prompts が明示 tool operation として使え、取得結果は通常 tool result として history に残る。
- server-provided data が system/developer instruction、scope、permission、prompt-context、history persistence rules を弱めない。
- secrets / env values / command args containing secrets が diagnostics、logs、model context に plaintext で出ない。
- Streamable HTTP、remote auth、distribution、sampling、elicitation の扱いが out-of-scope / fail-closed / follow-up として明示されている。
- local mock MCP server による focused tests と、関連 crate tests、`nix build .#yoi` による packaging validation が定義されている。
## Decision context
- `00001KST8H4M0` は broad MCP integration Ticket として作られていたが、今後はこの Objective の背景 context として扱い、実装 authority は concrete Tickets に置く。
- `00001KTR81P9X` は API/architecture prerequisite。MCP 実装が ToolRegistry / permission / history path を迂回しないための土台を作る。
- `00001KTR82RB7` は MCP implementation Ticket。API 拡張の結果に乗って local stdio MCP server features を実装する。
- Objective-to-Ticket links は context であり、dependency/scheduling authority ではない。実際の routing / readiness / blockers は各 Ticket の body/thread/artifacts と Orchestrator 判断に置く。
- `resources/prompts` は scope 外に固定しない。安全条件は「direct hidden context injection をしない」ことであり、明示 tool result として扱うなら MCP integration の対象に含める。

View File

@ -1,21 +1 @@
default = "project:companion"
[profile.companion]
description = "Companion role profile: GPT-5.5 with bundled default behavior"
path = "profiles/companion.lua"
[profile.intake]
description = "Intake role profile: GPT-5.5 with bundled default behavior"
path = "profiles/intake.lua"
[profile.orchestrator]
description = "Orchestrator role profile: GPT-5.5 with bundled default behavior"
path = "profiles/orchestrator.lua"
[profile.coder]
description = "Coder role profile: GPT-5.5 with bundled default behavior"
path = "profiles/coder.lua"
[profile.reviewer]
description = "Reviewer role profile: GPT-5.5 with bundled default behavior"
path = "profiles/reviewer.lua"
default = "builtin:companion"

View File

@ -1,46 +0,0 @@
local profile = require("yoi.profile")
local scope = require("yoi.scope")
local compact = require("yoi.compact")
return function(opts)
return profile {
slug = opts.slug,
description = opts.description,
scope = opts.scope or scope.workspace_read(),
delegation_scope = opts.delegation_scope,
session = {
record_event_trace = true,
},
worker = {
reasoning = "high",
language = opts.language or "Japanese",
},
model = {
ref = opts.model_ref,
},
compaction = compact.tokens {
threshold = 240000,
request_threshold = 270000,
worker_context_max_tokens = 100000,
},
memory = {
extract_threshold = 50000,
consolidation_threshold_files = 5,
consolidation_threshold_bytes = 50000,
},
web = {
enabled = true,
search = {
provider = "brave",
api_key_secret = "web/brave/default",
},
},
}
end

View File

@ -1,10 +0,0 @@
local base = require("_base")
local scope = require("yoi.scope")
return base {
slug = "coder",
description = "Coder role profile: GPT-5.5 with bundled default behavior",
model_ref = "codex-oauth/gpt-5.5",
language = "Japanese",
scope = scope.workspace_write(),
}

View File

@ -1,8 +0,0 @@
local base = require("_base")
return base {
slug = "companion",
description = "Companion role profile: GPT-5.5 with bundled default behavior",
model_ref = "codex-oauth/gpt-5.5",
language = "Japanese",
}

View File

@ -1,8 +0,0 @@
local base = require("_base")
return base {
slug = "intake",
description = "Intake role profile: GPT-5.5 with bundled default behavior",
model_ref = "codex-oauth/gpt-5.5",
language = "Japanese",
}

View File

@ -1,10 +0,0 @@
local base = require("_base")
local scope = require("yoi.scope")
return base {
slug = "orchestrator",
description = "Orchestrator role profile: GPT-5.5 with bundled default behavior",
delegation_scope = scope.workspace_write(),
model_ref = "codex-oauth/gpt-5.5",
language = "Japanese",
}

View File

@ -1,8 +0,0 @@
local base = require("_base")
return base {
slug = "reviewer",
description = "Reviewer role profile: GPT-5.5 with bundled default behavior",
model_ref = "codex-oauth/gpt-5.5",
language = "Japanese",
}

View File

@ -6,17 +6,17 @@ root = ".yoi/tickets"
language = "Japanese"
[roles.intake]
profile = "project:intake"
profile = "builtin:intake"
workflow = "ticket-intake-workflow"
[roles.orchestrator]
profile = "project:orchestrator"
profile = "builtin:orchestrator"
workflow = "ticket-orchestrator-routing"
[roles.coder]
profile = "project:coder"
profile = "builtin:coder"
workflow = "multi-agent-workflow"
[roles.reviewer]
profile = "project:reviewer"
profile = "builtin:reviewer"
workflow = "multi-agent-workflow"

View File

@ -0,0 +1 @@
{"id":"orch-plan-20260610-090202-1","ticket_id":"00001KSKBPSJG","kind":"accepted_plan","accepted_plan":{"summary":"Implement the model setup wizard as an explicit one-shot CLI path, not normal Pod startup: add `yoi setup-model` that launches a setup TUI. The wizard should select a bundled model/provider entry, optionally accept an auth hint/reference when the provider requires one, and persist a user default Profile by updating the user Profile registry under the normal config root (`profiles.toml` plus a generated user Profile Lua file such as `profiles/default.lua`). It must not write workspace `.yoi`, session history, Ticket files, runtime/local/secret-like files, or start/attach a Pod during setup. Existing normal launch semantics remain unchanged except that subsequent default startup can use the persisted user default Profile.","branch":"tui-model-setup-wizard","worktree":"/home/hare/Projects/yoi/.worktree/tui-model-setup-wizard","role_plan":"Coder implements in `.worktree/tui-model-setup-wizard` with write scope limited to the child worktree. Orchestrator keeps Ticket/progress records in the main workspace. Reviewer will be delegated after coder report."},"author":"orchestrator","at":"2026-06-10T09:02:02Z"}

View File

@ -1,8 +1,10 @@
---
title: "TUI: ユーザーマニフェストのモデル設定 wizard"
state: "ready"
state: 'closed'
created_at: "2026-05-27T00:00:18Z"
updated_at: "2026-06-08T07:29:10Z"
updated_at: '2026-06-10T09:31:45Z'
queued_by: 'yoi ticket'
queued_at: '2026-06-10T07:59:32Z'
---
## Migration reference

View File

@ -0,0 +1,27 @@
完了しました。
実施内容:
- `yoi setup-model` を top-level command として追加しました。
- setup path は通常の Pod 起動/attach/session 復元とは分離され、選択した catalog-backed model を user config 配下の Profile 設定として保存します。
- `profiles.toml` の default selector と `[profile.default]`、および generated `profiles/default.lua` を deterministic に書きます。
- setup 実行中に workspace `.yoi`、Ticket、session、runtime/local/secret-like files は書きません。
- `yoi --help``yoi setup-model` を表示します。
- `package.nix` cargoHash も更新しました。
Merge:
- Branch: `tui-model-setup-wizard`
- Merge commit: `021661b5 merge: setup model wizard`
確認:
- Branch-local reviewer `reviewer-tui-model-setup-wizard` が approve。
- `cargo fmt --check` passed。
- `git diff --check` passed。
- `cargo test -p tui setup_model --lib` passed。
- `cargo test -p yoi setup_model --bin yoi` passed。
- `cargo check -p yoi` passed。
- `target/debug/yoi ticket doctor` passed。
- typed `TicketDoctor` は 0 errors / 3 pre-existing diagnostics。
- `nix build .#yoi` passed。
残作業:
- なし。将来的に richer alt-screen setup UI に発展させる余地はありますが、本 Ticket の one-shot setup command / Profile persistence 要件は満たしています。

View File

@ -0,0 +1,307 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:18Z -->
## Migrated
Migrated from tickets/tui-user-model-setup.md. No legacy review file was present at migration time.
---
<!-- event: decision author: ticket-intake at: 2026-06-08T07:29:01Z -->
## Decision
## Intake refinement: current Yoi context
This is an existing migrated Ticket; no duplicate Ticket was created. The original body remains useful for the desired wizard shape, but several migrated assumptions are stale and must be treated as superseded where they conflict with current Yoi code and project decisions.
### Current request snapshot
Add an interactive TUI setup flow that helps a first-time user choose a provider/model from the provider catalog and persist a user-level default model configuration so a normal fresh `yoi` spawn can resolve a model without manual TOML editing.
### Binding decisions / invariants
- Product entrypoint is the installed `yoi` binary, not an old standalone `tui`/`insomnia` binary. The CLI surface should be chosen under the `yoi` CLI owner boundary; the migrated `tui setup-model` spelling is only historical/placeholder text.
- Current config paths use `manifest::paths::config_dir()` with default `$XDG_CONFIG_HOME/yoi` / `$HOME/.config/yoi`, not `~/.config/insomnia`.
- Normal reusable runtime configuration is Profile-oriented. The implementation must decide, with preflight, whether this wizard writes/updates `profiles.toml`, a profile-local model fragment, or another explicit user config surface; it must not silently reintroduce the removed ambient manifest-cascade model.
- Current catalog auth hints are `AuthHint::None`, `AuthHint::ApiKey`, `AuthHint::SecretRef { ref_ }`, and `AuthHint::CodexOAuth`; the migrated `ApiKey { env: Option<String> }` flow is stale.
- Secret values must not be written into Ticket bodies, logs, diagnostics, or generated artifacts. Prefer the existing local secret-store / `yoi keys` boundary for normal provider credentials; raw `model.auth.file` remains a low-level explicit-file source, not the default UX if a safer secret-ref path is available.
- The wizard must be cancel-safe: no user config/secret writes before explicit confirmation, and failed parsing/writing must leave existing config usable.
### Implementation latitude
- The exact command name may be settled during preflight, but should fit existing `yoi` CLI semantics and help text.
- A simple vertical provider/model list is sufficient for the first implementation; search/filtering can be deferred unless preflight finds the catalog size makes it necessary.
- If only one model exists for the selected provider, skipping the model-choice step is acceptable.
- Preview may show the generated/surgical config change rather than a full diff, as long as overwrite of an existing model/default is explicit.
### Acceptance criteria
- A first-time user can launch the setup flow from the `yoi` CLI without entering normal Pod spawn by accident.
- The flow loads current `provider::catalog::load_providers()` and `load_models()` data, displays provider/model choices, and handles all current `AuthHint` variants.
- The confirmed result persists a user-level default model/profile configuration at the current Yoi config path, without storing plaintext secrets in config by default.
- Existing user config with an existing model/default is detected and requires overwrite confirmation; malformed config is reported and not rewritten.
- Esc/Ctrl-C cancel before confirmation leaves files unchanged.
- After setup, a normal fresh `yoi` spawn can resolve the selected model/profile without a model-resolve error.
- Validation includes focused Rust tests for CLI parsing/config rendering/update behavior and `nix build .#yoi` because this changes CLI/TUI/runtime resources/packaging-visible code.
### Readiness / routing signal
- readiness: spike_needed
- needs_preflight: true
- risk_flags: [cli-ux, profiles-config, secrets, auth-boundary, migration-staleness, tui]
This Ticket is ready for Orchestrator routing to preflight/spike, not direct implementation. Preflight should first settle the current user-config write target and command spelling, then either update the Ticket body or record a concise binding decision before implementation.
---
<!-- event: intake_summary author: ticket-intake at: 2026-06-08T07:29:10Z -->
## Intake summary
Updated existing Ticket 20260527-000018-tui-user-model-setup in place; no duplicate was created. The migrated request is now clarified as a Yoi CLI/TUI first-run model setup flow, with stale `tui`/`insomnia`/old AuthHint assumptions explicitly superseded in the thread. Routing readiness is spike/preflight, not direct implementation: first settle current `yoi` command spelling and the user-level config write target for Profile-oriented model defaults, then implement the wizard. needs_preflight=true; risk_flags=[cli-ux, profiles-config, secrets, auth-boundary, migration-staleness, tui].
---
<!-- event: state_changed author: ticket-intake at: 2026-06-08T07:29:10Z from: intake to: ready reason: intake_ready field: workflow_state -->
## State changed
Intake clarification completed for the existing Ticket. The Ticket is ready for Orchestrator routing to preflight/spike; implementation should not begin until the preflight decisions called out in the intake summary are recorded.
---
<!-- event: state_changed author: "yoi ticket" at: 2026-06-10T07:59:32Z from: ready to: queued reason: queued field: state -->
## State changed
Ticket を `yoi ticket` が queued にしました。
---
<!-- event: decision author: hare at: 2026-06-10T07:59:32Z -->
## Decision
Human authorized Queue from workspace panel notification; Orchestrator read the Ticket and will accept before implementation side effects.
---
<!-- event: state_changed author: "yoi ticket" at: 2026-06-10T07:59:32Z from: queued to: inprogress reason: cli_state field: state -->
## State changed
State changed to `inprogress`.
---
<!-- event: decision author: hare at: 2026-06-10T07:59:32Z -->
## Decision
Accepting implementation after workspace inspection. Expected overlap with prompt-resource cleanup is low, so route in parallel in a dedicated worktree.
---
<!-- event: plan author: orchestrator at: 2026-06-10T09:02:02Z -->
## Plan
Routing decision: implementation_ready
Reason:
- Ticket is already `inprogress`; relation query and orchestration-plan query show no blockers.
- Existing thread marked this as needing a small preflight. Bounded code/context check resolved the implementation-shaping decisions without needing another planning round.
Evidence checked:
- Ticket body/thread/artifacts for `00001KSKBPSJG`.
- Relation records: none.
- Orchestration plan records: none before this routing pass.
- Current worktree/branch state: `.worktree/tui-model-setup-wizard` exists and has no implementation commit yet.
- Current CLI surface in `crates/yoi/src/main.rs` includes top-level `panel`, `keys`, `pod`, `ticket`, `objective`, `session`, `memory lint`; setup is not yet present.
- Profile/config surface in `crates/manifest/src/paths.rs` and `crates/manifest/src/profile.rs`; active reusable Profiles are Lua-first with user registry/config under the normal config root.
- Provider/model catalog resources under `resources/providers` and `resources/models`.
Binding decisions / invariants:
- Add an explicit one-shot setup entry point `yoi setup-model`; it must not run normal Pod startup, create sessions, attach sockets, or spawn Pods while configuring.
- Persist the result as a user default Profile through normal Profile mechanisms: user `profiles.toml` plus a generated user Profile Lua file (for example `profiles/default.lua`) under the normal config root. Do not write workspace `.yoi`, Ticket records, session history, runtime/local/secret-like files, or project records from the setup wizard.
- Do not introduce legacy manifest authority or new environment-variable configuration surfaces.
- Keep existing startup/profile semantics intact; the setup wizard only creates/updates config that normal startup already knows how to consume.
- If provider credential handling needs more than selecting/recording an existing auth hint/ref, escalate rather than inventing a new secret store flow.
Implementation latitude:
- Exact TUI layout and internal state machine organization are up to coder, bounded by the one-shot setup and persistence invariants.
- Coder may choose the generated profile name/path if it is deterministic, user-config scoped, and unambiguous from the default selector.
- Coder may keep the catalog/model choice set modest and testable for the first implementation.
Validation:
- Focused CLI/parser and setup persistence tests.
- Focused TUI/setup module tests where practical.
- `cargo fmt --check` or `cargo fmt`, `git diff --check`, focused cargo tests, and broader `cargo check`/`nix build .#yoi` before merge because this touches CLI/TUI/config/package source surfaces.
Escalate if:
- The implementation requires changing Profile registry semantics, secret-store behavior, normal Pod launch behavior, or workspace `.yoi` authority.
- Credential entry/storage cannot be limited to an existing explicit auth reference/hint.
---
<!-- event: plan author: orchestrator at: 2026-06-10T09:08:59Z -->
## Plan
Routing update: blocked_by_dependency_or_missing_authority
Reason:
- This Ticket remains `inprogress` and has an accepted implementation plan for `.worktree/tui-model-setup-wizard`, but the current Orchestrator process cannot delegate write scope to the child worktree.
- Attempted `SpawnPod` for `coder-tui-model-setup-wizard` with write scope limited to the child worktree failed: requested scope `/home/hare/Projects/yoi/.worktree/tui-model-setup-wizard` is not within the spawner effective scope.
- Retrying with broader `/home/hare/Projects/yoi` write scope also failed for the same effective-scope reason.
- Direct file write to the child worktree through the available tool scope is read-only, so the Orchestrator cannot safely implement the Ticket in this session either.
Evidence checked:
- Ticket body/thread/artifacts and relation/orchestration-plan records.
- Current CLI/profile/provider code map was boundedly inspected and the accepted plan was recorded.
- Worktree `.worktree/tui-model-setup-wizard` exists, but no coder was spawned and no implementation files were changed.
Next action:
- Continue this Ticket from a Pod/session with delegated write scope for `.worktree/tui-model-setup-wizard`, or explicitly re-route/clean up the existing inprogress worktree.
- Do not treat this as planning uncertainty; the current blocker is write/delegation authority for implementation side effects.
---
<!-- event: implementation_report author: orchestrator at: 2026-06-10T09:16:45Z -->
## Implementation report
Implementation report
Branch/worktree: `tui-model-setup-wizard` / `.worktree/tui-model-setup-wizard`
Commits:
- `6bb023e9 merge develop into setup wizard worktree` (brought branch up to current `develop` before implementation)
- `32be6075 feat: add setup model command`
Summary:
- Added a top-level `yoi setup-model` command that enters a one-shot setup path separate from normal Pod startup.
- Added `tui::setup_model` to list catalog-backed models/providers, prompt for a default selection, and persist user Profile config under the normal user config directory.
- Persistence writes `profiles.toml` with `default = "user:default"` and `[profile.default] path = "profiles/default.lua"`, plus generated `profiles/default.lua` using the selected model ref.
- The setup path does not start/attach a Pod, create sessions, or write workspace `.yoi` records.
- Added CLI parser tests for `setup-model` and persistence tests for generated profile config.
Validation run in branch:
- `cargo fmt`
- `cargo test -p tui setup_model --lib` passed.
- `cargo test -p yoi parse_setup_model --bin yoi` passed.
- `cargo check -p yoi` passed.
- `git diff --check` passed.
Notes:
- `nix build .#yoi` was not run in the branch yet; Orchestrator should run it before merge because this touches CLI/TUI/config/package source surfaces.
- The implementation uses a simple bounded terminal setup flow rather than broad TUI refactoring.
---
<!-- event: review author: reviewer-tui-model-setup-wizard at: 2026-06-10T09:29:42Z status: approve -->
## Review: approve
Branch-local review verdict: approve
Blockers: none.
Reviewer confirmed after fixes:
- `package.nix` cargoHash was updated and `nix build .#yoi` passed.
- Top-level help now lists `yoi setup-model`.
- Tracked worktree is clean.
Validation run by reviewer:
- `cargo test -p tui setup_model --lib` passed.
- `cargo test -p yoi setup_model --bin yoi` passed.
- `cargo check -p yoi` passed.
- `git diff --check $(git merge-base HEAD develop)..HEAD` passed.
- `nix build .#yoi` passed.
This is branch-local review evidence; final main-branch approval/close belongs to merge-completion.
---
<!-- event: review author: orchestrator at: 2026-06-10T09:31:33Z status: approve -->
## Review: approve
Main-branch review/merge-completion approval.
Verified before merge:
- Branch-local reviewer approved after blocker fix.
- Merge target matched branch `tui-model-setup-wizard` / worktree `.worktree/tui-model-setup-wizard` and commits `6bb023e9`, `32be6075`, `66d6bf2e`, `c06817b4`.
- Packaging blocker was fixed by updating `package.nix` cargoHash; top-level help lists `yoi setup-model`.
Merged:
- `git merge --no-ff tui-model-setup-wizard -m "merge: setup model wizard"`
- Merge commit: `021661b5 merge: setup model wizard`
Post-merge validation:
- `cargo fmt --check` passed.
- `git diff --check` passed.
- `cargo test -p tui setup_model --lib` passed.
- `cargo test -p yoi setup_model --bin yoi` passed.
- `cargo check -p yoi` passed.
- `target/debug/yoi ticket doctor` passed.
- typed `TicketDoctor` reported 0 errors and 3 pre-existing diagnostics.
- `nix build .#yoi` passed.
Result: approve.
---
<!-- event: state_changed author: orchestrator at: 2026-06-10T09:31:33Z from: inprogress to: done reason: merged_and_validated field: state -->
## State changed
Merged branch `tui-model-setup-wizard` with merge commit `021661b5`; branch-local review approved after fixes and post-merge validation passed (`cargo fmt --check`, `git diff --check`, `cargo test -p tui setup_model --lib`, `cargo test -p yoi setup_model --bin yoi`, `cargo check -p yoi`, `target/debug/yoi ticket doctor`, `nix build .#yoi`).
---
<!-- event: state_changed author: hare at: 2026-06-10T09:31:45Z from: done to: closed reason: closed field: state -->
## State changed
Ticket を closed にしました。
---
<!-- event: close author: hare at: 2026-06-10T09:31:45Z status: closed -->
## 完了
完了しました。
実施内容:
- `yoi setup-model` を top-level command として追加しました。
- setup path は通常の Pod 起動/attach/session 復元とは分離され、選択した catalog-backed model を user config 配下の Profile 設定として保存します。
- `profiles.toml` の default selector と `[profile.default]`、および generated `profiles/default.lua` を deterministic に書きます。
- setup 実行中に workspace `.yoi`、Ticket、session、runtime/local/secret-like files は書きません。
- `yoi --help``yoi setup-model` を表示します。
- `package.nix` cargoHash も更新しました。
Merge:
- Branch: `tui-model-setup-wizard`
- Merge commit: `021661b5 merge: setup model wizard`
確認:
- Branch-local reviewer `reviewer-tui-model-setup-wizard` が approve。
- `cargo fmt --check` passed。
- `git diff --check` passed。
- `cargo test -p tui setup_model --lib` passed。
- `cargo test -p yoi setup_model --bin yoi` passed。
- `cargo check -p yoi` passed。
- `target/debug/yoi ticket doctor` passed。
- typed `TicketDoctor` は 0 errors / 3 pre-existing diagnostics。
- `nix build .#yoi` passed。
残作業:
- なし。将来的に richer alt-screen setup UI に発展させる余地はありますが、本 Ticket の one-shot setup command / Profile persistence 要件は満たしています。
---

Some files were not shown because too many files have changed in this diff Show More