mister-wolf 2.11.0 → 2.12.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 (63) hide show
  1. package/dist/adapters/cli/cli-entry.d.ts.map +1 -1
  2. package/dist/adapters/cli/cli-entry.js +337 -94
  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 +30 -1
  7. package/dist/adapters/cli/commands/analytics.js.map +1 -1
  8. package/dist/adapters/cli/commands/memory-brief.d.ts.map +1 -1
  9. package/dist/adapters/cli/commands/memory-brief.js +13 -3
  10. package/dist/adapters/cli/commands/memory-brief.js.map +1 -1
  11. package/dist/adapters/cli/commands/memory-call.d.ts.map +1 -1
  12. package/dist/adapters/cli/commands/memory-call.js +54 -3
  13. package/dist/adapters/cli/commands/memory-call.js.map +1 -1
  14. package/dist/adapters/cli/commands/memory-recap.d.ts.map +1 -1
  15. package/dist/adapters/cli/commands/memory-recap.js +16 -1
  16. package/dist/adapters/cli/commands/memory-recap.js.map +1 -1
  17. package/dist/adapters/fs/config-file.d.ts +8 -0
  18. package/dist/adapters/fs/config-file.d.ts.map +1 -1
  19. package/dist/adapters/fs/config-file.js +57 -2
  20. package/dist/adapters/fs/config-file.js.map +1 -1
  21. package/dist/adapters/fs/scan-snapshot-cache.d.ts +23 -0
  22. package/dist/adapters/fs/scan-snapshot-cache.d.ts.map +1 -0
  23. package/dist/adapters/fs/scan-snapshot-cache.js +36 -0
  24. package/dist/adapters/fs/scan-snapshot-cache.js.map +1 -0
  25. package/dist/adapters/fs/session-delivery-registry.d.ts +31 -0
  26. package/dist/adapters/fs/session-delivery-registry.d.ts.map +1 -0
  27. package/dist/adapters/fs/session-delivery-registry.js +104 -0
  28. package/dist/adapters/fs/session-delivery-registry.js.map +1 -0
  29. package/dist/adapters/fs/session-metrics-log.d.ts +15 -3
  30. package/dist/adapters/fs/session-metrics-log.d.ts.map +1 -1
  31. package/dist/adapters/fs/session-metrics-log.js +150 -29
  32. package/dist/adapters/fs/session-metrics-log.js.map +1 -1
  33. package/dist/adapters/mcp/mcp-schemas.d.ts +1 -1
  34. package/dist/adapters/mcp/mcp-tools.d.ts.map +1 -1
  35. package/dist/adapters/mcp/mcp-tools.js +5 -3
  36. package/dist/adapters/mcp/mcp-tools.js.map +1 -1
  37. package/dist/adapters/sqlite/sqlite-search-index.d.ts +6 -1
  38. package/dist/adapters/sqlite/sqlite-search-index.d.ts.map +1 -1
  39. package/dist/adapters/sqlite/sqlite-search-index.js +47 -25
  40. package/dist/adapters/sqlite/sqlite-search-index.js.map +1 -1
  41. package/dist/app/use-cases/build-analytics.d.ts +64 -1
  42. package/dist/app/use-cases/build-analytics.d.ts.map +1 -1
  43. package/dist/app/use-cases/build-analytics.js +157 -0
  44. package/dist/app/use-cases/build-analytics.js.map +1 -1
  45. package/dist/app/use-cases/generate-recap.d.ts +14 -0
  46. package/dist/app/use-cases/generate-recap.d.ts.map +1 -1
  47. package/dist/app/use-cases/generate-recap.js +37 -0
  48. package/dist/app/use-cases/generate-recap.js.map +1 -1
  49. package/dist/app/use-cases/get-call-injections.d.ts +6 -0
  50. package/dist/app/use-cases/get-call-injections.d.ts.map +1 -1
  51. package/dist/app/use-cases/get-call-injections.js +26 -8
  52. package/dist/app/use-cases/get-call-injections.js.map +1 -1
  53. package/dist/app/use-cases/scan-project.d.ts +26 -1
  54. package/dist/app/use-cases/scan-project.d.ts.map +1 -1
  55. package/dist/app/use-cases/scan-project.js +80 -49
  56. package/dist/app/use-cases/scan-project.js.map +1 -1
  57. package/dist/domain/router-log.d.ts +8 -2
  58. package/dist/domain/router-log.d.ts.map +1 -1
  59. package/dist/domain/router-log.js +14 -2
  60. package/dist/domain/router-log.js.map +1 -1
  61. package/dist/domain/schemas/relation-schema.d.ts +1 -1
  62. package/package.json +1 -1
  63. package/templates/opencode/plugins/wolf-router.ts +80 -42
@@ -1 +1 @@
1
- {"version":3,"file":"cli-entry.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/cli-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqDpC,wBAAgB,SAAS,IAAI,OAAO,CAmDnC;AAED;;;;GAIG;AACH,wBAAgB,OAAO,IAAI,MAAM,CAQhC;AAED,mFAAmF;AACnF,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB1D"}
1
+ {"version":3,"file":"cli-entry.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/cli-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2SpC,wBAAgB,SAAS,IAAI,OAAO,CA4DnC;AAED;;;;GAIG;AACH,wBAAgB,OAAO,IAAI,MAAM,CAQhC;AAED,mFAAmF;AACnF,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B1D"}
@@ -1,100 +1,335 @@
1
1
  import { Command } from 'commander';
2
- import { ensureCurrentSchema } from '../../adapters/fs/schema-guard.js';
3
2
  import { getWolfVersion } from '../version.js';
4
- import { memoryInitCommand as initCommand } from './commands/memory-init.js';
5
- import { memorySyncCommand as syncCommand } from './commands/memory-sync.js';
6
- import { memoryDoctorCommand as doctorCommand } from './commands/memory-doctor.js';
7
- import { memoryAddCommand as addCommand } from './commands/memory-add.js';
8
- import { memoryListCommand as listCommand } from './commands/memory-list.js';
9
- import { memoryGetCommand as getCommand } from './commands/memory-get.js';
10
- import { memorySearchCommand as searchCommand } from './commands/memory-search.js';
11
- import { memoryRebuildIndexCommand as rebuildIndexCommand } from './commands/memory-rebuild-index.js';
12
- import { memorySupersedeCommand as supersedeCommand } from './commands/memory-supersede.js';
13
- import { memoryTransitionCommand as transitionCommand } from './commands/memory-transition.js';
14
- import { memoryScanCommand as scanCommand } from './commands/memory-scan.js';
15
- import { memoryBriefCommand as briefCommand } from './commands/memory-brief.js';
16
- import { memoryThreadCommand as threadCommand } from './commands/memory-thread.js';
17
- import { memoryInfoRequestCommand as infoRequestCommand } from './commands/memory-info-request.js';
18
- import { memoryArticleCommand as articleCommand } from './commands/memory-article.js';
19
- import { memoryDecisionCommand as decisionCommand } from './commands/memory-decision.js';
20
- import { memoryBlockerCommand as blockerCommand } from './commands/memory-blocker.js';
21
- import { memorySessionCommand as sessionCommand, memoryThreadDiffCommand as threadDiffCommand, } from './commands/memory-session.js';
22
- import { memoryMcpCommand as mcpCommand } from './commands/memory-mcp.js';
23
- import { memoryRuleCommand as ruleCommand } from './commands/memory-rule.js';
24
- import { memoryRelationCommand as relationCommand } from './commands/memory-relation.js';
25
- import { memoryTaxonomyCommand as taxonomyCommand } from './commands/memory-taxonomy.js';
26
- import { memoryMigrateCommand as migrateCommand } from './commands/memory-migrate.js';
27
- import { memoryCouncilCommand as councilCommand } from './commands/memory-council.js';
28
- import { memoryValidateCommand as validateCommand } from './commands/memory-validate.js';
29
- import { memorySolveCommand as solveCommand } from './commands/memory-solve.js';
30
- import { memoryCallCommand as callCommand } from './commands/memory-call.js';
31
- import { memoryInsightsCommand as insightsCommand } from './commands/memory-insights.js';
32
- import { memoryRecapCommand as recapCommand } from './commands/memory-recap.js';
33
- import { memoryThinkCommand as thinkCommand } from './commands/memory-think.js';
34
- import { memoryScaffoldCommand as scaffoldCommand } from './commands/memory-scaffold.js';
35
- import { memoryToolCommand as toolCommand } from './commands/memory-tool.js';
36
- import { memoryComplainCommand as complainCommand } from './commands/memory-complain.js';
37
- import { memoryUpdateCommand as updateCommand } from './commands/memory-update.js';
38
- import { memoryLearnCommand as learnCommand } from './commands/memory-learn.js';
39
- import { memoryEffectivenessCommand as effectivenessCommand } from './commands/memory-effectiveness.js';
40
- import { analyticsCommand } from './commands/analytics.js';
41
- import { dashboardCommand } from './commands/dashboard.js';
42
- import { taskEvalCommand } from './commands/task-eval.js';
43
- import { memoryStageCommand } from './commands/memory-stage.js';
44
- import { coordCommand } from './commands/coord.js';
45
- import { memoryRunCommand as runCommand } from './commands/memory-run.js';
46
- import { memoryBootstrapCommand as bootstrapCommand } from './commands/memory-bootstrap.js';
47
- import { memoryUpgradeCommand as upgradeCommand } from './commands/memory-upgrade.js';
48
3
  import { UserFacingError } from '../../domain/errors.js';
49
4
  import { ensureCliSessionId } from '../../domain/actor.js';
5
+ /** Порядок = порядок бывших addCommand: влияет на `--help` и unknown-command suggestions. */
6
+ const COMMANDS = [
7
+ {
8
+ name: 'init',
9
+ description: 'Initialize Mr. Wolf memory for this project (interactive in TTY; non-interactive requires --model)',
10
+ usage: '[options]',
11
+ load: () => import('./commands/memory-init.js').then((m) => m.memoryInitCommand()),
12
+ },
13
+ {
14
+ name: 'sync',
15
+ description: 'Re-render the wolf base set (stamped files only; memory untouched)',
16
+ usage: '',
17
+ load: () => import('./commands/memory-sync.js').then((m) => m.memorySyncCommand()),
18
+ },
19
+ {
20
+ name: 'add',
21
+ description: 'Add a memory object',
22
+ usage: '[options]',
23
+ load: () => import('./commands/memory-add.js').then((m) => m.memoryAddCommand()),
24
+ },
25
+ {
26
+ name: 'list',
27
+ description: 'List memory objects',
28
+ usage: '[options]',
29
+ load: () => import('./commands/memory-list.js').then((m) => m.memoryListCommand()),
30
+ },
31
+ {
32
+ name: 'get',
33
+ description: 'Get a memory object by id',
34
+ usage: '[options] <id>',
35
+ load: () => import('./commands/memory-get.js').then((m) => m.memoryGetCommand()),
36
+ },
37
+ {
38
+ name: 'search',
39
+ description: 'Search memory objects',
40
+ usage: '[options] <query>',
41
+ load: () => import('./commands/memory-search.js').then((m) => m.memorySearchCommand()),
42
+ },
43
+ {
44
+ name: 'rebuild-index',
45
+ description: 'Rebuild the SQLite search index from memory objects',
46
+ usage: '',
47
+ load: () => import('./commands/memory-rebuild-index.js').then((m) => m.memoryRebuildIndexCommand()),
48
+ },
49
+ {
50
+ name: 'supersede',
51
+ description: 'Supersede a memory object with another',
52
+ usage: '<old-id> <new-id>',
53
+ load: () => import('./commands/memory-supersede.js').then((m) => m.memorySupersedeCommand()),
54
+ },
55
+ {
56
+ name: 'transition',
57
+ description: 'Transition a memory object to a new status',
58
+ usage: '[options] <id> <status>',
59
+ load: () => import('./commands/memory-transition.js').then((m) => m.memoryTransitionCommand()),
60
+ },
61
+ {
62
+ name: 'scan',
63
+ description: 'Scan the project and save a context snapshot',
64
+ usage: '',
65
+ load: () => import('./commands/memory-scan.js').then((m) => m.memoryScanCommand()),
66
+ },
67
+ {
68
+ name: 'brief',
69
+ description: 'Generate the agent brief from the latest scan and memory',
70
+ usage: '',
71
+ load: () => import('./commands/memory-brief.js').then((m) => m.memoryBriefCommand()),
72
+ },
73
+ {
74
+ name: 'thread',
75
+ description: 'Manage work threads',
76
+ usage: '',
77
+ load: () => import('./commands/memory-thread.js').then((m) => m.memoryThreadCommand()),
78
+ },
79
+ {
80
+ name: 'diff',
81
+ description: 'Show thread changes since a checkpoint',
82
+ usage: '[options] <thread-id>',
83
+ load: () => import('./commands/memory-session.js').then((m) => m.memoryThreadDiffCommand()),
84
+ },
85
+ {
86
+ name: 'decision',
87
+ description: 'Manage decisions',
88
+ usage: '',
89
+ load: () => import('./commands/memory-decision.js').then((m) => m.memoryDecisionCommand()),
90
+ },
91
+ {
92
+ name: 'blocker',
93
+ description: 'Manage blockers',
94
+ usage: '',
95
+ load: () => import('./commands/memory-blocker.js').then((m) => m.memoryBlockerCommand()),
96
+ },
97
+ {
98
+ name: 'info-request',
99
+ description: 'Manage info requests',
100
+ usage: '',
101
+ load: () => import('./commands/memory-info-request.js').then((m) => m.memoryInfoRequestCommand()),
102
+ },
103
+ {
104
+ name: 'article',
105
+ description: 'Manage articles',
106
+ usage: '',
107
+ load: () => import('./commands/memory-article.js').then((m) => m.memoryArticleCommand()),
108
+ },
109
+ {
110
+ name: 'session',
111
+ description: 'Manage sessions and checkpoints',
112
+ usage: '',
113
+ load: () => import('./commands/memory-session.js').then((m) => m.memorySessionCommand()),
114
+ },
115
+ {
116
+ name: 'mcp',
117
+ description: 'Start the MCP server (stdio)',
118
+ usage: '',
119
+ load: () => import('./commands/memory-mcp.js').then((m) => m.memoryMcpCommand()),
120
+ },
121
+ {
122
+ name: 'rule',
123
+ description: 'Manage rules',
124
+ usage: '',
125
+ load: () => import('./commands/memory-rule.js').then((m) => m.memoryRuleCommand()),
126
+ },
127
+ {
128
+ name: 'relation',
129
+ description: 'Manage relations between memory objects',
130
+ usage: '',
131
+ load: () => import('./commands/memory-relation.js').then((m) => m.memoryRelationCommand()),
132
+ },
133
+ {
134
+ name: 'taxonomy',
135
+ description: 'Manage memory taxonomy',
136
+ usage: '',
137
+ load: () => import('./commands/memory-taxonomy.js').then((m) => m.memoryTaxonomyCommand()),
138
+ },
139
+ {
140
+ name: 'migrate',
141
+ description: 'One-time migration: objects/<type>/ -> threads/<tid>/<subdir>/ + shared/',
142
+ usage: '[options]',
143
+ load: () => import('./commands/memory-migrate.js').then((m) => m.memoryMigrateCommand()),
144
+ },
145
+ {
146
+ name: 'council',
147
+ description: 'Council operations',
148
+ usage: '',
149
+ load: () => import('./commands/memory-council.js').then((m) => m.memoryCouncilCommand()),
150
+ },
151
+ {
152
+ name: 'validate',
153
+ description: 'Validate memory store integrity',
154
+ usage: '[options]',
155
+ load: () => import('./commands/memory-validate.js').then((m) => m.memoryValidateCommand()),
156
+ },
157
+ {
158
+ name: 'solve',
159
+ description: 'Build a solve pack for a memory problem',
160
+ usage: '[options] <problem>',
161
+ load: () => import('./commands/memory-solve.js').then((m) => m.memorySolveCommand()),
162
+ },
163
+ {
164
+ name: 'call',
165
+ description: 'Get active call injections',
166
+ usage: '[options]',
167
+ load: () => import('./commands/memory-call.js').then((m) => m.memoryCallCommand()),
168
+ },
169
+ {
170
+ name: 'insights',
171
+ description: 'Heuristic pattern analysis over project memory (Level 1, no LLM)',
172
+ usage: '[options]',
173
+ load: () => import('./commands/memory-insights.js').then((m) => m.memoryInsightsCommand()),
174
+ },
175
+ {
176
+ name: 'recap',
177
+ description: 'Summarize active project memory: rules, threads, blockers, questions, decisions',
178
+ usage: '',
179
+ load: () => import('./commands/memory-recap.js').then((m) => m.memoryRecapCommand()),
180
+ },
181
+ {
182
+ name: 'think',
183
+ description: 'Structured thinking sequences (goal -> thoughts -> conclusion)',
184
+ usage: '',
185
+ load: () => import('./commands/memory-think.js').then((m) => m.memoryThinkCommand()),
186
+ },
187
+ {
188
+ name: 'scaffold',
189
+ description: 'Scaffold opencode frame (agent|skill|command) + playbook in Wolf memory',
190
+ usage: '[options] <kind> <name>',
191
+ load: () => import('./commands/memory-scaffold.js').then((m) => m.memoryScaffoldCommand()),
192
+ },
193
+ {
194
+ name: 'tool',
195
+ description: 'Tool librarian: register/list/use/expose/deprecate/revive',
196
+ usage: '',
197
+ load: () => import('./commands/memory-tool.js').then((m) => m.memoryToolCommand()),
198
+ },
199
+ {
200
+ name: 'complain',
201
+ description: 'File a complaint about a rule/playbook/agent as a memory object (type complaint, status open)',
202
+ usage: '[options]',
203
+ load: () => import('./commands/memory-complain.js').then((m) => m.memoryComplainCommand()),
204
+ },
205
+ {
206
+ name: 'update',
207
+ description: 'Update triage fields of a memory object (whitelist: --set triage|resolution, --inc dispatch_ages|corroborations, --tags append)',
208
+ usage: '[options] <id>',
209
+ load: () => import('./commands/memory-update.js').then((m) => m.memoryUpdateCommand()),
210
+ },
211
+ {
212
+ name: 'learn',
213
+ description: 'Self-learning loop: pattern digest, signal-log health, draft propose/validate/activate',
214
+ usage: '',
215
+ load: () => import('./commands/memory-learn.js').then((m) => m.memoryLearnCommand()),
216
+ },
217
+ {
218
+ name: 'effectiveness',
219
+ description: 'Memory effectiveness panel: rules holdout, tool economy, delivery, noise, routing (aggregation only, no LLM)',
220
+ usage: '[options]',
221
+ load: () => import('./commands/memory-effectiveness.js').then((m) => m.memoryEffectivenessCommand()),
222
+ },
223
+ {
224
+ name: 'analytics',
225
+ description: 'Effectiveness analytics: ledgers (memory/tools/rules), weekly activity, agents, steward view, councils, outliers, experiment readiness, memory lifecycle & coordination, campaigns & per-memory ROI, machine acceptance (wave metrics)',
226
+ usage: '[options]',
227
+ load: () => import('./commands/analytics.js').then((m) => m.analyticsCommand()),
228
+ },
229
+ {
230
+ name: 'dashboard',
231
+ description: 'Console dashboard: health, ledgers, trends (unicode tables and sparklines; no files written)',
232
+ usage: '[options]',
233
+ load: () => import('./commands/dashboard.js').then((m) => m.dashboardCommand()),
234
+ },
235
+ {
236
+ name: 'task-eval',
237
+ description: 'Record a task verdict into the signal log (event task_evaluated)',
238
+ usage: '[options]',
239
+ load: () => import('./commands/task-eval.js').then((m) => m.taskEvalCommand()),
240
+ },
241
+ {
242
+ name: 'memory-stage',
243
+ description: 'Record a memory lifecycle stage into the signal log (event memory_stage)',
244
+ usage: '[options]',
245
+ load: () => import('./commands/memory-stage.js').then((m) => m.memoryStageCommand()),
246
+ },
247
+ {
248
+ name: 'coord',
249
+ description: 'Record a coordination event into the signal log (event coord_event)',
250
+ usage: '[options]',
251
+ load: () => import('./commands/coord.js').then((m) => m.coordCommand()),
252
+ },
253
+ {
254
+ name: 'run',
255
+ description: 'Run opencode with the model from the Wolf routing object; log weighted token cost',
256
+ usage: '[options] <prompt>',
257
+ load: () => import('./commands/memory-run.js').then((m) => m.memoryRunCommand()),
258
+ },
259
+ {
260
+ name: 'bootstrap',
261
+ description: 'Scan the project and draft starting memory: proposed rules, document-refs, work thread',
262
+ usage: '[options]',
263
+ load: () => import('./commands/memory-bootstrap.js').then((m) => m.memoryBootstrapCommand()),
264
+ },
265
+ {
266
+ name: 'upgrade',
267
+ description: 'Upgrade the global wolf installation to the latest npm version (runs npm install -g mister-wolf@latest); --check only compares versions, no install',
268
+ usage: '[options]',
269
+ load: () => import('./commands/memory-upgrade.js').then((m) => m.memoryUpgradeCommand()),
270
+ },
271
+ {
272
+ name: 'doctor',
273
+ description: 'Check all registered projects: binary vs schema version, platform configs, prune dead entries',
274
+ usage: '',
275
+ load: () => import('./commands/memory-doctor.js').then((m) => m.memoryDoctorCommand()),
276
+ },
277
+ ];
50
278
  export function createCli() {
51
279
  const program = new Command('wolf');
52
280
  program.version(getWolfVersion());
53
- program.addCommand(initCommand());
54
- program.addCommand(syncCommand());
55
- program.addCommand(addCommand());
56
- program.addCommand(listCommand());
57
- program.addCommand(getCommand());
58
- program.addCommand(searchCommand());
59
- program.addCommand(rebuildIndexCommand());
60
- program.addCommand(supersedeCommand());
61
- program.addCommand(transitionCommand());
62
- program.addCommand(scanCommand());
63
- program.addCommand(briefCommand());
64
- program.addCommand(threadCommand());
65
- program.addCommand(threadDiffCommand());
66
- program.addCommand(decisionCommand());
67
- program.addCommand(blockerCommand());
68
- program.addCommand(infoRequestCommand());
69
- program.addCommand(articleCommand());
70
- program.addCommand(sessionCommand());
71
- program.addCommand(mcpCommand());
72
- program.addCommand(ruleCommand());
73
- program.addCommand(relationCommand());
74
- program.addCommand(taxonomyCommand());
75
- program.addCommand(migrateCommand());
76
- program.addCommand(councilCommand());
77
- program.addCommand(validateCommand());
78
- program.addCommand(solveCommand());
79
- program.addCommand(callCommand());
80
- program.addCommand(insightsCommand());
81
- program.addCommand(recapCommand());
82
- program.addCommand(thinkCommand());
83
- program.addCommand(scaffoldCommand());
84
- program.addCommand(toolCommand());
85
- program.addCommand(complainCommand());
86
- program.addCommand(updateCommand());
87
- program.addCommand(learnCommand());
88
- program.addCommand(effectivenessCommand());
89
- program.addCommand(analyticsCommand());
90
- program.addCommand(dashboardCommand());
91
- program.addCommand(taskEvalCommand());
92
- program.addCommand(memoryStageCommand());
93
- program.addCommand(coordCommand());
94
- program.addCommand(runCommand());
95
- program.addCommand(bootstrapCommand());
96
- program.addCommand(upgradeCommand());
97
- program.addCommand(doctorCommand());
281
+ // P101: стаб-команды несут usage-хинт списка команд в `.usage()` — дефолтный
282
+ // subcommandTerm собирает терм из declared arguments/options (которых у стаба
283
+ // нет) и кастомный usage игнорирует. Наш рендер: явный usage => `name usage`.
284
+ program.configureHelp({
285
+ subcommandTerm(cmd) {
286
+ return cmd.usage() !== '' ? `${cmd.name()} ${cmd.usage()}` : cmd.name();
287
+ },
288
+ });
289
+ for (const spec of COMMANDS) {
290
+ const stub = new Command(spec.name)
291
+ .description(spec.description)
292
+ .allowUnknownOption()
293
+ .helpOption(false)
294
+ .action(async () => {
295
+ // Делегирование исходных токенов: process.argv = [node, cli.js, <cmd>, ...args],
296
+ // slice(3) + from:'user' — реальная команда сама парсит опции/позиционные/сабкоманды.
297
+ const real = await spec.load();
298
+ // Префикс wolf в usage реального хелпа (`wolf get --help` → `Usage: wolf get ...`):
299
+ // standalone-команда показывает usage без имени программы, поэтому вешаем на родителя.
300
+ new Command('wolf').addCommand(real);
301
+ await real.parseAsync(process.argv.slice(3), { from: 'user' });
302
+ });
303
+ if (spec.usage !== '')
304
+ stub.usage(spec.usage);
305
+ program.addCommand(stub);
306
+ }
307
+ // `wolf help <cmd>` — хелп реальной команды: дефолтный help-обработчик commander
308
+ // нашёл бы стаб и напечатал бы пустой стаб-хелп (REGRESSION). Поведение дефолта
309
+ // воспроизведено: без топика — program help (stdout, exit 0); неизвестный топик —
310
+ // program help в stderr, exit 1; лишние топики игнорируются (хелп первого).
311
+ // addCommand (не addHelpCommand): последний кладёт команду только в
312
+ // _helpCommand, диспетчер её не находит и уходит в дефолтный _dispatchHelpCommand,
313
+ // который печатает стаб-хелп — кастомный экшен оставался мёртвым кодом.
314
+ program.addCommand(new Command('help')
315
+ .description('display help for command')
316
+ .arguments('[command]')
317
+ .helpOption(false)
318
+ .allowExcessArguments()
319
+ .action(async (topic) => {
320
+ if (topic === undefined) {
321
+ program.help();
322
+ return;
323
+ }
324
+ const spec = COMMANDS.find((c) => c.name === topic);
325
+ if (!spec) {
326
+ process.stderr.write(program.helpInformation());
327
+ process.exit(1);
328
+ }
329
+ const real = await spec.load();
330
+ new Command('wolf').addCommand(real);
331
+ real.help();
332
+ }));
98
333
  return program;
99
334
  }
100
335
  /**
@@ -119,15 +354,23 @@ export async function runCli(argv) {
119
354
  // (не подстрока — иначе `wolf add --title "... init ..."` ложно обходил бы guard);
120
355
  // `--recreate` проверяется точным токеном массива.
121
356
  const isRecoveryInit = argv[2] === 'init' && argv.includes('--recreate');
122
- if (!isRecoveryInit) {
123
- await ensureCurrentSchema(safeCwd());
124
- }
357
+ const program = createCli();
358
+ // P101 (спека A3): schema-guard платится только выбранной командой — preAction-хук
359
+ // срабатывает после разбора argv и выбора команды, но ДО её action (side-effects).
360
+ // `--version` / top-level `--help` / неизвестная команда до action не доходят —
361
+ // guard не платят. Динамический import: schema-guard тянет yaml-стек.
362
+ program.hook('preAction', async () => {
363
+ if (!isRecoveryInit) {
364
+ const { ensureCurrentSchema } = await import('../../adapters/fs/schema-guard.js');
365
+ await ensureCurrentSchema(safeCwd());
366
+ }
367
+ });
125
368
  // Волна 0 (0.2): per-invocation session-ключ CLI-канала (все writers процесса
126
369
  // получают один id). `mcp` — исключение: long-lived сервер, один env на все
127
370
  // запросы = фальшивая сессия, канал не сессионируется.
128
371
  if (argv[2] !== 'mcp')
129
372
  ensureCliSessionId();
130
- await createCli().parseAsync(argv);
373
+ await program.parseAsync(argv);
131
374
  }
132
375
  catch (err) {
133
376
  if (err instanceof UserFacingError) {
@@ -1 +1 @@
1
- {"version":3,"file":"cli-entry.js","sourceRoot":"","sources":["../../../src/adapters/cli/cli-entry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-entry.js","sourceRoot":"","sources":["../../../src/adapters/cli/cli-entry.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import { type AnalyticsReport, type AnalyticsViewFilter } from '../../../app/use
7
7
  * иначе текстовые таблицы по секциям (общий Unicode-генератор с dashboard — DRY).
8
8
  * baseDir инъектится для тестов (прецедент: memory-effectiveness.ts).
9
9
  */
10
- type AnalyticsView = 'memory' | 'tools' | 'rules' | 'weeklyActivity' | 'agents' | 'steward' | 'outliers' | 'readiness' | 'councils' | 'coordination' | 'campaign' | 'acceptance' | 'all';
10
+ type AnalyticsView = 'memory' | 'tools' | 'rules' | 'weeklyActivity' | 'agents' | 'steward' | 'outliers' | 'readiness' | 'councils' | 'coordination' | 'campaign' | 'delivery' | 'acceptance' | 'all';
11
11
  type SectionView = Exclude<AnalyticsView, 'all'>;
12
12
  /** Фильтр секции: AnalyticsViewFilter с view конкретной секции (без 'all'). */
13
13
  export type SectionViewFilter = AnalyticsViewFilter & {
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAM5C,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACzB,MAAM,2CAA2C,CAAC;AAKnD;;;;;;GAMG;AAEH,KAAK,aAAa,GACd,QAAQ,GACR,OAAO,GACP,OAAO,GACP,gBAAgB,GAChB,QAAQ,GACR,SAAS,GACT,UAAU,GACV,WAAW,GACX,UAAU,GACV,cAAc,GACd,UAAU,GACV,YAAY,GACZ,KAAK,CAAC;AACV,KAAK,WAAW,GAAG,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AA2BjD,+EAA+E;AAC/E,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAE5E,0GAA0G;AAC1G,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAiSxF;AAED,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,IAAI,CAG1E;AAED,6FAA6F;AAC7F,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAU3F;AAED;+DAC+D;AAC/D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAI9F;AAED,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,MAAkB,GAAG,OAAO,CA0HrE"}
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAM5C,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACzB,MAAM,2CAA2C,CAAC;AAKnD;;;;;;GAMG;AAEH,KAAK,aAAa,GACd,QAAQ,GACR,OAAO,GACP,OAAO,GACP,gBAAgB,GAChB,QAAQ,GACR,SAAS,GACT,UAAU,GACV,WAAW,GACX,UAAU,GACV,cAAc,GACd,UAAU,GACV,UAAU,GACV,YAAY,GACZ,KAAK,CAAC;AACV,KAAK,WAAW,GAAG,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AA4BjD,+EAA+E;AAC/E,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAE5E,0GAA0G;AAC1G,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,iBAAiB,GAAG,MAAM,CA8TxF;AAED,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,IAAI,CAG1E;AAED,6FAA6F;AAC7F,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAU3F;AAED;+DAC+D;AAC/D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAI9F;AAED,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,MAAkB,GAAG,OAAO,CAsIrE"}
@@ -4,7 +4,7 @@ import { join } from 'path';
4
4
  import { safeCwd } from '../cli-entry.js';
5
5
  import { readSignalLog } from '../../fs/session-metrics-log.js';
6
6
  import { loadWolfConfigSync } from '../../fs/config-file.js';
7
- import { buildAnalyticsReport, filterAnalytics, } from '../../../app/use-cases/build-analytics.js';
7
+ import { buildAnalyticsReport, filterAnalytics, parseSkillInvocations, } from '../../../app/use-cases/build-analytics.js';
8
8
  import { createCliContainer } from '../../../bootstrap/container.js';
9
9
  import { parseRouterLog } from '../../../domain/router-log.js';
10
10
  import { renderTable } from './table-render.js';
@@ -20,6 +20,7 @@ const SECTION_VIEWS = [
20
20
  'councils',
21
21
  'coordination',
22
22
  'campaign',
23
+ 'delivery',
23
24
  'acceptance',
24
25
  ];
25
26
  /** null/undefined → '-', остальное — строкой (колонки с nullable-полей). */
@@ -231,6 +232,24 @@ export function renderSection(report, filter) {
231
232
  renderTable(['campaign', 'cohort', 'n', 'median_weighted', 'accepted_%', 'pfail_%', 'note'], rows),
232
233
  ].join('\n');
233
234
  }
235
+ case 'delivery': {
236
+ // P110: панель наблюдаемости доставки — applied-join, miss-rate, байты/латентность, skills
237
+ const d = payload.delivery;
238
+ const pct = (v) => (v === null ? 'n/a' : v.toFixed(1));
239
+ const int = (v) => (v === null ? 'n/a' : String(Math.round(v)));
240
+ return [
241
+ header,
242
+ 'top delivered:',
243
+ renderTable(['name', 'deliveries', 'applied', 'applied_%'], d.topDelivered.map((r) => [r.name, cell(r.deliveries), cell(r.applied), pct(r.appliedPct)])),
244
+ `highlight (deliveries>=10, applied<10%): ${d.underApplied.join(', ') || '-'}`,
245
+ 'miss-rate by agent:',
246
+ renderTable(['agent', 'fallbacks', 'total', 'miss_%'], d.missRateByAgent.map((r) => [r.agent, cell(r.fallbacks), cell(r.total), pct(r.missRatePct)])),
247
+ `avg injection bytes: delivery_signals=${int(d.avgInjectionBytes.deliverySignals)} router_log=${int(d.avgInjectionBytes.routerLog)}`,
248
+ `router resolve ms: p50=${int(d.routerMs.p50)} p90=${int(d.routerMs.p90)} (n=${d.routerMs.count})`,
249
+ 'skills:',
250
+ renderTable(['skill', 'count'], d.skills.map((r) => [r.skill, cell(r.count)])),
251
+ ].join('\n');
252
+ }
234
253
  case 'acceptance': {
235
254
  // T003: машинная приёмка волн 1–3 — router miss-rate, mcp_call latency/errors,
236
255
  // burst'ы delivery, search->get follow, vitality; null-метрики → n/a
@@ -304,6 +323,7 @@ export function analyticsCommand(baseDir = safeCwd()) {
304
323
  'councils',
305
324
  'coordination',
306
325
  'campaign',
326
+ 'delivery',
307
327
  'acceptance',
308
328
  'all',
309
329
  ])
@@ -343,6 +363,14 @@ export function analyticsCommand(baseDir = safeCwd()) {
343
363
  routerLogText = null; // ENOENT — плагин ещё не писал
344
364
  }
345
365
  const parsedRouterLog = parseRouterLog(routerLogText ?? '');
366
+ // P110: skill-invocations.jsonl плагина (нет файла → не передаём, skills пустые)
367
+ let skillInvocations = undefined;
368
+ try {
369
+ skillInvocations = parseSkillInvocations(readFileSync(join(baseDir, '.wolf', 'metrics', 'skill-invocations.jsonl'), 'utf-8'));
370
+ }
371
+ catch {
372
+ skillInvocations = undefined; // ENOENT — плагин ещё не писал
373
+ }
346
374
  const { store, log, relations, clock } = createCliContainer(baseDir);
347
375
  // D7: readSignalLog вместо readSignals — events + счётчики битых строк для dataQuality
348
376
  const signalLog = readSignalLog(baseDir);
@@ -355,6 +383,7 @@ export function analyticsCommand(baseDir = safeCwd()) {
355
383
  lines: parsedRouterLog.rows.length + parsedRouterLog.malformedLines,
356
384
  malformedLines: parsedRouterLog.malformedLines,
357
385
  },
386
+ ...(skillInvocations !== undefined ? { skillInvocations } : {}),
358
387
  ...(analyticsThresholds !== undefined ? { thresholds: analyticsThresholds } : {}),
359
388
  weeks: options.weeks,
360
389
  topOutliers: options.top,