@mmnto/mcp 1.14.10 → 1.14.11
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/schemas/describe-project.d.ts +533 -0
- package/dist/schemas/describe-project.d.ts.map +1 -0
- package/dist/schemas/describe-project.js +112 -0
- package/dist/schemas/describe-project.js.map +1 -0
- package/dist/schemas/describe-project.test.d.ts +2 -0
- package/dist/schemas/describe-project.test.d.ts.map +1 -0
- package/dist/schemas/describe-project.test.js +117 -0
- package/dist/schemas/describe-project.test.js.map +1 -0
- package/dist/state-extractors.d.ts +38 -0
- package/dist/state-extractors.d.ts.map +1 -0
- package/dist/state-extractors.js +259 -0
- package/dist/state-extractors.js.map +1 -0
- package/dist/state-extractors.test.d.ts +2 -0
- package/dist/state-extractors.test.d.ts.map +1 -0
- package/dist/state-extractors.test.js +193 -0
- package/dist/state-extractors.test.js.map +1 -0
- package/dist/tools/describe-project.d.ts.map +1 -1
- package/dist/tools/describe-project.js +41 -9
- package/dist/tools/describe-project.js.map +1 -1
- package/dist/tools/describe-project.test.js +56 -0
- package/dist/tools/describe-project.test.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schemas for the describe_project MCP tool.
|
|
3
|
+
*
|
|
4
|
+
* The legacy slim payload (project, tier, rules, lessons, targets, partitions,
|
|
5
|
+
* hooks) is preserved byte-identical when `includeRichState` is false or
|
|
6
|
+
* omitted. Rich state is opt-in via the input parameter and attaches as an
|
|
7
|
+
* optional `richState` field on the output.
|
|
8
|
+
*
|
|
9
|
+
* Implements ADR-090 Deferred Decision #2 (describe_project as substrate:
|
|
10
|
+
* reports state, self-routing remains the agent's decision).
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
/**
|
|
14
|
+
* Cap the uncommitted-files list to protect the MCP stdio pipe and the
|
|
15
|
+
* consuming agent's context window. A dirty tree with thousands of staged
|
|
16
|
+
* files should still produce a useful briefing payload.
|
|
17
|
+
*/
|
|
18
|
+
export declare const UNCOMMITTED_FILES_CAP = 50;
|
|
19
|
+
/**
|
|
20
|
+
* Number of recent merged PRs returned in the briefing. Keep small so the
|
|
21
|
+
* payload stays fast and the agent sees the most relevant history.
|
|
22
|
+
*/
|
|
23
|
+
export declare const RECENT_PRS_COUNT = 5;
|
|
24
|
+
/**
|
|
25
|
+
* `.default(false)` keeps legacy callers (empty input object) byte-identical
|
|
26
|
+
* to today's output. Opt-in is the only path that extends the response shape.
|
|
27
|
+
*/
|
|
28
|
+
export declare const DescribeProjectInputSchema: z.ZodObject<{
|
|
29
|
+
includeRichState: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
30
|
+
}, "strip", z.ZodTypeAny, {
|
|
31
|
+
includeRichState: boolean;
|
|
32
|
+
}, {
|
|
33
|
+
includeRichState?: boolean | undefined;
|
|
34
|
+
}>;
|
|
35
|
+
export type DescribeProjectInput = z.infer<typeof DescribeProjectInputSchema>;
|
|
36
|
+
export declare const StrategyPointerSchema: z.ZodObject<{
|
|
37
|
+
/** Short-form 7-char SHA of the strategy submodule HEAD. Null when no submodule. */
|
|
38
|
+
sha: z.ZodNullable<z.ZodString>;
|
|
39
|
+
/** Filename of the most recent `.strategy/.journal/*.md` entry, no path. */
|
|
40
|
+
latestJournal: z.ZodNullable<z.ZodString>;
|
|
41
|
+
}, "strip", z.ZodTypeAny, {
|
|
42
|
+
sha: string | null;
|
|
43
|
+
latestJournal: string | null;
|
|
44
|
+
}, {
|
|
45
|
+
sha: string | null;
|
|
46
|
+
latestJournal: string | null;
|
|
47
|
+
}>;
|
|
48
|
+
export type StrategyPointer = z.infer<typeof StrategyPointerSchema>;
|
|
49
|
+
export declare const GitStateSchema: z.ZodObject<{
|
|
50
|
+
/** Current branch name. Null when running outside a git repo or in detached HEAD. */
|
|
51
|
+
branch: z.ZodNullable<z.ZodString>;
|
|
52
|
+
/** Uncommitted files (staged + unstaged). Capped at UNCOMMITTED_FILES_CAP. */
|
|
53
|
+
uncommittedFiles: z.ZodArray<z.ZodString, "many">;
|
|
54
|
+
/** True when the real uncommitted count exceeded UNCOMMITTED_FILES_CAP. */
|
|
55
|
+
truncated: z.ZodBoolean;
|
|
56
|
+
}, "strip", z.ZodTypeAny, {
|
|
57
|
+
branch: string | null;
|
|
58
|
+
uncommittedFiles: string[];
|
|
59
|
+
truncated: boolean;
|
|
60
|
+
}, {
|
|
61
|
+
branch: string | null;
|
|
62
|
+
uncommittedFiles: string[];
|
|
63
|
+
truncated: boolean;
|
|
64
|
+
}>;
|
|
65
|
+
export type GitState = z.infer<typeof GitStateSchema>;
|
|
66
|
+
export declare const RecentPrSchema: z.ZodObject<{
|
|
67
|
+
/** Squash-merge commit title including the `(#NNNN)` PR suffix. */
|
|
68
|
+
title: z.ZodString;
|
|
69
|
+
/** ISO-8601 commit date. */
|
|
70
|
+
date: z.ZodString;
|
|
71
|
+
/** Short-form 7-char commit SHA. */
|
|
72
|
+
squashSha: z.ZodString;
|
|
73
|
+
}, "strip", z.ZodTypeAny, {
|
|
74
|
+
date: string;
|
|
75
|
+
title: string;
|
|
76
|
+
squashSha: string;
|
|
77
|
+
}, {
|
|
78
|
+
date: string;
|
|
79
|
+
title: string;
|
|
80
|
+
squashSha: string;
|
|
81
|
+
}>;
|
|
82
|
+
export type RecentPr = z.infer<typeof RecentPrSchema>;
|
|
83
|
+
export declare const RuleCountsSchema: z.ZodObject<{
|
|
84
|
+
active: z.ZodNumber;
|
|
85
|
+
archived: z.ZodNumber;
|
|
86
|
+
nonCompilable: z.ZodNumber;
|
|
87
|
+
}, "strip", z.ZodTypeAny, {
|
|
88
|
+
active: number;
|
|
89
|
+
archived: number;
|
|
90
|
+
nonCompilable: number;
|
|
91
|
+
}, {
|
|
92
|
+
active: number;
|
|
93
|
+
archived: number;
|
|
94
|
+
nonCompilable: number;
|
|
95
|
+
}>;
|
|
96
|
+
export type RuleCounts = z.infer<typeof RuleCountsSchema>;
|
|
97
|
+
export declare const MilestoneStateSchema: z.ZodObject<{
|
|
98
|
+
/** Milestone name (e.g. "1.15.0"). Null when not parseable from active_work.md. */
|
|
99
|
+
name: z.ZodNullable<z.ZodString>;
|
|
100
|
+
/** List of ticket references carrying the active gate label (e.g. pre-1.15-review). */
|
|
101
|
+
gateTickets: z.ZodArray<z.ZodString, "many">;
|
|
102
|
+
/**
|
|
103
|
+
* Marks this payload as parsed best-effort from `docs/active_work.md` and
|
|
104
|
+
* not a cryptographic truth. Agents should treat it as a hint, not a
|
|
105
|
+
* ground-truth source.
|
|
106
|
+
*/
|
|
107
|
+
bestEffort: z.ZodLiteral<true>;
|
|
108
|
+
}, "strip", z.ZodTypeAny, {
|
|
109
|
+
name: string | null;
|
|
110
|
+
gateTickets: string[];
|
|
111
|
+
bestEffort: true;
|
|
112
|
+
}, {
|
|
113
|
+
name: string | null;
|
|
114
|
+
gateTickets: string[];
|
|
115
|
+
bestEffort: true;
|
|
116
|
+
}>;
|
|
117
|
+
export type MilestoneState = z.infer<typeof MilestoneStateSchema>;
|
|
118
|
+
export declare const RichProjectStateSchema: z.ZodObject<{
|
|
119
|
+
strategyPointer: z.ZodObject<{
|
|
120
|
+
/** Short-form 7-char SHA of the strategy submodule HEAD. Null when no submodule. */
|
|
121
|
+
sha: z.ZodNullable<z.ZodString>;
|
|
122
|
+
/** Filename of the most recent `.strategy/.journal/*.md` entry, no path. */
|
|
123
|
+
latestJournal: z.ZodNullable<z.ZodString>;
|
|
124
|
+
}, "strip", z.ZodTypeAny, {
|
|
125
|
+
sha: string | null;
|
|
126
|
+
latestJournal: string | null;
|
|
127
|
+
}, {
|
|
128
|
+
sha: string | null;
|
|
129
|
+
latestJournal: string | null;
|
|
130
|
+
}>;
|
|
131
|
+
gitState: z.ZodObject<{
|
|
132
|
+
/** Current branch name. Null when running outside a git repo or in detached HEAD. */
|
|
133
|
+
branch: z.ZodNullable<z.ZodString>;
|
|
134
|
+
/** Uncommitted files (staged + unstaged). Capped at UNCOMMITTED_FILES_CAP. */
|
|
135
|
+
uncommittedFiles: z.ZodArray<z.ZodString, "many">;
|
|
136
|
+
/** True when the real uncommitted count exceeded UNCOMMITTED_FILES_CAP. */
|
|
137
|
+
truncated: z.ZodBoolean;
|
|
138
|
+
}, "strip", z.ZodTypeAny, {
|
|
139
|
+
branch: string | null;
|
|
140
|
+
uncommittedFiles: string[];
|
|
141
|
+
truncated: boolean;
|
|
142
|
+
}, {
|
|
143
|
+
branch: string | null;
|
|
144
|
+
uncommittedFiles: string[];
|
|
145
|
+
truncated: boolean;
|
|
146
|
+
}>;
|
|
147
|
+
/** Fixed-group package versions (e.g. `@mmnto/cli`). Entries omit when extraction fails for that package. */
|
|
148
|
+
packageVersions: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
149
|
+
ruleCounts: z.ZodObject<{
|
|
150
|
+
active: z.ZodNumber;
|
|
151
|
+
archived: z.ZodNumber;
|
|
152
|
+
nonCompilable: z.ZodNumber;
|
|
153
|
+
}, "strip", z.ZodTypeAny, {
|
|
154
|
+
active: number;
|
|
155
|
+
archived: number;
|
|
156
|
+
nonCompilable: number;
|
|
157
|
+
}, {
|
|
158
|
+
active: number;
|
|
159
|
+
archived: number;
|
|
160
|
+
nonCompilable: number;
|
|
161
|
+
}>;
|
|
162
|
+
/** Count of `.totem/lessons/*.md` files. Zero if the directory is missing. */
|
|
163
|
+
lessonCount: z.ZodNumber;
|
|
164
|
+
/**
|
|
165
|
+
* Test count from stored metadata. Null in v1 — no artifact is stamped
|
|
166
|
+
* today. Follow-up ticket wires postmerge to produce `.totem/store/test-stats.json`.
|
|
167
|
+
*/
|
|
168
|
+
testCount: z.ZodNullable<z.ZodNumber>;
|
|
169
|
+
milestone: z.ZodObject<{
|
|
170
|
+
/** Milestone name (e.g. "1.15.0"). Null when not parseable from active_work.md. */
|
|
171
|
+
name: z.ZodNullable<z.ZodString>;
|
|
172
|
+
/** List of ticket references carrying the active gate label (e.g. pre-1.15-review). */
|
|
173
|
+
gateTickets: z.ZodArray<z.ZodString, "many">;
|
|
174
|
+
/**
|
|
175
|
+
* Marks this payload as parsed best-effort from `docs/active_work.md` and
|
|
176
|
+
* not a cryptographic truth. Agents should treat it as a hint, not a
|
|
177
|
+
* ground-truth source.
|
|
178
|
+
*/
|
|
179
|
+
bestEffort: z.ZodLiteral<true>;
|
|
180
|
+
}, "strip", z.ZodTypeAny, {
|
|
181
|
+
name: string | null;
|
|
182
|
+
gateTickets: string[];
|
|
183
|
+
bestEffort: true;
|
|
184
|
+
}, {
|
|
185
|
+
name: string | null;
|
|
186
|
+
gateTickets: string[];
|
|
187
|
+
bestEffort: true;
|
|
188
|
+
}>;
|
|
189
|
+
recentPrs: z.ZodArray<z.ZodObject<{
|
|
190
|
+
/** Squash-merge commit title including the `(#NNNN)` PR suffix. */
|
|
191
|
+
title: z.ZodString;
|
|
192
|
+
/** ISO-8601 commit date. */
|
|
193
|
+
date: z.ZodString;
|
|
194
|
+
/** Short-form 7-char commit SHA. */
|
|
195
|
+
squashSha: z.ZodString;
|
|
196
|
+
}, "strip", z.ZodTypeAny, {
|
|
197
|
+
date: string;
|
|
198
|
+
title: string;
|
|
199
|
+
squashSha: string;
|
|
200
|
+
}, {
|
|
201
|
+
date: string;
|
|
202
|
+
title: string;
|
|
203
|
+
squashSha: string;
|
|
204
|
+
}>, "many">;
|
|
205
|
+
}, "strip", z.ZodTypeAny, {
|
|
206
|
+
strategyPointer: {
|
|
207
|
+
sha: string | null;
|
|
208
|
+
latestJournal: string | null;
|
|
209
|
+
};
|
|
210
|
+
gitState: {
|
|
211
|
+
branch: string | null;
|
|
212
|
+
uncommittedFiles: string[];
|
|
213
|
+
truncated: boolean;
|
|
214
|
+
};
|
|
215
|
+
packageVersions: Record<string, string>;
|
|
216
|
+
ruleCounts: {
|
|
217
|
+
active: number;
|
|
218
|
+
archived: number;
|
|
219
|
+
nonCompilable: number;
|
|
220
|
+
};
|
|
221
|
+
lessonCount: number;
|
|
222
|
+
testCount: number | null;
|
|
223
|
+
milestone: {
|
|
224
|
+
name: string | null;
|
|
225
|
+
gateTickets: string[];
|
|
226
|
+
bestEffort: true;
|
|
227
|
+
};
|
|
228
|
+
recentPrs: {
|
|
229
|
+
date: string;
|
|
230
|
+
title: string;
|
|
231
|
+
squashSha: string;
|
|
232
|
+
}[];
|
|
233
|
+
}, {
|
|
234
|
+
strategyPointer: {
|
|
235
|
+
sha: string | null;
|
|
236
|
+
latestJournal: string | null;
|
|
237
|
+
};
|
|
238
|
+
gitState: {
|
|
239
|
+
branch: string | null;
|
|
240
|
+
uncommittedFiles: string[];
|
|
241
|
+
truncated: boolean;
|
|
242
|
+
};
|
|
243
|
+
packageVersions: Record<string, string>;
|
|
244
|
+
ruleCounts: {
|
|
245
|
+
active: number;
|
|
246
|
+
archived: number;
|
|
247
|
+
nonCompilable: number;
|
|
248
|
+
};
|
|
249
|
+
lessonCount: number;
|
|
250
|
+
testCount: number | null;
|
|
251
|
+
milestone: {
|
|
252
|
+
name: string | null;
|
|
253
|
+
gateTickets: string[];
|
|
254
|
+
bestEffort: true;
|
|
255
|
+
};
|
|
256
|
+
recentPrs: {
|
|
257
|
+
date: string;
|
|
258
|
+
title: string;
|
|
259
|
+
squashSha: string;
|
|
260
|
+
}[];
|
|
261
|
+
}>;
|
|
262
|
+
export type RichProjectState = z.infer<typeof RichProjectStateSchema>;
|
|
263
|
+
/**
|
|
264
|
+
* Legacy `ProjectDescription` shape as returned by core `describeProject()`.
|
|
265
|
+
* Kept in this file for schema co-location; the source of truth is the
|
|
266
|
+
* `ProjectDescription` interface in `@mmnto/totem`.
|
|
267
|
+
*/
|
|
268
|
+
export declare const LegacyProjectDescriptionSchema: z.ZodObject<{
|
|
269
|
+
project: z.ZodString;
|
|
270
|
+
description: z.ZodOptional<z.ZodString>;
|
|
271
|
+
tier: z.ZodEnum<["lite", "standard", "full"]>;
|
|
272
|
+
rules: z.ZodNumber;
|
|
273
|
+
lessons: z.ZodNumber;
|
|
274
|
+
targets: z.ZodArray<z.ZodString, "many">;
|
|
275
|
+
partitions: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>;
|
|
276
|
+
hooks: z.ZodArray<z.ZodString, "many">;
|
|
277
|
+
}, "strip", z.ZodTypeAny, {
|
|
278
|
+
lessons: number;
|
|
279
|
+
project: string;
|
|
280
|
+
tier: "lite" | "standard" | "full";
|
|
281
|
+
rules: number;
|
|
282
|
+
targets: string[];
|
|
283
|
+
partitions: Record<string, string[]>;
|
|
284
|
+
hooks: string[];
|
|
285
|
+
description?: string | undefined;
|
|
286
|
+
}, {
|
|
287
|
+
lessons: number;
|
|
288
|
+
project: string;
|
|
289
|
+
tier: "lite" | "standard" | "full";
|
|
290
|
+
rules: number;
|
|
291
|
+
targets: string[];
|
|
292
|
+
partitions: Record<string, string[]>;
|
|
293
|
+
hooks: string[];
|
|
294
|
+
description?: string | undefined;
|
|
295
|
+
}>;
|
|
296
|
+
/**
|
|
297
|
+
* Output schema: legacy shape + optional rich state. Callers that omit
|
|
298
|
+
* `includeRichState` (or pass false) get a payload without the `richState`
|
|
299
|
+
* field at all — the JSON output is byte-identical to today's.
|
|
300
|
+
*/
|
|
301
|
+
export declare const DescribeProjectOutputSchema: z.ZodObject<{
|
|
302
|
+
project: z.ZodString;
|
|
303
|
+
description: z.ZodOptional<z.ZodString>;
|
|
304
|
+
tier: z.ZodEnum<["lite", "standard", "full"]>;
|
|
305
|
+
rules: z.ZodNumber;
|
|
306
|
+
lessons: z.ZodNumber;
|
|
307
|
+
targets: z.ZodArray<z.ZodString, "many">;
|
|
308
|
+
partitions: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>;
|
|
309
|
+
hooks: z.ZodArray<z.ZodString, "many">;
|
|
310
|
+
} & {
|
|
311
|
+
richState: z.ZodOptional<z.ZodObject<{
|
|
312
|
+
strategyPointer: z.ZodObject<{
|
|
313
|
+
/** Short-form 7-char SHA of the strategy submodule HEAD. Null when no submodule. */
|
|
314
|
+
sha: z.ZodNullable<z.ZodString>;
|
|
315
|
+
/** Filename of the most recent `.strategy/.journal/*.md` entry, no path. */
|
|
316
|
+
latestJournal: z.ZodNullable<z.ZodString>;
|
|
317
|
+
}, "strip", z.ZodTypeAny, {
|
|
318
|
+
sha: string | null;
|
|
319
|
+
latestJournal: string | null;
|
|
320
|
+
}, {
|
|
321
|
+
sha: string | null;
|
|
322
|
+
latestJournal: string | null;
|
|
323
|
+
}>;
|
|
324
|
+
gitState: z.ZodObject<{
|
|
325
|
+
/** Current branch name. Null when running outside a git repo or in detached HEAD. */
|
|
326
|
+
branch: z.ZodNullable<z.ZodString>;
|
|
327
|
+
/** Uncommitted files (staged + unstaged). Capped at UNCOMMITTED_FILES_CAP. */
|
|
328
|
+
uncommittedFiles: z.ZodArray<z.ZodString, "many">;
|
|
329
|
+
/** True when the real uncommitted count exceeded UNCOMMITTED_FILES_CAP. */
|
|
330
|
+
truncated: z.ZodBoolean;
|
|
331
|
+
}, "strip", z.ZodTypeAny, {
|
|
332
|
+
branch: string | null;
|
|
333
|
+
uncommittedFiles: string[];
|
|
334
|
+
truncated: boolean;
|
|
335
|
+
}, {
|
|
336
|
+
branch: string | null;
|
|
337
|
+
uncommittedFiles: string[];
|
|
338
|
+
truncated: boolean;
|
|
339
|
+
}>;
|
|
340
|
+
/** Fixed-group package versions (e.g. `@mmnto/cli`). Entries omit when extraction fails for that package. */
|
|
341
|
+
packageVersions: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
342
|
+
ruleCounts: z.ZodObject<{
|
|
343
|
+
active: z.ZodNumber;
|
|
344
|
+
archived: z.ZodNumber;
|
|
345
|
+
nonCompilable: z.ZodNumber;
|
|
346
|
+
}, "strip", z.ZodTypeAny, {
|
|
347
|
+
active: number;
|
|
348
|
+
archived: number;
|
|
349
|
+
nonCompilable: number;
|
|
350
|
+
}, {
|
|
351
|
+
active: number;
|
|
352
|
+
archived: number;
|
|
353
|
+
nonCompilable: number;
|
|
354
|
+
}>;
|
|
355
|
+
/** Count of `.totem/lessons/*.md` files. Zero if the directory is missing. */
|
|
356
|
+
lessonCount: z.ZodNumber;
|
|
357
|
+
/**
|
|
358
|
+
* Test count from stored metadata. Null in v1 — no artifact is stamped
|
|
359
|
+
* today. Follow-up ticket wires postmerge to produce `.totem/store/test-stats.json`.
|
|
360
|
+
*/
|
|
361
|
+
testCount: z.ZodNullable<z.ZodNumber>;
|
|
362
|
+
milestone: z.ZodObject<{
|
|
363
|
+
/** Milestone name (e.g. "1.15.0"). Null when not parseable from active_work.md. */
|
|
364
|
+
name: z.ZodNullable<z.ZodString>;
|
|
365
|
+
/** List of ticket references carrying the active gate label (e.g. pre-1.15-review). */
|
|
366
|
+
gateTickets: z.ZodArray<z.ZodString, "many">;
|
|
367
|
+
/**
|
|
368
|
+
* Marks this payload as parsed best-effort from `docs/active_work.md` and
|
|
369
|
+
* not a cryptographic truth. Agents should treat it as a hint, not a
|
|
370
|
+
* ground-truth source.
|
|
371
|
+
*/
|
|
372
|
+
bestEffort: z.ZodLiteral<true>;
|
|
373
|
+
}, "strip", z.ZodTypeAny, {
|
|
374
|
+
name: string | null;
|
|
375
|
+
gateTickets: string[];
|
|
376
|
+
bestEffort: true;
|
|
377
|
+
}, {
|
|
378
|
+
name: string | null;
|
|
379
|
+
gateTickets: string[];
|
|
380
|
+
bestEffort: true;
|
|
381
|
+
}>;
|
|
382
|
+
recentPrs: z.ZodArray<z.ZodObject<{
|
|
383
|
+
/** Squash-merge commit title including the `(#NNNN)` PR suffix. */
|
|
384
|
+
title: z.ZodString;
|
|
385
|
+
/** ISO-8601 commit date. */
|
|
386
|
+
date: z.ZodString;
|
|
387
|
+
/** Short-form 7-char commit SHA. */
|
|
388
|
+
squashSha: z.ZodString;
|
|
389
|
+
}, "strip", z.ZodTypeAny, {
|
|
390
|
+
date: string;
|
|
391
|
+
title: string;
|
|
392
|
+
squashSha: string;
|
|
393
|
+
}, {
|
|
394
|
+
date: string;
|
|
395
|
+
title: string;
|
|
396
|
+
squashSha: string;
|
|
397
|
+
}>, "many">;
|
|
398
|
+
}, "strip", z.ZodTypeAny, {
|
|
399
|
+
strategyPointer: {
|
|
400
|
+
sha: string | null;
|
|
401
|
+
latestJournal: string | null;
|
|
402
|
+
};
|
|
403
|
+
gitState: {
|
|
404
|
+
branch: string | null;
|
|
405
|
+
uncommittedFiles: string[];
|
|
406
|
+
truncated: boolean;
|
|
407
|
+
};
|
|
408
|
+
packageVersions: Record<string, string>;
|
|
409
|
+
ruleCounts: {
|
|
410
|
+
active: number;
|
|
411
|
+
archived: number;
|
|
412
|
+
nonCompilable: number;
|
|
413
|
+
};
|
|
414
|
+
lessonCount: number;
|
|
415
|
+
testCount: number | null;
|
|
416
|
+
milestone: {
|
|
417
|
+
name: string | null;
|
|
418
|
+
gateTickets: string[];
|
|
419
|
+
bestEffort: true;
|
|
420
|
+
};
|
|
421
|
+
recentPrs: {
|
|
422
|
+
date: string;
|
|
423
|
+
title: string;
|
|
424
|
+
squashSha: string;
|
|
425
|
+
}[];
|
|
426
|
+
}, {
|
|
427
|
+
strategyPointer: {
|
|
428
|
+
sha: string | null;
|
|
429
|
+
latestJournal: string | null;
|
|
430
|
+
};
|
|
431
|
+
gitState: {
|
|
432
|
+
branch: string | null;
|
|
433
|
+
uncommittedFiles: string[];
|
|
434
|
+
truncated: boolean;
|
|
435
|
+
};
|
|
436
|
+
packageVersions: Record<string, string>;
|
|
437
|
+
ruleCounts: {
|
|
438
|
+
active: number;
|
|
439
|
+
archived: number;
|
|
440
|
+
nonCompilable: number;
|
|
441
|
+
};
|
|
442
|
+
lessonCount: number;
|
|
443
|
+
testCount: number | null;
|
|
444
|
+
milestone: {
|
|
445
|
+
name: string | null;
|
|
446
|
+
gateTickets: string[];
|
|
447
|
+
bestEffort: true;
|
|
448
|
+
};
|
|
449
|
+
recentPrs: {
|
|
450
|
+
date: string;
|
|
451
|
+
title: string;
|
|
452
|
+
squashSha: string;
|
|
453
|
+
}[];
|
|
454
|
+
}>>;
|
|
455
|
+
}, "strip", z.ZodTypeAny, {
|
|
456
|
+
lessons: number;
|
|
457
|
+
project: string;
|
|
458
|
+
tier: "lite" | "standard" | "full";
|
|
459
|
+
rules: number;
|
|
460
|
+
targets: string[];
|
|
461
|
+
partitions: Record<string, string[]>;
|
|
462
|
+
hooks: string[];
|
|
463
|
+
description?: string | undefined;
|
|
464
|
+
richState?: {
|
|
465
|
+
strategyPointer: {
|
|
466
|
+
sha: string | null;
|
|
467
|
+
latestJournal: string | null;
|
|
468
|
+
};
|
|
469
|
+
gitState: {
|
|
470
|
+
branch: string | null;
|
|
471
|
+
uncommittedFiles: string[];
|
|
472
|
+
truncated: boolean;
|
|
473
|
+
};
|
|
474
|
+
packageVersions: Record<string, string>;
|
|
475
|
+
ruleCounts: {
|
|
476
|
+
active: number;
|
|
477
|
+
archived: number;
|
|
478
|
+
nonCompilable: number;
|
|
479
|
+
};
|
|
480
|
+
lessonCount: number;
|
|
481
|
+
testCount: number | null;
|
|
482
|
+
milestone: {
|
|
483
|
+
name: string | null;
|
|
484
|
+
gateTickets: string[];
|
|
485
|
+
bestEffort: true;
|
|
486
|
+
};
|
|
487
|
+
recentPrs: {
|
|
488
|
+
date: string;
|
|
489
|
+
title: string;
|
|
490
|
+
squashSha: string;
|
|
491
|
+
}[];
|
|
492
|
+
} | undefined;
|
|
493
|
+
}, {
|
|
494
|
+
lessons: number;
|
|
495
|
+
project: string;
|
|
496
|
+
tier: "lite" | "standard" | "full";
|
|
497
|
+
rules: number;
|
|
498
|
+
targets: string[];
|
|
499
|
+
partitions: Record<string, string[]>;
|
|
500
|
+
hooks: string[];
|
|
501
|
+
description?: string | undefined;
|
|
502
|
+
richState?: {
|
|
503
|
+
strategyPointer: {
|
|
504
|
+
sha: string | null;
|
|
505
|
+
latestJournal: string | null;
|
|
506
|
+
};
|
|
507
|
+
gitState: {
|
|
508
|
+
branch: string | null;
|
|
509
|
+
uncommittedFiles: string[];
|
|
510
|
+
truncated: boolean;
|
|
511
|
+
};
|
|
512
|
+
packageVersions: Record<string, string>;
|
|
513
|
+
ruleCounts: {
|
|
514
|
+
active: number;
|
|
515
|
+
archived: number;
|
|
516
|
+
nonCompilable: number;
|
|
517
|
+
};
|
|
518
|
+
lessonCount: number;
|
|
519
|
+
testCount: number | null;
|
|
520
|
+
milestone: {
|
|
521
|
+
name: string | null;
|
|
522
|
+
gateTickets: string[];
|
|
523
|
+
bestEffort: true;
|
|
524
|
+
};
|
|
525
|
+
recentPrs: {
|
|
526
|
+
date: string;
|
|
527
|
+
title: string;
|
|
528
|
+
squashSha: string;
|
|
529
|
+
}[];
|
|
530
|
+
} | undefined;
|
|
531
|
+
}>;
|
|
532
|
+
export type DescribeProjectOutput = z.infer<typeof DescribeProjectOutputSchema>;
|
|
533
|
+
//# sourceMappingURL=describe-project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-project.d.ts","sourceRoot":"","sources":["../../src/schemas/describe-project.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAIlC;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;;;;EAErC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAI9E,eAAO,MAAM,qBAAqB;IAChC,oFAAoF;;IAEpF,4EAA4E;;;;;;;;EAE5E,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,cAAc;IACzB,qFAAqF;;IAErF,8EAA8E;;IAE9E,2EAA2E;;;;;;;;;;EAE3E,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,cAAc;IACzB,mEAAmE;;IAEnE,4BAA4B;;IAE5B,oCAAoC;;;;;;;;;;EAEpC,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAI3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,oBAAoB;IAC/B,mFAAmF;;IAEnF,uFAAuF;;IAEvF;;;;OAIG;;;;;;;;;;EAEH,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,sBAAsB;;QAhDjC,oFAAoF;;QAEpF,4EAA4E;;;;;;;;;;QAM5E,qFAAqF;;QAErF,8EAA8E;;QAE9E,2EAA2E;;;;;;;;;;;IAuC3E,6GAA6G;;;;;;;;;;;;;;;IAG7G,8EAA8E;;IAE9E;;;OAGG;;;QAxBH,mFAAmF;;QAEnF,uFAAuF;;QAEvF;;;;WAIG;;;;;;;;;;;;QAzBH,mEAAmE;;QAEnE,4BAA4B;;QAE5B,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyCpC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAItE;;;;GAIG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;EASzC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;YA1FtC,oFAAoF;;YAEpF,4EAA4E;;;;;;;;;;YAM5E,qFAAqF;;YAErF,8EAA8E;;YAE9E,2EAA2E;;;;;;;;;;;QAuC3E,6GAA6G;;;;;;;;;;;;;;;QAG7G,8EAA8E;;QAE9E;;;WAGG;;;YAxBH,mFAAmF;;YAEnF,uFAAuF;;YAEvF;;;;eAIG;;;;;;;;;;;;YAzBH,mEAAmE;;YAEnE,4BAA4B;;YAE5B,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsEpC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schemas for the describe_project MCP tool.
|
|
3
|
+
*
|
|
4
|
+
* The legacy slim payload (project, tier, rules, lessons, targets, partitions,
|
|
5
|
+
* hooks) is preserved byte-identical when `includeRichState` is false or
|
|
6
|
+
* omitted. Rich state is opt-in via the input parameter and attaches as an
|
|
7
|
+
* optional `richState` field on the output.
|
|
8
|
+
*
|
|
9
|
+
* Implements ADR-090 Deferred Decision #2 (describe_project as substrate:
|
|
10
|
+
* reports state, self-routing remains the agent's decision).
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
/**
|
|
14
|
+
* Cap the uncommitted-files list to protect the MCP stdio pipe and the
|
|
15
|
+
* consuming agent's context window. A dirty tree with thousands of staged
|
|
16
|
+
* files should still produce a useful briefing payload.
|
|
17
|
+
*/
|
|
18
|
+
export const UNCOMMITTED_FILES_CAP = 50;
|
|
19
|
+
/**
|
|
20
|
+
* Number of recent merged PRs returned in the briefing. Keep small so the
|
|
21
|
+
* payload stays fast and the agent sees the most relevant history.
|
|
22
|
+
*/
|
|
23
|
+
export const RECENT_PRS_COUNT = 5;
|
|
24
|
+
// ─── Input ─────────────────────────────────────────────────────────────────
|
|
25
|
+
/**
|
|
26
|
+
* `.default(false)` keeps legacy callers (empty input object) byte-identical
|
|
27
|
+
* to today's output. Opt-in is the only path that extends the response shape.
|
|
28
|
+
*/
|
|
29
|
+
export const DescribeProjectInputSchema = z.object({
|
|
30
|
+
includeRichState: z.boolean().optional().default(false),
|
|
31
|
+
});
|
|
32
|
+
// ─── Rich state sub-schemas ────────────────────────────────────────────────
|
|
33
|
+
export const StrategyPointerSchema = z.object({
|
|
34
|
+
/** Short-form 7-char SHA of the strategy submodule HEAD. Null when no submodule. */
|
|
35
|
+
sha: z.string().nullable(),
|
|
36
|
+
/** Filename of the most recent `.strategy/.journal/*.md` entry, no path. */
|
|
37
|
+
latestJournal: z.string().nullable(),
|
|
38
|
+
});
|
|
39
|
+
export const GitStateSchema = z.object({
|
|
40
|
+
/** Current branch name. Null when running outside a git repo or in detached HEAD. */
|
|
41
|
+
branch: z.string().nullable(),
|
|
42
|
+
/** Uncommitted files (staged + unstaged). Capped at UNCOMMITTED_FILES_CAP. */
|
|
43
|
+
uncommittedFiles: z.array(z.string()),
|
|
44
|
+
/** True when the real uncommitted count exceeded UNCOMMITTED_FILES_CAP. */
|
|
45
|
+
truncated: z.boolean(),
|
|
46
|
+
});
|
|
47
|
+
export const RecentPrSchema = z.object({
|
|
48
|
+
/** Squash-merge commit title including the `(#NNNN)` PR suffix. */
|
|
49
|
+
title: z.string(),
|
|
50
|
+
/** ISO-8601 commit date. */
|
|
51
|
+
date: z.string(),
|
|
52
|
+
/** Short-form 7-char commit SHA. */
|
|
53
|
+
squashSha: z.string(),
|
|
54
|
+
});
|
|
55
|
+
export const RuleCountsSchema = z.object({
|
|
56
|
+
active: z.number().int().nonnegative(),
|
|
57
|
+
archived: z.number().int().nonnegative(),
|
|
58
|
+
nonCompilable: z.number().int().nonnegative(),
|
|
59
|
+
});
|
|
60
|
+
export const MilestoneStateSchema = z.object({
|
|
61
|
+
/** Milestone name (e.g. "1.15.0"). Null when not parseable from active_work.md. */
|
|
62
|
+
name: z.string().nullable(),
|
|
63
|
+
/** List of ticket references carrying the active gate label (e.g. pre-1.15-review). */
|
|
64
|
+
gateTickets: z.array(z.string()),
|
|
65
|
+
/**
|
|
66
|
+
* Marks this payload as parsed best-effort from `docs/active_work.md` and
|
|
67
|
+
* not a cryptographic truth. Agents should treat it as a hint, not a
|
|
68
|
+
* ground-truth source.
|
|
69
|
+
*/
|
|
70
|
+
bestEffort: z.literal(true),
|
|
71
|
+
});
|
|
72
|
+
export const RichProjectStateSchema = z.object({
|
|
73
|
+
strategyPointer: StrategyPointerSchema,
|
|
74
|
+
gitState: GitStateSchema,
|
|
75
|
+
/** Fixed-group package versions (e.g. `@mmnto/cli`). Entries omit when extraction fails for that package. */
|
|
76
|
+
packageVersions: z.record(z.string()),
|
|
77
|
+
ruleCounts: RuleCountsSchema,
|
|
78
|
+
/** Count of `.totem/lessons/*.md` files. Zero if the directory is missing. */
|
|
79
|
+
lessonCount: z.number().int().nonnegative(),
|
|
80
|
+
/**
|
|
81
|
+
* Test count from stored metadata. Null in v1 — no artifact is stamped
|
|
82
|
+
* today. Follow-up ticket wires postmerge to produce `.totem/store/test-stats.json`.
|
|
83
|
+
*/
|
|
84
|
+
testCount: z.number().int().nonnegative().nullable(),
|
|
85
|
+
milestone: MilestoneStateSchema,
|
|
86
|
+
recentPrs: z.array(RecentPrSchema),
|
|
87
|
+
});
|
|
88
|
+
// ─── Output ────────────────────────────────────────────────────────────────
|
|
89
|
+
/**
|
|
90
|
+
* Legacy `ProjectDescription` shape as returned by core `describeProject()`.
|
|
91
|
+
* Kept in this file for schema co-location; the source of truth is the
|
|
92
|
+
* `ProjectDescription` interface in `@mmnto/totem`.
|
|
93
|
+
*/
|
|
94
|
+
export const LegacyProjectDescriptionSchema = z.object({
|
|
95
|
+
project: z.string(),
|
|
96
|
+
description: z.string().optional(),
|
|
97
|
+
tier: z.enum(['lite', 'standard', 'full']),
|
|
98
|
+
rules: z.number(),
|
|
99
|
+
lessons: z.number(),
|
|
100
|
+
targets: z.array(z.string()),
|
|
101
|
+
partitions: z.record(z.array(z.string())),
|
|
102
|
+
hooks: z.array(z.string()),
|
|
103
|
+
});
|
|
104
|
+
/**
|
|
105
|
+
* Output schema: legacy shape + optional rich state. Callers that omit
|
|
106
|
+
* `includeRichState` (or pass false) get a payload without the `richState`
|
|
107
|
+
* field at all — the JSON output is byte-identical to today's.
|
|
108
|
+
*/
|
|
109
|
+
export const DescribeProjectOutputSchema = LegacyProjectDescriptionSchema.extend({
|
|
110
|
+
richState: RichProjectStateSchema.optional(),
|
|
111
|
+
});
|
|
112
|
+
//# sourceMappingURL=describe-project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-project.js","sourceRoot":"","sources":["../../src/schemas/describe-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-project.test.d.ts","sourceRoot":"","sources":["../../src/schemas/describe-project.test.ts"],"names":[],"mappings":""}
|