@ontrails/trails 1.0.0-beta.14 → 1.0.0-beta.16

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 (197) hide show
  1. package/CHANGELOG.md +208 -0
  2. package/README.md +27 -0
  3. package/package.json +19 -8
  4. package/src/app.ts +17 -7
  5. package/src/clack.ts +1 -1
  6. package/src/cli.ts +304 -10
  7. package/src/completions.ts +240 -0
  8. package/src/load-app-mirror.ts +160 -0
  9. package/src/local-state-io.ts +153 -0
  10. package/src/project-writes.ts +320 -0
  11. package/src/run-collision.ts +125 -0
  12. package/src/run-completions-install.ts +179 -0
  13. package/src/run-example.ts +149 -0
  14. package/src/run-examples.ts +148 -0
  15. package/src/run-quiet.ts +75 -0
  16. package/src/run-trace.ts +273 -0
  17. package/src/run-warden.ts +39 -0
  18. package/src/run-watch.ts +432 -0
  19. package/src/scaffold-versions.generated.ts +12 -0
  20. package/src/trails/add-surface.ts +172 -0
  21. package/src/trails/add-trail.ts +73 -27
  22. package/src/trails/add-verify.ts +68 -23
  23. package/src/trails/completions-complete.ts +165 -0
  24. package/src/trails/completions.ts +47 -0
  25. package/src/trails/create-scaffold.ts +101 -35
  26. package/src/trails/create.ts +87 -74
  27. package/src/trails/dev-clean.ts +31 -22
  28. package/src/trails/dev-reset.ts +9 -3
  29. package/src/trails/dev-stats.ts +28 -20
  30. package/src/trails/dev-support.ts +109 -95
  31. package/src/trails/draft-promote.ts +351 -107
  32. package/src/trails/guide.ts +55 -38
  33. package/src/trails/load-app.ts +712 -38
  34. package/src/trails/root-dir.ts +21 -0
  35. package/src/trails/run-example.ts +482 -0
  36. package/src/trails/run-examples.ts +141 -0
  37. package/src/trails/run.ts +403 -0
  38. package/src/trails/survey.ts +517 -186
  39. package/src/trails/topo-activation.ts +385 -0
  40. package/src/trails/topo-compile.ts +55 -0
  41. package/src/trails/topo-history.ts +14 -11
  42. package/src/trails/topo-output-schemas.ts +175 -0
  43. package/src/trails/topo-pin.ts +25 -16
  44. package/src/trails/topo-read-support.ts +178 -238
  45. package/src/trails/topo-reports.ts +445 -63
  46. package/src/trails/topo-store-support.ts +67 -35
  47. package/src/trails/topo-support.ts +93 -147
  48. package/src/trails/topo-unpin.ts +17 -7
  49. package/src/trails/topo-verify.ts +19 -10
  50. package/src/trails/topo.ts +64 -31
  51. package/src/trails/warden-guide.ts +121 -0
  52. package/src/trails/warden.ts +137 -47
  53. package/src/versions.ts +28 -0
  54. package/.turbo/turbo-build.log +0 -1
  55. package/.turbo/turbo-lint.log +0 -3
  56. package/.turbo/turbo-typecheck.log +0 -1
  57. package/__tests__/examples.test.ts +0 -20
  58. package/dist/bin/trails.d.ts +0 -3
  59. package/dist/bin/trails.d.ts.map +0 -1
  60. package/dist/bin/trails.js +0 -4
  61. package/dist/bin/trails.js.map +0 -1
  62. package/dist/src/app.d.ts +0 -2
  63. package/dist/src/app.d.ts.map +0 -1
  64. package/dist/src/app.js +0 -22
  65. package/dist/src/app.js.map +0 -1
  66. package/dist/src/clack.d.ts +0 -9
  67. package/dist/src/clack.d.ts.map +0 -1
  68. package/dist/src/clack.js +0 -84
  69. package/dist/src/clack.js.map +0 -1
  70. package/dist/src/cli.d.ts +0 -2
  71. package/dist/src/cli.d.ts.map +0 -1
  72. package/dist/src/cli.js +0 -13
  73. package/dist/src/cli.js.map +0 -1
  74. package/dist/src/trails/add-surface.d.ts +0 -13
  75. package/dist/src/trails/add-surface.d.ts.map +0 -1
  76. package/dist/src/trails/add-surface.js +0 -88
  77. package/dist/src/trails/add-surface.js.map +0 -1
  78. package/dist/src/trails/add-trail.d.ts +0 -10
  79. package/dist/src/trails/add-trail.d.ts.map +0 -1
  80. package/dist/src/trails/add-trail.js +0 -77
  81. package/dist/src/trails/add-trail.js.map +0 -1
  82. package/dist/src/trails/add-trailhead.d.ts +0 -13
  83. package/dist/src/trails/add-trailhead.d.ts.map +0 -1
  84. package/dist/src/trails/add-trailhead.js +0 -88
  85. package/dist/src/trails/add-trailhead.js.map +0 -1
  86. package/dist/src/trails/add-verify.d.ts +0 -10
  87. package/dist/src/trails/add-verify.d.ts.map +0 -1
  88. package/dist/src/trails/add-verify.js +0 -67
  89. package/dist/src/trails/add-verify.js.map +0 -1
  90. package/dist/src/trails/create-scaffold.d.ts +0 -15
  91. package/dist/src/trails/create-scaffold.d.ts.map +0 -1
  92. package/dist/src/trails/create-scaffold.js +0 -288
  93. package/dist/src/trails/create-scaffold.js.map +0 -1
  94. package/dist/src/trails/create.d.ts +0 -22
  95. package/dist/src/trails/create.d.ts.map +0 -1
  96. package/dist/src/trails/create.js +0 -121
  97. package/dist/src/trails/create.js.map +0 -1
  98. package/dist/src/trails/dev-clean.d.ts +0 -9
  99. package/dist/src/trails/dev-clean.d.ts.map +0 -1
  100. package/dist/src/trails/dev-clean.js +0 -65
  101. package/dist/src/trails/dev-clean.js.map +0 -1
  102. package/dist/src/trails/dev-reset.d.ts +0 -6
  103. package/dist/src/trails/dev-reset.d.ts.map +0 -1
  104. package/dist/src/trails/dev-reset.js +0 -38
  105. package/dist/src/trails/dev-reset.js.map +0 -1
  106. package/dist/src/trails/dev-stats.d.ts +0 -7
  107. package/dist/src/trails/dev-stats.d.ts.map +0 -1
  108. package/dist/src/trails/dev-stats.js +0 -61
  109. package/dist/src/trails/dev-stats.js.map +0 -1
  110. package/dist/src/trails/dev-support.d.ts +0 -64
  111. package/dist/src/trails/dev-support.d.ts.map +0 -1
  112. package/dist/src/trails/dev-support.js +0 -178
  113. package/dist/src/trails/dev-support.js.map +0 -1
  114. package/dist/src/trails/draft-promote.d.ts +0 -18
  115. package/dist/src/trails/draft-promote.d.ts.map +0 -1
  116. package/dist/src/trails/draft-promote.js +0 -386
  117. package/dist/src/trails/draft-promote.js.map +0 -1
  118. package/dist/src/trails/guide.d.ts +0 -21
  119. package/dist/src/trails/guide.d.ts.map +0 -1
  120. package/dist/src/trails/guide.js +0 -64
  121. package/dist/src/trails/guide.js.map +0 -1
  122. package/dist/src/trails/load-app.d.ts +0 -6
  123. package/dist/src/trails/load-app.d.ts.map +0 -1
  124. package/dist/src/trails/load-app.js +0 -67
  125. package/dist/src/trails/load-app.js.map +0 -1
  126. package/dist/src/trails/project.d.ts +0 -8
  127. package/dist/src/trails/project.d.ts.map +0 -1
  128. package/dist/src/trails/project.js +0 -54
  129. package/dist/src/trails/project.js.map +0 -1
  130. package/dist/src/trails/survey.d.ts +0 -18
  131. package/dist/src/trails/survey.d.ts.map +0 -1
  132. package/dist/src/trails/survey.js +0 -212
  133. package/dist/src/trails/survey.js.map +0 -1
  134. package/dist/src/trails/topo-constants.d.ts +0 -3
  135. package/dist/src/trails/topo-constants.d.ts.map +0 -1
  136. package/dist/src/trails/topo-constants.js +0 -3
  137. package/dist/src/trails/topo-constants.js.map +0 -1
  138. package/dist/src/trails/topo-export.d.ts +0 -18
  139. package/dist/src/trails/topo-export.d.ts.map +0 -1
  140. package/dist/src/trails/topo-export.js +0 -34
  141. package/dist/src/trails/topo-export.js.map +0 -1
  142. package/dist/src/trails/topo-history.d.ts +0 -24
  143. package/dist/src/trails/topo-history.d.ts.map +0 -1
  144. package/dist/src/trails/topo-history.js +0 -33
  145. package/dist/src/trails/topo-history.js.map +0 -1
  146. package/dist/src/trails/topo-pin.d.ts +0 -21
  147. package/dist/src/trails/topo-pin.d.ts.map +0 -1
  148. package/dist/src/trails/topo-pin.js +0 -35
  149. package/dist/src/trails/topo-pin.js.map +0 -1
  150. package/dist/src/trails/topo-read-support.d.ts +0 -54
  151. package/dist/src/trails/topo-read-support.d.ts.map +0 -1
  152. package/dist/src/trails/topo-read-support.js +0 -178
  153. package/dist/src/trails/topo-read-support.js.map +0 -1
  154. package/dist/src/trails/topo-reports.d.ts +0 -50
  155. package/dist/src/trails/topo-reports.d.ts.map +0 -1
  156. package/dist/src/trails/topo-reports.js +0 -122
  157. package/dist/src/trails/topo-reports.js.map +0 -1
  158. package/dist/src/trails/topo-show.d.ts +0 -23
  159. package/dist/src/trails/topo-show.d.ts.map +0 -1
  160. package/dist/src/trails/topo-show.js +0 -53
  161. package/dist/src/trails/topo-show.js.map +0 -1
  162. package/dist/src/trails/topo-store-support.d.ts +0 -13
  163. package/dist/src/trails/topo-store-support.d.ts.map +0 -1
  164. package/dist/src/trails/topo-store-support.js +0 -55
  165. package/dist/src/trails/topo-store-support.js.map +0 -1
  166. package/dist/src/trails/topo-support.d.ts +0 -87
  167. package/dist/src/trails/topo-support.d.ts.map +0 -1
  168. package/dist/src/trails/topo-support.js +0 -165
  169. package/dist/src/trails/topo-support.js.map +0 -1
  170. package/dist/src/trails/topo-unpin.d.ts +0 -15
  171. package/dist/src/trails/topo-unpin.d.ts.map +0 -1
  172. package/dist/src/trails/topo-unpin.js +0 -39
  173. package/dist/src/trails/topo-unpin.js.map +0 -1
  174. package/dist/src/trails/topo-verify.d.ts +0 -5
  175. package/dist/src/trails/topo-verify.d.ts.map +0 -1
  176. package/dist/src/trails/topo-verify.js +0 -28
  177. package/dist/src/trails/topo-verify.js.map +0 -1
  178. package/dist/src/trails/topo.d.ts +0 -5
  179. package/dist/src/trails/topo.d.ts.map +0 -1
  180. package/dist/src/trails/topo.js +0 -67
  181. package/dist/src/trails/topo.js.map +0 -1
  182. package/dist/src/trails/warden.d.ts +0 -19
  183. package/dist/src/trails/warden.d.ts.map +0 -1
  184. package/dist/src/trails/warden.js +0 -89
  185. package/dist/src/trails/warden.js.map +0 -1
  186. package/dist/tsconfig.tsbuildinfo +0 -1
  187. package/src/__tests__/create.test.ts +0 -351
  188. package/src/__tests__/draft-promote.test.ts +0 -144
  189. package/src/__tests__/guide.test.ts +0 -91
  190. package/src/__tests__/load-app.test.ts +0 -58
  191. package/src/__tests__/survey.test.ts +0 -301
  192. package/src/__tests__/topo-dev.test.ts +0 -424
  193. package/src/__tests__/warden.test.ts +0 -74
  194. package/src/trails/add-trailhead.ts +0 -121
  195. package/src/trails/topo-export.ts +0 -39
  196. package/src/trails/topo-show.ts +0 -58
  197. package/tsconfig.json +0 -9
@@ -1,288 +0,0 @@
1
- /**
2
- * `create.scaffold` trail -- Creates base project structure.
3
- *
4
- * Generates package.json, tsconfig, app.ts, starter trails, and .trails/ directory.
5
- */
6
- import { mkdirSync } from 'node:fs';
7
- import { dirname, join, resolve } from 'node:path';
8
- import { Result, trail } from '@ontrails/core';
9
- import { z } from 'zod';
10
- // ---------------------------------------------------------------------------
11
- // Content generators
12
- // ---------------------------------------------------------------------------
13
- const generatePackageJson = (name) => {
14
- const deps = {
15
- '@ontrails/core': 'workspace:*',
16
- zod: '^4.0.0',
17
- };
18
- const pkg = {
19
- dependencies: Object.fromEntries(Object.entries(deps).toSorted(([a], [b]) => a.localeCompare(b))),
20
- name,
21
- scripts: {
22
- build: 'tsc -b',
23
- lint: 'oxlint ./src',
24
- test: 'bun test',
25
- typecheck: 'tsc --noEmit',
26
- },
27
- type: 'module',
28
- version: '0.1.0',
29
- };
30
- return JSON.stringify(pkg, null, 2);
31
- };
32
- const TSCONFIG_CONTENT = JSON.stringify({
33
- compilerOptions: {
34
- declaration: true,
35
- module: 'ESNext',
36
- moduleResolution: 'bundler',
37
- noUncheckedIndexedAccess: true,
38
- outDir: 'dist',
39
- rootDir: 'src',
40
- skipLibCheck: true,
41
- strict: true,
42
- target: 'ESNext',
43
- verbatimModuleSyntax: true,
44
- },
45
- include: ['src'],
46
- }, null, 2);
47
- const GITIGNORE_CONTENT = `node_modules/
48
- dist/
49
- *.tsbuildinfo
50
- .trails/_trailhead.json
51
- `;
52
- const OXLINTRC_CONTENT = JSON.stringify({
53
- extends: ['ultracite'],
54
- }, null, 2);
55
- const OXFMTRC_CONTENT = `{
56
- // ultracite defaults
57
- }
58
- `;
59
- const generateHelloTrail = () => `import { Result, trail } from '@ontrails/core';
60
- import { z } from 'zod';
61
-
62
- export const hello = trail('hello', {
63
- description: 'Say hello',
64
- examples: [
65
- {
66
- expected: { message: 'Hello, world!' },
67
- input: {},
68
- name: 'Default greeting',
69
- },
70
- {
71
- expected: { message: 'Hello, Trails!' },
72
- input: { name: 'Trails' },
73
- name: 'Named greeting',
74
- },
75
- ],
76
- blaze: (input) => {
77
- const name = input.name ?? 'world';
78
- return Result.ok({ message: \`Hello, \${name}!\` });
79
- },
80
- input: z.object({
81
- name: z.string().optional(),
82
- }),
83
- output: z.object({
84
- message: z.string(),
85
- }),
86
- intent: 'read',
87
- });
88
- `;
89
- const generateEntityTrails = () => `import { Result, trail } from '@ontrails/core';
90
- import { z } from 'zod';
91
-
92
- const entitySchema = z.object({
93
- id: z.string(),
94
- name: z.string(),
95
- });
96
-
97
- export const show = trail('entity.show', {
98
- description: 'Show an entity by ID',
99
- examples: [
100
- {
101
- expected: { id: '1', name: 'Example' },
102
- input: { id: '1' },
103
- name: 'Show entity',
104
- },
105
- ],
106
- blaze: (input) => {
107
- return Result.ok({ id: input.id, name: 'Example' });
108
- },
109
- input: z.object({ id: z.string() }),
110
- output: entitySchema,
111
- intent: 'read',
112
- });
113
-
114
- export const add = trail('entity.add', {
115
- description: 'Add a new entity',
116
- examples: [
117
- {
118
- expected: { id: '1', name: 'New' },
119
- input: { name: 'New' },
120
- name: 'Add entity',
121
- },
122
- ],
123
- blaze: (input) => {
124
- return Result.ok({ id: '1', name: input.name });
125
- },
126
- input: z.object({ name: z.string() }),
127
- output: entitySchema,
128
- });
129
- `;
130
- const generateSearchTrail = () => `import { Result, trail } from '@ontrails/core';
131
- import { z } from 'zod';
132
-
133
- export const search = trail('search', {
134
- description: 'Search entities by query',
135
- examples: [
136
- {
137
- expected: { results: [] },
138
- input: { query: 'test' },
139
- name: 'Search entities',
140
- },
141
- ],
142
- blaze: () => {
143
- return Result.ok({ results: [] });
144
- },
145
- input: z.object({ query: z.string() }),
146
- output: z.object({
147
- results: z.array(z.object({ id: z.string(), name: z.string() })),
148
- }),
149
- intent: 'read',
150
- });
151
- `;
152
- const generateOnboardTrail = () => `import { Result, trail } from '@ontrails/core';
153
- import { z } from 'zod';
154
-
155
- export const onboard = trail('entity.onboard', {
156
- description: 'Onboard a new entity end-to-end',
157
- crosses: ['entity.add'],
158
- blaze: async (input, ctx) => {
159
- const result = await ctx.cross('entity.add', { name: input.name });
160
- if (result.isErr()) {
161
- return result;
162
- }
163
- return Result.ok({ onboarded: true });
164
- },
165
- input: z.object({ name: z.string() }),
166
- output: z.object({ onboarded: z.boolean() }),
167
- });
168
- `;
169
- const generateEntitySignals = () => `import { signal } from '@ontrails/core';
170
- import { z } from 'zod';
171
-
172
- export const entityUpdated = signal('entity.updated', {
173
- description: 'Fired when an entity is updated',
174
- payload: z.object({
175
- entityId: z.string(),
176
- updatedAt: z.string(),
177
- }),
178
- });
179
- `;
180
- const generateStore = () => `/** In-memory store for entities. */
181
-
182
- interface Entity {
183
- readonly id: string;
184
- readonly name: string;
185
- }
186
-
187
- const store = new Map<string, Entity>();
188
-
189
- export const getEntity = (id: string): Entity | undefined => store.get(id);
190
- export const addEntity = (entity: Entity): void => {
191
- store.set(entity.id, entity);
192
- };
193
- export const deleteEntity = (id: string): boolean => store.delete(id);
194
- export const listEntities = (): Entity[] => Array.from(store.values());
195
- `;
196
- const starterImports = {
197
- empty: { imports: [], modules: [] },
198
- entity: {
199
- imports: [
200
- "import * as entity from './trails/entity.js';",
201
- "import * as search from './trails/search.js';",
202
- "import * as onboard from './trails/onboard.js';",
203
- "import * as entitySignals from './signals/entity-signals.js';",
204
- ],
205
- modules: ['entity', 'search', 'onboard', 'entitySignals'],
206
- },
207
- hello: {
208
- imports: ["import * as hello from './trails/hello.js';"],
209
- modules: ['hello'],
210
- },
211
- };
212
- const generateAppTs = (name, starter) => {
213
- const { imports, modules } = starterImports[starter];
214
- const topoArgs = modules.length > 0 ? `'${name}', ${modules.join(', ')}` : `'${name}'`;
215
- return [
216
- "import { topo } from '@ontrails/core';",
217
- ...imports,
218
- '',
219
- `export const app = topo(${topoArgs});`,
220
- '',
221
- ].join('\n');
222
- };
223
- // ---------------------------------------------------------------------------
224
- // File collection and writing
225
- // ---------------------------------------------------------------------------
226
- const starterFileGenerators = {
227
- empty: () => [['src/trails/.gitkeep', '']],
228
- entity: () => [
229
- ['src/trails/entity.ts', generateEntityTrails()],
230
- ['src/trails/search.ts', generateSearchTrail()],
231
- ['src/trails/onboard.ts', generateOnboardTrail()],
232
- ['src/signals/entity-signals.ts', generateEntitySignals()],
233
- ['src/store.ts', generateStore()],
234
- ],
235
- hello: () => [['src/trails/hello.ts', generateHelloTrail()]],
236
- };
237
- const collectScaffoldFiles = (name, starter) => new Map([
238
- ['package.json', generatePackageJson(name)],
239
- ['tsconfig.json', TSCONFIG_CONTENT],
240
- ['.gitignore', GITIGNORE_CONTENT],
241
- ['.oxlintrc.json', OXLINTRC_CONTENT],
242
- ['.oxfmtrc.jsonc', OXFMTRC_CONTENT],
243
- ['src/app.ts', generateAppTs(name, starter)],
244
- ...starterFileGenerators[starter](),
245
- ]);
246
- const writeScaffoldFiles = async (projectDir, fileMap) => {
247
- const files = [];
248
- for (const [relativePath, content] of fileMap) {
249
- const fullPath = join(projectDir, relativePath);
250
- mkdirSync(dirname(fullPath), { recursive: true });
251
- await Bun.write(fullPath, content);
252
- files.push(relativePath);
253
- }
254
- return files;
255
- };
256
- // ---------------------------------------------------------------------------
257
- // Trail definition
258
- // ---------------------------------------------------------------------------
259
- export const createScaffold = trail('create.scaffold', {
260
- blaze: async (input) => {
261
- const projectDir = resolve(input.dir ?? '.', input.name);
262
- const starter = (input.starter ?? 'hello');
263
- const fileMap = collectScaffoldFiles(input.name, starter);
264
- const files = await writeScaffoldFiles(projectDir, fileMap);
265
- mkdirSync(join(projectDir, '.trails'), { recursive: true });
266
- return Result.ok({
267
- created: files,
268
- dir: projectDir,
269
- name: input.name,
270
- });
271
- },
272
- description: 'Scaffold a new Trails project',
273
- input: z.object({
274
- dir: z.string().optional().describe('Parent directory'),
275
- name: z.string().describe('Project name'),
276
- starter: z
277
- .enum(['hello', 'entity', 'empty'])
278
- .default('hello')
279
- .describe('Starter trail'),
280
- }),
281
- meta: { internal: true },
282
- output: z.object({
283
- created: z.array(z.string()),
284
- dir: z.string(),
285
- name: z.string(),
286
- }),
287
- });
288
- //# sourceMappingURL=create-scaffold.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-scaffold.js","sourceRoot":"","sources":["../../../src/trails/create-scaffold.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- /**
2
- * `create` route -- Create a new Trails project.
3
- *
4
- * Composes create.scaffold, add.trailhead, and add.verify sub-trails
5
- * via ctx.cross().
6
- */
7
- type Starter = 'empty' | 'entity' | 'hello';
8
- type Trailhead = 'cli' | 'mcp';
9
- interface CreateInput {
10
- readonly dir?: string | undefined;
11
- readonly name: string;
12
- readonly starter: Starter;
13
- readonly trailheads: readonly Trailhead[];
14
- readonly verify: boolean;
15
- }
16
- export declare const createRoute: import("@ontrails/core").Trail<CreateInput, {
17
- created: string[];
18
- dir: string;
19
- name: string;
20
- }>;
21
- export {};
22
- //# sourceMappingURL=create.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/trails/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,KAAK,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC5C,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AAE/B,UAAU,WAAW;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AA4HD,eAAO,MAAM,WAAW;aAnCK,MAAM,EAAE;SAAO,MAAM;UAAQ,MAAM;EAyF9D,CAAC"}
@@ -1,121 +0,0 @@
1
- /**
2
- * `create` route -- Create a new Trails project.
3
- *
4
- * Composes create.scaffold, add.trailhead, and add.verify sub-trails
5
- * via ctx.cross().
6
- */
7
- import { Result, trail } from '@ontrails/core';
8
- import { z } from 'zod';
9
- const buildScaffoldInput = (input) => ({
10
- ...(input.dir === undefined ? {} : { dir: input.dir }),
11
- name: input.name,
12
- starter: input.starter,
13
- });
14
- const buildTrailheadInput = (dir, trailhead) => ({
15
- dir,
16
- trailhead,
17
- });
18
- const buildVerifyInput = (input) => ({
19
- ...(input.dir === undefined ? {} : { dir: input.dir }),
20
- name: input.name,
21
- });
22
- const scaffoldProject = (cross, input) => cross('create.scaffold', buildScaffoldInput(input));
23
- const addTrailheadFiles = async (cross, dir, trailheads) => {
24
- const created = [];
25
- for (const trailhead of trailheads) {
26
- const result = await cross('add.trailhead', buildTrailheadInput(dir, trailhead));
27
- if (result.isErr()) {
28
- return Result.err(result.error);
29
- }
30
- created.push(result.value.created);
31
- }
32
- return Result.ok(created);
33
- };
34
- const collectVerifyFiles = async (cross, input) => {
35
- if (!input.verify) {
36
- return Result.ok([]);
37
- }
38
- const result = await cross('add.verify', buildVerifyInput(input));
39
- return result.isErr()
40
- ? Result.err(result.error)
41
- : Result.ok(result.value.created);
42
- };
43
- const collectCreatedFiles = (scaffolded, trailheads, verify) => [...scaffolded, ...trailheads, ...verify];
44
- const runCreate = async (cross, input) => {
45
- const scaffolded = await scaffoldProject(cross, input);
46
- if (scaffolded.isErr()) {
47
- return Result.err(scaffolded.error);
48
- }
49
- const trailheadResults = await addTrailheadFiles(cross, scaffolded.value.dir, input.trailheads);
50
- if (trailheadResults.isErr()) {
51
- return Result.err(trailheadResults.error);
52
- }
53
- const verifyFiles = await collectVerifyFiles(cross, input);
54
- if (verifyFiles.isErr()) {
55
- return Result.err(verifyFiles.error);
56
- }
57
- return Result.ok({
58
- created: collectCreatedFiles(scaffolded.value.created, trailheadResults.value, verifyFiles.value),
59
- dir: scaffolded.value.dir,
60
- name: input.name,
61
- });
62
- };
63
- // ---------------------------------------------------------------------------
64
- // Route definition
65
- // ---------------------------------------------------------------------------
66
- export const createRoute = trail('create', {
67
- blaze: async (input, ctx) => {
68
- if (!ctx.cross) {
69
- return Result.err(new Error('create route requires ctx.cross'));
70
- }
71
- return await runCreate(ctx.cross, input);
72
- },
73
- crosses: ['create.scaffold', 'add.trailhead', 'add.verify'],
74
- description: 'Create a new Trails project',
75
- fields: {
76
- starter: {
77
- options: [
78
- {
79
- hint: 'One trail, one example',
80
- label: 'Hello world',
81
- value: 'hello',
82
- },
83
- {
84
- hint: '4 trails, signal, store',
85
- label: 'Entity CRUD',
86
- value: 'entity',
87
- },
88
- { hint: 'Just the structure', label: 'Empty', value: 'empty' },
89
- ],
90
- },
91
- trailheads: {
92
- options: [
93
- { hint: 'Commander-based command line', label: 'CLI', value: 'cli' },
94
- {
95
- hint: 'Model Context Protocol for agents',
96
- label: 'MCP',
97
- value: 'mcp',
98
- },
99
- ],
100
- },
101
- },
102
- input: z.object({
103
- dir: z.string().optional().describe('Parent directory'),
104
- name: z.string().describe('Project name'),
105
- starter: z
106
- .enum(['hello', 'entity', 'empty'])
107
- .default('hello')
108
- .describe('Starter trail'),
109
- trailheads: z
110
- .array(z.enum(['cli', 'mcp']))
111
- .default(['cli'])
112
- .describe('Trailheads'),
113
- verify: z.boolean().default(true).describe('Include testing + warden'),
114
- }),
115
- output: z.object({
116
- created: z.array(z.string()),
117
- dir: z.string(),
118
- name: z.string(),
119
- }),
120
- });
121
- //# sourceMappingURL=create.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/trails/create.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- export declare const devCleanTrail: import("@ontrails/core").Trail<{
2
- dryRun: boolean;
3
- saves: number;
4
- trackAgeMs: number;
5
- tracks: number;
6
- yes: boolean;
7
- rootDir?: string | undefined;
8
- }, import("./dev-support.js").DevCleanReport>;
9
- //# sourceMappingURL=dev-clean.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-clean.d.ts","sourceRoot":"","sources":["../../../src/trails/dev-clean.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa;;;;;;;6CAkExB,CAAC"}
@@ -1,65 +0,0 @@
1
- import { Result, ValidationError, trail } from '@ontrails/core';
2
- import { z } from 'zod';
3
- import { cleanDevState, DEFAULT_TOPO_SAVE_RETENTION } from './dev-support.js';
4
- import { isolatedExampleInput } from './topo-support.js';
5
- export const devCleanTrail = trail('dev.clean', {
6
- blaze: (input, ctx) => {
7
- if (input.dryRun !== true && input.yes !== true) {
8
- return Result.err(new ValidationError('Refusing to clean local state without `--yes` or `--dry-run`.'));
9
- }
10
- const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
11
- return Result.ok(cleanDevState({
12
- dryRun: input.dryRun,
13
- maxAge: input.trackAgeMs,
14
- maxRecords: input.tracks,
15
- rootDir,
16
- saveRetention: input.saves,
17
- }));
18
- },
19
- description: 'Prune unpinned topo saves and old track records',
20
- examples: [
21
- {
22
- input: {
23
- dryRun: true,
24
- rootDir: isolatedExampleInput('dev-clean').rootDir,
25
- },
26
- name: 'Preview local cleanup',
27
- },
28
- ],
29
- input: z.object({
30
- dryRun: z
31
- .boolean()
32
- .default(true)
33
- .describe('Preview cleanup without changing state'),
34
- rootDir: z.string().optional().describe('Workspace root directory'),
35
- saves: z
36
- .number()
37
- .default(DEFAULT_TOPO_SAVE_RETENTION)
38
- .describe('Unpinned topo saves to retain'),
39
- trackAgeMs: z
40
- .number()
41
- .default(7 * 24 * 60 * 60 * 1000)
42
- .describe('Maximum retained track age in milliseconds'),
43
- tracks: z.number().default(10_000).describe('Maximum retained track count'),
44
- yes: z.boolean().default(false).describe('Confirm destructive changes'),
45
- }),
46
- intent: 'destroy',
47
- output: z.object({
48
- dryRun: z.boolean(),
49
- remaining: z.object({
50
- pinCount: z.number(),
51
- saveCount: z.number(),
52
- trackCount: z.number(),
53
- }),
54
- removed: z.object({
55
- topoSaves: z.number(),
56
- trackRecords: z.number(),
57
- }),
58
- retention: z.object({
59
- saves: z.number(),
60
- trackAgeMs: z.number(),
61
- tracks: z.number(),
62
- }),
63
- }),
64
- });
65
- //# sourceMappingURL=dev-clean.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-clean.js","sourceRoot":"","sources":["../../../src/trails/dev-clean.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- export declare const devResetTrail: import("@ontrails/core").Trail<{
2
- dryRun: boolean;
3
- yes: boolean;
4
- rootDir?: string | undefined;
5
- }, import("./dev-support.js").DevResetReport>;
6
- //# sourceMappingURL=dev-reset.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-reset.d.ts","sourceRoot":"","sources":["../../../src/trails/dev-reset.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa;;;;6CAqCxB,CAAC"}
@@ -1,38 +0,0 @@
1
- import { Result, ValidationError, trail } from '@ontrails/core';
2
- import { z } from 'zod';
3
- import { resetDevState } from './dev-support.js';
4
- import { isolatedExampleInput } from './topo-support.js';
5
- export const devResetTrail = trail('dev.reset', {
6
- blaze: (input, ctx) => {
7
- if (input.dryRun !== true && input.yes !== true) {
8
- return Result.err(new ValidationError('Refusing to reset local state without `--yes` or `--dry-run`.'));
9
- }
10
- const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
11
- return Result.ok(resetDevState({ dryRun: input.dryRun, rootDir }));
12
- },
13
- description: 'Remove local Trails database artifacts',
14
- examples: [
15
- {
16
- input: {
17
- dryRun: true,
18
- rootDir: isolatedExampleInput('dev-reset').rootDir,
19
- },
20
- name: 'Preview local reset',
21
- },
22
- ],
23
- input: z.object({
24
- dryRun: z
25
- .boolean()
26
- .default(true)
27
- .describe('Preview reset without changing state'),
28
- rootDir: z.string().optional().describe('Workspace root directory'),
29
- yes: z.boolean().default(false).describe('Confirm destructive changes'),
30
- }),
31
- intent: 'destroy',
32
- output: z.object({
33
- dryRun: z.boolean(),
34
- removedCount: z.number(),
35
- removedFiles: z.array(z.string()),
36
- }),
37
- });
38
- //# sourceMappingURL=dev-reset.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-reset.js","sourceRoot":"","sources":["../../../src/trails/dev-reset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,EAAE;IAC9C,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,GAAG,CACf,IAAI,eAAe,CACjB,+DAA+D,CAChE,CACF,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,WAAW,EAAE,wCAAwC;IACrD,QAAQ,EAAE;QACR;YACE,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,OAAO;aACnD;YACD,IAAI,EAAE,qBAAqB;SAC5B;KACF;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,CAAC;aACN,OAAO,EAAE;aACT,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CAAC,sCAAsC,CAAC;QACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACnE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACxE,CAAC;IACF,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;QACnB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAClC,CAAC;CACH,CAAC,CAAC"}
@@ -1,7 +0,0 @@
1
- export declare const devStatsTrail: import("@ontrails/core").Trail<{
2
- saves: number;
3
- trackAgeMs: number;
4
- tracks: number;
5
- rootDir?: string | undefined;
6
- }, import("./dev-support.js").DevStatsReport>;
7
- //# sourceMappingURL=dev-stats.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-stats.d.ts","sourceRoot":"","sources":["../../../src/trails/dev-stats.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa;;;;;6CAyDxB,CAAC"}
@@ -1,61 +0,0 @@
1
- import { Result, trail } from '@ontrails/core';
2
- import { z } from 'zod';
3
- import { buildDevStats, DEFAULT_TOPO_SAVE_RETENTION } from './dev-support.js';
4
- import { isolatedExampleInput } from './topo-support.js';
5
- export const devStatsTrail = trail('dev.stats', {
6
- blaze: (input, ctx) => {
7
- const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
8
- return Result.ok(buildDevStats({
9
- maxAge: input.trackAgeMs,
10
- maxRecords: input.tracks,
11
- rootDir,
12
- saveRetention: input.saves,
13
- }));
14
- },
15
- description: 'Show local Trails workspace state and retention',
16
- examples: [
17
- {
18
- input: { rootDir: isolatedExampleInput('dev-stats').rootDir },
19
- name: 'Show local dev state',
20
- },
21
- ],
22
- input: z.object({
23
- rootDir: z.string().optional().describe('Workspace root directory'),
24
- saves: z
25
- .number()
26
- .default(DEFAULT_TOPO_SAVE_RETENTION)
27
- .describe('Unpinned topo saves to retain'),
28
- trackAgeMs: z
29
- .number()
30
- .default(7 * 24 * 60 * 60 * 1000)
31
- .describe('Maximum retained track age in milliseconds'),
32
- tracks: z.number().default(10_000).describe('Maximum retained track count'),
33
- }),
34
- intent: 'read',
35
- output: z.object({
36
- db: z.object({
37
- exists: z.boolean(),
38
- fileSizeBytes: z.number(),
39
- path: z.string(),
40
- }),
41
- lock: z.object({
42
- exists: z.boolean(),
43
- fileSizeBytes: z.number(),
44
- path: z.string(),
45
- }),
46
- retention: z.object({
47
- saves: z.number(),
48
- trackAgeMs: z.number(),
49
- tracks: z.number(),
50
- }),
51
- topo: z.object({
52
- pinCount: z.number(),
53
- prunableSaveCount: z.number(),
54
- saveCount: z.number(),
55
- }),
56
- tracker: z.object({
57
- recordCount: z.number(),
58
- }),
59
- }),
60
- });
61
- //# sourceMappingURL=dev-stats.js.map