lv24-opencode-consilium 0.0.0-stage → 1.4.0

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 (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +499 -3
  3. package/README.ru.md +500 -0
  4. package/README.zh.md +188 -0
  5. package/bin/cli.js +19 -0
  6. package/bin/mcp.js +24 -0
  7. package/consilium.config.example.json +84 -0
  8. package/dist/agents.d.ts +79 -0
  9. package/dist/agents.d.ts.map +1 -0
  10. package/dist/agents.js +1051 -0
  11. package/dist/agents.js.map +1 -0
  12. package/dist/artifacts.d.ts +75 -0
  13. package/dist/artifacts.d.ts.map +1 -0
  14. package/dist/artifacts.js +464 -0
  15. package/dist/artifacts.js.map +1 -0
  16. package/dist/cli.d.ts +12 -0
  17. package/dist/cli.d.ts.map +1 -0
  18. package/dist/cli.js +1392 -0
  19. package/dist/cli.js.map +1 -0
  20. package/dist/compat.d.ts +160 -0
  21. package/dist/compat.d.ts.map +1 -0
  22. package/dist/compat.js +419 -0
  23. package/dist/compat.js.map +1 -0
  24. package/dist/config.d.ts +112 -0
  25. package/dist/config.d.ts.map +1 -0
  26. package/dist/config.js +728 -0
  27. package/dist/config.js.map +1 -0
  28. package/dist/consensus.d.ts +73 -0
  29. package/dist/consensus.d.ts.map +1 -0
  30. package/dist/consensus.js +273 -0
  31. package/dist/consensus.js.map +1 -0
  32. package/dist/defaults.d.ts +34 -0
  33. package/dist/defaults.d.ts.map +1 -0
  34. package/dist/defaults.js +102 -0
  35. package/dist/defaults.js.map +1 -0
  36. package/dist/doctor.d.ts +27 -0
  37. package/dist/doctor.d.ts.map +1 -0
  38. package/dist/doctor.js +798 -0
  39. package/dist/doctor.js.map +1 -0
  40. package/dist/fallback.d.ts +50 -0
  41. package/dist/fallback.d.ts.map +1 -0
  42. package/dist/fallback.js +134 -0
  43. package/dist/fallback.js.map +1 -0
  44. package/dist/git.d.ts +28 -0
  45. package/dist/git.d.ts.map +1 -0
  46. package/dist/git.js +71 -0
  47. package/dist/git.js.map +1 -0
  48. package/dist/index.d.ts +100 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +653 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/mcp.d.ts +20 -0
  53. package/dist/mcp.d.ts.map +1 -0
  54. package/dist/mcp.js +1215 -0
  55. package/dist/mcp.js.map +1 -0
  56. package/dist/models.d.ts +97 -0
  57. package/dist/models.d.ts.map +1 -0
  58. package/dist/models.js +873 -0
  59. package/dist/models.js.map +1 -0
  60. package/dist/plugin.d.ts +59 -0
  61. package/dist/plugin.d.ts.map +1 -0
  62. package/dist/plugin.js +223 -0
  63. package/dist/plugin.js.map +1 -0
  64. package/dist/presets.d.ts +27 -0
  65. package/dist/presets.d.ts.map +1 -0
  66. package/dist/presets.js +86 -0
  67. package/dist/presets.js.map +1 -0
  68. package/dist/replay.d.ts +37 -0
  69. package/dist/replay.d.ts.map +1 -0
  70. package/dist/replay.js +103 -0
  71. package/dist/replay.js.map +1 -0
  72. package/dist/report.d.ts +28 -0
  73. package/dist/report.d.ts.map +1 -0
  74. package/dist/report.js +300 -0
  75. package/dist/report.js.map +1 -0
  76. package/dist/smart-experts.d.ts +44 -0
  77. package/dist/smart-experts.d.ts.map +1 -0
  78. package/dist/smart-experts.js +242 -0
  79. package/dist/smart-experts.js.map +1 -0
  80. package/dist/stream.d.ts +50 -0
  81. package/dist/stream.d.ts.map +1 -0
  82. package/dist/stream.js +219 -0
  83. package/dist/stream.js.map +1 -0
  84. package/dist/tool-run.d.ts +49 -0
  85. package/dist/tool-run.d.ts.map +1 -0
  86. package/dist/tool-run.js +143 -0
  87. package/dist/tool-run.js.map +1 -0
  88. package/dist/types.d.ts +352 -0
  89. package/dist/types.d.ts.map +1 -0
  90. package/dist/types.js +6 -0
  91. package/dist/types.js.map +1 -0
  92. package/dist/variants.d.ts +30 -0
  93. package/dist/variants.d.ts.map +1 -0
  94. package/dist/variants.js +111 -0
  95. package/dist/variants.js.map +1 -0
  96. package/dist/verify.d.ts +33 -0
  97. package/dist/verify.d.ts.map +1 -0
  98. package/dist/verify.js +80 -0
  99. package/dist/verify.js.map +1 -0
  100. package/dist/watch.d.ts +73 -0
  101. package/dist/watch.d.ts.map +1 -0
  102. package/dist/watch.js +350 -0
  103. package/dist/watch.js.map +1 -0
  104. package/docs/session-and-plugin.md +642 -0
  105. package/package.json +90 -6
  106. package/schema/config.schema.json +100 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @fileoverview Отчёты консилиума: HTML и PR-markdown рендеры.
3
+ * @module lv24-opencode-consilium/report
4
+ */
5
+ import type { ConsiliumResult } from './types.js';
6
+ /** Формат отчёта. */
7
+ export type ReportFormat = 'html' | 'pr' | 'markdown';
8
+ /** Опции рендера отчёта. */
9
+ export interface ReportOptions {
10
+ title?: string;
11
+ generatedAt?: Date;
12
+ }
13
+ /** HTML-escape: & < > " '. */
14
+ export declare function escapeHtml(value: string): string;
15
+ /**
16
+ * Рендерит полностью автономный HTML-отчёт (один файл, инлайн-стили).
17
+ */
18
+ export declare function renderHtmlReport(result: ConsiliumResult, options?: ReportOptions): string;
19
+ /**
20
+ * Рендерит компактный PR-комментарий (GitHub markdown).
21
+ */
22
+ export declare function renderPrMarkdown(result: ConsiliumResult): string;
23
+ /**
24
+ * Диспетчер форматов: html, pr, markdown (markdown = PR-вариант).
25
+ * @throws {Error} при неизвестном формате.
26
+ */
27
+ export declare function renderReport(result: ConsiliumResult, format: ReportFormat, options?: ReportOptions): string;
28
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAe,eAAe,EAAE,MAAM,YAAY,CAAC;AAE/D,qBAAqB;AACrB,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,IAAI,GAAG,UAAU,CAAC;AAEtD,4BAA4B;AAC5B,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAeD,8BAA8B;AAC9B,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AA4HD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CA0DzF;AAqBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAmEhE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAI3G"}
package/dist/report.js ADDED
@@ -0,0 +1,300 @@
1
+ /**
2
+ * @fileoverview Отчёты консилиума: HTML и PR-markdown рендеры.
3
+ * @module lv24-opencode-consilium/report
4
+ */
5
+ const TEXT_LIMIT = 6000;
6
+ const PACKAGE_NAME = 'lv24-opencode-consilium';
7
+ const PR_MARKER = '<!-- consilium:report -->';
8
+ /** HTML-escape: & < > " '. */
9
+ export function escapeHtml(value) {
10
+ return value
11
+ .replace(/&/g, '&amp;')
12
+ .replace(/</g, '&lt;')
13
+ .replace(/>/g, '&gt;')
14
+ .replace(/"/g, '&quot;')
15
+ .replace(/'/g, '&#39;');
16
+ }
17
+ /** Самая длинная серия указанного символа в тексте */
18
+ function longestRun(text, char) {
19
+ let max = 0;
20
+ let current = 0;
21
+ for (const ch of text) {
22
+ if (ch === char) {
23
+ current += 1;
24
+ if (current > max)
25
+ max = current;
26
+ }
27
+ else {
28
+ current = 0;
29
+ }
30
+ }
31
+ return max;
32
+ }
33
+ /** Оборачивает текст в fence длиннее любых бэктиков внутри (без breakout). */
34
+ function fencedBlock(body) {
35
+ const fence = '`'.repeat(Math.max(3, longestRun(body, '`') + 1));
36
+ return [`${fence}text`, body, fence];
37
+ }
38
+ /** Инлайн-код без выхода за пределы code span. */
39
+ function inlineCode(text) {
40
+ const fence = '`'.repeat(Math.max(1, longestRun(text, '`') + 1));
41
+ return `${fence}${text}${fence}`;
42
+ }
43
+ function toText(value) {
44
+ return typeof value === 'string' ? value : '';
45
+ }
46
+ function num(value, suffix = '') {
47
+ return typeof value === 'number' && Number.isFinite(value) ? `${value}${suffix}` : '—';
48
+ }
49
+ function int(value) {
50
+ return typeof value === 'number' && Number.isFinite(value) ? String(Math.trunc(value)) : '—';
51
+ }
52
+ function money(value) {
53
+ if (typeof value !== 'number' || !Number.isFinite(value))
54
+ return '—';
55
+ return `$${value.toFixed(4)}`;
56
+ }
57
+ function fmtDate(d) {
58
+ return Number.isNaN(d.getTime()) ? '—' : d.toISOString();
59
+ }
60
+ function fmtDuration(ms) {
61
+ if (typeof ms !== 'number' || !Number.isFinite(ms) || ms < 0)
62
+ return '—';
63
+ if (ms < 1000)
64
+ return `${Math.trunc(ms)} мс`;
65
+ return `${(ms / 1000).toFixed(1)} с`;
66
+ }
67
+ function tokensLine(r) {
68
+ const u = r.usage;
69
+ if (!u)
70
+ return '—';
71
+ const parts = [];
72
+ if (typeof u.inputTokens === 'number' && Number.isFinite(u.inputTokens))
73
+ parts.push(`in ${u.inputTokens}`);
74
+ if (typeof u.outputTokens === 'number' && Number.isFinite(u.outputTokens))
75
+ parts.push(`out ${u.outputTokens}`);
76
+ if (typeof u.cost === 'number' && Number.isFinite(u.cost))
77
+ parts.push(money(u.cost));
78
+ return parts.length > 0 ? parts.join(' · ') : '—';
79
+ }
80
+ function truncate(text) {
81
+ if (text.length <= TEXT_LIMIT)
82
+ return { body: text, truncated: false };
83
+ return { body: text.slice(0, TEXT_LIMIT), truncated: true };
84
+ }
85
+ function consensusOf(result) {
86
+ const m = result.metadata;
87
+ if (!m || typeof m !== 'object')
88
+ return null;
89
+ const c = m['consensus'];
90
+ if (!c || typeof c !== 'object')
91
+ return null;
92
+ return c;
93
+ }
94
+ function artifactsDirOf(result) {
95
+ const m = result.metadata;
96
+ if (!m || typeof m !== 'object')
97
+ return null;
98
+ const a = m['artifacts'];
99
+ if (!a || typeof a !== 'object')
100
+ return null;
101
+ const dir = a['dir'];
102
+ return typeof dir === 'string' && dir.length > 0 ? dir : null;
103
+ }
104
+ function consensusPairs(c) {
105
+ if (!Array.isArray(c.pairs))
106
+ return [];
107
+ const out = [];
108
+ for (const p of c.pairs) {
109
+ if (!p || typeof p !== 'object')
110
+ continue;
111
+ const rec = p;
112
+ if (typeof rec['left'] !== 'string' || typeof rec['right'] !== 'string')
113
+ continue;
114
+ if (typeof rec['similarity'] !== 'number' || !Number.isFinite(rec['similarity']))
115
+ continue;
116
+ out.push({ left: rec['left'], right: rec['right'], similarity: rec['similarity'] });
117
+ }
118
+ return out;
119
+ }
120
+ function strArray(v) {
121
+ return Array.isArray(v) ? v.filter((x) => typeof x === 'string') : [];
122
+ }
123
+ function uniqueTermsEntries(c) {
124
+ const u = c.uniqueTerms;
125
+ if (!u || typeof u !== 'object' || Array.isArray(u))
126
+ return [];
127
+ const out = [];
128
+ for (const [k, v] of Object.entries(u))
129
+ out.push([k, strArray(v)]);
130
+ return out;
131
+ }
132
+ function expertsOkTotal(result) {
133
+ const total = Array.isArray(result.experts) ? result.experts.length : 0;
134
+ const ok = Array.isArray(result.experts) ? result.experts.filter(e => e.success).length : 0;
135
+ return { ok, total };
136
+ }
137
+ function totalCost(result) {
138
+ const c = result.usage?.cost;
139
+ return typeof c === 'number' && Number.isFinite(c) ? c : null;
140
+ }
141
+ /**
142
+ * Рендерит полностью автономный HTML-отчёт (один файл, инлайн-стили).
143
+ */
144
+ export function renderHtmlReport(result, options) {
145
+ const title = options?.title ?? 'Отчёт консилиума';
146
+ const generatedAt = options?.generatedAt instanceof Date && !Number.isNaN(options.generatedAt.getTime())
147
+ ? options.generatedAt
148
+ : new Date();
149
+ const { ok, total } = expertsOkTotal(result);
150
+ const consensus = consensusOf(result);
151
+ const artifactsDir = artifactsDirOf(result);
152
+ const modelsRows = (Array.isArray(result.experts) ? result.experts : [])
153
+ .map(e => `<tr><td>${escapeHtml(e.agent ?? '—')}</td><td>${escapeHtml(e.model ?? '—')}</td><td>${e.success ? 'OK' : 'FAIL'}</td></tr>`)
154
+ .join('');
155
+ const cards = (Array.isArray(result.experts) ? result.experts : [])
156
+ .map(e => {
157
+ const text = typeof e.text === 'string' ? e.text : '';
158
+ const { body, truncated } = truncate(text);
159
+ const status = e.success ? 'успешно' : `ошибка${e.errorCode ? `: ${escapeHtml(String(e.errorCode))}` : ''}`;
160
+ const errMsg = !e.success && typeof e.errorMessage === 'string' && e.errorMessage.length > 0
161
+ ? `<p class="err">${escapeHtml(e.errorMessage)}</p>`
162
+ : '';
163
+ return `<section class="card"><h3>${escapeHtml(e.agent ?? '—')}</h3>`
164
+ + `<p class="meta">Модель: ${escapeHtml(e.model ?? '—')} · Статус: ${status} · Длительность: ${escapeHtml(fmtDuration(e.duration))} · Токены/стоимость: ${escapeHtml(tokensLine(e))}</p>`
165
+ + errMsg
166
+ + (body.length > 0
167
+ ? `<pre>${escapeHtml(body)}</pre>${truncated ? '<p class="cut">…текст обрезан до 6000 символов…</p>' : ''}`
168
+ : '<p class="empty">— пустой ответ —</p>')
169
+ + `</section>`;
170
+ })
171
+ .join('');
172
+ const consensusBlock = consensus ? buildHtmlConsensus(consensus) : '';
173
+ const chairVerdict = typeof result.chair?.text === 'string' && result.chair.text.length > 0
174
+ ? result.chair.text
175
+ : result.text;
176
+ return `<!DOCTYPE html><html lang="ru"><head><meta charset="utf-8">`
177
+ + `<meta name="viewport" content="width=device-width, initial-scale=1">`
178
+ + `<title>${escapeHtml(title)}</title>`
179
+ + `<style>body{font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;max-width:960px;margin:0 auto;padding:24px;line-height:1.5;color:#111;background:#fff}`
180
+ + `.badge{display:inline-block;padding:2px 10px;border-radius:12px;font-size:13px;color:#fff;background:${result.success ? '#1a7f37' : '#b42318'}}`
181
+ + `table{border-collapse:collapse;width:100%;margin:12px 0}th,td{border:1px solid #ccc;padding:6px 8px;text-align:left;font-size:14px}`
182
+ + `pre{white-space:pre-wrap;background:#f6f6f6;padding:12px;border-radius:8px;font-size:13px;overflow-wrap:anywhere}`
183
+ + `.card{border:1px solid #ddd;border-radius:10px;padding:12px 16px;margin:12px 0}.meta{color:#555;font-size:13px}.err{color:#b42318;font-size:13px}.cut,.empty{color:#777;font-size:13px}`
184
+ + `@media print{body{max-width:none;padding:0}.card{break-inside:avoid}}`
185
+ + `@media (prefers-color-scheme:dark){body{background:#0d1117;color:#e6edf3}pre{background:#161b22}.card{border-color:#30363d}th,td{border-color:#30363d}.meta,.cut,.empty{color:#9aa4b2}}`
186
+ + `</style></head><body>`
187
+ + `<header><h1>${escapeHtml(title)}</h1><p>Дата: ${escapeHtml(fmtDate(generatedAt))} <span class="badge">${result.success ? 'успешно' : 'частично'}</span></p></header>`
188
+ + `<section><h2>Сводка</h2><p>Время: всего ${escapeHtml(fmtDuration(result.totalTime))}, параллельно ${escapeHtml(fmtDuration(result.parallelTime))}. `
189
+ + `Эксперты: ${ok}/${total} успешно. Стоимость: ${escapeHtml(totalCost(result) === null ? '—' : money(totalCost(result)))}.</p></section>`
190
+ + `<section><h2>Модели</h2><table><thead><tr><th>Эксперт</th><th>Модель</th><th>Статус</th></tr></thead><tbody>${modelsRows || '<tr><td colspan="3">—</td></tr>'}</tbody></table></section>`
191
+ + consensusBlock
192
+ + `<section><h2>Мнения экспертов</h2>${cards || '<p>—</p>'}</section>`
193
+ + `<section><h2>Итог председателя</h2>${chairVerdict.length > 0 ? `<pre>${escapeHtml(truncate(chairVerdict).body)}</pre>${truncate(chairVerdict).truncated ? '<p class="cut">…текст обрезан до 6000 символов…</p>' : ''}` : '<p class="empty">— пустой ответ —</p>'}</section>`
194
+ + (artifactsDir !== null ? `<section><h2>Артефакты</h2><p>Путь: <code>${escapeHtml(artifactsDir)}</code></p></section>` : '')
195
+ + `<footer><hr><p>${escapeHtml(PACKAGE_NAME)}</p></footer>`
196
+ + `</body></html>`;
197
+ }
198
+ function buildHtmlConsensus(c) {
199
+ const agreement = typeof c.agreement === 'string' ? c.agreement : '—';
200
+ const avg = typeof c.averageSimilarity === 'number' && Number.isFinite(c.averageSimilarity)
201
+ ? `${Math.round(c.averageSimilarity * 100)}%`
202
+ : '—';
203
+ const pairs = consensusPairs(c);
204
+ const shared = strArray(c.sharedTerms);
205
+ const unique = uniqueTermsEntries(c);
206
+ const pairRows = pairs.map(p => `<tr><td>${escapeHtml(p.left)} ↔ ${escapeHtml(p.right)}</td><td>${Math.round(p.similarity * 100)}%</td></tr>`).join('');
207
+ return `<section><h2>Консенсус</h2>`
208
+ + `<p>Согласие: ${escapeHtml(agreement)}. Среднее сходство: ${escapeHtml(avg)}.</p>`
209
+ + (pairRows ? `<table><thead><tr><th>Пара</th><th>Сходство</th></tr></thead><tbody>${pairRows}</tbody></table>` : '<p>Пар для сравнения нет.</p>')
210
+ + `<p>Общие термины: ${shared.length > 0 ? escapeHtml(shared.join(', ')) : '—'}</p>`
211
+ + (unique.length > 0
212
+ ? `<ul>${unique.map(([k, v]) => `<li>${escapeHtml(k)}: ${v.length > 0 ? escapeHtml(v.join(', ')) : '—'}</li>`).join('')}</ul>`
213
+ : '')
214
+ + `</section>`;
215
+ }
216
+ /**
217
+ * Рендерит компактный PR-комментарий (GitHub markdown).
218
+ */
219
+ export function renderPrMarkdown(result) {
220
+ const { ok, total } = expertsOkTotal(result);
221
+ const cost = totalCost(result);
222
+ const lines = [];
223
+ lines.push(`## Консилиум: ${result.success ? 'успешно' : 'частично'}`);
224
+ lines.push('');
225
+ lines.push(`Время ${fmtDuration(result.totalTime)} (параллельно ${fmtDuration(result.parallelTime)}) · эксперты ${ok}/${total} · стоимость ${cost === null ? '—' : money(cost)}`);
226
+ lines.push('');
227
+ const experts = Array.isArray(result.experts) ? result.experts : [];
228
+ if (experts.length === 0) {
229
+ lines.push('Эксперты отсутствуют.');
230
+ }
231
+ else {
232
+ for (const e of experts) {
233
+ const name = toText(e.agent) || '—';
234
+ const model = toText(e.model) || '—';
235
+ const status = e.success ? 'OK' : `FAIL${e.errorCode ? ` (${toText(String(e.errorCode))})` : ''}`;
236
+ lines.push(`<details><summary>Мнение: ${escapeHtml(name)} (${escapeHtml(model)}, ${escapeHtml(status)})</summary>`);
237
+ lines.push('');
238
+ const text = typeof e.text === 'string' ? e.text : '';
239
+ if (text.length > 0) {
240
+ const { body, truncated } = truncate(text);
241
+ lines.push(...fencedBlock(body));
242
+ if (truncated)
243
+ lines.push('_…текст обрезан до 6000 символов…_');
244
+ }
245
+ else {
246
+ lines.push('— пустой ответ —');
247
+ }
248
+ if (!e.success && typeof e.errorMessage === 'string' && e.errorMessage.length > 0) {
249
+ lines.push(`Ошибка: ${inlineCode(e.errorMessage)}`);
250
+ }
251
+ lines.push(`Длительность: ${fmtDuration(e.duration)} · ${tokensLine(e)}`);
252
+ lines.push('</details>');
253
+ lines.push('');
254
+ }
255
+ }
256
+ const chairText = typeof result.chair?.text === 'string' && result.chair.text.trim().length > 0
257
+ ? result.chair.text
258
+ : result.text;
259
+ if (typeof chairText === 'string' && chairText.trim().length > 0) {
260
+ const { body, truncated } = truncate(chairText);
261
+ lines.push('### Итог председателя');
262
+ lines.push('');
263
+ lines.push(...fencedBlock(body));
264
+ if (truncated)
265
+ lines.push('_…текст обрезан до 6000 символов…_');
266
+ lines.push('');
267
+ }
268
+ const consensus = consensusOf(result);
269
+ if (consensus) {
270
+ const agreement = typeof consensus.agreement === 'string' ? escapeHtml(consensus.agreement) : '—';
271
+ const avg = typeof consensus.averageSimilarity === 'number' && Number.isFinite(consensus.averageSimilarity)
272
+ ? `${Math.round(consensus.averageSimilarity * 100)}%`
273
+ : '—';
274
+ const pairs = consensusPairs(consensus)
275
+ .slice()
276
+ .sort((a, b) => b.similarity - a.similarity)
277
+ .slice(0, 3);
278
+ const shared = strArray(consensus.sharedTerms).slice(0, 10).map(escapeHtml);
279
+ lines.push(`Консенсус: ${agreement} (среднее ${avg})${pairs.length > 0 ? '; топ пар: ' + pairs.map(p => `${escapeHtml(p.left)}↔${escapeHtml(p.right)} ${Math.round(p.similarity * 100)}%`).join(', ') : ''}${shared.length > 0 ? `; общее: ${shared.join(', ')}` : ''}.`);
280
+ lines.push('');
281
+ }
282
+ lines.push(`Стоимость: ${cost === null ? '—' : money(cost)} · токены: вх. ${int(result.usage?.inputTokens)}, исх. ${int(result.usage?.outputTokens)}.`);
283
+ const dir = artifactsDirOf(result);
284
+ if (dir !== null)
285
+ lines.push(`Артефакты: ${inlineCode(dir)}.`);
286
+ lines.push(PR_MARKER);
287
+ return lines.join('\n');
288
+ }
289
+ /**
290
+ * Диспетчер форматов: html, pr, markdown (markdown = PR-вариант).
291
+ * @throws {Error} при неизвестном формате.
292
+ */
293
+ export function renderReport(result, format, options) {
294
+ if (format === 'html')
295
+ return renderHtmlReport(result, options);
296
+ if (format === 'pr' || format === 'markdown')
297
+ return renderPrMarkdown(result);
298
+ throw new Error(`Неизвестный формат отчёта: ${String(format)}`);
299
+ }
300
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @fileoverview Умный выбор экспертов консилиума по тексту задачи и диффу.
3
+ * @module lv24-opencode-consilium/smart-experts
4
+ */
5
+ import type { ExpertConfig } from './types.js';
6
+ /**
7
+ * Результат умного выбора экспертов.
8
+ */
9
+ export interface SmartExpertSelection {
10
+ /** Выбранные эксперты (в исходном порядке). */
11
+ experts: ExpertConfig[];
12
+ /** Имена отсеянных экспертов (в исходном порядке). */
13
+ dropped: string[];
14
+ /** Очки каждого включённого эксперта по имени. */
15
+ scores: Record<string, number>;
16
+ /** Причины выбора на русском (только для выбранных со счётом > 0). */
17
+ reasons: Record<string, string>;
18
+ }
19
+ /**
20
+ * Ключевые слова ролей (RU-основы + EN-термины) для скоринга задачи.
21
+ *
22
+ * Ключ `generic` — общий запасной лексикон для интеграторов;
23
+ * неизвестные имена экспертов всегда получают счёт 0 и не используют его.
24
+ */
25
+ export declare const ROLE_KEYWORDS: Record<string, string[]>;
26
+ /**
27
+ * Выбирает релевантных экспертов по тексту задачи и опциональному диффу.
28
+ *
29
+ * Учитывает только экспертов с `enabled !== false`, порядок вывода —
30
+ * исходный (приоритет уже применён вызывающей стороной).
31
+ * Неизвестные имена получают счёт 0 без причины.
32
+ * Входной массив и объекты экспертов не мутируются.
33
+ *
34
+ * @param experts - Кандидаты в исходном приоритетном порядке.
35
+ * @param task - Текст задачи.
36
+ * @param options - Лимиты совета и дифф (`max` по умолчанию 3, `min` — 2).
37
+ * @returns Выборка, отсеянные, очки и русские причины.
38
+ */
39
+ export declare function selectSmartExperts(experts: ExpertConfig[], task: string, options?: {
40
+ max?: number;
41
+ min?: number;
42
+ diff?: string;
43
+ }): SmartExpertSelection;
44
+ //# sourceMappingURL=smart-experts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-experts.d.ts","sourceRoot":"","sources":["../src/smart-experts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAmGlD,CAAC;AA6DF;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,YAAY,EAAE,EACvB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,oBAAoB,CAsEtB"}