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.
- package/dist/adapters/cli/cli-entry.d.ts.map +1 -1
- package/dist/adapters/cli/cli-entry.js +337 -94
- package/dist/adapters/cli/cli-entry.js.map +1 -1
- package/dist/adapters/cli/commands/analytics.d.ts +1 -1
- package/dist/adapters/cli/commands/analytics.d.ts.map +1 -1
- package/dist/adapters/cli/commands/analytics.js +30 -1
- package/dist/adapters/cli/commands/analytics.js.map +1 -1
- package/dist/adapters/cli/commands/memory-brief.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-brief.js +13 -3
- package/dist/adapters/cli/commands/memory-brief.js.map +1 -1
- package/dist/adapters/cli/commands/memory-call.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-call.js +54 -3
- package/dist/adapters/cli/commands/memory-call.js.map +1 -1
- package/dist/adapters/cli/commands/memory-recap.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-recap.js +16 -1
- package/dist/adapters/cli/commands/memory-recap.js.map +1 -1
- package/dist/adapters/fs/config-file.d.ts +8 -0
- package/dist/adapters/fs/config-file.d.ts.map +1 -1
- package/dist/adapters/fs/config-file.js +57 -2
- package/dist/adapters/fs/config-file.js.map +1 -1
- package/dist/adapters/fs/scan-snapshot-cache.d.ts +23 -0
- package/dist/adapters/fs/scan-snapshot-cache.d.ts.map +1 -0
- package/dist/adapters/fs/scan-snapshot-cache.js +36 -0
- package/dist/adapters/fs/scan-snapshot-cache.js.map +1 -0
- package/dist/adapters/fs/session-delivery-registry.d.ts +31 -0
- package/dist/adapters/fs/session-delivery-registry.d.ts.map +1 -0
- package/dist/adapters/fs/session-delivery-registry.js +104 -0
- package/dist/adapters/fs/session-delivery-registry.js.map +1 -0
- package/dist/adapters/fs/session-metrics-log.d.ts +15 -3
- package/dist/adapters/fs/session-metrics-log.d.ts.map +1 -1
- package/dist/adapters/fs/session-metrics-log.js +150 -29
- package/dist/adapters/fs/session-metrics-log.js.map +1 -1
- package/dist/adapters/mcp/mcp-schemas.d.ts +1 -1
- package/dist/adapters/mcp/mcp-tools.d.ts.map +1 -1
- package/dist/adapters/mcp/mcp-tools.js +5 -3
- package/dist/adapters/mcp/mcp-tools.js.map +1 -1
- package/dist/adapters/sqlite/sqlite-search-index.d.ts +6 -1
- package/dist/adapters/sqlite/sqlite-search-index.d.ts.map +1 -1
- package/dist/adapters/sqlite/sqlite-search-index.js +47 -25
- package/dist/adapters/sqlite/sqlite-search-index.js.map +1 -1
- package/dist/app/use-cases/build-analytics.d.ts +64 -1
- package/dist/app/use-cases/build-analytics.d.ts.map +1 -1
- package/dist/app/use-cases/build-analytics.js +157 -0
- package/dist/app/use-cases/build-analytics.js.map +1 -1
- package/dist/app/use-cases/generate-recap.d.ts +14 -0
- package/dist/app/use-cases/generate-recap.d.ts.map +1 -1
- package/dist/app/use-cases/generate-recap.js +37 -0
- package/dist/app/use-cases/generate-recap.js.map +1 -1
- package/dist/app/use-cases/get-call-injections.d.ts +6 -0
- package/dist/app/use-cases/get-call-injections.d.ts.map +1 -1
- package/dist/app/use-cases/get-call-injections.js +26 -8
- package/dist/app/use-cases/get-call-injections.js.map +1 -1
- package/dist/app/use-cases/scan-project.d.ts +26 -1
- package/dist/app/use-cases/scan-project.d.ts.map +1 -1
- package/dist/app/use-cases/scan-project.js +80 -49
- package/dist/app/use-cases/scan-project.js.map +1 -1
- package/dist/domain/router-log.d.ts +8 -2
- package/dist/domain/router-log.d.ts.map +1 -1
- package/dist/domain/router-log.js +14 -2
- package/dist/domain/router-log.js.map +1 -1
- package/dist/domain/schemas/relation-schema.d.ts +1 -1
- package/package.json +1 -1
- 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;
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
program.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
program
|
|
82
|
-
program
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
program.addCommand(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
123
|
-
|
|
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
|
|
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,
|
|
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,
|