@ontrails/trails 1.0.0-beta.3 → 1.0.0-beta.32

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 (158) hide show
  1. package/CHANGELOG.md +975 -0
  2. package/README.md +27 -0
  3. package/package.json +30 -7
  4. package/src/app.ts +125 -2
  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 +40 -0
  11. package/src/mcp-options.ts +77 -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/release/bindings.ts +39 -0
  16. package/src/release/check.ts +844 -0
  17. package/src/release/config.ts +63 -0
  18. package/src/release/contract-facts.ts +425 -0
  19. package/src/release/index.ts +125 -0
  20. package/src/release/native-bun-publish.ts +651 -0
  21. package/src/release/native-bun-registry.ts +754 -0
  22. package/src/release/pack-coherence.ts +455 -0
  23. package/src/release/packed-artifacts-smoke.ts +236 -0
  24. package/src/release/policy.ts +1684 -0
  25. package/src/release/semver.ts +104 -0
  26. package/src/release/smoke.ts +46 -0
  27. package/src/release/wayfinder-dogfood-smoke.ts +760 -0
  28. package/src/retired-topo-command.ts +36 -0
  29. package/src/run-adapter-check.ts +76 -0
  30. package/src/run-collision.ts +126 -0
  31. package/src/run-completions-install.ts +179 -0
  32. package/src/run-example.ts +149 -0
  33. package/src/run-examples.ts +148 -0
  34. package/src/run-quiet.ts +75 -0
  35. package/src/run-release-check.ts +74 -0
  36. package/src/run-schema.ts +41 -0
  37. package/src/run-trace.ts +273 -0
  38. package/src/run-warden.ts +39 -0
  39. package/src/run-watch.ts +432 -0
  40. package/src/run-wayfind-outline.ts +166 -0
  41. package/src/scaffold-version-sync.ts +183 -0
  42. package/src/scaffold-versions.generated.ts +12 -0
  43. package/src/trails/adapter-check.ts +244 -0
  44. package/src/trails/add-surface.ts +94 -40
  45. package/src/trails/add-trail.ts +79 -41
  46. package/src/trails/add-verify.ts +95 -25
  47. package/src/trails/compile.ts +59 -0
  48. package/src/trails/completions-complete.ts +165 -0
  49. package/src/trails/completions.ts +47 -0
  50. package/src/trails/create-adapter.ts +1024 -0
  51. package/src/trails/create-scaffold.ts +399 -104
  52. package/src/trails/create-versions.ts +62 -0
  53. package/src/trails/create.ts +186 -72
  54. package/src/trails/deprecate.ts +59 -0
  55. package/src/trails/dev-clean.ts +82 -0
  56. package/src/trails/dev-reset.ts +50 -0
  57. package/src/trails/dev-stats.ts +72 -0
  58. package/src/trails/dev-support.ts +360 -0
  59. package/src/trails/doctor.ts +77 -0
  60. package/src/trails/draft-promote.ts +949 -0
  61. package/src/trails/guide.ts +71 -69
  62. package/src/trails/load-app.ts +1142 -16
  63. package/src/trails/operator-context.ts +66 -0
  64. package/src/trails/project.ts +17 -3
  65. package/src/trails/regrade.ts +292 -0
  66. package/src/trails/release-check.ts +105 -0
  67. package/src/trails/release-smoke.ts +48 -0
  68. package/src/trails/revise.ts +53 -0
  69. package/src/trails/root-dir.ts +21 -0
  70. package/src/trails/run-example.ts +475 -0
  71. package/src/trails/run-examples.ts +129 -0
  72. package/src/trails/run.ts +434 -0
  73. package/src/trails/scaffold-json.ts +58 -0
  74. package/src/trails/survey.ts +896 -227
  75. package/src/trails/topo-activation.ts +14 -0
  76. package/src/trails/topo-constants.ts +2 -0
  77. package/src/trails/topo-history.ts +47 -0
  78. package/src/trails/topo-output-schemas.ts +259 -0
  79. package/src/trails/topo-pin.ts +38 -0
  80. package/src/trails/topo-read-support.ts +363 -0
  81. package/src/trails/topo-reports.ts +809 -0
  82. package/src/trails/topo-store-support.ts +307 -0
  83. package/src/trails/topo-support.ts +219 -0
  84. package/src/trails/topo-unpin.ts +61 -0
  85. package/src/trails/topo.ts +92 -0
  86. package/src/trails/validate.ts +27 -0
  87. package/src/trails/version-lifecycle-support.ts +935 -0
  88. package/src/trails/warden-guide.ts +134 -0
  89. package/src/trails/warden.ts +198 -58
  90. package/src/trails/wayfind.ts +1001 -0
  91. package/src/versions.ts +31 -0
  92. package/.turbo/turbo-build.log +0 -1
  93. package/.turbo/turbo-lint.log +0 -3
  94. package/.turbo/turbo-typecheck.log +0 -1
  95. package/__tests__/examples.test.ts +0 -6
  96. package/dist/bin/trails.d.ts +0 -3
  97. package/dist/bin/trails.d.ts.map +0 -1
  98. package/dist/bin/trails.js +0 -4
  99. package/dist/bin/trails.js.map +0 -1
  100. package/dist/src/app.d.ts +0 -2
  101. package/dist/src/app.d.ts.map +0 -1
  102. package/dist/src/app.js +0 -11
  103. package/dist/src/app.js.map +0 -1
  104. package/dist/src/clack.d.ts +0 -9
  105. package/dist/src/clack.d.ts.map +0 -1
  106. package/dist/src/clack.js +0 -84
  107. package/dist/src/clack.js.map +0 -1
  108. package/dist/src/cli.d.ts +0 -2
  109. package/dist/src/cli.d.ts.map +0 -1
  110. package/dist/src/cli.js +0 -13
  111. package/dist/src/cli.js.map +0 -1
  112. package/dist/src/trails/add-surface.d.ts +0 -13
  113. package/dist/src/trails/add-surface.d.ts.map +0 -1
  114. package/dist/src/trails/add-surface.js +0 -88
  115. package/dist/src/trails/add-surface.js.map +0 -1
  116. package/dist/src/trails/add-trail.d.ts +0 -11
  117. package/dist/src/trails/add-trail.d.ts.map +0 -1
  118. package/dist/src/trails/add-trail.js +0 -85
  119. package/dist/src/trails/add-trail.js.map +0 -1
  120. package/dist/src/trails/add-verify.d.ts +0 -10
  121. package/dist/src/trails/add-verify.d.ts.map +0 -1
  122. package/dist/src/trails/add-verify.js +0 -67
  123. package/dist/src/trails/add-verify.js.map +0 -1
  124. package/dist/src/trails/create-scaffold.d.ts +0 -15
  125. package/dist/src/trails/create-scaffold.d.ts.map +0 -1
  126. package/dist/src/trails/create-scaffold.js +0 -288
  127. package/dist/src/trails/create-scaffold.js.map +0 -1
  128. package/dist/src/trails/create.d.ts +0 -22
  129. package/dist/src/trails/create.d.ts.map +0 -1
  130. package/dist/src/trails/create.js +0 -121
  131. package/dist/src/trails/create.js.map +0 -1
  132. package/dist/src/trails/guide.d.ts +0 -11
  133. package/dist/src/trails/guide.d.ts.map +0 -1
  134. package/dist/src/trails/guide.js +0 -80
  135. package/dist/src/trails/guide.js.map +0 -1
  136. package/dist/src/trails/load-app.d.ts +0 -4
  137. package/dist/src/trails/load-app.d.ts.map +0 -1
  138. package/dist/src/trails/load-app.js +0 -24
  139. package/dist/src/trails/load-app.js.map +0 -1
  140. package/dist/src/trails/project.d.ts +0 -8
  141. package/dist/src/trails/project.d.ts.map +0 -1
  142. package/dist/src/trails/project.js +0 -43
  143. package/dist/src/trails/project.js.map +0 -1
  144. package/dist/src/trails/survey.d.ts +0 -33
  145. package/dist/src/trails/survey.d.ts.map +0 -1
  146. package/dist/src/trails/survey.js +0 -225
  147. package/dist/src/trails/survey.js.map +0 -1
  148. package/dist/src/trails/warden.d.ts +0 -19
  149. package/dist/src/trails/warden.d.ts.map +0 -1
  150. package/dist/src/trails/warden.js +0 -88
  151. package/dist/src/trails/warden.js.map +0 -1
  152. package/dist/tsconfig.tsbuildinfo +0 -1
  153. package/src/__tests__/create.test.ts +0 -349
  154. package/src/__tests__/guide.test.ts +0 -91
  155. package/src/__tests__/load-app.test.ts +0 -15
  156. package/src/__tests__/survey.test.ts +0 -161
  157. package/src/__tests__/warden.test.ts +0 -74
  158. 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', {
53
+ blaze: async (input: GuideTrailInput, ctx) =>
54
+ withFreshOperatorApp<GuideTrailOutput>(input, ctx, ({ lease, rootDir }) => {
55
+ if (input.trailId) {
56
+ const detail = deriveCurrentTopoDetail(lease.app, input.trailId, {
57
+ cliAliases: lease.cliAliases,
58
+ rootDir,
59
+ surfaceLayerNames: readSurfaceLayerNamesFromContext(ctx),
60
+ });
61
+ if (detail === undefined || detail.kind !== 'trail') {
62
+ return Result.err(
63
+ new NotFoundError(`Trail not found: ${input.trailId}`)
64
+ );
65
+ }
66
+ return Result.ok({
67
+ detail,
68
+ mode: 'detail' as const,
69
+ });
70
+ }
71
+
72
+ return Result.ok({
73
+ entries: deriveCurrentGuideEntries(lease.app, {
74
+ rootDir,
75
+ }) as GuideEntry[],
76
+ mode: 'list' as const,
77
+ });
78
+ }),
58
79
  description: 'Runtime guidance for trails',
59
80
  examples: [
60
81
  {
61
82
  description: 'Lists all trails with descriptions and example counts',
62
- input: {},
83
+ input: createIsolatedExampleInput('guide-list'),
63
84
  name: 'List trail guidance',
64
85
  },
65
86
  ],
66
- implementation: async (input, ctx) => {
67
- const app = await loadApp(input.module, ctx.cwd ?? '.');
68
-
69
- if (input.trailId) {
70
- const item = app.get(input.trailId);
71
- if (!item) {
72
- return Result.err(new Error(`Trail not found: ${input.trailId}`));
73
- }
74
- return Result.ok(toGuideDetail(item as Trail<unknown, unknown>));
75
- }
76
-
77
- return Result.ok(toGuideEntries(app));
78
- },
79
- input: z.object({
80
- module: z
81
- .string()
82
- .default('./src/app.ts')
83
- .describe('Path to the app module'),
84
- trailId: z.string().optional().describe('Trail ID for detailed guidance'),
85
- }),
86
- output: z.union([
87
- z.array(
88
- z.object({
89
- description: z.string(),
90
- exampleCount: z.number(),
91
- id: z.string(),
92
- kind: z.string(),
93
- })
94
- ),
87
+ input: guideTrailInputSchema,
88
+ intent: 'read',
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
+ }),
95
101
  z.object({
96
- description: z.string().nullable(),
97
- detours: z.unknown().nullable(),
98
- examples: z.array(z.unknown()),
99
- id: z.string(),
100
- kind: z.string(),
102
+ detail: trailDetailOutput,
103
+ mode: z.literal('detail'),
101
104
  }),
102
105
  ]),
103
- readOnly: true,
104
106
  });