@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.
Files changed (42) hide show
  1. package/.turbo/turbo-lint.log +1 -1
  2. package/CHANGELOG.md +127 -0
  3. package/bin/trails.ts +0 -0
  4. package/dist/src/clack.d.ts.map +1 -1
  5. package/dist/src/clack.js +22 -0
  6. package/dist/src/clack.js.map +1 -1
  7. package/dist/src/trails/add-surface.js +9 -9
  8. package/dist/src/trails/add-surface.js.map +1 -1
  9. package/dist/src/trails/add-trail.d.ts +1 -2
  10. package/dist/src/trails/add-trail.d.ts.map +1 -1
  11. package/dist/src/trails/add-trail.js +16 -24
  12. package/dist/src/trails/add-trail.js.map +1 -1
  13. package/dist/src/trails/add-verify.js +9 -9
  14. package/dist/src/trails/add-verify.js.map +1 -1
  15. package/dist/src/trails/create-scaffold.js +25 -25
  16. package/dist/src/trails/create-scaffold.js.map +1 -1
  17. package/dist/src/trails/create.d.ts +1 -1
  18. package/dist/src/trails/create.js +10 -10
  19. package/dist/src/trails/create.js.map +1 -1
  20. package/dist/src/trails/guide.js +12 -12
  21. package/dist/src/trails/guide.js.map +1 -1
  22. package/dist/src/trails/survey.d.ts +1 -2
  23. package/dist/src/trails/survey.d.ts.map +1 -1
  24. package/dist/src/trails/survey.js +59 -26
  25. package/dist/src/trails/survey.js.map +1 -1
  26. package/dist/src/trails/warden.d.ts +1 -1
  27. package/dist/src/trails/warden.js +28 -28
  28. package/dist/src/trails/warden.js.map +1 -1
  29. package/package.json +9 -9
  30. package/src/__tests__/create.test.ts +7 -7
  31. package/src/__tests__/guide.test.ts +4 -4
  32. package/src/__tests__/survey.test.ts +6 -8
  33. package/src/__tests__/warden.test.ts +2 -2
  34. package/src/clack.ts +22 -0
  35. package/src/trails/add-surface.ts +9 -9
  36. package/src/trails/add-trail.ts +16 -25
  37. package/src/trails/add-verify.ts +9 -9
  38. package/src/trails/create-scaffold.ts +27 -27
  39. package/src/trails/create.ts +10 -10
  40. package/src/trails/guide.ts +14 -14
  41. package/src/trails/survey.ts +88 -36
  42. package/src/trails/warden.ts +33 -33
@@ -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
- readOnly: true,
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":"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"}
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;AAmBlD,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,KAAK,EAAE,OAAO,CAAC;QACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAwBD,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,GAAI,KAAK,IAAI,KAAG,WAkB/C,CAAC;AA2HF,eAAO,MAAM,WAAW;;;;;;;UAoGtB,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.destructive) {
51
- return 'destructive';
48
+ if (entry.intent === 'destroy') {
49
+ return 'destroy';
52
50
  }
53
- if (entry.readOnly) {
54
- return 'readOnly';
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
- readOnly: true,
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":"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"}
1
+ {"version":3,"file":"survey.js","sourceRoot":"","sources":["../../../src/trails/survey.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  export declare const wardenTrail: import("@ontrails/core").Trail<{
7
7
  driftOnly: boolean;
8
- format: "text" | "github" | "json" | "summary";
8
+ format: "summary" | "text" | "github" | "json";
9
9
  lintOnly: boolean;
10
10
  rootDir?: string | undefined;
11
11
  }, {
@@ -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
- readOnly: true,
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":"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"}
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.1",
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": "workspace:^",
18
- "@ontrails/core": "workspace:^",
19
- "@ontrails/logging": "workspace:^",
20
- "@ontrails/schema": "workspace:^",
21
- "@ontrails/warden": "workspace:^",
22
- "commander": "catalog:",
23
- "zod": "catalog:"
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": "workspace:^"
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.implementation(input as never, {} as never);
77
+ return await createScaffold.run(input as never, {} as never);
78
78
  }
79
79
  case 'add.surface': {
80
- return await addSurface.implementation(input as never, {} as never);
80
+ return await addSurface.run(input as never, {} as never);
81
81
  }
82
82
  case 'add.verify': {
83
- return await addVerify.implementation(input as never, {} as never);
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.implementation(
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, hike } from '@ontrails/core'",
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.implementation({ dir, surface: 'mcp' }, {} as never)
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.implementation({ dir, surface: 'mcp' }, {} as never)
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
- implementation: (input) => {
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
- implementation: (input) => {
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?.readOnly).toBe(true);
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
- implementation: async (input, ctx) => {
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
- implementation: async () => { throw new Error("boom"); }
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
- implementation: async (input) => {
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
  });