@oeronteros-1/opencode-orchestra 1.0.22 → 1.0.24

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 (67) hide show
  1. package/README.md +19 -5
  2. package/dashboard-dist/assets/index-Dc5lp8wX.js +124 -0
  3. package/dashboard-dist/index.html +1 -1
  4. package/dist/agents/build.js +4 -0
  5. package/dist/agents/build.js.map +1 -1
  6. package/dist/agents/editor.d.ts +3 -0
  7. package/dist/agents/editor.js +12 -0
  8. package/dist/agents/editor.js.map +1 -0
  9. package/dist/agents/integrator.d.ts +3 -0
  10. package/dist/agents/integrator.js +12 -0
  11. package/dist/agents/integrator.js.map +1 -0
  12. package/dist/agents/lead.js +3 -1
  13. package/dist/agents/lead.js.map +1 -1
  14. package/dist/agents/workers.js +1 -6
  15. package/dist/agents/workers.js.map +1 -1
  16. package/dist/cache-refresh.d.ts +42 -0
  17. package/dist/cache-refresh.js +130 -0
  18. package/dist/cache-refresh.js.map +1 -0
  19. package/dist/cli.d.ts +16 -2
  20. package/dist/cli.js +59 -26
  21. package/dist/cli.js.map +1 -1
  22. package/dist/config/schema.d.ts +11 -1
  23. package/dist/config/schema.js +30 -1
  24. package/dist/config/schema.js.map +1 -1
  25. package/dist/dashboard/server.js +2 -2
  26. package/dist/dashboard/server.js.map +1 -1
  27. package/dist/index.js +35 -12
  28. package/dist/index.js.map +1 -1
  29. package/dist/orchestration/ownership.d.ts +7 -0
  30. package/dist/orchestration/ownership.js +45 -0
  31. package/dist/orchestration/ownership.js.map +1 -0
  32. package/dist/orchestration/worktree-adapter.d.ts +3 -0
  33. package/dist/orchestration/worktree-adapter.js +45 -0
  34. package/dist/orchestration/worktree-adapter.js.map +1 -0
  35. package/dist/orchestration/worktrees.d.ts +22 -0
  36. package/dist/orchestration/worktrees.js +27 -0
  37. package/dist/orchestration/worktrees.js.map +1 -0
  38. package/dist/pricing/cost.d.ts +29 -0
  39. package/dist/pricing/cost.js +47 -0
  40. package/dist/pricing/cost.js.map +1 -0
  41. package/dist/pricing/model-match.d.ts +59 -0
  42. package/dist/pricing/model-match.js +134 -0
  43. package/dist/pricing/model-match.js.map +1 -0
  44. package/dist/pricing/openrouter.d.ts +60 -0
  45. package/dist/pricing/openrouter.js +150 -0
  46. package/dist/pricing/openrouter.js.map +1 -0
  47. package/dist/pricing/resolver.d.ts +50 -0
  48. package/dist/pricing/resolver.js +145 -0
  49. package/dist/pricing/resolver.js.map +1 -0
  50. package/dist/prompts/load.js +1 -1
  51. package/dist/prompts/load.js.map +1 -1
  52. package/dist/routing/planner.d.ts +14 -1
  53. package/dist/routing/planner.js +23 -1
  54. package/dist/routing/planner.js.map +1 -1
  55. package/dist/routing/pricing/estimate.d.ts +14 -1
  56. package/dist/routing/pricing/estimate.js +81 -20
  57. package/dist/routing/pricing/estimate.js.map +1 -1
  58. package/dist/telemetry/ledger.d.ts +6 -1
  59. package/dist/telemetry/ledger.js +15 -3
  60. package/dist/telemetry/ledger.js.map +1 -1
  61. package/dist/tools.d.ts +3 -0
  62. package/dist/tools.js +44 -1
  63. package/dist/tools.js.map +1 -1
  64. package/package.json +16 -2
  65. package/prompts/lead.md +1 -0
  66. package/schema/opencode-orchestra.schema.json +23 -1
  67. package/dashboard-dist/assets/index-BZTn_d2K.js +0 -124
package/README.md CHANGED
@@ -123,6 +123,10 @@ bunx @oeronteros-1/opencode-orchestra@latest completion zsh > ~/.zsh/completions
123
123
  {
124
124
  "$schema": "https://unpkg.com/@oeronteros-1/opencode-orchestra@latest/schema/opencode-orchestra.schema.json",
125
125
  "budget": "balanced",
126
+ "orchestration": {
127
+ "parallelEditors": 0,
128
+ "worktreeRoot": ".orchestra/worktrees"
129
+ },
126
130
  "models": {
127
131
  "strategy": "auto",
128
132
  "agents": {}
@@ -147,7 +151,7 @@ bunx @oeronteros-1/opencode-orchestra@latest completion zsh > ~/.zsh/completions
147
151
  }
148
152
  ```
149
153
 
150
- Доступные имена: `orch-lead`, `orch-repo`, `orch-docs`, `orch-tests`, `orch-research`, `orch-critic`, `orch-security`, `orch-visual-reference`, `orch-visual-generate`, `orch-visual-review`, `orch-judge`.
154
+ Доступные имена: `orch-lead`, `orch-repo`, `orch-docs`, `orch-tests`, `orch-research`, `orch-critic`, `orch-security`, `orch-visual-reference`, `orch-visual-generate`, `orch-visual-review`, `orch-editor`, `orch-integrator`, `orch-merge`, `orch-judge`.
151
155
 
152
156
  ### Ручные пулы
153
157
 
@@ -214,7 +218,11 @@ bunx @oeronteros-1/opencode-orchestra@latest completion zsh > ~/.zsh/completions
214
218
  "endpoint": "https://internal.example.com/prices.json",
215
219
  "refreshIntervalHours": 24,
216
220
  "estimate": true,
217
- "warnThresholdUSD": 0.5
221
+ "warnThresholdUSD": 0.5,
222
+ "openrouter": { "enabled": true, "ttlHours": 12 },
223
+ "aliases": [
224
+ { "canonical": "gpt-5.6-sol", "aliases": ["GPT-5.6 Sol", "CX/GPT-5.6 Sol"] }
225
+ ]
218
226
  }
219
227
  }
220
228
  ```
@@ -222,7 +230,11 @@ bunx @oeronteros-1/opencode-orchestra@latest completion zsh > ~/.zsh/completions
222
230
  - `endpoint` — self-hosted JSON `{ "updatedAt": "...", "prices": { "provider/model": { "input": 0.27, "output": 1.1 } } }`; при недоступности остаётся встроенный snapshot;
223
231
  - `refreshIntervalHours` — период опроса (0 отключает);
224
232
  - `estimate` — включает прогноз стоимости до запуска в ответе `orchestra_route`;
225
- - `warnThresholdUSD` — порог, выше которого роутер добавляет предупреждение «эта задача в `quality` обойдётся примерно в $X».
233
+ - `warnThresholdUSD` — порог, выше которого роутер добавляет предупреждение «эта задача в `quality` обойдётся примерно в $X»;
234
+ - `openrouter.enabled` — опциональный fallback на публичный каталог OpenRouter (`/api/v1/models`, без API-ключа) для моделей, у которых нет цены провайдера; список кэшируется на `ttlHours` часов, офлайн-оценка не зависит от сети;
235
+ - `aliases` — ручные псевдонимы моделей: raw-имя посредника (`CX/GPT-5.6 Sol`) сводится к канонической модели. Пользовательский alias имеет высший приоритет над всеми внешними источниками цен.
236
+
237
+ Как определяется стоимость: raw model ID нормализуется (регистр, разделители, префикс провайдера, namespace-обёртки, `:free`-суффиксы), затем цена ищется в порядке: явная цена из конфига → псевдонимы → snapshot провайдера → OpenRouter. Совпадение по ключевым словам/нечёткое сравнение защищено от ложных срабатываний: похожие модели семейства (`GPT-5.6`, `GPT-5.6 Mini`, `GPT-5.6 Sol`) не схлопываются. Итог всегда один из четырёх статусов: `paid` (цена известна), `free` ($0, токены считаются), `subscription` ($0 + статус подписки) или `unknown` (токены считаются, стоимость — `null`, никогда не выдаётся за бесплатную). Токены и биллинг — две независимые величины.
226
238
 
227
239
  Resolver формирует упорядоченный список более дешёвых fallback-кандидатов для execution-слоёв, которые умеют повторять вызовы. Сам плагин не перехватывает provider-вызовы OpenCode и поэтому не заявляет автоматический retry. Прогноз стоимости — информативное поле: выполнение не блокируется, а предупреждение помогает подтвердить расходы заранее.
228
240
 
@@ -230,7 +242,7 @@ Resolver формирует упорядоченный список более
230
242
 
231
243
  Плагин добавляет один публичный primary-агент `orch-lead`, скрытых workers, скрытый reduce-агент `orch-merge` и скрытый `orch-judge`. Workers не могут редактировать файлы или делегировать работу дальше; lead может вызывать только агентов Orchestra, после чего сам реализует изменения и проверяет результат.
232
244
 
233
- `orch-lead` строит dependency-aware DAG: независимые ветки одного уровня запускаются параллельно через OpenCode Task tool в пределах `parallelWorkers`, downstream-узлы ждут свои зависимости, а после всех веток `orch-merge` один раз объединяет результаты с сохранением источников, конфликтов и неопределённости. Затем `orch-lead` редактирует файлы и запускает релевантную проверку. Это явный fan-out/fan-in pipeline, а не последовательный список рекомендаций.
245
+ `orch-lead` строит dependency-aware DAG: независимые ветки одного уровня запускаются параллельно через OpenCode Task tool в пределах `parallelWorkers`, downstream-узлы ждут свои зависимости, а после всех веток `orch-merge` один раз объединяет результаты с сохранением источников, конфликтов и неопределённости. Затем `orch-lead` редактирует файлы и запускает релевантную проверку. Для безопасной параллельной реализации можно явно задать непересекающиеся ownership partitions и включить `orchestration.parallelEditors`: каждый `orch-editor` работает в отдельном experimental Git worktree, коммитит изменения, а `orch-integrator` проверяет фактический diff и интегрирует коммиты в детерминированном порядке. При конфликте worktrees сохраняются для диагностики; значение `0` (по умолчанию) полностью отключает editor mode. Это явный fan-out/fan-in pipeline, а не последовательный список рекомендаций.
234
246
 
235
247
  ### `orch-judge` — арбитр для критических решений
236
248
 
@@ -267,6 +279,8 @@ Codebase Memory отвечает за знания, которые можно в
267
279
 
268
280
  MemoryGraph отвечает за знания, которых нет непосредственно в коде: принятые архитектурные решения, проверенные исправления и повторно используемые паттерны. Используется core-профиль с локальным SQLite в `~/.local/share/memorygraph/`. Lead вызывает `recall_memories` не более одного раза в начале релевантной задачи и сохраняет только проверенные устойчивые знания.
269
281
 
282
+ Пакет ставится с PyPI (`memorygraphMCP`, Python ≥3.10, SQLite работает без настройки). GitHub-ветка `main` того же репозитория переписана на TypeScript/Bun и не совместима с PyPI-пакетом, поэтому установщик опирается именно на PyPI-дистрибутив. Если persistent-установка через `uv tool install` не удалась, используется фолбэк `uvx memorygraph`; при полном провале MCP-запись в конфиг не пишется — причина сбоя видна в выводе установщика и doctor.
283
+
270
284
  Разделение намеренное:
271
285
 
272
286
  - Codebase Memory — актуальная структура репозитория;
@@ -342,7 +356,7 @@ bunx @oeronteros-1/opencode-orchestra@latest install
342
356
  - dashboard по умолчанию слушает только `127.0.0.1` и защищён случайным токеном;
343
357
  - telemetry хранится локально в `.orchestra`;
344
358
  - тексты сообщений не сохраняются без `telemetry.storeTexts: true`;
345
- - pricing endpoint настраивается пользователем и не требуется для offline-оценки;
359
+ - pricing endpoint настраивается пользователем и не требуется для offline-оценки; OpenRouter-фолбэк опционален (`pricing.openrouter.enabled`, по умолчанию выключен) и тоже не обязателен для offline-оценки;
346
360
  - перед публикацией или баг-репортом не прикладывайте локальный ledger, если включали сохранение текстов;
347
361
  - установщик (`install`) и `entrypoint` с 1.0.9 усилены: резервная копия создаётся даже при частичных изменениях, BOM-префиксы (``) в `opencode.json` и `orchestra.jsonc` корректно обрабатываются `doctor` и `dashboard`, а существующие MCP-записи не удаляются без явного `--force`.
348
362