@ontrails/trails 1.0.0-beta.1 → 1.0.0-beta.10
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/.turbo/turbo-lint.log +1 -1
- package/CHANGELOG.md +127 -0
- package/bin/trails.ts +0 -0
- package/dist/src/clack.d.ts.map +1 -1
- package/dist/src/clack.js +22 -0
- package/dist/src/clack.js.map +1 -1
- package/dist/src/trails/add-surface.js +9 -9
- package/dist/src/trails/add-surface.js.map +1 -1
- package/dist/src/trails/add-trail.d.ts +1 -2
- package/dist/src/trails/add-trail.d.ts.map +1 -1
- package/dist/src/trails/add-trail.js +16 -24
- package/dist/src/trails/add-trail.js.map +1 -1
- package/dist/src/trails/add-verify.js +9 -9
- package/dist/src/trails/add-verify.js.map +1 -1
- package/dist/src/trails/create-scaffold.js +25 -25
- package/dist/src/trails/create-scaffold.js.map +1 -1
- package/dist/src/trails/create.d.ts +1 -1
- package/dist/src/trails/create.js +10 -10
- package/dist/src/trails/create.js.map +1 -1
- package/dist/src/trails/guide.js +12 -12
- package/dist/src/trails/guide.js.map +1 -1
- package/dist/src/trails/survey.d.ts +1 -2
- package/dist/src/trails/survey.d.ts.map +1 -1
- package/dist/src/trails/survey.js +59 -26
- package/dist/src/trails/survey.js.map +1 -1
- package/dist/src/trails/warden.d.ts +1 -1
- package/dist/src/trails/warden.js +28 -28
- package/dist/src/trails/warden.js.map +1 -1
- package/package.json +9 -9
- package/src/__tests__/create.test.ts +7 -7
- package/src/__tests__/guide.test.ts +4 -4
- package/src/__tests__/survey.test.ts +6 -8
- package/src/__tests__/warden.test.ts +2 -2
- package/src/clack.ts +22 -0
- package/src/trails/add-surface.ts +9 -9
- package/src/trails/add-trail.ts +16 -25
- package/src/trails/add-verify.ts +9 -9
- package/src/trails/create-scaffold.ts +27 -27
- package/src/trails/create.ts +10 -10
- package/src/trails/guide.ts +14 -14
- package/src/trails/survey.ts +88 -36
- package/src/trails/warden.ts +33 -33
package/dist/src/trails/guide.js
CHANGED
|
@@ -42,17 +42,6 @@ export const guideTrail = trail('guide', {
|
|
|
42
42
|
name: 'List trail guidance',
|
|
43
43
|
},
|
|
44
44
|
],
|
|
45
|
-
implementation: async (input, ctx) => {
|
|
46
|
-
const app = await loadApp(input.module, ctx.cwd ?? '.');
|
|
47
|
-
if (input.trailId) {
|
|
48
|
-
const item = app.get(input.trailId);
|
|
49
|
-
if (!item) {
|
|
50
|
-
return Result.err(new Error(`Trail not found: ${input.trailId}`));
|
|
51
|
-
}
|
|
52
|
-
return Result.ok(toGuideDetail(item));
|
|
53
|
-
}
|
|
54
|
-
return Result.ok(toGuideEntries(app));
|
|
55
|
-
},
|
|
56
45
|
input: z.object({
|
|
57
46
|
module: z
|
|
58
47
|
.string()
|
|
@@ -60,6 +49,7 @@ export const guideTrail = trail('guide', {
|
|
|
60
49
|
.describe('Path to the app module'),
|
|
61
50
|
trailId: z.string().optional().describe('Trail ID for detailed guidance'),
|
|
62
51
|
}),
|
|
52
|
+
intent: 'read',
|
|
63
53
|
output: z.union([
|
|
64
54
|
z.array(z.object({
|
|
65
55
|
description: z.string(),
|
|
@@ -75,6 +65,16 @@ export const guideTrail = trail('guide', {
|
|
|
75
65
|
kind: z.string(),
|
|
76
66
|
}),
|
|
77
67
|
]),
|
|
78
|
-
|
|
68
|
+
run: async (input, ctx) => {
|
|
69
|
+
const app = await loadApp(input.module, ctx.cwd ?? '.');
|
|
70
|
+
if (input.trailId) {
|
|
71
|
+
const item = app.get(input.trailId);
|
|
72
|
+
if (!item) {
|
|
73
|
+
return Result.err(new Error(`Trail not found: ${input.trailId}`));
|
|
74
|
+
}
|
|
75
|
+
return Result.ok(toGuideDetail(item));
|
|
76
|
+
}
|
|
77
|
+
return Result.ok(toGuideEntries(app));
|
|
78
|
+
},
|
|
79
79
|
});
|
|
80
80
|
//# sourceMappingURL=guide.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide.js","sourceRoot":"","sources":["../../../src/trails/guide.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAaxC,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,cAAc,GAAG,CAAC,GAAS,EAAgB,EAAE;IACjD,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAA0C,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC;YACX,WAAW,EACT,OAAO,GAAG,CAAC,aAAa,CAAC,KAAK,QAAQ;gBACpC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;gBACpB,CAAC,CAAC,kBAAkB;YACxB,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC1C,CAAC,CAAE,GAAG,CAAC,UAAU,CAAe,CAAC,MAAM;gBACvC,CAAC,CAAC,CAAC;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAA6B,EAAU,EAAE,CAAC,CAAC;IAChE,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;IACrC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;IAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;IAC7B,EAAE,EAAE,IAAI,CAAC,EAAE;IACX,IAAI,EAAE,IAAI,CAAC,IAAI;CAChB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE;IACvC,WAAW,EAAE,6BAA6B;IAC1C,QAAQ,EAAE;QACR;YACE,WAAW,EAAE,uDAAuD;YACpE,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,qBAAqB;SAC5B;KACF;IACD,
|
|
1
|
+
{"version":3,"file":"guide.js","sourceRoot":"","sources":["../../../src/trails/guide.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,11 +13,9 @@ export interface BriefReport {
|
|
|
13
13
|
readonly outputSchemas: boolean;
|
|
14
14
|
readonly examples: boolean;
|
|
15
15
|
readonly detours: boolean;
|
|
16
|
-
readonly hikes: boolean;
|
|
17
16
|
readonly events: boolean;
|
|
18
17
|
};
|
|
19
18
|
readonly trails: number;
|
|
20
|
-
readonly hikes: number;
|
|
21
19
|
readonly events: number;
|
|
22
20
|
}
|
|
23
21
|
/** Generate a compact capability report for the given topo. */
|
|
@@ -27,6 +25,7 @@ export declare const surveyTrail: Trail<{
|
|
|
27
25
|
brief: boolean;
|
|
28
26
|
generate: boolean;
|
|
29
27
|
module: string;
|
|
28
|
+
openapi: boolean;
|
|
30
29
|
diff?: string | undefined;
|
|
31
30
|
trailId?: string | undefined;
|
|
32
31
|
}, object>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"survey.d.ts","sourceRoot":"","sources":["../../../src/trails/survey.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"survey.d.ts","sourceRoot":"","sources":["../../../src/trails/survey.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAoBlD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;QAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAwBD,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,GAAI,KAAK,IAAI,KAAG,WAgB/C,CAAC;AA2KF,eAAO,MAAM,WAAW;;;;;;;;UA2GtB,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* and diffs against previous versions.
|
|
6
6
|
*/
|
|
7
7
|
import { Result, trail } from '@ontrails/core';
|
|
8
|
-
import { diffSurfaceMaps, generateSurfaceMap, hashSurfaceMap, readSurfaceMap, writeSurfaceLock, writeSurfaceMap, } from '@ontrails/schema';
|
|
8
|
+
import { diffSurfaceMaps, generateOpenApiSpec, generateSurfaceMap, hashSurfaceMap, readSurfaceMap, writeSurfaceLock, writeSurfaceMap, } from '@ontrails/schema';
|
|
9
9
|
import { z } from 'zod';
|
|
10
10
|
import { loadApp } from './load-app.js';
|
|
11
11
|
/** Check if a trail has a specific feature. */
|
|
@@ -34,10 +34,8 @@ export const generateBriefReport = (app) => {
|
|
|
34
34
|
detours: hasDetours,
|
|
35
35
|
events: app.events.size > 0,
|
|
36
36
|
examples: hasExamples,
|
|
37
|
-
hikes: app.hikes.size > 0,
|
|
38
37
|
outputSchemas: hasOutputSchemas,
|
|
39
38
|
},
|
|
40
|
-
hikes: app.hikes.size,
|
|
41
39
|
name: app.name,
|
|
42
40
|
trails: app.trails.size,
|
|
43
41
|
version: '0.1.0',
|
|
@@ -47,11 +45,11 @@ export const generateBriefReport = (app) => {
|
|
|
47
45
|
// Formatting helpers
|
|
48
46
|
// ---------------------------------------------------------------------------
|
|
49
47
|
const safetyLabel = (entry) => {
|
|
50
|
-
if (entry.
|
|
51
|
-
return '
|
|
48
|
+
if (entry.intent === 'destroy') {
|
|
49
|
+
return 'destroy';
|
|
52
50
|
}
|
|
53
|
-
if (entry.
|
|
54
|
-
return '
|
|
51
|
+
if (entry.intent === 'read') {
|
|
52
|
+
return 'read';
|
|
55
53
|
}
|
|
56
54
|
return '-';
|
|
57
55
|
};
|
|
@@ -125,6 +123,31 @@ const buildSurveyGenerate = async (app) => {
|
|
|
125
123
|
const lockPath = await writeSurfaceLock(hash);
|
|
126
124
|
return Result.ok({ hash, lockPath, mapPath });
|
|
127
125
|
};
|
|
126
|
+
/** Ordered mode checks — first truthy predicate wins, otherwise 'list'. */
|
|
127
|
+
const modeChecks = [
|
|
128
|
+
[(i) => i.brief, 'brief'],
|
|
129
|
+
[(i) => Boolean(i.diff), 'diff'],
|
|
130
|
+
[(i) => Boolean(i.trailId), 'detail'],
|
|
131
|
+
[(i) => i.generate, 'generate'],
|
|
132
|
+
[(i) => i.openapi, 'openapi'],
|
|
133
|
+
];
|
|
134
|
+
/** Determine which survey mode was requested, falling back to 'list'. */
|
|
135
|
+
const resolveSurveyMode = (input) => modeChecks.find(([predicate]) => predicate(input))?.[1] ?? 'list';
|
|
136
|
+
/** Handlers keyed by survey mode. */
|
|
137
|
+
const surveyHandlers = {
|
|
138
|
+
brief: (app) => Result.ok(generateBriefReport(app)),
|
|
139
|
+
detail: (app, input) => buildSurveyDetail(app, input.trailId ?? ''),
|
|
140
|
+
diff: (app, input) => buildSurveyDiff(app, input.breakingOnly),
|
|
141
|
+
generate: (app) => buildSurveyGenerate(app),
|
|
142
|
+
list: (app) => Result.ok(formatTrailList(app)),
|
|
143
|
+
openapi: (app) => Result.ok(generateOpenApiSpec(app)),
|
|
144
|
+
};
|
|
145
|
+
/** Dispatch to the appropriate survey sub-command based on input flags. */
|
|
146
|
+
const dispatchSurvey = (app, input) => {
|
|
147
|
+
const mode = resolveSurveyMode(input);
|
|
148
|
+
const handler = surveyHandlers[mode];
|
|
149
|
+
return handler(app, input);
|
|
150
|
+
};
|
|
128
151
|
// ---------------------------------------------------------------------------
|
|
129
152
|
// Trail definition
|
|
130
153
|
// ---------------------------------------------------------------------------
|
|
@@ -141,23 +164,12 @@ export const surveyTrail = trail('survey', {
|
|
|
141
164
|
input: { brief: true },
|
|
142
165
|
name: 'Brief capability report',
|
|
143
166
|
},
|
|
167
|
+
{
|
|
168
|
+
description: 'Generate an OpenAPI 3.1 specification for the topo',
|
|
169
|
+
input: { openapi: true },
|
|
170
|
+
name: 'OpenAPI spec',
|
|
171
|
+
},
|
|
144
172
|
],
|
|
145
|
-
implementation: async (input, ctx) => {
|
|
146
|
-
const app = await loadApp(input.module, ctx.cwd ?? '.');
|
|
147
|
-
if (input.brief) {
|
|
148
|
-
return Result.ok(generateBriefReport(app));
|
|
149
|
-
}
|
|
150
|
-
if (input.diff) {
|
|
151
|
-
return await buildSurveyDiff(app, input.breakingOnly);
|
|
152
|
-
}
|
|
153
|
-
if (input.trailId) {
|
|
154
|
-
return buildSurveyDetail(app, input.trailId);
|
|
155
|
-
}
|
|
156
|
-
if (input.generate) {
|
|
157
|
-
return await buildSurveyGenerate(app);
|
|
158
|
-
}
|
|
159
|
-
return Result.ok(formatTrailList(app));
|
|
160
|
-
},
|
|
161
173
|
input: z.object({
|
|
162
174
|
breakingOnly: z
|
|
163
175
|
.boolean()
|
|
@@ -173,8 +185,10 @@ export const surveyTrail = trail('survey', {
|
|
|
173
185
|
.string()
|
|
174
186
|
.default('./src/app.ts')
|
|
175
187
|
.describe('Path to the app module'),
|
|
188
|
+
openapi: z.boolean().default(false).describe('Output OpenAPI 3.1 spec'),
|
|
176
189
|
trailId: z.string().optional().describe('Trail ID for detail view'),
|
|
177
190
|
}),
|
|
191
|
+
intent: 'read',
|
|
178
192
|
output: z.union([
|
|
179
193
|
z.object({
|
|
180
194
|
count: z.number(),
|
|
@@ -192,10 +206,8 @@ export const surveyTrail = trail('survey', {
|
|
|
192
206
|
detours: z.boolean(),
|
|
193
207
|
events: z.boolean(),
|
|
194
208
|
examples: z.boolean(),
|
|
195
|
-
hikes: z.boolean(),
|
|
196
209
|
outputSchemas: z.boolean(),
|
|
197
210
|
}),
|
|
198
|
-
hikes: z.number(),
|
|
199
211
|
name: z.string(),
|
|
200
212
|
trails: z.number(),
|
|
201
213
|
version: z.string(),
|
|
@@ -219,7 +231,28 @@ export const surveyTrail = trail('survey', {
|
|
|
219
231
|
lockPath: z.string(),
|
|
220
232
|
mapPath: z.string(),
|
|
221
233
|
}),
|
|
234
|
+
z.object({
|
|
235
|
+
components: z.object({
|
|
236
|
+
schemas: z.record(z.string(), z.unknown()),
|
|
237
|
+
}),
|
|
238
|
+
info: z.object({
|
|
239
|
+
description: z.string().optional(),
|
|
240
|
+
title: z.string(),
|
|
241
|
+
version: z.string(),
|
|
242
|
+
}),
|
|
243
|
+
openapi: z.literal('3.1.0'),
|
|
244
|
+
paths: z.record(z.string(), z.record(z.string(), z.unknown())),
|
|
245
|
+
servers: z
|
|
246
|
+
.array(z.object({
|
|
247
|
+
description: z.string().optional(),
|
|
248
|
+
url: z.string(),
|
|
249
|
+
}))
|
|
250
|
+
.optional(),
|
|
251
|
+
}),
|
|
222
252
|
]),
|
|
223
|
-
|
|
253
|
+
run: async (input, ctx) => {
|
|
254
|
+
const app = await loadApp(input.module, ctx.cwd ?? '.');
|
|
255
|
+
return dispatchSurvey(app, input);
|
|
256
|
+
},
|
|
224
257
|
});
|
|
225
258
|
//# sourceMappingURL=survey.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"survey.js","sourceRoot":"","sources":["../../../src/trails/survey.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"survey.js","sourceRoot":"","sources":["../../../src/trails/survey.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,33 +27,6 @@ export const wardenTrail = trail('warden', {
|
|
|
27
27
|
name: 'GitHub Actions annotations',
|
|
28
28
|
},
|
|
29
29
|
],
|
|
30
|
-
implementation: async (input, ctx) => {
|
|
31
|
-
const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
|
|
32
|
-
// oxlint-disable-next-line prefer-await-to-then -- catch converts rejection to undefined cleanly
|
|
33
|
-
const topo = await loadApp('./src/app.ts', rootDir).catch(() => undefined);
|
|
34
|
-
const report = await runWarden({
|
|
35
|
-
driftOnly: input.driftOnly,
|
|
36
|
-
lintOnly: input.lintOnly,
|
|
37
|
-
rootDir,
|
|
38
|
-
topo,
|
|
39
|
-
});
|
|
40
|
-
const formatters = {
|
|
41
|
-
github: formatGitHubAnnotations,
|
|
42
|
-
json: formatJson,
|
|
43
|
-
summary: formatSummary,
|
|
44
|
-
text: formatWardenReport,
|
|
45
|
-
};
|
|
46
|
-
const formatter = formatters[input.format] ?? formatWardenReport;
|
|
47
|
-
const formatted = formatter(report);
|
|
48
|
-
return Result.ok({
|
|
49
|
-
diagnostics: report.diagnostics,
|
|
50
|
-
drift: report.drift,
|
|
51
|
-
errorCount: report.errorCount,
|
|
52
|
-
formatted,
|
|
53
|
-
passed: report.passed,
|
|
54
|
-
warnCount: report.warnCount,
|
|
55
|
-
});
|
|
56
|
-
},
|
|
57
30
|
input: z.object({
|
|
58
31
|
driftOnly: z.boolean().default(false).describe('Only run drift detection'),
|
|
59
32
|
format: z
|
|
@@ -63,6 +36,7 @@ export const wardenTrail = trail('warden', {
|
|
|
63
36
|
lintOnly: z.boolean().default(false).describe('Only run lint rules'),
|
|
64
37
|
rootDir: z.string().optional().describe('Root directory to scan'),
|
|
65
38
|
}),
|
|
39
|
+
intent: 'read',
|
|
66
40
|
output: z.object({
|
|
67
41
|
diagnostics: z.array(z.object({
|
|
68
42
|
filePath: z.string(),
|
|
@@ -83,6 +57,32 @@ export const wardenTrail = trail('warden', {
|
|
|
83
57
|
passed: z.boolean(),
|
|
84
58
|
warnCount: z.number(),
|
|
85
59
|
}),
|
|
86
|
-
|
|
60
|
+
run: async (input, ctx) => {
|
|
61
|
+
const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
|
|
62
|
+
// oxlint-disable-next-line prefer-await-to-then -- catch converts rejection to undefined cleanly
|
|
63
|
+
const topo = await loadApp('./src/app.ts', rootDir).catch(() => undefined);
|
|
64
|
+
const report = await runWarden({
|
|
65
|
+
driftOnly: input.driftOnly,
|
|
66
|
+
lintOnly: input.lintOnly,
|
|
67
|
+
rootDir,
|
|
68
|
+
topo,
|
|
69
|
+
});
|
|
70
|
+
const formatters = {
|
|
71
|
+
github: formatGitHubAnnotations,
|
|
72
|
+
json: formatJson,
|
|
73
|
+
summary: formatSummary,
|
|
74
|
+
text: formatWardenReport,
|
|
75
|
+
};
|
|
76
|
+
const formatter = formatters[input.format] ?? formatWardenReport;
|
|
77
|
+
const formatted = formatter(report);
|
|
78
|
+
return Result.ok({
|
|
79
|
+
diagnostics: report.diagnostics,
|
|
80
|
+
drift: report.drift,
|
|
81
|
+
errorCount: report.errorCount,
|
|
82
|
+
formatted,
|
|
83
|
+
passed: report.passed,
|
|
84
|
+
warnCount: report.warnCount,
|
|
85
|
+
});
|
|
86
|
+
},
|
|
87
87
|
});
|
|
88
88
|
//# sourceMappingURL=warden.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warden.js","sourceRoot":"","sources":["../../../src/trails/warden.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE;IACzC,WAAW,EAAE,sCAAsC;IACnD,QAAQ,EAAE;QACR;YACE,KAAK,EAAE;gBACL,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;aAChB;YACD,IAAI,EAAE,oBAAoB;SAC3B;QACD;YACE,KAAK,EAAE;gBACL,MAAM,EAAE,QAAQ;aACjB;YACD,IAAI,EAAE,4BAA4B;SACnC;KACF;IACD,
|
|
1
|
+
{"version":3,"file":"warden.js","sourceRoot":"","sources":["../../../src/trails/warden.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ontrails/trails",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.10",
|
|
4
4
|
"bin": {
|
|
5
5
|
"trails": "./bin/trails.ts"
|
|
6
6
|
},
|
|
@@ -14,15 +14,15 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@clack/prompts": "^1.1.0",
|
|
17
|
-
"@ontrails/cli": "
|
|
18
|
-
"@ontrails/core": "
|
|
19
|
-
"@ontrails/logging": "
|
|
20
|
-
"@ontrails/schema": "
|
|
21
|
-
"@ontrails/warden": "
|
|
22
|
-
"commander": "
|
|
23
|
-
"zod": "
|
|
17
|
+
"@ontrails/cli": "^1.0.0-beta.8",
|
|
18
|
+
"@ontrails/core": "^1.0.0-beta.8",
|
|
19
|
+
"@ontrails/logging": "^1.0.0-beta.8",
|
|
20
|
+
"@ontrails/schema": "^1.0.0-beta.8",
|
|
21
|
+
"@ontrails/warden": "^1.0.0-beta.8",
|
|
22
|
+
"commander": "^14.0.3",
|
|
23
|
+
"zod": "^4.3.5"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@ontrails/testing": "
|
|
26
|
+
"@ontrails/testing": "^1.0.0-beta.8"
|
|
27
27
|
}
|
|
28
28
|
}
|
|
@@ -74,13 +74,13 @@ const runFollow = async (
|
|
|
74
74
|
): Promise<Result<unknown, Error>> => {
|
|
75
75
|
switch (id) {
|
|
76
76
|
case 'create.scaffold': {
|
|
77
|
-
return await createScaffold.
|
|
77
|
+
return await createScaffold.run(input as never, {} as never);
|
|
78
78
|
}
|
|
79
79
|
case 'add.surface': {
|
|
80
|
-
return await addSurface.
|
|
80
|
+
return await addSurface.run(input as never, {} as never);
|
|
81
81
|
}
|
|
82
82
|
case 'add.verify': {
|
|
83
|
-
return await addVerify.
|
|
83
|
+
return await addVerify.run(input as never, {} as never);
|
|
84
84
|
}
|
|
85
85
|
default: {
|
|
86
86
|
return Result.err(new Error(`Unknown follow target: ${id}`));
|
|
@@ -96,7 +96,7 @@ const runBlaze = (
|
|
|
96
96
|
verify: boolean;
|
|
97
97
|
}>
|
|
98
98
|
) =>
|
|
99
|
-
createRoute.
|
|
99
|
+
createRoute.run(
|
|
100
100
|
{
|
|
101
101
|
dir: dirname(projectDir),
|
|
102
102
|
name: basename(projectDir),
|
|
@@ -199,7 +199,7 @@ const assertEntityStarter = (dir: string): void => {
|
|
|
199
199
|
'return Result.ok({ results: [] })',
|
|
200
200
|
]);
|
|
201
201
|
expectContainsAll(readText(dir, 'src/trails/onboard.ts'), [
|
|
202
|
-
"import { Result,
|
|
202
|
+
"import { Result, trail } from '@ontrails/core'",
|
|
203
203
|
'return Result.ok({ onboarded: true })',
|
|
204
204
|
]);
|
|
205
205
|
};
|
|
@@ -289,7 +289,7 @@ describe('trails blaze', () => {
|
|
|
289
289
|
await withTempProject(async (dir) => {
|
|
290
290
|
setupMinimalProject(dir);
|
|
291
291
|
const result = expectOk(
|
|
292
|
-
await addSurface.
|
|
292
|
+
await addSurface.run({ dir, surface: 'mcp' }, {} as never)
|
|
293
293
|
);
|
|
294
294
|
|
|
295
295
|
expect(result.created).toBe('src/mcp.ts');
|
|
@@ -313,7 +313,7 @@ describe('trails blaze', () => {
|
|
|
313
313
|
writeFileSync(join(dir, 'src', 'mcp.ts'), 'existing content');
|
|
314
314
|
|
|
315
315
|
const error = expectErr(
|
|
316
|
-
await addSurface.
|
|
316
|
+
await addSurface.run({ dir, surface: 'mcp' }, {} as never)
|
|
317
317
|
);
|
|
318
318
|
expect(error.message).toBe('MCP is already blazed. Nothing to do.');
|
|
319
319
|
});
|
|
@@ -25,13 +25,13 @@ const helloTrail = trail('hello', {
|
|
|
25
25
|
name: 'Named greeting',
|
|
26
26
|
},
|
|
27
27
|
],
|
|
28
|
-
|
|
28
|
+
input: z.object({ name: z.string().optional() }),
|
|
29
|
+
intent: 'read',
|
|
30
|
+
output: z.object({ message: z.string() }),
|
|
31
|
+
run: (input) => {
|
|
29
32
|
const name = input.name ?? 'world';
|
|
30
33
|
return Result.ok({ message: `Hello, ${name}!` });
|
|
31
34
|
},
|
|
32
|
-
input: z.object({ name: z.string().optional() }),
|
|
33
|
-
output: z.object({ message: z.string() }),
|
|
34
|
-
readOnly: true,
|
|
35
35
|
});
|
|
36
36
|
|
|
37
37
|
const app = topo('test-app', { hello: helloTrail });
|
|
@@ -28,20 +28,20 @@ const helloTrail = trail('hello', {
|
|
|
28
28
|
name: 'Default greeting',
|
|
29
29
|
},
|
|
30
30
|
],
|
|
31
|
-
|
|
31
|
+
input: z.object({ name: z.string().optional() }),
|
|
32
|
+
intent: 'read',
|
|
33
|
+
output: z.object({ message: z.string() }),
|
|
34
|
+
run: (input) => {
|
|
32
35
|
const name = input.name ?? 'world';
|
|
33
36
|
return Result.ok({ message: `Hello, ${name}!` });
|
|
34
37
|
},
|
|
35
|
-
input: z.object({ name: z.string().optional() }),
|
|
36
|
-
output: z.object({ message: z.string() }),
|
|
37
|
-
readOnly: true,
|
|
38
38
|
});
|
|
39
39
|
|
|
40
40
|
const byeTrail = trail('bye', {
|
|
41
41
|
description: 'Say goodbye',
|
|
42
|
-
implementation: (input) => Result.ok({ message: `Goodbye, ${input.name}!` }),
|
|
43
42
|
input: z.object({ name: z.string() }),
|
|
44
43
|
output: z.object({ message: z.string() }),
|
|
44
|
+
run: (input) => Result.ok({ message: `Goodbye, ${input.name}!` }),
|
|
45
45
|
});
|
|
46
46
|
|
|
47
47
|
const app = topo('test-app', { bye: byeTrail, hello: helloTrail });
|
|
@@ -64,7 +64,7 @@ describe('trails survey', () => {
|
|
|
64
64
|
const hello = surfaceMap.entries.find((e) => e.id === 'hello');
|
|
65
65
|
expect(hello).toBeDefined();
|
|
66
66
|
expect(hello?.kind).toBe('trail');
|
|
67
|
-
expect(hello?.
|
|
67
|
+
expect(hello?.intent).toBe('read');
|
|
68
68
|
expect(hello?.exampleCount).toBe(1);
|
|
69
69
|
});
|
|
70
70
|
|
|
@@ -129,7 +129,6 @@ describe('trails survey --brief', () => {
|
|
|
129
129
|
test('report includes correct trail count', () => {
|
|
130
130
|
const report = generateBriefReport(app);
|
|
131
131
|
expect(report.trails).toBe(2);
|
|
132
|
-
expect(report.hikes).toBe(0);
|
|
133
132
|
expect(report.events).toBe(0);
|
|
134
133
|
});
|
|
135
134
|
|
|
@@ -138,7 +137,6 @@ describe('trails survey --brief', () => {
|
|
|
138
137
|
expect(report.features.outputSchemas).toBe(true);
|
|
139
138
|
expect(report.features.examples).toBe(true);
|
|
140
139
|
expect(report.features.detours).toBe(true);
|
|
141
|
-
expect(report.features.hikes).toBe(false);
|
|
142
140
|
expect(report.features.events).toBe(false);
|
|
143
141
|
});
|
|
144
142
|
|
|
@@ -21,7 +21,7 @@ describe('trails warden', () => {
|
|
|
21
21
|
writeFileSync(
|
|
22
22
|
join(dir, 'good.ts'),
|
|
23
23
|
`trail("hello", {
|
|
24
|
-
|
|
24
|
+
run: async (input, ctx) => {
|
|
25
25
|
return Result.ok({ message: "hi" });
|
|
26
26
|
}
|
|
27
27
|
})`
|
|
@@ -54,7 +54,7 @@ describe('trails warden', () => {
|
|
|
54
54
|
writeFileSync(
|
|
55
55
|
join(dir, 'bad.ts'),
|
|
56
56
|
`trail("x", {
|
|
57
|
-
|
|
57
|
+
run: async () => { throw new Error("boom"); }
|
|
58
58
|
})`
|
|
59
59
|
);
|
|
60
60
|
const report = await runWarden({ driftOnly: true, rootDir: dir });
|
package/src/clack.ts
CHANGED
|
@@ -55,8 +55,30 @@ const fieldResolvers: Record<Field['type'], FieldResolver> = {
|
|
|
55
55
|
const raw = await clack.text({ message: field.label });
|
|
56
56
|
return clack.isCancel(raw) ? undefined : Number(raw);
|
|
57
57
|
},
|
|
58
|
+
'number[]': async (field) => {
|
|
59
|
+
const raw = await clack.text({
|
|
60
|
+
message: `${field.label} (comma-separated numbers)`,
|
|
61
|
+
});
|
|
62
|
+
if (clack.isCancel(raw)) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
return String(raw)
|
|
66
|
+
.split(',')
|
|
67
|
+
.map((s) => Number(s.trim()));
|
|
68
|
+
},
|
|
58
69
|
string: async (field) =>
|
|
59
70
|
cancelable(await clack.text({ message: field.label })),
|
|
71
|
+
'string[]': async (field) => {
|
|
72
|
+
const raw = await clack.text({
|
|
73
|
+
message: `${field.label} (comma-separated)`,
|
|
74
|
+
});
|
|
75
|
+
if (clack.isCancel(raw)) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
return String(raw)
|
|
79
|
+
.split(',')
|
|
80
|
+
.map((s) => s.trim());
|
|
81
|
+
},
|
|
60
82
|
};
|
|
61
83
|
|
|
62
84
|
/** Resolve a single field value with Clack. */
|
|
@@ -92,7 +92,15 @@ const writeSurfaceEntry = async (
|
|
|
92
92
|
|
|
93
93
|
export const addSurface = trail('add.surface', {
|
|
94
94
|
description: 'Add a surface to an existing project',
|
|
95
|
-
|
|
95
|
+
input: z.object({
|
|
96
|
+
dir: z.string().optional().describe('Project directory'),
|
|
97
|
+
surface: z.enum(['cli', 'mcp']).describe('Surface to add'),
|
|
98
|
+
}),
|
|
99
|
+
output: z.object({
|
|
100
|
+
created: z.string(),
|
|
101
|
+
dependency: z.string(),
|
|
102
|
+
}),
|
|
103
|
+
run: async (input) => {
|
|
96
104
|
const cwd = resolve(input.dir ?? '.');
|
|
97
105
|
const { surface } = input;
|
|
98
106
|
const entryFile = getEntryFile(surface);
|
|
@@ -108,12 +116,4 @@ export const addSurface = trail('add.surface', {
|
|
|
108
116
|
dependency: await updatePkgJsonForSurface(cwd, surface),
|
|
109
117
|
});
|
|
110
118
|
},
|
|
111
|
-
input: z.object({
|
|
112
|
-
dir: z.string().optional().describe('Project directory'),
|
|
113
|
-
surface: z.enum(['cli', 'mcp']).describe('Surface to add'),
|
|
114
|
-
}),
|
|
115
|
-
output: z.object({
|
|
116
|
-
created: z.string(),
|
|
117
|
-
dependency: z.string(),
|
|
118
|
-
}),
|
|
119
119
|
});
|