mister-wolf 2.6.1 → 2.8.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 (61) hide show
  1. package/dist/adapters/cli/cli-entry.d.ts.map +1 -1
  2. package/dist/adapters/cli/cli-entry.js +6 -9
  3. package/dist/adapters/cli/cli-entry.js.map +1 -1
  4. package/dist/adapters/cli/commands/analytics.d.ts +1 -1
  5. package/dist/adapters/cli/commands/analytics.d.ts.map +1 -1
  6. package/dist/adapters/cli/commands/analytics.js +71 -1
  7. package/dist/adapters/cli/commands/analytics.js.map +1 -1
  8. package/dist/adapters/cli/commands/coord.d.ts +3 -0
  9. package/dist/adapters/cli/commands/coord.d.ts.map +1 -0
  10. package/dist/adapters/cli/commands/coord.js +36 -0
  11. package/dist/adapters/cli/commands/coord.js.map +1 -0
  12. package/dist/adapters/cli/commands/memory-brief.d.ts.map +1 -1
  13. package/dist/adapters/cli/commands/memory-brief.js +16 -0
  14. package/dist/adapters/cli/commands/memory-brief.js.map +1 -1
  15. package/dist/adapters/cli/commands/memory-call.d.ts.map +1 -1
  16. package/dist/adapters/cli/commands/memory-call.js +16 -2
  17. package/dist/adapters/cli/commands/memory-call.js.map +1 -1
  18. package/dist/adapters/cli/commands/memory-get.d.ts.map +1 -1
  19. package/dist/adapters/cli/commands/memory-get.js +18 -0
  20. package/dist/adapters/cli/commands/memory-get.js.map +1 -1
  21. package/dist/adapters/cli/commands/memory-run.d.ts.map +1 -1
  22. package/dist/adapters/cli/commands/memory-run.js +2 -0
  23. package/dist/adapters/cli/commands/memory-run.js.map +1 -1
  24. package/dist/adapters/cli/commands/memory-search.d.ts.map +1 -1
  25. package/dist/adapters/cli/commands/memory-search.js +16 -0
  26. package/dist/adapters/cli/commands/memory-search.js.map +1 -1
  27. package/dist/adapters/cli/commands/memory-stage.d.ts +3 -0
  28. package/dist/adapters/cli/commands/memory-stage.d.ts.map +1 -0
  29. package/dist/adapters/cli/commands/memory-stage.js +35 -0
  30. package/dist/adapters/cli/commands/memory-stage.js.map +1 -0
  31. package/dist/adapters/cli/commands/task-eval.d.ts.map +1 -1
  32. package/dist/adapters/cli/commands/task-eval.js +2 -0
  33. package/dist/adapters/cli/commands/task-eval.js.map +1 -1
  34. package/dist/adapters/fs/session-metrics-log.d.ts +63 -1
  35. package/dist/adapters/fs/session-metrics-log.d.ts.map +1 -1
  36. package/dist/adapters/fs/session-metrics-log.js +67 -1
  37. package/dist/adapters/fs/session-metrics-log.js.map +1 -1
  38. package/dist/adapters/mcp/mcp-schemas.d.ts +2 -0
  39. package/dist/adapters/mcp/mcp-schemas.d.ts.map +1 -1
  40. package/dist/adapters/mcp/mcp-schemas.js +2 -0
  41. package/dist/adapters/mcp/mcp-schemas.js.map +1 -1
  42. package/dist/adapters/mcp/mcp-tools.d.ts.map +1 -1
  43. package/dist/adapters/mcp/mcp-tools.js +45 -3
  44. package/dist/adapters/mcp/mcp-tools.js.map +1 -1
  45. package/dist/adapters/version.d.ts +3 -0
  46. package/dist/adapters/version.d.ts.map +1 -0
  47. package/dist/adapters/version.js +12 -0
  48. package/dist/adapters/version.js.map +1 -0
  49. package/dist/app/use-cases/build-analytics.d.ts +108 -1
  50. package/dist/app/use-cases/build-analytics.d.ts.map +1 -1
  51. package/dist/app/use-cases/build-analytics.js +329 -3
  52. package/dist/app/use-cases/build-analytics.js.map +1 -1
  53. package/dist/app/use-cases/generate-agent-brief.d.ts +2 -0
  54. package/dist/app/use-cases/generate-agent-brief.d.ts.map +1 -1
  55. package/dist/app/use-cases/generate-agent-brief.js +1 -1
  56. package/dist/app/use-cases/generate-agent-brief.js.map +1 -1
  57. package/dist/domain/actor.d.ts +3 -0
  58. package/dist/domain/actor.d.ts.map +1 -1
  59. package/dist/domain/actor.js +6 -0
  60. package/dist/domain/actor.js.map +1 -1
  61. package/package.json +1 -1
@@ -104,6 +104,97 @@ export interface CoverageStats {
104
104
  runs: number;
105
105
  scoredTaskRatePct: number | null;
106
106
  }
107
+ /** P2 D4: счётчик стадии — события + уникальные memory_ids. */
108
+ export interface StageCount {
109
+ events: number;
110
+ uniqueIds: number;
111
+ }
112
+ /** P2 D4: воронка added→retrieved→injected→cited→applied. */
113
+ export interface MemoryLifecycleFunnel {
114
+ added: number;
115
+ retrieved: StageCount;
116
+ injected: StageCount;
117
+ cited: StageCount;
118
+ applied: StageCount;
119
+ /** Уникальные id, доходившие до applied (D4), отсортирован. */
120
+ appliedUniqueIds: string[];
121
+ }
122
+ /** P2 D4: атрибуция — доля accepted-вердиктов с предшествующей инъекцией в сессии. */
123
+ export interface AttributionCoverage {
124
+ acceptedTotal: number;
125
+ acceptedWithInjection: number;
126
+ attributionCoveragePct: number | null;
127
+ /** При pct === null: 'no task_evaluated' | 'no injected' | 'no accepted verdicts'. */
128
+ reason?: string;
129
+ }
130
+ /** P3 D2: порог когорты — n < MIN_COHORT_N → метрики n/a с reason (паттерн честных null). */
131
+ export declare const MIN_COHORT_N = 3;
132
+ export interface CampaignCohort {
133
+ cohort: 'with_memory' | 'no_memory';
134
+ n: number;
135
+ /** Медиана weighted ранов когорты; null при n < MIN_COHORT_N или n = 0. */
136
+ medianWeighted: number | null;
137
+ /** Доля accepted среди вердиктов когорты, %; null — вердиктов в когорте нет. */
138
+ acceptedSharePct: number | null;
139
+ /** (раны с outcome !== 'ok') / n, %; null при n = 0. */
140
+ processFailureRatePct: number | null;
141
+ /** 'n<3: min 3 runs' | 'no runs' | null (n>=3 и раны есть). */
142
+ reason: string | null;
143
+ }
144
+ export interface CampaignRow {
145
+ campaign: string;
146
+ runs: number;
147
+ /** false → у кампании нет ни одного task_evaluated с detail.campaign_id === C (вердикт-колонки n/a). */
148
+ hasVerdicts: boolean;
149
+ withMemory: CampaignCohort;
150
+ noMemory: CampaignCohort;
151
+ }
152
+ export interface CampaignView {
153
+ /** sort: runs убыв., затем campaign по алфавиту. */
154
+ rows: CampaignRow[];
155
+ }
156
+ /** P3 D3: per-memory ROI — корреляционная витрина (не причинность). */
157
+ export interface MemoryRoiRow {
158
+ id: string;
159
+ /** accepted task_evaluated в сессиях, где этот id инъецировался не позже вердикта (ts injected <= ts verdict). */
160
+ associatedAccepted: number;
161
+ /** applied-события этого id (число событий). */
162
+ associatedApplied: number;
163
+ /** injected-события этого id (число событий). */
164
+ injectedTotal: number;
165
+ /** max ts среди injected/applied-событий id; нет событий — null (практически не бывает: строка создаётся по injected). */
166
+ lastActivity: string | null;
167
+ }
168
+ export interface MemoryRoi {
169
+ /** sort: associatedAccepted убыв., затем injectedTotal убыв., затем id по алфавиту. */
170
+ rows: MemoryRoiRow[];
171
+ }
172
+ /** P2 D5: координационное view. */
173
+ export interface CoordinationCount {
174
+ kind: string;
175
+ actorFrom: string;
176
+ count: number;
177
+ }
178
+ export interface CoordinationRecentEvent {
179
+ ts: string;
180
+ kind: string;
181
+ from: string;
182
+ to: string | null;
183
+ refs: string[];
184
+ }
185
+ export interface CoordinationBlockerPair {
186
+ ref: string;
187
+ openedAt: string;
188
+ resolvedAt: string | null;
189
+ }
190
+ export interface CoordinationView {
191
+ /** kind × actor_from; sort: count убыв., потом kind, потом actorFrom. */
192
+ counts: CoordinationCount[];
193
+ /** Последние 20 по ts, свежие первыми. */
194
+ recent: CoordinationRecentEvent[];
195
+ /** По refs coord_event kind=blocker, sort по ref. */
196
+ blockers: CoordinationBlockerPair[];
197
+ }
107
198
  /** D7: data-quality сигнального лога (битые строки не роняют контур — только метрика). */
108
199
  export interface DataQualityStats {
109
200
  validEventRatePct: number | null;
@@ -195,6 +286,10 @@ export interface AnalyticsReport {
195
286
  memory: {
196
287
  rows: MemoryLedgerRow[];
197
288
  garbage: GarbageStats;
289
+ funnel: MemoryLifecycleFunnel;
290
+ attribution: AttributionCoverage;
291
+ /** P3 D3: per-memory ROI (расширение memory-блока). */
292
+ roi: MemoryRoi;
198
293
  };
199
294
  tools: ToolLedgerRow[];
200
295
  rules: RuleRankingRow[];
@@ -204,6 +299,9 @@ export interface AnalyticsReport {
204
299
  steward: StewardView;
205
300
  readiness: ExperimentReadiness;
206
301
  councils: CouncilsView;
302
+ coordination: CoordinationView;
303
+ /** P3 D2: витрина кампаний (когорты with/no memory). */
304
+ campaign: CampaignView;
207
305
  acceptance: AcceptanceStats;
208
306
  coverage: CoverageStats;
209
307
  dataQuality: DataQualityStats;
@@ -234,7 +332,7 @@ export interface AnalyticsInput {
234
332
  */
235
333
  export declare function buildAnalyticsReport(deps: AnalyticsDeps, input: AnalyticsInput): Promise<AnalyticsReport>;
236
334
  export interface AnalyticsViewFilter {
237
- view: 'memory' | 'tools' | 'rules' | 'weeklyActivity' | 'agents' | 'steward' | 'outliers' | 'readiness' | 'councils' | 'all';
335
+ view: 'memory' | 'tools' | 'rules' | 'weeklyActivity' | 'agents' | 'steward' | 'outliers' | 'readiness' | 'councils' | 'coordination' | 'campaign' | 'all';
238
336
  class?: 'new' | 'sleeper' | 'workhorse' | 'dead';
239
337
  type?: string;
240
338
  origin?: 'script' | 'model-native';
@@ -246,6 +344,9 @@ export type AnalyticsViewPayload = {
246
344
  view: 'memory';
247
345
  rows: MemoryLedgerRow[];
248
346
  garbage: GarbageStats;
347
+ funnel: MemoryLifecycleFunnel;
348
+ attribution: AttributionCoverage;
349
+ roi: MemoryRoi;
249
350
  } | {
250
351
  view: 'tools';
251
352
  rows: ToolLedgerRow[];
@@ -270,6 +371,12 @@ export type AnalyticsViewPayload = {
270
371
  } | {
271
372
  view: 'councils';
272
373
  councils: CouncilsView;
374
+ } | {
375
+ view: 'coordination';
376
+ coordination: CoordinationView;
377
+ } | {
378
+ view: 'campaign';
379
+ campaign: CampaignView;
273
380
  } | {
274
381
  view: 'all';
275
382
  report: AnalyticsReport;
@@ -1 +1 @@
1
- {"version":3,"file":"build-analytics.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/build-analytics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGvD,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAIvG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAU5D,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,4BAA4B,EAAE,mBAAuD,CAAC;AAEnG,sEAAsE;AACtE,wBAAgB,0BAA0B,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAEvG;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;AAEtE,kHAAkH;AAClH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,mBAAmB,GAAG,cAAc,CAIvG;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,cAAc,CAAC;IAClC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9C,SAAS,EAAE,kBAAkB,GAAG,oBAAoB,GAAG,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,wFAAwF;AACxF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,0FAA0F;AAC1F,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,yGAAyG;IACzG,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,0FAA0F;IAC1F,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,+GAA+G;IAC/G,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,2CAA2C;IAC3C,oBAAoB,EAAE,IAAI,CAAC;IAC3B,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,eAAe,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnD,eAAe,EAAE;QACf,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvC,YAAY,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACtD;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,CAAC;IACF,aAAa,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,SAAS,EAAE;QAAE,sBAAsB,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACnG,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,aAAa,EAAE,mBAAmB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,mBAAmB,CAAC;IAChC,MAAM,EAAE;QAAE,IAAI,EAAE,eAAe,EAAE,CAAC;QAAC,OAAO,EAAE,YAAY,CAAA;KAAE,CAAC;IAC3D,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,cAAc,EAAE,kBAAkB,EAAE,CAAC;IACrC,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,QAAQ,CAAC;IACd,SAAS,EAAE,WAAW,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,2EAA2E;IAC3E,cAAc,CAAC,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CACjE;AAisBD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAwF/G;AAMD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EACA,QAAQ,GACR,OAAO,GACP,OAAO,GACP,gBAAgB,GAChB,QAAQ,GACR,SAAS,GACT,UAAU,GACV,WAAW,GACX,UAAU,GACV,KAAK,CAAC;IACV,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,QAAQ,GAAG,cAAc,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,eAAe,EAAE,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,aAAa,EAAE,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,cAAc,EAAE,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,kBAAkB,EAAE,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,cAAc,EAAE,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,UAAU,EAAE,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,mBAAmB,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AAE7C,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,GAAG,oBAAoB,CAqC1G"}
1
+ {"version":3,"file":"build-analytics.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/build-analytics.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,9 @@ export function classifyLifecycle(uses, ageDays, t) {
18
18
  return 'sleeper';
19
19
  return ageDays <= t.newDays ? 'new' : 'dead';
20
20
  }
21
+ // --- P3 D2/D3: кампании (когорты с памятью/без) и per-memory ROI ---
22
+ /** P3 D2: порог когорты — n < MIN_COHORT_N → метрики n/a с reason (паттерн честных null). */
23
+ export const MIN_COHORT_N = 3;
21
24
  // ---------------------------------------------------------------------------
22
25
  // Внутренние хелперы
23
26
  // ---------------------------------------------------------------------------
@@ -25,7 +28,8 @@ export function classifyLifecycle(uses, ageDays, t) {
25
28
  function finiteNumber(value) {
26
29
  return typeof value === 'number' && Number.isFinite(value) ? value : null;
27
30
  }
28
- /** Memory ledger (Q1/Q2): per-object след использования + lifecycle-класс D7. */
31
+ /** Memory ledger (Q1/Q2): per-object след использования + lifecycle-класс D7.
32
+ * (funnel/attribution добавляет вызов buildAnalyticsReport — P2 D4.) */
29
33
  function buildMemoryLedger(objects, events, signals, now, t) {
30
34
  const rows = [];
31
35
  for (const o of objects) {
@@ -302,6 +306,305 @@ function buildCoverage(signals) {
302
306
  const runs = signals.filter((s) => s.event === 'run').length;
303
307
  return { scored, runs, scoredTaskRatePct: runs > 0 ? (scored / runs) * 100 : null };
304
308
  }
309
+ /** Валидный memory_stage-сигнал (D4 guard): detail есть, stage — одна из четырёх,
310
+ * memory_ids — массив непустых строк (≥1); малформ → null, отчёт не роняет. */
311
+ function memoryStageOf(s) {
312
+ if (s.event !== 'memory_stage')
313
+ return null;
314
+ const d = s.detail;
315
+ if (d === undefined)
316
+ return null;
317
+ const stage = d.stage;
318
+ if (stage !== 'retrieved' && stage !== 'injected' && stage !== 'cited' && stage !== 'applied') {
319
+ return null;
320
+ }
321
+ if (!Array.isArray(d.memory_ids))
322
+ return null;
323
+ const ids = d.memory_ids.filter((id) => typeof id === 'string' && id !== '');
324
+ return ids.length > 0 ? { stage, ids } : null;
325
+ }
326
+ /** Воронка D4: added = все объекты store; стадии — события + уникальные memory_ids. */
327
+ function buildLifecycleFunnel(added, signals) {
328
+ const acc = {
329
+ retrieved: { events: 0, ids: new Set() },
330
+ injected: { events: 0, ids: new Set() },
331
+ cited: { events: 0, ids: new Set() },
332
+ applied: { events: 0, ids: new Set() },
333
+ };
334
+ for (const s of signals) {
335
+ const st = memoryStageOf(s);
336
+ if (st === null)
337
+ continue;
338
+ const a = acc[st.stage];
339
+ a.events += 1;
340
+ for (const id of st.ids)
341
+ a.ids.add(id);
342
+ }
343
+ const count = (a) => ({ events: a.events, uniqueIds: a.ids.size });
344
+ return {
345
+ added,
346
+ retrieved: count(acc.retrieved),
347
+ injected: count(acc.injected),
348
+ cited: count(acc.cited),
349
+ applied: count(acc.applied),
350
+ appliedUniqueIds: [...acc.applied.ids].sort(),
351
+ };
352
+ }
353
+ /** Атрибуция D4: доля accepted-вердиктов, перед которыми в той же сессии была
354
+ * инъекция (memory_stage injected, session_id !== null, ts <= ts вердикта). */
355
+ function buildAttribution(signals) {
356
+ if (!signals.some((s) => s.event === 'task_evaluated')) {
357
+ return { acceptedTotal: 0, acceptedWithInjection: 0, attributionCoveragePct: null, reason: 'no task_evaluated' };
358
+ }
359
+ // ts injected-сигналов по сессии (без session_id в атрибуции не участвуют)
360
+ const injectedTsBySession = new Map();
361
+ for (const s of signals) {
362
+ const st = memoryStageOf(s);
363
+ if (st === null || st.stage !== 'injected' || s.session_id === null)
364
+ continue;
365
+ const arr = injectedTsBySession.get(s.session_id) ?? [];
366
+ arr.push(s.ts);
367
+ injectedTsBySession.set(s.session_id, arr);
368
+ }
369
+ if (injectedTsBySession.size === 0) {
370
+ return { acceptedTotal: 0, acceptedWithInjection: 0, attributionCoveragePct: null, reason: 'no injected' };
371
+ }
372
+ let acceptedTotal = 0;
373
+ let acceptedWithInjection = 0;
374
+ for (const s of signals) {
375
+ if (s.event !== 'task_evaluated' || s.detail?.verdict !== 'accepted')
376
+ continue;
377
+ acceptedTotal += 1;
378
+ if (s.session_id === null)
379
+ continue;
380
+ if ((injectedTsBySession.get(s.session_id) ?? []).some((ts) => ts <= s.ts))
381
+ acceptedWithInjection += 1;
382
+ }
383
+ if (acceptedTotal === 0) {
384
+ return { acceptedTotal: 0, acceptedWithInjection: 0, attributionCoveragePct: null, reason: 'no accepted verdicts' };
385
+ }
386
+ return {
387
+ acceptedTotal,
388
+ acceptedWithInjection,
389
+ attributionCoveragePct: (acceptedWithInjection / acceptedTotal) * 100,
390
+ };
391
+ }
392
+ // --- P3 D2/D3 ---
393
+ /** Валидный campaign_id run-сигнала (guard как experiment в buildReadiness). */
394
+ function runCampaignOf(s) {
395
+ return s.event === 'run' && typeof s.campaign_id === 'string' && s.campaign_id !== '' ? s.campaign_id : null;
396
+ }
397
+ /** Медиана finite weighted ранов когорты (паттерн medianHours); значений нет → null. */
398
+ function medianWeightedOf(runs) {
399
+ const values = runs
400
+ .map((r) => finiteNumber(r.weighted))
401
+ .filter((v) => v !== null)
402
+ .sort((a, b) => a - b);
403
+ if (values.length === 0)
404
+ return null;
405
+ return values.length % 2 === 1
406
+ ? values[(values.length - 1) / 2]
407
+ : (values[values.length / 2 - 1] + values[values.length / 2]) / 2;
408
+ }
409
+ /** Когорта кампании: при n < MIN_COHORT_N вся строка метрик n/a + reason (спека D2:
410
+ * «когорта с n < 3 → строка n/a с reason» — доли на малых выборках не показываем). */
411
+ function buildCohort(cohort, runs, verdicts) {
412
+ const n = runs.length;
413
+ const small = n < MIN_COHORT_N;
414
+ return {
415
+ cohort,
416
+ n,
417
+ medianWeighted: !small ? medianWeightedOf(runs) : null,
418
+ acceptedSharePct: !small
419
+ ? verdicts.length > 0
420
+ ? (verdicts.filter((v) => v.detail?.verdict === 'accepted').length / verdicts.length) * 100
421
+ : null
422
+ : null,
423
+ processFailureRatePct: !small && n > 0 ? (runs.filter((r) => r.outcome !== 'ok').length / n) * 100 : null,
424
+ reason: n === 0 ? 'no runs' : small ? 'n<3: min 3 runs' : null,
425
+ };
426
+ }
427
+ /** Кампании D2: источник — run-сигналы с топ-левел campaign_id; когорта рана — по принадлежности его
428
+ * session_id к глобальному набору injected-сессий (паттерн buildAttribution), session_id null → no_memory.
429
+ * Вердикты кампании (detail.campaign_id === C) атрибутируются той же упрощённой когортой: session_id
430
+ * вердикта ∈ injected-сессий ⟺ with_memory — независимо от наличия ранов в когорте (решение спеки §2 D2). */
431
+ function buildCampaignView(signals) {
432
+ const injectedSessions = new Set();
433
+ for (const s of signals) {
434
+ const st = memoryStageOf(s);
435
+ if (st !== null && st.stage === 'injected' && s.session_id !== null)
436
+ injectedSessions.add(s.session_id);
437
+ }
438
+ const inWithMemory = (s) => s.session_id !== null && injectedSessions.has(s.session_id);
439
+ // campaign → [with_memory, no_memory]
440
+ const runsBy = new Map();
441
+ for (const s of signals) {
442
+ const c = runCampaignOf(s);
443
+ if (c === null)
444
+ continue;
445
+ const pair = runsBy.get(c) ?? [[], []];
446
+ pair[inWithMemory(s) ? 0 : 1].push(s);
447
+ runsBy.set(c, pair);
448
+ }
449
+ const verdictsBy = new Map();
450
+ for (const s of signals) {
451
+ if (s.event !== 'task_evaluated')
452
+ continue;
453
+ const c = s.detail?.campaign_id;
454
+ if (typeof c !== 'string' || c === '')
455
+ continue;
456
+ const pair = verdictsBy.get(c) ?? [[], []];
457
+ pair[inWithMemory(s) ? 0 : 1].push(s);
458
+ verdictsBy.set(c, pair);
459
+ }
460
+ const rows = [...runsBy.entries()]
461
+ .map(([campaign, [withRuns, noRuns]]) => {
462
+ const [withVerdicts, noVerdicts] = verdictsBy.get(campaign) ?? [[], []];
463
+ return {
464
+ campaign,
465
+ runs: withRuns.length + noRuns.length,
466
+ hasVerdicts: withVerdicts.length + noVerdicts.length > 0,
467
+ withMemory: buildCohort('with_memory', withRuns, withVerdicts),
468
+ noMemory: buildCohort('no_memory', noRuns, noVerdicts),
469
+ };
470
+ })
471
+ .sort((a, b) => b.runs - a.runs || a.campaign.localeCompare(b.campaign));
472
+ return { rows };
473
+ }
474
+ /** Per-memory ROI D3: строки создают валидные injected-события (≥1); associatedAccepted — accepted-вердикты
475
+ * сессий, где id инъецировался не позже вердикта (каждый вердикт — один раз на id); applied чужих id
476
+ * (без injected-строки) не учитывается. Корреляционная витрина, не причинность. */
477
+ function buildMemoryRoi(signals) {
478
+ const acc = new Map();
479
+ const rowOf = (id) => {
480
+ let r = acc.get(id);
481
+ if (r === undefined) {
482
+ r = { injectedEvents: 0, appliedEvents: 0, lastActivity: null };
483
+ acc.set(id, r);
484
+ }
485
+ return r;
486
+ };
487
+ const bump = (r, ts) => {
488
+ if (r.lastActivity === null || ts > r.lastActivity)
489
+ r.lastActivity = ts;
490
+ };
491
+ // инъекции id по сессии (session_id !== null) — база associatedAccepted
492
+ const injectionsBySession = new Map();
493
+ for (const s of signals) {
494
+ const st = memoryStageOf(s);
495
+ if (st === null)
496
+ continue;
497
+ if (st.stage === 'injected') {
498
+ for (const id of st.ids) {
499
+ const r = rowOf(id);
500
+ r.injectedEvents += 1;
501
+ bump(r, s.ts);
502
+ if (s.session_id !== null) {
503
+ const arr = injectionsBySession.get(s.session_id) ?? [];
504
+ arr.push({ id, ts: s.ts });
505
+ injectionsBySession.set(s.session_id, arr);
506
+ }
507
+ }
508
+ }
509
+ else if (st.stage === 'applied') {
510
+ for (const id of st.ids) {
511
+ const r = acc.get(id);
512
+ if (r === undefined)
513
+ continue;
514
+ r.appliedEvents += 1;
515
+ bump(r, s.ts);
516
+ }
517
+ }
518
+ }
519
+ const associated = new Map();
520
+ for (const s of signals) {
521
+ if (s.event !== 'task_evaluated' || s.detail?.verdict !== 'accepted' || s.session_id === null)
522
+ continue;
523
+ const ids = new Set();
524
+ for (const inj of injectionsBySession.get(s.session_id) ?? []) {
525
+ if (inj.ts <= s.ts)
526
+ ids.add(inj.id);
527
+ }
528
+ for (const id of ids)
529
+ associated.set(id, (associated.get(id) ?? 0) + 1);
530
+ }
531
+ const rows = [...acc.entries()]
532
+ .map(([id, r]) => ({
533
+ id,
534
+ associatedAccepted: associated.get(id) ?? 0,
535
+ associatedApplied: r.appliedEvents,
536
+ injectedTotal: r.injectedEvents,
537
+ lastActivity: r.lastActivity,
538
+ }))
539
+ .sort((a, b) => b.associatedAccepted - a.associatedAccepted || b.injectedTotal - a.injectedTotal || a.id.localeCompare(b.id));
540
+ return { rows };
541
+ }
542
+ /** Валидный coord_event-сигнал (D5 guard): kind/actor_from — строки, refs — массив строк. */
543
+ function coordEventOf(s) {
544
+ if (s.event !== 'coord_event')
545
+ return null;
546
+ const d = s.detail;
547
+ if (d === undefined || typeof d.kind !== 'string' || typeof d.actor_from !== 'string' || !Array.isArray(d.refs)) {
548
+ return null;
549
+ }
550
+ return {
551
+ kind: d.kind,
552
+ from: d.actor_from,
553
+ to: typeof d.actor_to === 'string' ? d.actor_to : null,
554
+ refs: d.refs.filter((r) => typeof r === 'string' && r !== ''),
555
+ };
556
+ }
557
+ /** Координация D5: counts (kind × actor_from), последние 20 событий, blocker-пары
558
+ * (ref → earliest blocker-открытие → первый memory.resolved не раньше openedAt). */
559
+ function buildCoordination(signals, events) {
560
+ const parsed = [];
561
+ // ключ kind ⊕ actor_from; \u001f не встречается в именах агентов (unit-separator)
562
+ const countAcc = new Map();
563
+ for (const s of signals) {
564
+ const c = coordEventOf(s);
565
+ if (c === null)
566
+ continue;
567
+ parsed.push({ ts: s.ts, ...c });
568
+ const key = `${c.kind}\u001f${c.from}`;
569
+ const cur = countAcc.get(key);
570
+ if (cur === undefined)
571
+ countAcc.set(key, { kind: c.kind, actorFrom: c.from, count: 1 });
572
+ else
573
+ cur.count += 1;
574
+ }
575
+ const counts = [...countAcc.values()].sort((a, b) => b.count - a.count || a.kind.localeCompare(b.kind) || a.actorFrom.localeCompare(b.actorFrom));
576
+ const recent = [...parsed].sort((a, b) => (a.ts < b.ts ? 1 : a.ts > b.ts ? -1 : 0)).slice(0, 20);
577
+ // openedAt по ref — самый ранний blocker-сигнал
578
+ const openedByRef = new Map();
579
+ for (const p of parsed) {
580
+ if (p.kind !== 'blocker')
581
+ continue;
582
+ for (const ref of p.refs) {
583
+ const cur = openedByRef.get(ref);
584
+ if (cur === undefined || p.ts < cur)
585
+ openedByRef.set(ref, p.ts);
586
+ }
587
+ }
588
+ // resolvedAt: первый memory.resolved с payload.memory_id === ref и timestamp >= openedAt
589
+ const resolvedTsById = new Map();
590
+ for (const ev of events) {
591
+ if (ev.type !== 'memory.resolved')
592
+ continue;
593
+ const mid = ev.payload?.memory_id;
594
+ if (typeof mid !== 'string')
595
+ continue;
596
+ const arr = resolvedTsById.get(mid) ?? [];
597
+ arr.push(ev.timestamp);
598
+ resolvedTsById.set(mid, arr);
599
+ }
600
+ const blockers = [...openedByRef.entries()]
601
+ .map(([ref, openedAt]) => {
602
+ const resolvedAt = (resolvedTsById.get(ref) ?? []).filter((ts) => ts >= openedAt).sort()[0];
603
+ return { ref, openedAt, resolvedAt: resolvedAt ?? null };
604
+ })
605
+ .sort((a, b) => a.ref.localeCompare(b.ref));
606
+ return { counts, recent, blockers };
607
+ }
305
608
  /** Agent ledger Q11: строки по run-агентам ∪ complaint-акторам `agent:<имя>`; три уровня —
306
609
  * объём (runs/weighted/duration/cost), проблемы (processFailures/toolErrors/жалобы), достижения
307
610
  * (completedRuns/accepted/holdout_prevented его rule/lesson). */
@@ -721,7 +1024,14 @@ export async function buildAnalyticsReport(deps, input) {
721
1024
  seenEventIds.add(s.event_id);
722
1025
  signals.push(s);
723
1026
  }
724
- const memory = buildMemoryLedger(allObjects, events, signals, now, thresholds);
1027
+ const memory = {
1028
+ ...buildMemoryLedger(allObjects, events, signals, now, thresholds),
1029
+ // P2 D4: воронка added→applied + атрибуция accepted-вердиктов к инъекциям
1030
+ funnel: buildLifecycleFunnel(allObjects.length, signals),
1031
+ attribution: buildAttribution(signals),
1032
+ // P3 D3: per-memory ROI (корреляционная витрина)
1033
+ roi: buildMemoryRoi(signals),
1034
+ };
725
1035
  // P1 D4: канонический источник run-метрик — сигналы + compat-мерж legacy run-log
726
1036
  const runEntries = mergeRunEntries(signals, input.runLogText);
727
1037
  const tools = buildToolLedger(allObjects.filter((o) => o.type === 'tool'), signals, runEntries, input.patternThreshold ?? DEFAULT_PATTERN_THRESHOLD);
@@ -733,6 +1043,8 @@ export async function buildAnalyticsReport(deps, input) {
733
1043
  const steward = buildSteward(events, signals, allObjects, now, weeks);
734
1044
  const readiness = buildReadiness(signals);
735
1045
  const councils = await buildCouncils(allObjects, deps.relations, now, weeks);
1046
+ const coordination = buildCoordination(signals, events); // P2 D5
1047
+ const campaign = buildCampaignView(signals); // P3 D2
736
1048
  const coverage = buildCoverage(signals);
737
1049
  // D6: unknown-model и pricing-coverage по дедуплицированным run-сигналам
738
1050
  const runSignals = signals.filter((s) => s.event === 'run');
@@ -767,6 +1079,8 @@ export async function buildAnalyticsReport(deps, input) {
767
1079
  steward,
768
1080
  readiness,
769
1081
  councils,
1082
+ coordination,
1083
+ campaign,
770
1084
  acceptance: { accepted: acceptance.accepted, costPerAcceptedTask: acceptance.costPerAcceptedTask },
771
1085
  coverage,
772
1086
  dataQuality,
@@ -782,7 +1096,15 @@ export function filterAnalytics(report, filter) {
782
1096
  rows = rows.filter((r) => r.lifecycle === filter.class);
783
1097
  if (filter.type !== undefined)
784
1098
  rows = rows.filter((r) => r.type === filter.type);
785
- return { view: 'memory', rows: rows.slice(0, top), garbage: report.memory.garbage };
1099
+ return {
1100
+ view: 'memory',
1101
+ rows: rows.slice(0, top),
1102
+ garbage: report.memory.garbage,
1103
+ funnel: report.memory.funnel,
1104
+ attribution: report.memory.attribution,
1105
+ // P3 D3: roi без top-лимита (срез делает render-слой); строки уже отсортированы
1106
+ roi: report.memory.roi,
1107
+ };
786
1108
  }
787
1109
  case 'tools': {
788
1110
  let rows = report.tools;
@@ -812,6 +1134,10 @@ export function filterAnalytics(report, filter) {
812
1134
  return { view: 'readiness', readiness: report.readiness };
813
1135
  case 'councils':
814
1136
  return { view: 'councils', councils: report.councils };
1137
+ case 'coordination':
1138
+ return { view: 'coordination', coordination: report.coordination };
1139
+ case 'campaign':
1140
+ return { view: 'campaign', campaign: report.campaign };
815
1141
  case 'all':
816
1142
  return { view: 'all', report };
817
1143
  }