@ontrails/trails 1.0.0-beta.4 → 1.0.0-beta.41

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 (165) hide show
  1. package/CHANGELOG.md +1104 -4
  2. package/README.md +27 -0
  3. package/package.json +31 -7
  4. package/src/app.ts +147 -3
  5. package/src/cli.ts +345 -11
  6. package/src/completions.ts +240 -0
  7. package/src/lifecycle-source-io.ts +33 -0
  8. package/src/load-app-mirror.ts +202 -0
  9. package/src/local-state-io.ts +173 -0
  10. package/src/mcp-app.ts +42 -0
  11. package/src/mcp-options.ts +91 -0
  12. package/src/mcp.ts +8 -0
  13. package/src/project-writes.ts +377 -0
  14. package/src/regrade/config.ts +152 -0
  15. package/src/regrade/history.ts +430 -0
  16. package/src/regrade/live-api-preserve.ts +8 -0
  17. package/src/regrade/plan-artifact.ts +285 -0
  18. package/src/release/bindings.ts +39 -0
  19. package/src/release/check.ts +844 -0
  20. package/src/release/config.ts +63 -0
  21. package/src/release/contract-facts.ts +425 -0
  22. package/src/release/index.ts +142 -0
  23. package/src/release/lock-roundtrip-smoke.ts +230 -0
  24. package/src/release/native-bun-publish.ts +651 -0
  25. package/src/release/native-bun-registry.ts +765 -0
  26. package/src/release/notes-cli.ts +171 -0
  27. package/src/release/notes.ts +390 -0
  28. package/src/release/pack-coherence.ts +455 -0
  29. package/src/release/packed-artifacts-smoke.ts +236 -0
  30. package/src/release/policy.ts +1687 -0
  31. package/src/release/semver.ts +104 -0
  32. package/src/release/smoke.ts +56 -0
  33. package/src/release/wayfinder-dogfood-smoke.ts +760 -0
  34. package/src/retired-topo-command.ts +36 -0
  35. package/src/run-adapter-check.ts +76 -0
  36. package/src/run-collision.ts +126 -0
  37. package/src/run-completions-install.ts +179 -0
  38. package/src/run-example.ts +149 -0
  39. package/src/run-examples.ts +148 -0
  40. package/src/run-quiet.ts +75 -0
  41. package/src/run-release-check.ts +74 -0
  42. package/src/run-schema.ts +74 -0
  43. package/src/run-trace.ts +273 -0
  44. package/src/run-warden.ts +39 -0
  45. package/src/run-watch.ts +432 -0
  46. package/src/run-wayfind-outline.ts +170 -0
  47. package/src/scaffold-version-sync.ts +183 -0
  48. package/src/scaffold-versions.generated.ts +12 -0
  49. package/src/trails/adapter-check.ts +244 -0
  50. package/src/trails/add-surface.ts +99 -45
  51. package/src/trails/add-trail.ts +84 -37
  52. package/src/trails/add-verify.ts +100 -30
  53. package/src/trails/compile.ts +58 -0
  54. package/src/trails/completions-complete.ts +165 -0
  55. package/src/trails/completions.ts +47 -0
  56. package/src/trails/create-adapter.ts +785 -0
  57. package/src/trails/create-scaffold.ts +401 -106
  58. package/src/trails/create-versions.ts +62 -0
  59. package/src/trails/create.ts +186 -72
  60. package/src/trails/deprecate.ts +59 -0
  61. package/src/trails/dev-clean.ts +82 -0
  62. package/src/trails/dev-reset.ts +50 -0
  63. package/src/trails/dev-stats.ts +72 -0
  64. package/src/trails/dev-support.ts +360 -0
  65. package/src/trails/doctor.ts +77 -0
  66. package/src/trails/draft-promote.ts +949 -0
  67. package/src/trails/guide.ts +70 -68
  68. package/src/trails/load-app.ts +1123 -15
  69. package/src/trails/operator-context.ts +66 -0
  70. package/src/trails/project.ts +17 -3
  71. package/src/trails/regrade.ts +3091 -0
  72. package/src/trails/release-check.ts +105 -0
  73. package/src/trails/release-smoke.ts +49 -0
  74. package/src/trails/revise.ts +53 -0
  75. package/src/trails/root-dir.ts +21 -0
  76. package/src/trails/run-example.ts +475 -0
  77. package/src/trails/run-examples.ts +129 -0
  78. package/src/trails/run.ts +434 -0
  79. package/src/trails/scaffold-json.ts +58 -0
  80. package/src/trails/survey.ts +877 -214
  81. package/src/trails/topo-activation.ts +14 -0
  82. package/src/trails/topo-constants.ts +2 -0
  83. package/src/trails/topo-history.ts +47 -0
  84. package/src/trails/topo-output-schemas.ts +259 -0
  85. package/src/trails/topo-pin.ts +38 -0
  86. package/src/trails/topo-read-support.ts +368 -0
  87. package/src/trails/topo-reports.ts +809 -0
  88. package/src/trails/topo-store-support.ts +325 -0
  89. package/src/trails/topo-support.ts +220 -0
  90. package/src/trails/topo-unpin.ts +61 -0
  91. package/src/trails/topo.ts +92 -0
  92. package/src/trails/validate.ts +27 -0
  93. package/src/trails/version-lifecycle-support.ts +936 -0
  94. package/src/trails/warden-guide.ts +134 -0
  95. package/src/trails/warden.ts +198 -58
  96. package/src/trails/wayfind-outline.ts +876 -0
  97. package/src/trails/wayfind.ts +1053 -0
  98. package/src/versions.ts +31 -0
  99. package/.turbo/turbo-build.log +0 -1
  100. package/.turbo/turbo-lint.log +0 -3
  101. package/.turbo/turbo-typecheck.log +0 -1
  102. package/__tests__/examples.test.ts +0 -6
  103. package/dist/bin/trails.d.ts +0 -3
  104. package/dist/bin/trails.d.ts.map +0 -1
  105. package/dist/bin/trails.js +0 -4
  106. package/dist/bin/trails.js.map +0 -1
  107. package/dist/src/app.d.ts +0 -2
  108. package/dist/src/app.d.ts.map +0 -1
  109. package/dist/src/app.js +0 -11
  110. package/dist/src/app.js.map +0 -1
  111. package/dist/src/clack.d.ts +0 -9
  112. package/dist/src/clack.d.ts.map +0 -1
  113. package/dist/src/clack.js +0 -84
  114. package/dist/src/clack.js.map +0 -1
  115. package/dist/src/cli.d.ts +0 -2
  116. package/dist/src/cli.d.ts.map +0 -1
  117. package/dist/src/cli.js +0 -13
  118. package/dist/src/cli.js.map +0 -1
  119. package/dist/src/trails/add-surface.d.ts +0 -13
  120. package/dist/src/trails/add-surface.d.ts.map +0 -1
  121. package/dist/src/trails/add-surface.js +0 -88
  122. package/dist/src/trails/add-surface.js.map +0 -1
  123. package/dist/src/trails/add-trail.d.ts +0 -10
  124. package/dist/src/trails/add-trail.d.ts.map +0 -1
  125. package/dist/src/trails/add-trail.js +0 -77
  126. package/dist/src/trails/add-trail.js.map +0 -1
  127. package/dist/src/trails/add-verify.d.ts +0 -10
  128. package/dist/src/trails/add-verify.d.ts.map +0 -1
  129. package/dist/src/trails/add-verify.js +0 -67
  130. package/dist/src/trails/add-verify.js.map +0 -1
  131. package/dist/src/trails/create-scaffold.d.ts +0 -15
  132. package/dist/src/trails/create-scaffold.d.ts.map +0 -1
  133. package/dist/src/trails/create-scaffold.js +0 -288
  134. package/dist/src/trails/create-scaffold.js.map +0 -1
  135. package/dist/src/trails/create.d.ts +0 -22
  136. package/dist/src/trails/create.d.ts.map +0 -1
  137. package/dist/src/trails/create.js +0 -121
  138. package/dist/src/trails/create.js.map +0 -1
  139. package/dist/src/trails/guide.d.ts +0 -11
  140. package/dist/src/trails/guide.d.ts.map +0 -1
  141. package/dist/src/trails/guide.js +0 -80
  142. package/dist/src/trails/guide.js.map +0 -1
  143. package/dist/src/trails/load-app.d.ts +0 -4
  144. package/dist/src/trails/load-app.d.ts.map +0 -1
  145. package/dist/src/trails/load-app.js +0 -24
  146. package/dist/src/trails/load-app.js.map +0 -1
  147. package/dist/src/trails/project.d.ts +0 -8
  148. package/dist/src/trails/project.d.ts.map +0 -1
  149. package/dist/src/trails/project.js +0 -43
  150. package/dist/src/trails/project.js.map +0 -1
  151. package/dist/src/trails/survey.d.ts +0 -31
  152. package/dist/src/trails/survey.d.ts.map +0 -1
  153. package/dist/src/trails/survey.js +0 -221
  154. package/dist/src/trails/survey.js.map +0 -1
  155. package/dist/src/trails/warden.d.ts +0 -19
  156. package/dist/src/trails/warden.d.ts.map +0 -1
  157. package/dist/src/trails/warden.js +0 -88
  158. package/dist/src/trails/warden.js.map +0 -1
  159. package/dist/tsconfig.tsbuildinfo +0 -1
  160. package/src/__tests__/create.test.ts +0 -349
  161. package/src/__tests__/guide.test.ts +0 -91
  162. package/src/__tests__/load-app.test.ts +0 -15
  163. package/src/__tests__/survey.test.ts +0 -159
  164. package/src/__tests__/warden.test.ts +0 -74
  165. package/tsconfig.json +0 -9
@@ -4,11 +4,17 @@
4
4
  * Lists trails with descriptions and examples. Detailed guidance is planned for post-v1.
5
5
  */
6
6
 
7
- import type { Topo, Trail } from '@ontrails/core';
8
- import { Result, trail } from '@ontrails/core';
7
+ import { NotFoundError, Result, trail } from '@ontrails/core';
9
8
  import { z } from 'zod';
10
9
 
11
- import { loadApp } from './load-app.js';
10
+ import { withFreshOperatorApp } from './operator-context.js';
11
+ import { trailDetailOutput } from './topo-output-schemas.js';
12
+ import {
13
+ deriveCurrentGuideEntries,
14
+ deriveCurrentTopoDetail,
15
+ readSurfaceLayerNamesFromContext,
16
+ } from './topo-read-support.js';
17
+ import { createIsolatedExampleInput } from './topo-support.js';
12
18
 
13
19
  // ---------------------------------------------------------------------------
14
20
  // Types
@@ -18,87 +24,83 @@ interface GuideEntry {
18
24
  readonly description: string;
19
25
  readonly exampleCount: number;
20
26
  readonly id: string;
21
- readonly kind: string;
27
+ readonly kind: 'trail';
22
28
  }
23
29
 
24
- // ---------------------------------------------------------------------------
25
- // Helpers
26
- // ---------------------------------------------------------------------------
27
-
28
- const toGuideEntries = (app: Topo): GuideEntry[] => {
29
- const entries: GuideEntry[] = [];
30
+ type GuideTrailOutput =
31
+ | {
32
+ readonly entries: GuideEntry[];
33
+ readonly mode: 'list';
34
+ }
35
+ | {
36
+ readonly detail: z.output<typeof trailDetailOutput>;
37
+ readonly mode: 'detail';
38
+ };
30
39
 
31
- for (const item of app.list()) {
32
- const raw = item as unknown as Record<string, unknown>;
33
- entries.push({
34
- description:
35
- typeof raw['description'] === 'string'
36
- ? raw['description']
37
- : '(no description)',
38
- exampleCount: Array.isArray(raw['examples'])
39
- ? (raw['examples'] as unknown[]).length
40
- : 0,
41
- id: item.id,
42
- kind: item.kind,
43
- });
44
- }
40
+ const guideTrailInputSchema = z.object({
41
+ module: z.string().optional().describe('Path to the app module'),
42
+ rootDir: z.string().optional().describe('Workspace root directory'),
43
+ trailId: z.string().optional().describe('Trail ID for detailed guidance'),
44
+ });
45
45
 
46
- return entries;
47
- };
46
+ type GuideTrailInput = z.output<typeof guideTrailInputSchema>;
48
47
 
49
- const toGuideDetail = (item: Trail<unknown, unknown>): object => ({
50
- description: item.description ?? null,
51
- detours: item.detours ?? null,
52
- examples: item.examples ?? [],
53
- id: item.id,
54
- kind: item.kind,
55
- });
48
+ // ---------------------------------------------------------------------------
49
+ // Helpers
50
+ // ---------------------------------------------------------------------------
56
51
 
57
52
  export const guideTrail = trail('guide', {
58
53
  description: 'Runtime guidance for trails',
59
54
  examples: [
60
55
  {
61
56
  description: 'Lists all trails with descriptions and example counts',
62
- input: {},
57
+ input: createIsolatedExampleInput('guide-list'),
63
58
  name: 'List trail guidance',
64
59
  },
65
60
  ],
66
- input: z.object({
67
- module: z
68
- .string()
69
- .default('./src/app.ts')
70
- .describe('Path to the app module'),
71
- trailId: z.string().optional().describe('Trail ID for detailed guidance'),
72
- }),
61
+ implementation: async (input: GuideTrailInput, ctx) =>
62
+ withFreshOperatorApp<GuideTrailOutput>(input, ctx, ({ lease, rootDir }) => {
63
+ if (input.trailId) {
64
+ const detail = deriveCurrentTopoDetail(lease.app, input.trailId, {
65
+ overlays: lease.overlays,
66
+ rootDir,
67
+ surfaceLayerNames: readSurfaceLayerNamesFromContext(ctx),
68
+ });
69
+ if (detail === undefined || detail.kind !== 'trail') {
70
+ return Result.err(
71
+ new NotFoundError(`Trail not found: ${input.trailId}`)
72
+ );
73
+ }
74
+ return Result.ok({
75
+ detail,
76
+ mode: 'detail' as const,
77
+ });
78
+ }
79
+
80
+ return Result.ok({
81
+ entries: deriveCurrentGuideEntries(lease.app, {
82
+ rootDir,
83
+ }) as GuideEntry[],
84
+ mode: 'list' as const,
85
+ });
86
+ }),
87
+ input: guideTrailInputSchema,
73
88
  intent: 'read',
74
- output: z.union([
75
- z.array(
76
- z.object({
77
- description: z.string(),
78
- exampleCount: z.number(),
79
- id: z.string(),
80
- kind: z.string(),
81
- })
82
- ),
89
+ output: z.discriminatedUnion('mode', [
90
+ z.object({
91
+ entries: z.array(
92
+ z.object({
93
+ description: z.string(),
94
+ exampleCount: z.number(),
95
+ id: z.string(),
96
+ kind: z.literal('trail'),
97
+ })
98
+ ),
99
+ mode: z.literal('list'),
100
+ }),
83
101
  z.object({
84
- description: z.string().nullable(),
85
- detours: z.unknown().nullable(),
86
- examples: z.array(z.unknown()),
87
- id: z.string(),
88
- kind: z.string(),
102
+ detail: trailDetailOutput,
103
+ mode: z.literal('detail'),
89
104
  }),
90
105
  ]),
91
- run: async (input, ctx) => {
92
- const app = await loadApp(input.module, ctx.cwd ?? '.');
93
-
94
- if (input.trailId) {
95
- const item = app.get(input.trailId);
96
- if (!item) {
97
- return Result.err(new Error(`Trail not found: ${input.trailId}`));
98
- }
99
- return Result.ok(toGuideDetail(item as Trail<unknown, unknown>));
100
- }
101
-
102
- return Result.ok(toGuideEntries(app));
103
- },
104
106
  });