@ontrails/trails 1.0.0-beta.2 → 1.0.0-beta.22

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 (150) hide show
  1. package/CHANGELOG.md +647 -0
  2. package/README.md +26 -0
  3. package/package.json +28 -7
  4. package/src/app.ts +86 -2
  5. package/src/clack.ts +22 -0
  6. package/src/cli.ts +330 -11
  7. package/src/completions.ts +240 -0
  8. package/src/lifecycle-source-io.ts +33 -0
  9. package/src/load-app-mirror.ts +202 -0
  10. package/src/local-state-io.ts +153 -0
  11. package/src/mcp-app.ts +30 -0
  12. package/src/mcp-options.ts +77 -0
  13. package/src/mcp.ts +8 -0
  14. package/src/project-writes.ts +377 -0
  15. package/src/release/bindings.ts +39 -0
  16. package/src/release/check.ts +818 -0
  17. package/src/release/config.ts +63 -0
  18. package/src/release/contract-facts.ts +425 -0
  19. package/src/release/index.ts +85 -0
  20. package/src/release/native-bun-publish.ts +651 -0
  21. package/src/release/native-bun-registry.ts +350 -0
  22. package/src/release/packed-artifacts-smoke.ts +236 -0
  23. package/src/release/smoke.ts +46 -0
  24. package/src/release/wayfinder-dogfood-smoke.ts +226 -0
  25. package/src/retired-topo-command.ts +36 -0
  26. package/src/run-adapter-check.ts +76 -0
  27. package/src/run-collision.ts +126 -0
  28. package/src/run-completions-install.ts +179 -0
  29. package/src/run-example.ts +149 -0
  30. package/src/run-examples.ts +148 -0
  31. package/src/run-quiet.ts +75 -0
  32. package/src/run-release-check.ts +74 -0
  33. package/src/run-trace.ts +273 -0
  34. package/src/run-warden.ts +39 -0
  35. package/src/run-watch.ts +432 -0
  36. package/src/scaffold-version-sync.ts +183 -0
  37. package/src/scaffold-versions.generated.ts +12 -0
  38. package/src/trails/adapter-check.ts +244 -0
  39. package/src/trails/add-surface.ts +94 -40
  40. package/src/trails/add-trail.ts +79 -41
  41. package/src/trails/add-verify.ts +95 -25
  42. package/src/trails/compile.ts +67 -0
  43. package/src/trails/completions-complete.ts +165 -0
  44. package/src/trails/completions.ts +47 -0
  45. package/src/trails/create-adapter.ts +1084 -0
  46. package/src/trails/create-scaffold.ts +399 -104
  47. package/src/trails/create-versions.ts +62 -0
  48. package/src/trails/create.ts +185 -71
  49. package/src/trails/deprecate.ts +59 -0
  50. package/src/trails/dev-clean.ts +82 -0
  51. package/src/trails/dev-reset.ts +50 -0
  52. package/src/trails/dev-stats.ts +72 -0
  53. package/src/trails/dev-support.ts +340 -0
  54. package/src/trails/doctor.ts +56 -0
  55. package/src/trails/draft-promote.ts +949 -0
  56. package/src/trails/guide.ts +74 -68
  57. package/src/trails/load-app.ts +1143 -15
  58. package/src/trails/project.ts +17 -3
  59. package/src/trails/release-check.ts +104 -0
  60. package/src/trails/release-smoke.ts +48 -0
  61. package/src/trails/revise.ts +53 -0
  62. package/src/trails/root-dir.ts +21 -0
  63. package/src/trails/run-example.ts +491 -0
  64. package/src/trails/run-examples.ts +145 -0
  65. package/src/trails/run.ts +410 -0
  66. package/src/trails/scaffold-json.ts +58 -0
  67. package/src/trails/survey.ts +881 -226
  68. package/src/trails/topo-activation.ts +385 -0
  69. package/src/trails/topo-constants.ts +2 -0
  70. package/src/trails/topo-history.ts +47 -0
  71. package/src/trails/topo-output-schemas.ts +248 -0
  72. package/src/trails/topo-pin.ts +52 -0
  73. package/src/trails/topo-read-support.ts +313 -0
  74. package/src/trails/topo-reports.ts +807 -0
  75. package/src/trails/topo-store-support.ts +174 -0
  76. package/src/trails/topo-support.ts +220 -0
  77. package/src/trails/topo-unpin.ts +61 -0
  78. package/src/trails/topo.ts +106 -0
  79. package/src/trails/validate.ts +38 -0
  80. package/src/trails/version-lifecycle-support.ts +945 -0
  81. package/src/trails/warden-guide.ts +129 -0
  82. package/src/trails/warden.ts +165 -58
  83. package/src/versions.ts +31 -0
  84. package/.turbo/turbo-build.log +0 -1
  85. package/.turbo/turbo-lint.log +0 -3
  86. package/.turbo/turbo-typecheck.log +0 -1
  87. package/__tests__/examples.test.ts +0 -6
  88. package/dist/bin/trails.d.ts +0 -3
  89. package/dist/bin/trails.d.ts.map +0 -1
  90. package/dist/bin/trails.js +0 -4
  91. package/dist/bin/trails.js.map +0 -1
  92. package/dist/src/app.d.ts +0 -2
  93. package/dist/src/app.d.ts.map +0 -1
  94. package/dist/src/app.js +0 -11
  95. package/dist/src/app.js.map +0 -1
  96. package/dist/src/clack.d.ts +0 -9
  97. package/dist/src/clack.d.ts.map +0 -1
  98. package/dist/src/clack.js +0 -62
  99. package/dist/src/clack.js.map +0 -1
  100. package/dist/src/cli.d.ts +0 -2
  101. package/dist/src/cli.d.ts.map +0 -1
  102. package/dist/src/cli.js +0 -13
  103. package/dist/src/cli.js.map +0 -1
  104. package/dist/src/trails/add-surface.d.ts +0 -13
  105. package/dist/src/trails/add-surface.d.ts.map +0 -1
  106. package/dist/src/trails/add-surface.js +0 -88
  107. package/dist/src/trails/add-surface.js.map +0 -1
  108. package/dist/src/trails/add-trail.d.ts +0 -11
  109. package/dist/src/trails/add-trail.d.ts.map +0 -1
  110. package/dist/src/trails/add-trail.js +0 -85
  111. package/dist/src/trails/add-trail.js.map +0 -1
  112. package/dist/src/trails/add-verify.d.ts +0 -10
  113. package/dist/src/trails/add-verify.d.ts.map +0 -1
  114. package/dist/src/trails/add-verify.js +0 -67
  115. package/dist/src/trails/add-verify.js.map +0 -1
  116. package/dist/src/trails/create-scaffold.d.ts +0 -15
  117. package/dist/src/trails/create-scaffold.d.ts.map +0 -1
  118. package/dist/src/trails/create-scaffold.js +0 -288
  119. package/dist/src/trails/create-scaffold.js.map +0 -1
  120. package/dist/src/trails/create.d.ts +0 -22
  121. package/dist/src/trails/create.d.ts.map +0 -1
  122. package/dist/src/trails/create.js +0 -121
  123. package/dist/src/trails/create.js.map +0 -1
  124. package/dist/src/trails/guide.d.ts +0 -11
  125. package/dist/src/trails/guide.d.ts.map +0 -1
  126. package/dist/src/trails/guide.js +0 -80
  127. package/dist/src/trails/guide.js.map +0 -1
  128. package/dist/src/trails/load-app.d.ts +0 -4
  129. package/dist/src/trails/load-app.d.ts.map +0 -1
  130. package/dist/src/trails/load-app.js +0 -24
  131. package/dist/src/trails/load-app.js.map +0 -1
  132. package/dist/src/trails/project.d.ts +0 -8
  133. package/dist/src/trails/project.d.ts.map +0 -1
  134. package/dist/src/trails/project.js +0 -43
  135. package/dist/src/trails/project.js.map +0 -1
  136. package/dist/src/trails/survey.d.ts +0 -33
  137. package/dist/src/trails/survey.d.ts.map +0 -1
  138. package/dist/src/trails/survey.js +0 -225
  139. package/dist/src/trails/survey.js.map +0 -1
  140. package/dist/src/trails/warden.d.ts +0 -19
  141. package/dist/src/trails/warden.d.ts.map +0 -1
  142. package/dist/src/trails/warden.js +0 -88
  143. package/dist/src/trails/warden.js.map +0 -1
  144. package/dist/tsconfig.tsbuildinfo +0 -1
  145. package/src/__tests__/create.test.ts +0 -349
  146. package/src/__tests__/guide.test.ts +0 -91
  147. package/src/__tests__/load-app.test.ts +0 -15
  148. package/src/__tests__/survey.test.ts +0 -161
  149. package/src/__tests__/warden.test.ts +0 -74
  150. package/tsconfig.json +0 -9
@@ -4,11 +4,18 @@
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 { tryLoadFreshAppLease } from './load-app.js';
11
+ import { trailDetailOutput } from './topo-output-schemas.js';
12
+ import {
13
+ buildCurrentGuideEntries,
14
+ buildCurrentTopoDetail,
15
+ readSurfaceLayerNamesFromContext,
16
+ } from './topo-read-support.js';
17
+ import { createIsolatedExampleInput } from './topo-support.js';
18
+ import { resolveTrailRootDir } from './root-dir.js';
12
19
 
13
20
  // ---------------------------------------------------------------------------
14
21
  // Types
@@ -18,87 +25,86 @@ interface GuideEntry {
18
25
  readonly description: string;
19
26
  readonly exampleCount: number;
20
27
  readonly id: string;
21
- readonly kind: string;
28
+ readonly kind: 'trail';
22
29
  }
23
30
 
31
+ const guideTrailInputSchema = z.object({
32
+ module: z.string().optional().describe('Path to the app module'),
33
+ rootDir: z.string().optional().describe('Workspace root directory'),
34
+ trailId: z.string().optional().describe('Trail ID for detailed guidance'),
35
+ });
36
+
37
+ type GuideTrailInput = z.output<typeof guideTrailInputSchema>;
38
+
24
39
  // ---------------------------------------------------------------------------
25
40
  // Helpers
26
41
  // ---------------------------------------------------------------------------
27
42
 
28
- const toGuideEntries = (app: Topo): GuideEntry[] => {
29
- const entries: GuideEntry[] = [];
30
-
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
- }
45
-
46
- return entries;
47
- };
43
+ export const guideTrail = trail('guide', {
44
+ blaze: async (input: GuideTrailInput, ctx) => {
45
+ const rootDirResult = resolveTrailRootDir(input.rootDir, ctx.cwd);
46
+ if (rootDirResult.isErr()) {
47
+ return rootDirResult;
48
+ }
49
+ const rootDir = rootDirResult.value;
50
+ const leaseResult = await tryLoadFreshAppLease(input.module, rootDir);
51
+ if (leaseResult.isErr()) {
52
+ return leaseResult;
53
+ }
54
+ const lease = leaseResult.value;
48
55
 
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
- });
56
+ try {
57
+ if (input.trailId) {
58
+ const detail = buildCurrentTopoDetail(lease.app, input.trailId, {
59
+ rootDir,
60
+ surfaceLayerNames: readSurfaceLayerNamesFromContext(ctx),
61
+ });
62
+ if (detail === undefined || detail.kind !== 'trail') {
63
+ return Result.err(
64
+ new NotFoundError(`Trail not found: ${input.trailId}`)
65
+ );
66
+ }
67
+ return Result.ok({
68
+ detail,
69
+ mode: 'detail' as const,
70
+ });
71
+ }
56
72
 
57
- export const guideTrail = trail('guide', {
73
+ return Result.ok({
74
+ entries: buildCurrentGuideEntries(lease.app, {
75
+ rootDir,
76
+ }) as GuideEntry[],
77
+ mode: 'list' as const,
78
+ });
79
+ } finally {
80
+ lease.release();
81
+ }
82
+ },
58
83
  description: 'Runtime guidance for trails',
59
84
  examples: [
60
85
  {
61
86
  description: 'Lists all trails with descriptions and example counts',
62
- input: {},
87
+ input: createIsolatedExampleInput('guide-list'),
63
88
  name: 'List trail guidance',
64
89
  },
65
90
  ],
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
- ),
91
+ input: guideTrailInputSchema,
92
+ intent: 'read',
93
+ output: z.discriminatedUnion('mode', [
94
+ z.object({
95
+ entries: z.array(
96
+ z.object({
97
+ description: z.string(),
98
+ exampleCount: z.number(),
99
+ id: z.string(),
100
+ kind: z.literal('trail'),
101
+ })
102
+ ),
103
+ mode: z.literal('list'),
104
+ }),
95
105
  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(),
106
+ detail: trailDetailOutput,
107
+ mode: z.literal('detail'),
101
108
  }),
102
109
  ]),
103
- readOnly: true,
104
110
  });