onto-mcp 0.4.11 → 0.4.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/.onto/authority/core-lexicon.yaml +1 -1
  2. package/.onto/authority/supported-models.yaml +153 -0
  3. package/.onto/domains/accounting-kr/competency_qs.md +153 -153
  4. package/.onto/processes/reconstruct/obligation-coverage-ledger.yaml +842 -0
  5. package/.onto/processes/reconstruct/obligation-coverage-recorded.yaml +225 -0
  6. package/.onto/processes/reconstruct/ontology-seeding-and-maturation-design.md +93 -54
  7. package/.onto/processes/reconstruct/reconstruct-contract-registry.yaml +202 -49
  8. package/.onto/processes/reconstruct/reconstruct-execution-ux-contract.md +72 -1
  9. package/.onto/processes/reconstruct/source-profiles/spreadsheet.md +35 -0
  10. package/.onto/processes/review/nesting-batch-worker-contract.md +1 -1
  11. package/.onto/processes/review/productized-live-path.md +9 -5
  12. package/.onto/processes/review/prompt-execution-runner-contract.md +32 -8
  13. package/.onto/processes/review/review-target-profile-contract.md +47 -4
  14. package/.onto/processes/shared/pipeline-execution-ledger-contract.md +11 -0
  15. package/.onto/processes/shared/target-material-kind-contract.md +1 -1
  16. package/README.md +64 -1
  17. package/dist/cli.js +11 -1
  18. package/dist/core-api/reconstruct-api.js +679 -18
  19. package/dist/core-api/review-api.js +70 -5
  20. package/dist/core-api/review-progress.js +7 -0
  21. package/dist/core-api/runtime-observation.js +7 -0
  22. package/dist/core-runtime/artifact-io.js +131 -0
  23. package/dist/core-runtime/cli/claude-code-review-unit-executor.js +21 -9
  24. package/dist/core-runtime/cli/claude-nesting-batch-worker.js +4 -2
  25. package/dist/core-runtime/cli/materialize-review-prompt-packets.js +68 -14
  26. package/dist/core-runtime/cli/prepare-review-session.js +34 -1
  27. package/dist/core-runtime/cli/render-review-final-output.js +2 -1
  28. package/dist/core-runtime/cli/run-review-prompt-execution.js +758 -48
  29. package/dist/core-runtime/cli/run-seats.js +18 -0
  30. package/dist/core-runtime/cli/runtime-submit-context.js +10 -2
  31. package/dist/core-runtime/cli/unit-resubmit.js +269 -0
  32. package/dist/core-runtime/cli/worker-structured-output.js +80 -2
  33. package/dist/core-runtime/discovery/host-detection.js +71 -22
  34. package/dist/core-runtime/discovery/review-cert-assemble.js +208 -0
  35. package/dist/core-runtime/discovery/review-cert-record.js +442 -0
  36. package/dist/core-runtime/discovery/review-execution-units.js +22 -0
  37. package/dist/core-runtime/discovery/seat-inventory.js +167 -0
  38. package/dist/core-runtime/discovery/settings-chain.js +311 -52
  39. package/dist/core-runtime/discovery/supported-models.js +289 -25
  40. package/dist/core-runtime/discovery/synthesize-cert-assemble.js +197 -0
  41. package/dist/core-runtime/discovery/synthesize-cert-capsule.js +399 -0
  42. package/dist/core-runtime/discovery/synthesize-cert-judge.js +340 -0
  43. package/dist/core-runtime/discovery/synthesize-cert-loop.js +234 -0
  44. package/dist/core-runtime/discovery/synthesize-cert-mutation.js +117 -0
  45. package/dist/core-runtime/discovery/synthesize-cert-packet.js +182 -0
  46. package/dist/core-runtime/discovery/synthesize-cert-record.js +831 -0
  47. package/dist/core-runtime/discovery/synthesize-cert-sampler.js +336 -0
  48. package/dist/core-runtime/effort-calibration-ingest.js +326 -0
  49. package/dist/core-runtime/effort-calibration-reconstruct.js +47 -0
  50. package/dist/core-runtime/effort-calibration-review.js +22 -0
  51. package/dist/core-runtime/effort-calibration-sweep.js +110 -0
  52. package/dist/core-runtime/effort-frontier.js +134 -0
  53. package/dist/core-runtime/llm/claude-bin.js +77 -0
  54. package/dist/core-runtime/llm/dispatch-breaker.js +412 -0
  55. package/dist/core-runtime/llm/dispatch-fallback-adapter-capabilities.js +33 -0
  56. package/dist/core-runtime/llm/llm-caller.js +316 -35
  57. package/dist/core-runtime/llm/mock-llm-realization.js +35 -4
  58. package/dist/core-runtime/llm/model-switcher.js +1 -1
  59. package/dist/core-runtime/llm/openai-responses-incomplete-error.js +46 -0
  60. package/dist/core-runtime/llm/sealed-dispatch-capability.js +359 -0
  61. package/dist/core-runtime/llm/structured-dispatch-error.js +15 -0
  62. package/dist/core-runtime/onboard/claude-profile-scan.js +65 -0
  63. package/dist/core-runtime/onboard/cli-host.js +5 -2
  64. package/dist/core-runtime/onboard/configure-provider.js +33 -1
  65. package/dist/core-runtime/onboard/host-target.js +28 -3
  66. package/dist/core-runtime/onboard/register.js +54 -12
  67. package/dist/core-runtime/pipeline-execution-ledger.js +10 -0
  68. package/dist/core-runtime/reconstruct/artifact-types.js +37 -0
  69. package/dist/core-runtime/reconstruct/benchmark-evidence.js +16 -0
  70. package/dist/core-runtime/reconstruct/claim-projection-validation.js +19 -5
  71. package/dist/core-runtime/reconstruct/competency-projection-contract.js +63 -0
  72. package/dist/core-runtime/reconstruct/comprehension-artifact.js +321 -0
  73. package/dist/core-runtime/reconstruct/comprehension-reduce.js +367 -0
  74. package/dist/core-runtime/reconstruct/comprehension-semantic-map.js +771 -0
  75. package/dist/core-runtime/reconstruct/contract-registry.js +20 -0
  76. package/dist/core-runtime/reconstruct/directive-validation.js +4 -3
  77. package/dist/core-runtime/reconstruct/dispatch-fallback-artifacts.js +640 -0
  78. package/dist/core-runtime/reconstruct/execution-telemetry.js +84 -9
  79. package/dist/core-runtime/reconstruct/final-output-sections.js +89 -0
  80. package/dist/core-runtime/reconstruct/governing-snapshot.js +36 -1
  81. package/dist/core-runtime/reconstruct/leaf-reader.js +305 -0
  82. package/dist/core-runtime/reconstruct/llm-dispatch-failure.js +270 -0
  83. package/dist/core-runtime/reconstruct/llm-touch-fingerprint.js +94 -0
  84. package/dist/core-runtime/reconstruct/material-admission-validation.js +20 -5
  85. package/dist/core-runtime/reconstruct/material-profile-validation.js +24 -6
  86. package/dist/core-runtime/reconstruct/materialize-preparation.js +380 -23
  87. package/dist/core-runtime/reconstruct/maturation-validation.js +1522 -67
  88. package/dist/core-runtime/reconstruct/mock-llm-realization.js +120 -1
  89. package/dist/core-runtime/reconstruct/obligation-assertion.js +18 -0
  90. package/dist/core-runtime/reconstruct/ontology-seed-validation.js +39 -7
  91. package/dist/core-runtime/reconstruct/output-budget.js +6 -0
  92. package/dist/core-runtime/reconstruct/pipeline-execution-ledger.js +112 -5
  93. package/dist/core-runtime/reconstruct/post-seed-validation.js +122 -11
  94. package/dist/core-runtime/reconstruct/proof-authority-validation.js +2 -6
  95. package/dist/core-runtime/reconstruct/purpose-authority-validation.js +119 -7
  96. package/dist/core-runtime/reconstruct/record.js +49 -3
  97. package/dist/core-runtime/reconstruct/registry-verification-validation.js +41 -5
  98. package/dist/core-runtime/reconstruct/run-control-validation.js +1019 -37
  99. package/dist/core-runtime/reconstruct/run.js +5409 -517
  100. package/dist/core-runtime/reconstruct/seed-authoring-readiness-validation.js +56 -8
  101. package/dist/core-runtime/reconstruct/semantic-quality-gate.js +112 -7
  102. package/dist/core-runtime/reconstruct/source-observation-delta-validation.js +53 -5
  103. package/dist/core-runtime/reconstruct/source-observations.js +166 -0
  104. package/dist/core-runtime/reconstruct/source-safety-validation.js +77 -188
  105. package/dist/core-runtime/reconstruct/source-scout-pack-validation.js +50 -6
  106. package/dist/core-runtime/reconstruct/terminal-validation.js +145 -13
  107. package/dist/core-runtime/review/continuation-plan.js +12 -5
  108. package/dist/core-runtime/review/issue-artifact-runtime.js +4 -1
  109. package/dist/core-runtime/review/materializers.js +100 -11
  110. package/dist/core-runtime/review/nesting-batch.js +6 -2
  111. package/dist/core-runtime/review/obligation-shardability.js +138 -0
  112. package/dist/core-runtime/review/pipeline-execution-ledger.js +42 -2
  113. package/dist/core-runtime/review/review-artifact-utils.js +219 -7
  114. package/dist/core-runtime/review/review-execution-steps.js +32 -8
  115. package/dist/core-runtime/review/review-progress-contract.js +8 -0
  116. package/dist/core-runtime/review/review-prompt-budget.js +97 -0
  117. package/dist/core-runtime/review/semantic-quality-gate.js +33 -7
  118. package/dist/core-runtime/review/spreadsheet-review-disposition.js +94 -0
  119. package/dist/core-runtime/route-identity.js +182 -0
  120. package/dist/core-runtime/spreadsheet-header-escalation.js +204 -0
  121. package/dist/core-runtime/spreadsheet-structure-observer.js +2689 -0
  122. package/dist/core-runtime/target-material-kind.js +58 -0
  123. package/dist/mcp/server.js +27 -5
  124. package/dist/mcp/tool-schemas.js +8 -0
  125. package/dist/tui/app.js +167 -0
  126. package/dist/tui/data/event-follower.js +116 -0
  127. package/dist/tui/data/node-detail.js +42 -0
  128. package/dist/tui/data/projection-poll.js +26 -0
  129. package/dist/tui/data/session-discovery.js +65 -0
  130. package/dist/tui/index.js +108 -0
  131. package/dist/tui/screens/log.js +25 -0
  132. package/dist/tui/screens/node-detail.js +17 -0
  133. package/dist/tui/screens/session-selector.js +26 -0
  134. package/dist/tui/screens/workflow-tree.js +90 -0
  135. package/dist/tui/view-model/reconstruct-adapter.js +162 -0
  136. package/dist/tui/view-model/review-adapter.js +270 -0
  137. package/dist/tui/view-model/tree-view-model.js +19 -0
  138. package/package.json +20 -3
  139. package/settings.example.json +77 -16
@@ -60,7 +60,7 @@ runtime은 아래만 한다.
60
60
  - `prompt-packets/synthesis/{issue_id}.prompt.md`
61
61
  9. executor realization
62
62
  - `worker`
63
- - `direct-call`
63
+ - `direct_call`
64
64
  10. host runtime
65
65
  - `codex`
66
66
  - `openai`
@@ -108,6 +108,9 @@ runtime은 아래만 한다.
108
108
  9. `execution-result.yaml`
109
109
  10. `review-run-manifest.yaml`
110
110
  11. `error-log.md`
111
+ 12. `dispatch-incomplete.yaml` — dispatch breaker가 켜진 배치(lens/issue-stance)의
112
+ end state (완료/dead-letter/미완료 집합). 트립이든 완주든 기록하며, OFF에서는
113
+ 쓰지 않는다
111
114
 
112
115
  원칙:
113
116
 
@@ -121,6 +124,22 @@ runtime은 아래만 한다.
121
124
  - `execution-result.yaml`은 actual execution truth의 canonical seat다
122
125
  - `execution-result.yaml`과 `review-run-manifest.yaml`은 effective retry policy를 기록해야 한다
123
126
  - `lens-completion-barrier.yaml`은 downstream stage 진입 gate다
127
+ - `review.execution.retry.dispatch_breaker`(opt-in)가 켜지면 lens/issue-stance
128
+ fan-out 풀의 **flat per-unit 루프**는 유닛의 최종 outcome을 계통 실패 분류
129
+ (rate_limit/auth/transport)로 관찰하고, 서로 다른 유닛에 걸친 연속 계통 실패가
130
+ 임계에 닿으면 잔여 유닛을 디스패치하지 않고 halt한다 (`halt_reason` prefix
131
+ `dispatch_breaker:`, lens 풀은 `halt_phase=lens_dispatch_breaker`). 미완료
132
+ 집합은 `dispatch-incomplete.yaml`이 회복 계약(재디스패치 집합 == 미완료 집합)
133
+ 으로 영속하며, 트립 halt의 execution-result는 완료 유닛 행을 보존한다.
134
+ nested-workers 1차 배치가 실행된 스테이지도 breaker가 적용된다(§4-1): 배치-창
135
+ SUCCESS는 실 디스패치가 아니므로 완료로만 집계돼 계통 streak을 리셋하지 않고,
136
+ 배치-창 FAILURE는 flat 경로처럼 실패로 분류된다(item-local→dead-letter, 계통→
137
+ 회복 미완료 집합). 배치-실패 유닛의 flat 재시도가 계통 실패를 직접 관찰·구동
138
+ 한다. lens/issue-stance 풀의 실제 dispatch width가 2 이상이면 runner가
139
+ breaker policy를 내부적으로 `concurrent:true`로 투영해 완료순서가 poison-vs-outage
140
+ 회복 집합을 결정하지 못하게 한다. 이 값은 사용자 설정 키가 아니라 runtime-owned
141
+ execution projection이다. OFF(기본)는 현행 halt/배리어 동작이며 nested 경로도
142
+ 무변경이다
124
143
  - degraded case / partial failure는 `error-log.md`에 기록해야 한다
125
144
  - runtime unavailable completion으로 root unit이 completed가 된 경우에도 원 실패는 child unit result로 보존하고 degradation evidence에 포함해야 한다
126
145
  - `error-log.md`는 최소 한 번 `EffectiveBoundaryState`를 기록해야 한다
@@ -168,13 +187,18 @@ evidence로 쓰지 않는다.
168
187
 
169
188
  현재 구현에서 prompt execution runner를 통해 실행되는 execution profile:
170
189
 
171
- - `worker + codex` (Codex CLI 경로)
172
- - `worker + direct-call` (API/local provider 경로)
173
-
174
- `nested-workers` mode는 현재 runner에서 pre-dispatch structured failure로
175
- 차단한다. inner lens worker가 runtime submit-tool serialization,
176
- read-only sandbox, `execution-plan.max_concurrent_lenses` 기반 bounded dispatch를
177
- 같은 방식으로 보장하기 전에는 active product path아니다.
190
+ - `main-workers + codex|claude_code` (Codex CLI 또는 Claude Code CLI 경로)
191
+ - `main-workers + direct_call` (API/local provider 경로)
192
+ - `nested-workers + codex|claude_code` (outer OAuth worker가 ready unit batch를
193
+ fan-out하고, inner unit은 flat 경로와 동일한 unit-executor CLI/seat/검증 계약을
194
+ 따른다)
195
+
196
+ `nested-workers + direct_call`은 outer worker seat없으므로
197
+ `nested_workers_executor_unsupported` structured failure로 fail-closed한다. raw
198
+ provider-CLI inner bridge는 retired 경로이며, active nested path의 계약은
199
+ `nesting-batch-worker-contract.md`가 소유한다. mock-backed nested harness는 wiring,
200
+ schema, artifact contract, route/failure 검증 evidence이며 product semantic
201
+ completion 또는 semantic quality evidence로 승격하지 않는다.
178
202
 
179
203
  원칙:
180
204
 
@@ -93,8 +93,8 @@ material_profile:
93
93
  target_material_kind: code
94
94
  target_material_kind_candidates:
95
95
  - code
96
- support_status: partial
97
- unsupported_reason: review records target material kind, but material-specific validation is not implemented yet
96
+ support_status: supported
97
+ unsupported_reason: null
98
98
  detection:
99
99
  owner: runtime_heuristic
100
100
  confidence: 0.92
@@ -157,8 +157,51 @@ This axis must stay separate from:
157
157
  - `medium`: a cross-product reference and learning frame
158
158
 
159
159
  The current runtime records material kind and detection confidence as a bounded
160
- heuristic. It must not claim material-specific validation until per-material
161
- validators or adapters are implemented.
160
+ heuristic. Per-material review handling is implemented for **spreadsheet** through a
161
+ **single per-ref disposition** (`computeSpreadsheetDisposition`, the SSOT): every
162
+ spreadsheet honesty surface — `support_status`, `target_refs[].inspectable`/`.sha256`,
163
+ the `review_goal` obligations, the prompt `material_kind_obligations`, and the render
164
+ notes — **projects from one record computed once over the shared observation**, instead
165
+ of each surface re-deriving its claim from a different proxy. The structural inventory is
166
+ rendered into `materialized-input.md` with detail (formula text, named-range references,
167
+ data-validation rules incl. operator + formula bounds, protections, risk signals) —
168
+ **structure inspected only, not recalculated**.
169
+
170
+ Two distinct axes, deliberately not coupled:
171
+
172
+ - **`inspectable`** — the workbook was read (`unsupported_reason === null`) AND has
173
+ renderable structure, *including plain tabular data* (columns / per-column cardinality /
174
+ distinct-value counts). The aggregate-only rule is NARROWED, not preserved: the single
175
+ value-bearing field is `data_validations[].members` — bounded DECLARED type=list enum labels
176
+ parsed from a formula1 literal (never observed/free/high-cardinality cell values).
177
+ A clean CSV or a formula-free data `.xlsx` is `inspectable` and stays
178
+ `support_status: supported`. It is NOT coupled to whether any obligation is backed.
179
+ - **`backed_goals`** — the POSITIVE subset of the six obligations whose specific evidence
180
+ exists in that ref's inventory; this drives `review_goal`. `review_goal` therefore
181
+ carries **only the backed subset, not always all six**: a plain-data CSV backs none
182
+ (and so carries no spreadsheet obligation while remaining `supported`); a macro-only or
183
+ protection-only workbook backs only `access_and_protection_hygiene`. `structural_risk_signals`
184
+ is backed by genuine structural risk only — `unreadable_sheet_part` (an observation-failure
185
+ marker) and the `macro_present` / `external_links_present` signals (owned by other goals)
186
+ do not back it.
187
+
188
+ `support_status` runs the gate over the **union of resolved and materialized** spreadsheet
189
+ refs the prompt renders — **regardless of the resolved material kind**, so a `code`-resolved
190
+ target carrying a materialized workbook the observer could not read degrades to `partial`
191
+ (it is not gated only when the resolved kind is spreadsheet). If **any** rendered spreadsheet
192
+ ref is uninspectable the target is `partial`, with a reason naming each uninspected ref by
193
+ its full resolved path and actual cause; obligations are dropped only when **no** ref is
194
+ inspectable. A `supported`/`null` profile is never emitted for a workbook the render shows as
195
+ `unsupported`. The render emits obligation-backing detail **before** the per-sheet bodies so
196
+ the prompt embed cut cannot strip an obligation's evidence, and protected/hidden sheets beyond
197
+ the render cap are disclosed by count. Observation bounds the number of sheets read
198
+ (`max_sheets_observed`, conservatively high) and a CSV/workbook whose decode or parse throws
199
+ degrades to an honest `unsupported` inventory rather than aborting review prep.
200
+
201
+ `code`, `document`, `database`, and `unknown` retain their prior support states
202
+ until their per-material review adapters land. A spreadsheet inside a `mixed`
203
+ bundle does not yet receive spreadsheet obligations (a known limitation,
204
+ consistent with the `mixed` support state).
162
205
 
163
206
  ---
164
207
 
@@ -81,6 +81,7 @@ interface PipelineExecutionLedgerUnitEntry {
81
81
  lastFailureMessage: string | null;
82
82
  upstreamUnitIds: string[];
83
83
  downstreamUnitIds: string[];
84
+ resolution?: "demoted";
84
85
  executionTelemetry?: PipelineUnitExecutionTelemetry | null;
85
86
  }
86
87
 
@@ -170,6 +171,16 @@ Execution telemetry rules:
170
171
  competency-question assessment) so batching changes stay attributable.
171
172
  - Units that made no LLM call carry no telemetry field; absence is not a
172
173
  failure signal.
174
+ - `resolution: "demoted"` marks terminal resolution outside the trusted-output
175
+ path (bounded resubmit exhausted, complete-with-failure): the downstream
176
+ stage product consumed and disclosed the gap (review: issue-stance-matrix
177
+ `validation.missing_stances`), so the unit owes no further dispatch — it
178
+ must not reappear on the frontier, block convergence, or block downstream
179
+ upstream-trust. `status`/`lastFailureMessage` keep the audit truth
180
+ (typically `failed`); a resolved unit contributes no preserved artifacts.
181
+ Frontier/convergence consumers use `isResolvedLedgerUnit`
182
+ (trusted-or-resolved); artifact-preservation consumers keep
183
+ `isTrustedLedgerUnit`.
173
184
  - Current population status: `reconstruct` populates telemetry from its run
174
185
  manifest steps. `review` does not populate it yet.
175
186
 
@@ -81,7 +81,7 @@ the lexicon.
81
81
 
82
82
  | Process | Required alignment |
83
83
  |---|---|
84
- | `review` | `review-target-profile.yaml` records `target_material_kind`; review must not claim material-aware validation before per-material validators exist. |
84
+ | `review` | `review-target-profile.yaml` records `target_material_kind` and provides a per-material review adapter for `spreadsheet` via a **single per-ref disposition** (`computeSpreadsheetDisposition`): every honesty surface (`support_status`, `target_refs[].inspectable`, `review_goal`, prompt obligations, render notes) projects from one record. `inspectable` (the workbook was read and has renderable structure, *including plain tabular data*) drives `support_status`; the **positive** `backed_goals` subset drives `review_goal`, so `review_goal` carries only the backed obligations — a plain CSV is `supported`/`inspectable` yet backs none, and a macro/protection-only workbook backs only `access_and_protection_hygiene`. `support_status` degrades to `partial` when **any** rendered ref across the resolved∪materialized union is uninspectable (unsupported format .xls/.xlsb/.ods, unreadable/oversized/empty, or a corrupt shell), and the gate runs regardless of the resolved kind (a code target carrying a materialized uninspectable workbook also degrades). `code` stays `supported`, `document`/`database` stay `partial`, `mixed` stays `partial_composite`, and `unknown` stays `unknown` until their adapters land (precise per-kind states owned by `review-target-profile-contract.md` §6). Review `support_status` and reconstruct `runtime_implementation_status` are **independent per-process axes over the same shared inventory backing**: review `supported` does not imply the reconstruct seed pipeline is fully wired (it remains `partially_wired`). |
85
85
  | `reconstruct` | Source profiles, source adapters, source observations, and directive validation must be keyed by `target_material_kind`. |
86
86
  | `evolve` | Future adapters must not assume code-product inputs; adapter selection should start from `target_material_kind` as defined in `.onto/processes/evolve/material-kind-adapter-contract.md`. |
87
87
 
package/README.md CHANGED
@@ -55,7 +55,19 @@ only host-owned config; it never writes onto runtime data. Override the
55
55
  launched command or server name with `--command <cmd>` / `--name <id>`.
56
56
 
57
57
  **Claude Code profiles.** Claude Code stores MCP servers per config directory
58
- (`CLAUDE_CONFIG_DIR`). If you run multiple profiles, target one explicitly:
58
+ (`CLAUDE_CONFIG_DIR`). To register every profile in one command, let `onto`
59
+ discover them — it scans `~/.claude` and `~/.claude-*` for real config dirs
60
+ (those carrying `settings.json`, `.credentials.json`, `.claude.json`, or
61
+ `projects/`) plus any ambient `CLAUDE_CONFIG_DIR`, and registers each:
62
+
63
+ ```bash
64
+ onto register --hosts claude-code --all-claude-profiles --yes # every profile
65
+ onto register --all --all-claude-profiles --yes # profiles + other hosts
66
+ onto register --all-claude-profiles --list # preview discovered profiles
67
+ ```
68
+
69
+ To target a single profile instead, name it explicitly (mutually exclusive with
70
+ `--all-claude-profiles`):
59
71
 
60
72
  ```bash
61
73
  onto register --hosts claude-code --claude-config-dir ~/.claude-1 --yes
@@ -284,6 +296,57 @@ LLM switcher axes:
284
296
 
285
297
  Unsupported settings stop during profile resolution.
286
298
 
299
+ ### provider·model 전환 (권장: `onto configure-provider`)
300
+
301
+ `settings.json`을 손으로 고치는 대신 `onto configure-provider`가 actor LLM 블록을
302
+ 라우트 검증 후 기록합니다(units 등 다른 설정은 보존). 라우팅 불가능한 조합은 기록
303
+ 전에 fail-loud 합니다.
304
+
305
+ ```sh
306
+ # Codex (OpenAI) OAuth
307
+ onto configure-provider --provider openai --model gpt-5.5 --auth oauth \
308
+ --effort medium --service-tier fast
309
+
310
+ # Claude Code (Anthropic) OAuth
311
+ onto configure-provider --provider anthropic --model claude-opus-4-8 --auth oauth \
312
+ --effort high
313
+ ```
314
+
315
+ - `--service-tier`는 `openai`+`oauth`(Codex) 경로 전용입니다 — anthropic에 주면
316
+ profile 해석 단계에서 거부됩니다.
317
+ - `--auth`를 주면 reconstruct actor 블록(`semantic_author`/`confirmation_provider`)도
318
+ 함께 기록합니다. 생략하면 review actor만 기록하고 loader가 provider 기본 auth를 파생합니다.
319
+ - `--timeout-ms <ms>`는 각 actor `llm` 블록에 per-actor `timeout_ms`(양의 정수)를
320
+ 함께 기록합니다 — codex/claude direct-call worker 호출 타임아웃(아래 [타임아웃](#타임아웃)
321
+ 참고). api_key SDK 경로에는 적용되지 않습니다.
322
+ - `--project`는 프로젝트 seat(`.onto/settings.json`)에, 생략하면 사용자 seat
323
+ (`~/.onto/settings.json`)에 기록합니다.
324
+ - 지원 model id는 [`.onto/authority/supported-models.yaml`](.onto/authority/supported-models.yaml)가
325
+ authority입니다(현재 anthropic: `claude-opus-4-8`; `claude-sonnet-5`는
326
+ `semantic_map_synthesize` 역할 전용).
327
+ - 이 명령은 actor 블록만 기록합니다. `units[].llm.model`로 unit별 model을 고정해
328
+ 두었다면(위 정적 프로필 예시가 그렇습니다) 같은 model로 바꾸거나 그 `model` 키를
329
+ 지워 actor 값을 상속하게 하세요.
330
+
331
+ ### 타임아웃
332
+
333
+ | 경로 | 기본값 | 조절 knob (우선순위) |
334
+ |---|---|---|
335
+ | review unit worker (codex/claude) | 240s (짧은 응답 단계 180s, `issue_stance_matrix` 120s) | `units[].timeout_ms` |
336
+ | direct-call CLI worker (codex/claude) — reconstruct·inline review | 600s | actor `llm.timeout_ms` → 없으면 `ONTO_LLM_TIMEOUT_MS` |
337
+ | SDK direct call (`api_key`) | 120s | `ONTO_LLM_TIMEOUT_MS` (ms) |
338
+
339
+ `llm.timeout_ms`(ms)는 actor `llm` 블록에 넣는 per-actor 값으로, codex/claude CLI worker
340
+ 경로(reconstruct의 `semantic_author`/`confirmation_provider`, inline review actor)의 호출
341
+ 타임아웃을 그 값으로 고정합니다. 없으면 env `ONTO_LLM_TIMEOUT_MS`, 그것도 없으면 기본값을
342
+ 씁니다(api_key SDK 경로에는 적용되지 않고 `ONTO_LLM_TIMEOUT_MS`만 반영). 이 knob은 review의
343
+ `units[].timeout_ms`(worker 프로세스 bound)와 구분되는 별개 계층입니다.
344
+
345
+ `ONTO_LLM_TIMEOUT_MS`(ms)는 direct-call/CLI-worker와 SDK 경로 기본값을 전역으로 덮어씁니다.
346
+ opus 같은 프론티어 모델의 긴 단일-turn authoring도 600s worker 기본값으로 완료되므로 지원
347
+ 모델에는 override가 필요 없습니다. 특정 review unit이 오래 걸리면 그 unit의
348
+ `units[].timeout_ms`만 키우면 됩니다(모든 unit에 큰 값을 박을 필요 없음).
349
+
287
350
  ## Documentation
288
351
 
289
352
  | Document | Contents |
package/dist/cli.js CHANGED
@@ -40,6 +40,8 @@ function printHelp() {
40
40
  " mcp Start the MCP stdio tool server",
41
41
  " register Register the onto MCP server into supported hosts",
42
42
  " configure-provider Write LLM provider settings into the settings.json chain",
43
+ " seats List every LLM model seat, resolved (--json for machine output)",
44
+ " watch Live read-only TUI for review/reconstruct sessions",
43
45
  "",
44
46
  "Available MCP tools:",
45
47
  " onto_review",
@@ -63,7 +65,7 @@ function printHelp() {
63
65
  function unsupportedCommandMessage(subcommand) {
64
66
  return [
65
67
  `[onto] Unsupported public CLI subcommand: ${subcommand}`,
66
- "Active public commands: onto mcp, onto register, onto configure-provider",
68
+ "Active public commands: onto mcp, onto register, onto configure-provider, onto seats, onto watch",
67
69
  ].join("\n");
68
70
  }
69
71
  async function main() {
@@ -80,10 +82,18 @@ async function main() {
80
82
  const { runRegister } = await import("./core-runtime/onboard/register.js");
81
83
  return runRegister(argv.slice(1));
82
84
  }
85
+ case "watch": {
86
+ const { runWatch } = await import("./tui/index.js");
87
+ return runWatch(argv.slice(1));
88
+ }
83
89
  case "configure-provider": {
84
90
  const { runConfigureProvider } = await import("./core-runtime/onboard/configure-provider.js");
85
91
  return runConfigureProvider(argv.slice(1));
86
92
  }
93
+ case "seats": {
94
+ const { runSeats } = await import("./core-runtime/cli/run-seats.js");
95
+ return runSeats(argv.slice(1));
96
+ }
87
97
  case "--version":
88
98
  case "-v": {
89
99
  const version = await readOntoVersion();