@ontrails/trails 1.0.0-beta.0 → 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 +141 -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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/trails/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/trails/create.ts"],"names":[],"mappings":"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"}
|
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. */
|