mister-wolf 2.12.0 → 2.14.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 (449) hide show
  1. package/README.md +4 -1
  2. package/README.ru.md +4 -1
  3. package/dist/adapters/cli/cli-entry.d.ts +25 -0
  4. package/dist/adapters/cli/cli-entry.d.ts.map +1 -1
  5. package/dist/adapters/cli/cli-entry.js +156 -85
  6. package/dist/adapters/cli/cli-entry.js.map +1 -1
  7. package/dist/adapters/cli/commands/analytics.d.ts +30 -5
  8. package/dist/adapters/cli/commands/analytics.d.ts.map +1 -1
  9. package/dist/adapters/cli/commands/analytics.js +295 -2
  10. package/dist/adapters/cli/commands/analytics.js.map +1 -1
  11. package/dist/adapters/cli/commands/memory-add.d.ts +21 -1
  12. package/dist/adapters/cli/commands/memory-add.d.ts.map +1 -1
  13. package/dist/adapters/cli/commands/memory-add.js +42 -29
  14. package/dist/adapters/cli/commands/memory-add.js.map +1 -1
  15. package/dist/adapters/cli/commands/memory-aggregate.d.ts +3 -0
  16. package/dist/adapters/cli/commands/memory-aggregate.d.ts.map +1 -0
  17. package/dist/adapters/cli/commands/memory-aggregate.js +31 -0
  18. package/dist/adapters/cli/commands/memory-aggregate.js.map +1 -0
  19. package/dist/adapters/cli/commands/memory-archive.d.ts +3 -0
  20. package/dist/adapters/cli/commands/memory-archive.d.ts.map +1 -0
  21. package/dist/adapters/cli/commands/memory-archive.js +19 -0
  22. package/dist/adapters/cli/commands/memory-archive.js.map +1 -0
  23. package/dist/adapters/cli/commands/memory-call.d.ts.map +1 -1
  24. package/dist/adapters/cli/commands/memory-call.js +9 -2
  25. package/dist/adapters/cli/commands/memory-call.js.map +1 -1
  26. package/dist/adapters/cli/commands/memory-complain.d.ts +6 -0
  27. package/dist/adapters/cli/commands/memory-complain.d.ts.map +1 -1
  28. package/dist/adapters/cli/commands/memory-complain.js +20 -0
  29. package/dist/adapters/cli/commands/memory-complain.js.map +1 -1
  30. package/dist/adapters/cli/commands/memory-doctor.d.ts.map +1 -1
  31. package/dist/adapters/cli/commands/memory-doctor.js +43 -2
  32. package/dist/adapters/cli/commands/memory-doctor.js.map +1 -1
  33. package/dist/adapters/cli/commands/memory-edit.d.ts +3 -0
  34. package/dist/adapters/cli/commands/memory-edit.d.ts.map +1 -0
  35. package/dist/adapters/cli/commands/memory-edit.js +67 -0
  36. package/dist/adapters/cli/commands/memory-edit.js.map +1 -0
  37. package/dist/adapters/cli/commands/memory-init.d.ts.map +1 -1
  38. package/dist/adapters/cli/commands/memory-init.js +46 -7
  39. package/dist/adapters/cli/commands/memory-init.js.map +1 -1
  40. package/dist/adapters/cli/commands/memory-list.d.ts +12 -0
  41. package/dist/adapters/cli/commands/memory-list.d.ts.map +1 -1
  42. package/dist/adapters/cli/commands/memory-list.js +36 -21
  43. package/dist/adapters/cli/commands/memory-list.js.map +1 -1
  44. package/dist/adapters/cli/commands/memory-migrate.d.ts.map +1 -1
  45. package/dist/adapters/cli/commands/memory-migrate.js +91 -0
  46. package/dist/adapters/cli/commands/memory-migrate.js.map +1 -1
  47. package/dist/adapters/cli/commands/memory-recap.d.ts.map +1 -1
  48. package/dist/adapters/cli/commands/memory-recap.js +3 -1
  49. package/dist/adapters/cli/commands/memory-recap.js.map +1 -1
  50. package/dist/adapters/cli/commands/memory-relation.d.ts +1 -1
  51. package/dist/adapters/cli/commands/memory-relation.d.ts.map +1 -1
  52. package/dist/adapters/cli/commands/memory-relation.js +57 -2
  53. package/dist/adapters/cli/commands/memory-relation.js.map +1 -1
  54. package/dist/adapters/cli/commands/memory-search.d.ts.map +1 -1
  55. package/dist/adapters/cli/commands/memory-search.js +21 -2
  56. package/dist/adapters/cli/commands/memory-search.js.map +1 -1
  57. package/dist/adapters/cli/commands/memory-session.d.ts.map +1 -1
  58. package/dist/adapters/cli/commands/memory-session.js +2 -12
  59. package/dist/adapters/cli/commands/memory-session.js.map +1 -1
  60. package/dist/adapters/cli/commands/memory-sync.d.ts.map +1 -1
  61. package/dist/adapters/cli/commands/memory-sync.js +2 -9
  62. package/dist/adapters/cli/commands/memory-sync.js.map +1 -1
  63. package/dist/adapters/cli/commands/memory-taxonomy.d.ts.map +1 -1
  64. package/dist/adapters/cli/commands/memory-taxonomy.js +4 -4
  65. package/dist/adapters/cli/commands/memory-taxonomy.js.map +1 -1
  66. package/dist/adapters/cli/commands/memory-tool.d.ts.map +1 -1
  67. package/dist/adapters/cli/commands/memory-tool.js +13 -5
  68. package/dist/adapters/cli/commands/memory-tool.js.map +1 -1
  69. package/dist/adapters/cli/commands/memory-validate.d.ts.map +1 -1
  70. package/dist/adapters/cli/commands/memory-validate.js +18 -4
  71. package/dist/adapters/cli/commands/memory-validate.js.map +1 -1
  72. package/dist/adapters/cli/commands/projects.d.ts +3 -0
  73. package/dist/adapters/cli/commands/projects.d.ts.map +1 -0
  74. package/dist/adapters/cli/commands/projects.js +18 -0
  75. package/dist/adapters/cli/commands/projects.js.map +1 -0
  76. package/dist/adapters/cli/removed-commands.d.ts +11 -0
  77. package/dist/adapters/cli/removed-commands.d.ts.map +1 -0
  78. package/dist/adapters/cli/removed-commands.js +36 -0
  79. package/dist/adapters/cli/removed-commands.js.map +1 -0
  80. package/dist/adapters/cli/type-command-generator.d.ts +5 -0
  81. package/dist/adapters/cli/type-command-generator.d.ts.map +1 -0
  82. package/dist/adapters/cli/type-command-generator.js +132 -0
  83. package/dist/adapters/cli/type-command-generator.js.map +1 -0
  84. package/dist/adapters/fs/config-file.d.ts +6 -1
  85. package/dist/adapters/fs/config-file.d.ts.map +1 -1
  86. package/dist/adapters/fs/config-file.js +112 -55
  87. package/dist/adapters/fs/config-file.js.map +1 -1
  88. package/dist/adapters/fs/doc-id-migration.d.ts +2 -0
  89. package/dist/adapters/fs/doc-id-migration.d.ts.map +1 -1
  90. package/dist/adapters/fs/doc-id-migration.js +8 -2
  91. package/dist/adapters/fs/doc-id-migration.js.map +1 -1
  92. package/dist/adapters/fs/effectiveness-snapshots.d.ts +1 -1
  93. package/dist/adapters/fs/effectiveness-snapshots.d.ts.map +1 -1
  94. package/dist/adapters/fs/jsonl-relation-log.d.ts.map +1 -1
  95. package/dist/adapters/fs/jsonl-relation-log.js +10 -2
  96. package/dist/adapters/fs/jsonl-relation-log.js.map +1 -1
  97. package/dist/adapters/fs/layout-migration.d.ts.map +1 -1
  98. package/dist/adapters/fs/layout-migration.js +21 -2
  99. package/dist/adapters/fs/layout-migration.js.map +1 -1
  100. package/dist/adapters/fs/markdown-memory-store.d.ts +12 -1
  101. package/dist/adapters/fs/markdown-memory-store.d.ts.map +1 -1
  102. package/dist/adapters/fs/markdown-memory-store.js +124 -22
  103. package/dist/adapters/fs/markdown-memory-store.js.map +1 -1
  104. package/dist/adapters/fs/project-paths.d.ts +1 -1
  105. package/dist/adapters/fs/project-paths.d.ts.map +1 -1
  106. package/dist/adapters/fs/project-paths.js +1 -1
  107. package/dist/adapters/fs/project-paths.js.map +1 -1
  108. package/dist/adapters/fs/projects-registry.d.ts +8 -2
  109. package/dist/adapters/fs/projects-registry.d.ts.map +1 -1
  110. package/dist/adapters/fs/projects-registry.js +43 -16
  111. package/dist/adapters/fs/projects-registry.js.map +1 -1
  112. package/dist/adapters/fs/schema-version.d.ts +2 -0
  113. package/dist/adapters/fs/schema-version.d.ts.map +1 -1
  114. package/dist/adapters/fs/schema-version.js +15 -0
  115. package/dist/adapters/fs/schema-version.js.map +1 -1
  116. package/dist/adapters/fs/session-metrics-log.d.ts +32 -118
  117. package/dist/adapters/fs/session-metrics-log.d.ts.map +1 -1
  118. package/dist/adapters/fs/session-metrics-log.js +106 -141
  119. package/dist/adapters/fs/session-metrics-log.js.map +1 -1
  120. package/dist/adapters/fs/taxonomy-migration.d.ts +38 -0
  121. package/dist/adapters/fs/taxonomy-migration.d.ts.map +1 -0
  122. package/dist/adapters/fs/taxonomy-migration.js +280 -0
  123. package/dist/adapters/fs/taxonomy-migration.js.map +1 -0
  124. package/dist/adapters/mcp/mcp-schemas.d.ts +0 -122
  125. package/dist/adapters/mcp/mcp-schemas.d.ts.map +1 -1
  126. package/dist/adapters/mcp/mcp-schemas.js +0 -102
  127. package/dist/adapters/mcp/mcp-schemas.js.map +1 -1
  128. package/dist/adapters/mcp/mcp-server.d.ts.map +1 -1
  129. package/dist/adapters/mcp/mcp-server.js +30 -1
  130. package/dist/adapters/mcp/mcp-server.js.map +1 -1
  131. package/dist/adapters/mcp/mcp-tools.d.ts +10 -0
  132. package/dist/adapters/mcp/mcp-tools.d.ts.map +1 -1
  133. package/dist/adapters/mcp/mcp-tools.js +48 -186
  134. package/dist/adapters/mcp/mcp-tools.js.map +1 -1
  135. package/dist/adapters/sqlite/sqlite-schema.d.ts +1 -1
  136. package/dist/adapters/sqlite/sqlite-schema.d.ts.map +1 -1
  137. package/dist/adapters/sqlite/sqlite-schema.js +4 -2
  138. package/dist/adapters/sqlite/sqlite-schema.js.map +1 -1
  139. package/dist/adapters/sqlite/sqlite-search-index.d.ts +7 -0
  140. package/dist/adapters/sqlite/sqlite-search-index.d.ts.map +1 -1
  141. package/dist/adapters/sqlite/sqlite-search-index.js +41 -9
  142. package/dist/adapters/sqlite/sqlite-search-index.js.map +1 -1
  143. package/dist/app/use-cases/add-memory-object.d.ts +4 -0
  144. package/dist/app/use-cases/add-memory-object.d.ts.map +1 -1
  145. package/dist/app/use-cases/add-memory-object.js +42 -4
  146. package/dist/app/use-cases/add-memory-object.js.map +1 -1
  147. package/dist/app/use-cases/apply-aggregate.d.ts +36 -0
  148. package/dist/app/use-cases/apply-aggregate.d.ts.map +1 -0
  149. package/dist/app/use-cases/apply-aggregate.js +63 -0
  150. package/dist/app/use-cases/apply-aggregate.js.map +1 -0
  151. package/dist/app/use-cases/bootstrap-project.d.ts.map +1 -1
  152. package/dist/app/use-cases/bootstrap-project.js +13 -9
  153. package/dist/app/use-cases/bootstrap-project.js.map +1 -1
  154. package/dist/app/use-cases/build-analytics.d.ts +105 -1
  155. package/dist/app/use-cases/build-analytics.d.ts.map +1 -1
  156. package/dist/app/use-cases/build-analytics.js +330 -9
  157. package/dist/app/use-cases/build-analytics.js.map +1 -1
  158. package/dist/app/use-cases/build-projects-list.d.ts +30 -0
  159. package/dist/app/use-cases/build-projects-list.d.ts.map +1 -0
  160. package/dist/app/use-cases/build-projects-list.js +94 -0
  161. package/dist/app/use-cases/build-projects-list.js.map +1 -0
  162. package/dist/app/use-cases/create-memory-repair-request.d.ts.map +1 -1
  163. package/dist/app/use-cases/create-memory-repair-request.js +5 -3
  164. package/dist/app/use-cases/create-memory-repair-request.js.map +1 -1
  165. package/dist/app/use-cases/detect-unaggregated-lessons.d.ts +30 -0
  166. package/dist/app/use-cases/detect-unaggregated-lessons.d.ts.map +1 -0
  167. package/dist/app/use-cases/detect-unaggregated-lessons.js +40 -0
  168. package/dist/app/use-cases/detect-unaggregated-lessons.js.map +1 -0
  169. package/dist/app/use-cases/diff-thread.d.ts.map +1 -1
  170. package/dist/app/use-cases/diff-thread.js +9 -6
  171. package/dist/app/use-cases/diff-thread.js.map +1 -1
  172. package/dist/app/use-cases/doctor.d.ts +11 -3
  173. package/dist/app/use-cases/doctor.d.ts.map +1 -1
  174. package/dist/app/use-cases/doctor.js +53 -12
  175. package/dist/app/use-cases/doctor.js.map +1 -1
  176. package/dist/app/use-cases/generate-agent-brief.d.ts.map +1 -1
  177. package/dist/app/use-cases/generate-agent-brief.js +18 -8
  178. package/dist/app/use-cases/generate-agent-brief.js.map +1 -1
  179. package/dist/app/use-cases/generate-recap.d.ts +10 -0
  180. package/dist/app/use-cases/generate-recap.d.ts.map +1 -1
  181. package/dist/app/use-cases/generate-recap.js +81 -7
  182. package/dist/app/use-cases/generate-recap.js.map +1 -1
  183. package/dist/app/use-cases/get-call-injections.d.ts +8 -0
  184. package/dist/app/use-cases/get-call-injections.d.ts.map +1 -1
  185. package/dist/app/use-cases/get-call-injections.js +34 -8
  186. package/dist/app/use-cases/get-call-injections.js.map +1 -1
  187. package/dist/app/use-cases/init-project.d.ts +2 -6
  188. package/dist/app/use-cases/init-project.d.ts.map +1 -1
  189. package/dist/app/use-cases/init-project.js +11 -13
  190. package/dist/app/use-cases/init-project.js.map +1 -1
  191. package/dist/app/use-cases/list-memory-objects.d.ts +2 -0
  192. package/dist/app/use-cases/list-memory-objects.d.ts.map +1 -1
  193. package/dist/app/use-cases/list-memory-objects.js.map +1 -1
  194. package/dist/app/use-cases/record-relation.d.ts.map +1 -1
  195. package/dist/app/use-cases/record-relation.js +4 -0
  196. package/dist/app/use-cases/record-relation.js.map +1 -1
  197. package/dist/app/use-cases/scaffold-agent.d.ts.map +1 -1
  198. package/dist/app/use-cases/scaffold-agent.js +58 -17
  199. package/dist/app/use-cases/scaffold-agent.js.map +1 -1
  200. package/dist/app/use-cases/scan-project.d.ts.map +1 -1
  201. package/dist/app/use-cases/scan-project.js +7 -3
  202. package/dist/app/use-cases/scan-project.js.map +1 -1
  203. package/dist/app/use-cases/seed-base-playbooks.d.ts +82 -3
  204. package/dist/app/use-cases/seed-base-playbooks.d.ts.map +1 -1
  205. package/dist/app/use-cases/seed-base-playbooks.js +13 -1
  206. package/dist/app/use-cases/seed-base-playbooks.js.map +1 -1
  207. package/dist/app/use-cases/should-summarize.d.ts.map +1 -1
  208. package/dist/app/use-cases/should-summarize.js +3 -1
  209. package/dist/app/use-cases/should-summarize.js.map +1 -1
  210. package/dist/app/use-cases/snapshot-delta.d.ts +1 -1
  211. package/dist/app/use-cases/snapshot-delta.d.ts.map +1 -1
  212. package/dist/app/use-cases/snapshot-delta.js.map +1 -1
  213. package/dist/app/use-cases/summarize-session.d.ts.map +1 -1
  214. package/dist/app/use-cases/summarize-session.js +11 -2
  215. package/dist/app/use-cases/summarize-session.js.map +1 -1
  216. package/dist/app/use-cases/thinking.d.ts +2 -2
  217. package/dist/app/use-cases/thinking.d.ts.map +1 -1
  218. package/dist/app/use-cases/thinking.js +20 -12
  219. package/dist/app/use-cases/thinking.js.map +1 -1
  220. package/dist/app/use-cases/tool-stats.js +1 -1
  221. package/dist/app/use-cases/tool-stats.js.map +1 -1
  222. package/dist/bootstrap/container.d.ts.map +1 -1
  223. package/dist/bootstrap/container.js +30 -2
  224. package/dist/bootstrap/container.js.map +1 -1
  225. package/dist/domain/facet-colors.d.ts +12 -0
  226. package/dist/domain/facet-colors.d.ts.map +1 -0
  227. package/dist/domain/facet-colors.js +33 -0
  228. package/dist/domain/facet-colors.js.map +1 -0
  229. package/dist/domain/governance.d.ts.map +1 -1
  230. package/dist/domain/governance.js +9 -2
  231. package/dist/domain/governance.js.map +1 -1
  232. package/dist/domain/memory-types.d.ts +73 -318
  233. package/dist/domain/memory-types.d.ts.map +1 -1
  234. package/dist/domain/memory-types.js +90 -223
  235. package/dist/domain/memory-types.js.map +1 -1
  236. package/dist/domain/policies/read-only-zones.d.ts.map +1 -1
  237. package/dist/domain/policies/read-only-zones.js +7 -11
  238. package/dist/domain/policies/read-only-zones.js.map +1 -1
  239. package/dist/domain/schemas/memory-event-schema.d.ts +3 -0
  240. package/dist/domain/schemas/memory-event-schema.d.ts.map +1 -1
  241. package/dist/domain/schemas/memory-event-schema.js +3 -0
  242. package/dist/domain/schemas/memory-event-schema.js.map +1 -1
  243. package/dist/domain/schemas/memory-object-schema.d.ts +2 -0
  244. package/dist/domain/schemas/memory-object-schema.d.ts.map +1 -1
  245. package/dist/domain/schemas/memory-object-schema.js +3 -0
  246. package/dist/domain/schemas/memory-object-schema.js.map +1 -1
  247. package/dist/domain/schemas/relation-schema.d.ts +10 -4
  248. package/dist/domain/schemas/relation-schema.d.ts.map +1 -1
  249. package/dist/domain/schemas/relation-schema.js +12 -0
  250. package/dist/domain/schemas/relation-schema.js.map +1 -1
  251. package/dist/domain/schemas/session-checkpoint-schema.d.ts +3 -1
  252. package/dist/domain/schemas/session-checkpoint-schema.d.ts.map +1 -1
  253. package/dist/domain/schemas/session-checkpoint-schema.js +3 -2
  254. package/dist/domain/schemas/session-checkpoint-schema.js.map +1 -1
  255. package/dist/domain/solve/scenarios.js +3 -3
  256. package/dist/domain/solve/scenarios.js.map +1 -1
  257. package/dist/domain/taxonomy.d.ts +15 -1
  258. package/dist/domain/taxonomy.d.ts.map +1 -1
  259. package/dist/domain/taxonomy.js +14 -1
  260. package/dist/domain/taxonomy.js.map +1 -1
  261. package/dist/domain/tool-economy.d.ts +1 -1
  262. package/dist/domain/tool-economy.js +1 -1
  263. package/dist/domain/type-schema-builder.d.ts +15 -2
  264. package/dist/domain/type-schema-builder.d.ts.map +1 -1
  265. package/dist/domain/type-schema-builder.js +10 -1
  266. package/dist/domain/type-schema-builder.js.map +1 -1
  267. package/dist/ports/memory-store.port.d.ts +2 -0
  268. package/dist/ports/memory-store.port.d.ts.map +1 -1
  269. package/dist/ports/search-index.port.d.ts +2 -0
  270. package/dist/ports/search-index.port.d.ts.map +1 -1
  271. package/package.json +2 -2
  272. package/templates/base/agents/executor-lead.md +5 -0
  273. package/templates/base/agents/mr-wolf.md +6 -0
  274. package/templates/base/agents/steward.md +31 -2
  275. package/templates/opencode/plugins/wolf-router.ts +8 -3
  276. package/templates/opencode/plugins/wolf-session-start.js +6 -3
  277. package/dist/adapters/cli/commands/coord.d.ts +0 -3
  278. package/dist/adapters/cli/commands/coord.d.ts.map +0 -1
  279. package/dist/adapters/cli/commands/coord.js +0 -36
  280. package/dist/adapters/cli/commands/coord.js.map +0 -1
  281. package/dist/adapters/cli/commands/dashboard.d.ts +0 -20
  282. package/dist/adapters/cli/commands/dashboard.d.ts.map +0 -1
  283. package/dist/adapters/cli/commands/dashboard.js +0 -231
  284. package/dist/adapters/cli/commands/dashboard.js.map +0 -1
  285. package/dist/adapters/cli/commands/memory-article.d.ts +0 -3
  286. package/dist/adapters/cli/commands/memory-article.d.ts.map +0 -1
  287. package/dist/adapters/cli/commands/memory-article.js +0 -47
  288. package/dist/adapters/cli/commands/memory-article.js.map +0 -1
  289. package/dist/adapters/cli/commands/memory-blocker.d.ts +0 -3
  290. package/dist/adapters/cli/commands/memory-blocker.d.ts.map +0 -1
  291. package/dist/adapters/cli/commands/memory-blocker.js +0 -52
  292. package/dist/adapters/cli/commands/memory-blocker.js.map +0 -1
  293. package/dist/adapters/cli/commands/memory-council.d.ts +0 -3
  294. package/dist/adapters/cli/commands/memory-council.d.ts.map +0 -1
  295. package/dist/adapters/cli/commands/memory-council.js +0 -42
  296. package/dist/adapters/cli/commands/memory-council.js.map +0 -1
  297. package/dist/adapters/cli/commands/memory-decision.d.ts +0 -3
  298. package/dist/adapters/cli/commands/memory-decision.d.ts.map +0 -1
  299. package/dist/adapters/cli/commands/memory-decision.js +0 -41
  300. package/dist/adapters/cli/commands/memory-decision.js.map +0 -1
  301. package/dist/adapters/cli/commands/memory-effectiveness.d.ts +0 -3
  302. package/dist/adapters/cli/commands/memory-effectiveness.d.ts.map +0 -1
  303. package/dist/adapters/cli/commands/memory-effectiveness.js +0 -127
  304. package/dist/adapters/cli/commands/memory-effectiveness.js.map +0 -1
  305. package/dist/adapters/cli/commands/memory-info-request.d.ts +0 -3
  306. package/dist/adapters/cli/commands/memory-info-request.d.ts.map +0 -1
  307. package/dist/adapters/cli/commands/memory-info-request.js +0 -47
  308. package/dist/adapters/cli/commands/memory-info-request.js.map +0 -1
  309. package/dist/adapters/cli/commands/memory-insights.d.ts +0 -3
  310. package/dist/adapters/cli/commands/memory-insights.d.ts.map +0 -1
  311. package/dist/adapters/cli/commands/memory-insights.js +0 -42
  312. package/dist/adapters/cli/commands/memory-insights.js.map +0 -1
  313. package/dist/adapters/cli/commands/memory-learn.d.ts +0 -3
  314. package/dist/adapters/cli/commands/memory-learn.d.ts.map +0 -1
  315. package/dist/adapters/cli/commands/memory-learn.js +0 -327
  316. package/dist/adapters/cli/commands/memory-learn.js.map +0 -1
  317. package/dist/adapters/cli/commands/memory-rule.d.ts +0 -3
  318. package/dist/adapters/cli/commands/memory-rule.d.ts.map +0 -1
  319. package/dist/adapters/cli/commands/memory-rule.js +0 -40
  320. package/dist/adapters/cli/commands/memory-rule.js.map +0 -1
  321. package/dist/adapters/cli/commands/memory-run.d.ts +0 -3
  322. package/dist/adapters/cli/commands/memory-run.d.ts.map +0 -1
  323. package/dist/adapters/cli/commands/memory-run.js +0 -154
  324. package/dist/adapters/cli/commands/memory-run.js.map +0 -1
  325. package/dist/adapters/cli/commands/memory-stage.d.ts +0 -3
  326. package/dist/adapters/cli/commands/memory-stage.d.ts.map +0 -1
  327. package/dist/adapters/cli/commands/memory-stage.js +0 -35
  328. package/dist/adapters/cli/commands/memory-stage.js.map +0 -1
  329. package/dist/adapters/cli/commands/memory-thread.d.ts +0 -3
  330. package/dist/adapters/cli/commands/memory-thread.d.ts.map +0 -1
  331. package/dist/adapters/cli/commands/memory-thread.js +0 -48
  332. package/dist/adapters/cli/commands/memory-thread.js.map +0 -1
  333. package/dist/adapters/cli/opencode-run-metrics.d.ts +0 -25
  334. package/dist/adapters/cli/opencode-run-metrics.d.ts.map +0 -1
  335. package/dist/adapters/cli/opencode-run-metrics.js +0 -64
  336. package/dist/adapters/cli/opencode-run-metrics.js.map +0 -1
  337. package/dist/app/use-cases/activate-draft.d.ts +0 -31
  338. package/dist/app/use-cases/activate-draft.d.ts.map +0 -1
  339. package/dist/app/use-cases/activate-draft.js +0 -74
  340. package/dist/app/use-cases/activate-draft.js.map +0 -1
  341. package/dist/app/use-cases/build-dashboard.d.ts +0 -43
  342. package/dist/app/use-cases/build-dashboard.d.ts.map +0 -1
  343. package/dist/app/use-cases/build-dashboard.js +0 -32
  344. package/dist/app/use-cases/build-dashboard.js.map +0 -1
  345. package/dist/app/use-cases/create-article.d.ts +0 -31
  346. package/dist/app/use-cases/create-article.d.ts.map +0 -1
  347. package/dist/app/use-cases/create-article.js +0 -62
  348. package/dist/app/use-cases/create-article.js.map +0 -1
  349. package/dist/app/use-cases/create-blocker.d.ts +0 -28
  350. package/dist/app/use-cases/create-blocker.d.ts.map +0 -1
  351. package/dist/app/use-cases/create-blocker.js +0 -51
  352. package/dist/app/use-cases/create-blocker.js.map +0 -1
  353. package/dist/app/use-cases/create-decision.d.ts +0 -28
  354. package/dist/app/use-cases/create-decision.d.ts.map +0 -1
  355. package/dist/app/use-cases/create-decision.js +0 -58
  356. package/dist/app/use-cases/create-decision.js.map +0 -1
  357. package/dist/app/use-cases/create-info-request.d.ts +0 -31
  358. package/dist/app/use-cases/create-info-request.d.ts.map +0 -1
  359. package/dist/app/use-cases/create-info-request.js +0 -58
  360. package/dist/app/use-cases/create-info-request.js.map +0 -1
  361. package/dist/app/use-cases/create-rule.d.ts +0 -27
  362. package/dist/app/use-cases/create-rule.d.ts.map +0 -1
  363. package/dist/app/use-cases/create-rule.js +0 -48
  364. package/dist/app/use-cases/create-rule.js.map +0 -1
  365. package/dist/app/use-cases/create-session-checkpoint.d.ts +0 -23
  366. package/dist/app/use-cases/create-session-checkpoint.d.ts.map +0 -1
  367. package/dist/app/use-cases/create-session-checkpoint.js +0 -61
  368. package/dist/app/use-cases/create-session-checkpoint.js.map +0 -1
  369. package/dist/app/use-cases/create-synthesis.d.ts +0 -25
  370. package/dist/app/use-cases/create-synthesis.d.ts.map +0 -1
  371. package/dist/app/use-cases/create-synthesis.js +0 -36
  372. package/dist/app/use-cases/create-synthesis.js.map +0 -1
  373. package/dist/app/use-cases/create-work-thread.d.ts +0 -26
  374. package/dist/app/use-cases/create-work-thread.d.ts.map +0 -1
  375. package/dist/app/use-cases/create-work-thread.js +0 -47
  376. package/dist/app/use-cases/create-work-thread.js.map +0 -1
  377. package/dist/app/use-cases/effectiveness.d.ts +0 -116
  378. package/dist/app/use-cases/effectiveness.d.ts.map +0 -1
  379. package/dist/app/use-cases/effectiveness.js +0 -198
  380. package/dist/app/use-cases/effectiveness.js.map +0 -1
  381. package/dist/app/use-cases/get-thread-brief.d.ts +0 -19
  382. package/dist/app/use-cases/get-thread-brief.d.ts.map +0 -1
  383. package/dist/app/use-cases/get-thread-brief.js +0 -72
  384. package/dist/app/use-cases/get-thread-brief.js.map +0 -1
  385. package/dist/app/use-cases/learn-decay.d.ts +0 -91
  386. package/dist/app/use-cases/learn-decay.d.ts.map +0 -1
  387. package/dist/app/use-cases/learn-decay.js +0 -274
  388. package/dist/app/use-cases/learn-decay.js.map +0 -1
  389. package/dist/app/use-cases/model-routing.d.ts +0 -30
  390. package/dist/app/use-cases/model-routing.d.ts.map +0 -1
  391. package/dist/app/use-cases/model-routing.js +0 -39
  392. package/dist/app/use-cases/model-routing.js.map +0 -1
  393. package/dist/app/use-cases/pattern-detection.d.ts +0 -44
  394. package/dist/app/use-cases/pattern-detection.d.ts.map +0 -1
  395. package/dist/app/use-cases/pattern-detection.js +0 -71
  396. package/dist/app/use-cases/pattern-detection.js.map +0 -1
  397. package/dist/app/use-cases/propose-draft.d.ts +0 -79
  398. package/dist/app/use-cases/propose-draft.d.ts.map +0 -1
  399. package/dist/app/use-cases/propose-draft.js +0 -140
  400. package/dist/app/use-cases/propose-draft.js.map +0 -1
  401. package/dist/app/use-cases/resolve-blocker.d.ts +0 -17
  402. package/dist/app/use-cases/resolve-blocker.d.ts.map +0 -1
  403. package/dist/app/use-cases/resolve-blocker.js +0 -31
  404. package/dist/app/use-cases/resolve-blocker.js.map +0 -1
  405. package/dist/app/use-cases/run-source.d.ts +0 -15
  406. package/dist/app/use-cases/run-source.d.ts.map +0 -1
  407. package/dist/app/use-cases/run-source.js +0 -26
  408. package/dist/app/use-cases/run-source.js.map +0 -1
  409. package/dist/app/use-cases/tally-council-votes.d.ts +0 -24
  410. package/dist/app/use-cases/tally-council-votes.d.ts.map +0 -1
  411. package/dist/app/use-cases/tally-council-votes.js +0 -30
  412. package/dist/app/use-cases/tally-council-votes.js.map +0 -1
  413. package/dist/app/use-cases/template-evolve.d.ts +0 -87
  414. package/dist/app/use-cases/template-evolve.d.ts.map +0 -1
  415. package/dist/app/use-cases/template-evolve.js +0 -164
  416. package/dist/app/use-cases/template-evolve.js.map +0 -1
  417. package/dist/app/use-cases/validate-draft.d.ts +0 -36
  418. package/dist/app/use-cases/validate-draft.d.ts.map +0 -1
  419. package/dist/app/use-cases/validate-draft.js +0 -75
  420. package/dist/app/use-cases/validate-draft.js.map +0 -1
  421. package/dist/domain/gates/stop-gate.d.ts +0 -43
  422. package/dist/domain/gates/stop-gate.d.ts.map +0 -1
  423. package/dist/domain/gates/stop-gate.js +0 -125
  424. package/dist/domain/gates/stop-gate.js.map +0 -1
  425. package/dist/domain/schemas/article-schema.d.ts +0 -79
  426. package/dist/domain/schemas/article-schema.d.ts.map +0 -1
  427. package/dist/domain/schemas/article-schema.js +0 -12
  428. package/dist/domain/schemas/article-schema.js.map +0 -1
  429. package/dist/domain/schemas/blocker-schema.d.ts +0 -77
  430. package/dist/domain/schemas/blocker-schema.d.ts.map +0 -1
  431. package/dist/domain/schemas/blocker-schema.js +0 -10
  432. package/dist/domain/schemas/blocker-schema.js.map +0 -1
  433. package/dist/domain/schemas/decision-schema.d.ts +0 -75
  434. package/dist/domain/schemas/decision-schema.d.ts.map +0 -1
  435. package/dist/domain/schemas/decision-schema.js +0 -8
  436. package/dist/domain/schemas/decision-schema.js.map +0 -1
  437. package/dist/domain/schemas/info-request-schema.d.ts +0 -80
  438. package/dist/domain/schemas/info-request-schema.d.ts.map +0 -1
  439. package/dist/domain/schemas/info-request-schema.js +0 -13
  440. package/dist/domain/schemas/info-request-schema.js.map +0 -1
  441. package/dist/domain/schemas/rule-schema.d.ts +0 -80
  442. package/dist/domain/schemas/rule-schema.d.ts.map +0 -1
  443. package/dist/domain/schemas/rule-schema.js +0 -10
  444. package/dist/domain/schemas/rule-schema.js.map +0 -1
  445. package/dist/domain/schemas/thread-schema.d.ts +0 -77
  446. package/dist/domain/schemas/thread-schema.d.ts.map +0 -1
  447. package/dist/domain/schemas/thread-schema.js +0 -10
  448. package/dist/domain/schemas/thread-schema.js.map +0 -1
  449. package/templates/base/playbooks/wolf-review-lenses.md +0 -50
@@ -1,4 +1,5 @@
1
1
  import { z } from 'zod';
2
+ import { type RunLogEntry } from '../../domain/tool-economy.js';
2
3
  export type SignalEventName = 'run' | 'complaint' | 'delivery' | 'tool_error' | 'task_evaluated' | 'mcp_call' | 'memory_stage' | 'coord_event';
3
4
  /**
4
5
  * Схема сигнального лога (P0 D6): чтение лога валидируется Zod, неизвестные поля
@@ -8,8 +9,8 @@ export declare const SignalEventSchema: z.ZodObject<{
8
9
  ts: z.ZodString;
9
10
  event: z.ZodEnum<{
10
11
  complaint: "complaint";
11
- delivery: "delivery";
12
12
  run: "run";
13
+ delivery: "delivery";
13
14
  tool_error: "tool_error";
14
15
  task_evaluated: "task_evaluated";
15
16
  mcp_call: "mcp_call";
@@ -62,20 +63,9 @@ export declare const SignalEventSchema: z.ZodObject<{
62
63
  detail: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
63
64
  }, z.core.$strip>;
64
65
  export type SignalEvent = z.infer<typeof SignalEventSchema>;
65
- export interface PatternRecord {
66
- ts: string;
67
- event: 'pattern';
68
- /** Ключ кластера Ф21. */
69
- key: string;
70
- count: number;
71
- threshold: number;
72
- }
73
66
  /** Порог паттерна N≥3 — дефолт спеки §2.2/§16; параметр процесса (config.yaml). */
74
67
  export declare const DEFAULT_PATTERN_THRESHOLD = 3;
75
68
  export declare function metricsLogPath(baseDir: string): string;
76
- export declare function patternsLogPath(baseDir: string): string;
77
- /** Эффективный порог: learning.pattern_threshold из .wolf/config.yaml, иначе дефолт. */
78
- export declare function patternThreshold(baseDir: string): number;
79
69
  /**
80
70
  * Ключ кластеризации Ф21 (детерминированный, O(n)-группировка):
81
71
  * tool_error → `tool_name:error_class_id`; complaint/delivery → `тип:цель`;
@@ -94,70 +84,16 @@ export interface SignalLogStats {
94
84
  export declare function readSignalLog(baseDir: string): SignalLogStats;
95
85
  /** Все сигналы лога (порядок записи); отсутствующий/битый лог → максимально читаемое. */
96
86
  export declare function readSignals(baseDir: string): SignalEvent[];
97
- /**
98
- * P104 (A1): мемо один раз на процесс — readPatterns не перечитывает patterns.jsonl
99
- * на каждой keyed-записи. appendSignal обновляет мемо при фиксации, читатели этого
100
- * же процесса видят свежие данные.
101
- */
102
- export declare function readPatterns(baseDir: string): PatternRecord[];
103
87
  /** P104 (A1): сайдкар счётчиков Ф21 — derived-файл, отсутствующий/битый = rebuild-scan. */
104
88
  export declare function signalCountsPath(baseDir: string): string;
105
89
  /**
106
- * Append сигнала + событийный триггер Ф21: в момент записи, перевалившей порог,
107
- * паттерн фиксируется в patterns.jsonl (один раз на ключ — повторных фиксаций нет).
108
- * НЕ календарный (спека §7: event-driven пороги вместо расписания). Порог —
109
- * настраиваемый параметр (§2.2): при снижении порога уже накопленный кластер
110
- * фиксируется на следующей же записи, не ждёт нового пересечения.
111
- *
112
- * P104 (A1): keyed-счётчики — инкремент сайдкара signal-counts.json вместо O(n)-пересчёта
113
- * лога на каждой записи; вся секция под sync-локом metrics-каталога. Счётчик монотонный
114
- * по построению (считаем события, а не окна) — кластер, пересёкший порог в прошлом,
115
- * не фиксируется повторно.
90
+ * Append сигнала + keyed-счётчик Ф21.
91
+ * P104 (A1): инкремент сайдкара signal-counts.json вместо O(n)-пересчёта
92
+ * лога на каждой записи; вся секция под sync-локом metrics-каталога.
116
93
  */
117
94
  export declare function appendSignal(baseDir: string, ev: SignalEvent): {
118
95
  key: string | null;
119
96
  count: number;
120
- patternFixed: boolean;
121
- };
122
- /**
123
- * Writer (а): `wolf run` — метрики сессии (модель из routing, weighted, outcome; M1: duration/tokens/experiment).
124
- * P1 D3: writer перешёл на v2 — schema_version: 2 всегда, identity-поля опциональны.
125
- */
126
- export declare function appendRunSignal(baseDir: string, input: {
127
- model: string;
128
- agent: string;
129
- title: string;
130
- session: string | null;
131
- weighted: number;
132
- outcome: string;
133
- actor: string;
134
- task?: string;
135
- durationMs?: number;
136
- tokens?: {
137
- input: number;
138
- output: number;
139
- cache_read: number;
140
- };
141
- experiment?: {
142
- id: string;
143
- arm: 'wolf' | 'baseline';
144
- taskId?: string;
145
- };
146
- /** P1 D3: identity-поля v2 (event_id/run_id/trace_id/attempt/task_id/config_hash/prompt_hash/tools). */
147
- eventId?: string;
148
- runId?: string;
149
- traceId?: string;
150
- attempt?: number;
151
- taskId?: string;
152
- /** P3 D1: id кампании (топ-левел campaign_id run-сигнала). */
153
- campaignId?: string;
154
- configHash?: string;
155
- promptHash?: string;
156
- tools?: string[];
157
- }): {
158
- key: string | null;
159
- count: number;
160
- patternFixed: boolean;
161
97
  };
162
98
  /** Writer (б): `wolf complain` — сигнал жалобы (hot-signal Стюарда). */
163
99
  export declare function appendComplaintSignal(baseDir: string, input: {
@@ -168,7 +104,6 @@ export declare function appendComplaintSignal(baseDir: string, input: {
168
104
  }): {
169
105
  key: string | null;
170
106
  count: number;
171
- patternFixed: boolean;
172
107
  };
173
108
  /** Writer (в): delivery_event — факт доставки методики/инструмента (scaffold / tool expose;
174
109
  * Ф22 — активация draft: доставка через wolf call / trigger_keywords). */
@@ -185,7 +120,6 @@ export declare function appendDeliverySignal(baseDir: string, input: {
185
120
  }): {
186
121
  key: string | null;
187
122
  count: number;
188
- patternFixed: boolean;
189
123
  };
190
124
  /** Волна 0 0.1: args_summary для add (MCP и CLI каналы) — type≤40, title≤80, ключи
191
125
  * extra; body в телеметрию никогда не попадает. */
@@ -197,7 +131,7 @@ export declare function addArgsSummary(input: {
197
131
  /**
198
132
  * Writer (з): mcp_call — вызов инструмента/команды через MCP или CLI-обёртку
199
133
  * (волна 0 0.1). Контекст-событие: signalKey → null, пороги Ф21 не считаются.
200
- * При input.error — classifyError (проектная таксономия, как в recordToolError)
134
+ * При input.error — classifyError (проектная таксономия из config.yaml)
201
135
  * → detail.error_class_id + detail.error.{message ≤200, code}. Конфиг читается
202
136
  * только в error-ветке (P104: sync-yaml-parse убран с горячего пути).
203
137
  */
@@ -216,24 +150,6 @@ export declare function appendMcpCallSignal(baseDir: string, input: {
216
150
  code?: string;
217
151
  };
218
152
  }): void;
219
- /**
220
- * Writer (г): ошибка тула — через классификатор D1.2 (проектная таксономия из
221
- * config.yaml матчится раньше дефолтной таблицы).
222
- */
223
- export declare function recordToolError(baseDir: string, input: {
224
- tool_name: string;
225
- message: string;
226
- code?: string;
227
- session_id?: string | null;
228
- task?: string | null;
229
- agent?: string | null;
230
- actor?: string;
231
- }): {
232
- error_class_id: string;
233
- key: string;
234
- count: number;
235
- patternFixed: boolean;
236
- };
237
153
  /**
238
154
  * Writer (д): task_evaluated (P0 D2) — вердикт по задаче от скорера. Контекст-событие:
239
155
  * signalKey → null (как run), пороги Ф21 не считаются. Дефолт scorer='human'
@@ -253,7 +169,6 @@ export declare function appendTaskEvaluatedSignal(baseDir: string, input: {
253
169
  }): {
254
170
  key: string | null;
255
171
  count: number;
256
- patternFixed: boolean;
257
172
  };
258
173
  /** Detail memory_stage: стадия жизненного цикла памяти + затронутые объекты. */
259
174
  export declare const MemoryStageDetailSchema: z.ZodObject<{
@@ -265,20 +180,6 @@ export declare const MemoryStageDetailSchema: z.ZodObject<{
265
180
  }>;
266
181
  memory_ids: z.ZodArray<z.ZodString>;
267
182
  }, z.core.$strip>;
268
- /** Detail coord_event: факт координации между агентами (handoff/review/...). */
269
- export declare const CoordEventDetailSchema: z.ZodObject<{
270
- kind: z.ZodEnum<{
271
- blocker: "blocker";
272
- escalation: "escalation";
273
- handoff: "handoff";
274
- review: "review";
275
- acceptance: "acceptance";
276
- }>;
277
- actor_from: z.ZodString;
278
- actor_to: z.ZodOptional<z.ZodString>;
279
- refs: z.ZodArray<z.ZodString>;
280
- note: z.ZodOptional<z.ZodString>;
281
- }, z.core.$strip>;
282
183
  /**
283
184
  * Writer (е): memory_stage (P2 D1) — стадия жизненного цикла памяти. Контекст-событие:
284
185
  * signalKey → null (как run/task_evaluated), пороги Ф21 не считаются. Detail
@@ -292,22 +193,35 @@ export declare function appendMemoryStageSignal(baseDir: string, input: {
292
193
  }): {
293
194
  key: string | null;
294
195
  count: number;
295
- patternFixed: boolean;
296
196
  };
297
197
  /**
298
- * Writer (ж): coord_event (P2 D3) — факт координации агентов (handoff, review,
299
- * acceptance, blocker, escalation). Контекст-событие: signalKey → null.
198
+ * P1 D4: канонический источник run-метрик — сигнальный лог; исторический
199
+ * .wolf/run-log.jsonl (deprecated) мержится на переходный период.
200
+ * Правило мержа: простая конкатенация [сигнальные run-entries, legacy run-log entries]
201
+ * без dedup: в переходном окне каждый run существует в обоих источниках, дублирование
202
+ * симметрично → медианы инвариантны; счётчики (toolRuns/totalRuns) могут завышаться
203
+ * до выхода из переходного периода (задокументировано в RISKS отчёта P1).
300
204
  */
301
- export declare function appendCoordEventSignal(baseDir: string, input: {
302
- kind: 'handoff' | 'review' | 'acceptance' | 'blocker' | 'escalation';
303
- actorFrom: string;
304
- actorTo?: string;
305
- refs: string[];
306
- note?: string;
307
- actor: string;
308
- }): {
309
- key: string | null;
205
+ /** run-сигналы → канонические run-entries (tools из v2-поля tools). */
206
+ export declare function runEntriesFromSignals(signals: SignalEvent[]): RunLogEntry[];
207
+ /** Переходный мерж: сигнальный источник + исторический run-log (если файл существует). */
208
+ export declare function mergeRunEntries(signals: SignalEvent[], runLogText: string | null): RunLogEntry[];
209
+ /** Окно молчания правила для rule_utilization-дрейфа [ВА] (§16). */
210
+ export declare const SILENT_RULE_WINDOW_SESSIONS = 30;
211
+ /** Минимум delivery-событий в логе, чтобы судить об утилизации правил [ВА] (§16). */
212
+ export declare const SILENT_RULE_MIN_DELIVERIES = 20;
213
+ /**
214
+ * Пробег = упорядоченные уникальные session_id из run-событий
215
+ * (порядок первого появления в логе = хронология).
216
+ */
217
+ export declare function countSessions(signals: SignalEvent[]): string[];
218
+ /** Молчащее правило: доставки были, но нет ни одной за последние 30 сессий
219
+ * (при ≥20 delivery-событий в логе). ponytail: [ВА]-порог rule_utilization
220
+ * <0.5 от baseline упрощён продукт-минимумом до «ноль доставок в окне» —
221
+ * честный апгрейд: baseline-утилизация по delivery-stats (S20-09).
222
+ * Экспортирована для effectiveness-панели (E1.2). */
223
+ export declare function silentRuleIds(signals: SignalEvent[]): {
224
+ ids: Set<string>;
310
225
  count: number;
311
- patternFixed: boolean;
312
226
  };
313
227
  //# sourceMappingURL=session-metrics-log.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-metrics-log.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/session-metrics-log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-metrics-log.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/session-metrics-log.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,8 @@
6
6
  * Документация формата: docs/guide/signal-log.md. Спека:
7
7
  * docs/superpowers/specs/2026-08-26-self-learning-design.md §2.1, §2.2.
8
8
  *
9
- * Writer-матрица D1 (M20-07, решение Q3): writer'ы — сами CLI-команды (run, complain,
10
- * scaffold, tool expose, recordToolError); `wolf metrics emit` не вводится.
9
+ * Writer-матрица D1 (M20-07, решение Q3): writer'ы — сами CLI-команды (complain,
10
+ * scaffold, tool expose); `wolf metrics emit` не вводится.
11
11
  *
12
12
  * P1 D1: identity-поля v2 (event_id, schema_version, run_id, trace_id, parent_span_id,
13
13
  * role_level, attempt, task_id, config_hash, prompt_hash, tools) — все опциональные,
@@ -22,6 +22,7 @@ import { metricsDir } from './project-paths.js';
22
22
  import { LOCK_TIMING } from './memory-lock.js';
23
23
  import { classifyError } from '../../domain/error-class.js';
24
24
  import { loadWolfConfigSync } from './config-file.js';
25
+ import { parseRunLog } from '../../domain/tool-economy.js';
25
26
  /**
26
27
  * Схема сигнального лога (P0 D6): чтение лога валидируется Zod, неизвестные поля
27
28
  * отбрасываются (strip — дефолт zod-object). Тип SignalEvent выводится из схемы.
@@ -92,19 +93,6 @@ export const DEFAULT_PATTERN_THRESHOLD = 3;
92
93
  export function metricsLogPath(baseDir) {
93
94
  return join(metricsDir(baseDir), 'session-metrics.jsonl');
94
95
  }
95
- export function patternsLogPath(baseDir) {
96
- return join(metricsDir(baseDir), 'patterns.jsonl');
97
- }
98
- /** Эффективный порог: learning.pattern_threshold из .wolf/config.yaml, иначе дефолт. */
99
- export function patternThreshold(baseDir) {
100
- try {
101
- const t = loadWolfConfigSync(baseDir)?.learning?.patternThreshold;
102
- return typeof t === 'number' && Number.isInteger(t) && t >= 1 ? t : DEFAULT_PATTERN_THRESHOLD;
103
- }
104
- catch {
105
- return DEFAULT_PATTERN_THRESHOLD;
106
- }
107
- }
108
96
  /**
109
97
  * Ключ кластеризации Ф21 (детерминированный, O(n)-группировка):
110
98
  * tool_error → `tool_name:error_class_id`; complaint/delivery → `тип:цель`;
@@ -120,8 +108,8 @@ export function signalKey(ev) {
120
108
  return null;
121
109
  }
122
110
  /**
123
- * Мягкое чтение jsonl: без схемы — только JSON.parse (patterns.jsonl), со схемой —
124
- * Zod-валидация каждой строки (session-metrics.jsonl). Малформ-строки (не-JSON или
111
+ * Мягкое чтение jsonl: со схемой — Zod-валидация каждой строки
112
+ * (session-metrics.jsonl). Малформ-строки (не-JSON или
125
113
  * не прошедшие схему) считаются и пропускаются: лог append-only, битая строка
126
114
  * не должна ронять контур.
127
115
  */
@@ -170,21 +158,6 @@ export function readSignalLog(baseDir) {
170
158
  export function readSignals(baseDir) {
171
159
  return readSignalLog(baseDir).events;
172
160
  }
173
- /** Зафиксированные паттерны (события пересечения порога). */
174
- const patternsMemo = new Map();
175
- /**
176
- * P104 (A1): мемо один раз на процесс — readPatterns не перечитывает patterns.jsonl
177
- * на каждой keyed-записи. appendSignal обновляет мемо при фиксации, читатели этого
178
- * же процесса видят свежие данные.
179
- */
180
- export function readPatterns(baseDir) {
181
- let memo = patternsMemo.get(baseDir);
182
- if (memo === undefined) {
183
- memo = readJsonl(patternsLogPath(baseDir)).items;
184
- patternsMemo.set(baseDir, memo);
185
- }
186
- return memo;
187
- }
188
161
  /** P104 (A1): сайдкар счётчиков Ф21 — derived-файл, отсутствующий/битый = rebuild-scan. */
189
162
  export function signalCountsPath(baseDir) {
190
163
  return join(metricsDir(baseDir), 'signal-counts.json');
@@ -280,23 +253,16 @@ function withSyncMemoryLock(dir, fn) {
280
253
  }
281
254
  }
282
255
  /**
283
- * Append сигнала + событийный триггер Ф21: в момент записи, перевалившей порог,
284
- * паттерн фиксируется в patterns.jsonl (один раз на ключ — повторных фиксаций нет).
285
- * НЕ календарный (спека §7: event-driven пороги вместо расписания). Порог —
286
- * настраиваемый параметр (§2.2): при снижении порога уже накопленный кластер
287
- * фиксируется на следующей же записи, не ждёт нового пересечения.
288
- *
289
- * P104 (A1): keyed-счётчики — инкремент сайдкара signal-counts.json вместо O(n)-пересчёта
290
- * лога на каждой записи; вся секция под sync-локом metrics-каталога. Счётчик монотонный
291
- * по построению (считаем события, а не окна) — кластер, пересёкший порог в прошлом,
292
- * не фиксируется повторно.
256
+ * Append сигнала + keyed-счётчик Ф21.
257
+ * P104 (A1): инкремент сайдкара signal-counts.json вместо O(n)-пересчёта
258
+ * лога на каждой записи; вся секция под sync-локом metrics-каталога.
293
259
  */
294
260
  export function appendSignal(baseDir, ev) {
295
261
  mkdirSync(metricsDir(baseDir), { recursive: true });
296
262
  const key = signalKey(ev);
297
263
  if (key === null) {
298
264
  appendFileSync(metricsLogPath(baseDir), JSON.stringify(ev) + '\n');
299
- return { key: null, count: 0, patternFixed: false };
265
+ return { key: null, count: 0 };
300
266
  }
301
267
  // ponytail: crash между append строки и перезаписью сайдкара даёт недосчёт до
302
268
  // следующего rebuild-scan (сайдкар остаётся валидным JSON) — приемлемо для
@@ -306,58 +272,13 @@ export function appendSignal(baseDir, ev) {
306
272
  appendFileSync(metricsLogPath(baseDir), JSON.stringify(ev) + '\n');
307
273
  const count = (counts.get(key) ?? 0) + 1;
308
274
  counts.set(key, count);
309
- const threshold = patternThreshold(baseDir);
310
- const alreadyFixed = readPatterns(baseDir).some((p) => p.key === key);
311
- const patternFixed = count >= threshold && !alreadyFixed;
312
- if (patternFixed) {
313
- const record = { ts: ev.ts, event: 'pattern', key, count, threshold };
314
- appendFileSync(patternsLogPath(baseDir), JSON.stringify(record) + '\n');
315
- patternsMemo.get(baseDir)?.push(record);
316
- }
317
275
  writeSignalCountsAtomic(baseDir, counts);
318
- return { key, count, patternFixed };
276
+ return { key, count };
319
277
  });
320
278
  }
321
279
  function nowIso() {
322
280
  return new Date().toISOString();
323
281
  }
324
- /**
325
- * Writer (а): `wolf run` — метрики сессии (модель из routing, weighted, outcome; M1: duration/tokens/experiment).
326
- * P1 D3: writer перешёл на v2 — schema_version: 2 всегда, identity-поля опциональны.
327
- */
328
- export function appendRunSignal(baseDir, input) {
329
- return appendSignal(baseDir, {
330
- ts: nowIso(),
331
- event: 'run',
332
- schema_version: 2,
333
- session_id: input.session,
334
- gen_ai: { modelID: input.model, agent: input.agent },
335
- orchestration: { task: input.title, actor: input.actor },
336
- weighted: input.weighted,
337
- outcome: input.outcome,
338
- ...(input.eventId !== undefined ? { event_id: input.eventId } : {}),
339
- ...(input.runId !== undefined ? { run_id: input.runId } : {}),
340
- ...(input.traceId !== undefined ? { trace_id: input.traceId } : {}),
341
- ...(input.attempt !== undefined ? { attempt: input.attempt } : {}),
342
- ...(input.taskId !== undefined ? { task_id: input.taskId } : {}),
343
- ...(input.campaignId !== undefined ? { campaign_id: input.campaignId } : {}),
344
- ...(input.configHash !== undefined ? { config_hash: input.configHash } : {}),
345
- ...(input.promptHash !== undefined ? { prompt_hash: input.promptHash } : {}),
346
- ...(input.tools !== undefined ? { tools: input.tools } : {}),
347
- ...(input.task !== undefined ? { detail: { task: input.task } } : {}),
348
- ...(input.durationMs !== undefined ? { duration_ms: input.durationMs } : {}),
349
- ...(input.tokens !== undefined ? { tokens: input.tokens } : {}),
350
- ...(input.experiment !== undefined
351
- ? {
352
- experiment: {
353
- id: input.experiment.id,
354
- arm: input.experiment.arm,
355
- ...(input.experiment.taskId !== undefined ? { task_id: input.experiment.taskId } : {}),
356
- },
357
- }
358
- : {}),
359
- });
360
- }
361
282
  /** Writer (б): `wolf complain` — сигнал жалобы (hot-signal Стюарда). */
362
283
  export function appendComplaintSignal(baseDir, input) {
363
284
  return appendSignal(baseDir, {
@@ -415,7 +336,7 @@ function projectErrorRules(baseDir) {
415
336
  /**
416
337
  * Writer (з): mcp_call — вызов инструмента/команды через MCP или CLI-обёртку
417
338
  * (волна 0 0.1). Контекст-событие: signalKey → null, пороги Ф21 не считаются.
418
- * При input.error — classifyError (проектная таксономия, как в recordToolError)
339
+ * При input.error — classifyError (проектная таксономия из config.yaml)
419
340
  * → detail.error_class_id + detail.error.{message ≤200, code}. Конфиг читается
420
341
  * только в error-ветке (P104: sync-yaml-parse убран с горячего пути).
421
342
  */
@@ -443,30 +364,6 @@ export function appendMcpCallSignal(baseDir, input) {
443
364
  },
444
365
  });
445
366
  }
446
- /**
447
- * Writer (г): ошибка тула — через классификатор D1.2 (проектная таксономия из
448
- * config.yaml матчится раньше дефолтной таблицы).
449
- */
450
- export function recordToolError(baseDir, input) {
451
- const error_class_id = classifyError({ message: input.message, code: input.code }, projectErrorRules(baseDir));
452
- const result = appendSignal(baseDir, {
453
- ts: nowIso(),
454
- event: 'tool_error',
455
- session_id: input.session_id ?? null,
456
- gen_ai: { modelID: null, agent: input.agent ?? null },
457
- orchestration: { task: input.task ?? null, actor: input.actor ?? 'user:cli' },
458
- outcome: 'error',
459
- tool_name: input.tool_name,
460
- error_class_id,
461
- detail: { message: input.message, ...(input.code ? { code: input.code } : {}) },
462
- });
463
- return {
464
- error_class_id,
465
- key: result.key ?? `${input.tool_name}:${error_class_id}`,
466
- count: result.count,
467
- patternFixed: result.patternFixed,
468
- };
469
- }
470
367
  /**
471
368
  * Writer (д): task_evaluated (P0 D2) — вердикт по задаче от скорера. Контекст-событие:
472
369
  * signalKey → null (как run), пороги Ф21 не считаются. Дефолт scorer='human'
@@ -492,20 +389,12 @@ export function appendTaskEvaluatedSignal(baseDir, input) {
492
389
  },
493
390
  });
494
391
  }
495
- // --- P2 D1: memory lifecycle + координационные события ---
392
+ // --- P2 D1: memory lifecycle события ---
496
393
  /** Detail memory_stage: стадия жизненного цикла памяти + затронутые объекты. */
497
394
  export const MemoryStageDetailSchema = z.object({
498
395
  stage: z.enum(['retrieved', 'injected', 'cited', 'applied']),
499
396
  memory_ids: z.array(z.string()).min(1),
500
397
  });
501
- /** Detail coord_event: факт координации между агентами (handoff/review/...). */
502
- export const CoordEventDetailSchema = z.object({
503
- kind: z.enum(['handoff', 'review', 'acceptance', 'blocker', 'escalation']),
504
- actor_from: z.string(),
505
- actor_to: z.string().optional(),
506
- refs: z.array(z.string()),
507
- note: z.string().optional(),
508
- });
509
398
  /**
510
399
  * Writer (е): memory_stage (P2 D1) — стадия жизненного цикла памяти. Контекст-событие:
511
400
  * signalKey → null (как run/task_evaluated), пороги Ф21 не считаются. Detail
@@ -523,26 +412,102 @@ export function appendMemoryStageSignal(baseDir, input) {
523
412
  detail,
524
413
  });
525
414
  }
415
+ // --- run-entries: аналитика исторических run-сигналов ---
526
416
  /**
527
- * Writer (ж): coord_event (P2 D3) — факт координации агентов (handoff, review,
528
- * acceptance, blocker, escalation). Контекст-событие: signalKey → null.
417
+ * P1 D4: канонический источник run-метрик — сигнальный лог; исторический
418
+ * .wolf/run-log.jsonl (deprecated) мержится на переходный период.
419
+ * Правило мержа: простая конкатенация [сигнальные run-entries, legacy run-log entries]
420
+ * без dedup: в переходном окне каждый run существует в обоих источниках, дублирование
421
+ * симметрично → медианы инвариантны; счётчики (toolRuns/totalRuns) могут завышаться
422
+ * до выхода из переходного периода (задокументировано в RISKS отчёта P1).
529
423
  */
530
- export function appendCoordEventSignal(baseDir, input) {
531
- const detail = CoordEventDetailSchema.parse({
532
- kind: input.kind,
533
- actor_from: input.actorFrom,
534
- ...(input.actorTo !== undefined ? { actor_to: input.actorTo } : {}),
535
- refs: input.refs,
536
- ...(input.note !== undefined ? { note: input.note } : {}),
537
- });
538
- return appendSignal(baseDir, {
539
- ts: nowIso(),
540
- event: 'coord_event',
541
- session_id: null,
542
- gen_ai: { modelID: null, agent: null },
543
- orchestration: { task: null, actor: input.actor },
544
- outcome: input.kind,
545
- detail,
424
+ /** run-сигналы → канонические run-entries (tools из v2-поля tools). */
425
+ export function runEntriesFromSignals(signals) {
426
+ return signals.flatMap((s) => {
427
+ if (s.event !== 'run')
428
+ return [];
429
+ return [
430
+ {
431
+ ts: s.ts,
432
+ model: s.gen_ai.modelID ?? undefined,
433
+ agent: s.gen_ai.agent ?? undefined,
434
+ title: s.orchestration.task ?? undefined,
435
+ session: s.session_id ?? undefined,
436
+ weighted: s.weighted,
437
+ tools: s.tools,
438
+ duration_ms: s.duration_ms,
439
+ tokens: s.tokens,
440
+ },
441
+ ];
546
442
  });
547
443
  }
444
+ /** Переходный мерж: сигнальный источник + исторический run-log (если файл существует). */
445
+ export function mergeRunEntries(signals, runLogText) {
446
+ return [...runEntriesFromSignals(signals), ...parseRunLog(runLogText ?? '')];
447
+ }
448
+ // --- silent-rules: аналитика доставки ---
449
+ /** Окно молчания правила для rule_utilization-дрейфа [ВА] (§16). */
450
+ export const SILENT_RULE_WINDOW_SESSIONS = 30;
451
+ /** Минимум delivery-событий в логе, чтобы судить об утилизации правил [ВА] (§16). */
452
+ export const SILENT_RULE_MIN_DELIVERIES = 20;
453
+ /**
454
+ * Пробег = упорядоченные уникальные session_id из run-событий
455
+ * (порядок первого появления в логе = хронология).
456
+ */
457
+ export function countSessions(signals) {
458
+ const seen = new Set();
459
+ const out = [];
460
+ for (const ev of signals) {
461
+ if (ev.event !== 'run' || ev.session_id === null)
462
+ continue;
463
+ if (!seen.has(ev.session_id)) {
464
+ seen.add(ev.session_id);
465
+ out.push(ev.session_id);
466
+ }
467
+ }
468
+ return out;
469
+ }
470
+ /** ts первого run-события каждой сессии (точка отсчёта «сессия началась»). */
471
+ function sessionFirstRunTs(signals) {
472
+ const first = new Map();
473
+ for (const ev of signals) {
474
+ if (ev.event !== 'run' || ev.session_id === null)
475
+ continue;
476
+ if (!first.has(ev.session_id))
477
+ first.set(ev.session_id, ev.ts);
478
+ }
479
+ return first;
480
+ }
481
+ /** Молчащее правило: доставки были, но нет ни одной за последние 30 сессий
482
+ * (при ≥20 delivery-событий в логе). ponytail: [ВА]-порог rule_utilization
483
+ * <0.5 от baseline упрощён продукт-минимумом до «ноль доставок в окне» —
484
+ * честный апгрейд: baseline-утилизация по delivery-stats (S20-09).
485
+ * Экспортирована для effectiveness-панели (E1.2). */
486
+ export function silentRuleIds(signals) {
487
+ const deliveries = signals.filter((s) => s.event === 'delivery');
488
+ if (deliveries.length < SILENT_RULE_MIN_DELIVERIES)
489
+ return { ids: new Set(), count: 0 };
490
+ const sessions = countSessions(signals);
491
+ if (sessions.length <= SILENT_RULE_WINDOW_SESSIONS)
492
+ return { ids: new Set(), count: 0 };
493
+ // граница окна: первый run сессии, открывающей последние 30
494
+ const firstRun = sessionFirstRunTs(signals);
495
+ const boundarySession = sessions[sessions.length - SILENT_RULE_WINDOW_SESSIONS];
496
+ const boundaryTs = firstRun.get(boundarySession);
497
+ const lastByObject = new Map();
498
+ for (const ev of deliveries) {
499
+ const name = ev.detail?.name;
500
+ if (typeof name !== 'string')
501
+ continue;
502
+ const cur = lastByObject.get(name);
503
+ if (cur === undefined || ev.ts > cur)
504
+ lastByObject.set(name, ev.ts);
505
+ }
506
+ const ids = new Set();
507
+ for (const [name, ts] of lastByObject) {
508
+ if (ts < boundaryTs)
509
+ ids.add(name);
510
+ }
511
+ return { ids, count: ids.size };
512
+ }
548
513
  //# sourceMappingURL=session-metrics-log.js.map