@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
@@ -0,0 +1,129 @@
1
+ import type { FieldOverride } from '@ontrails/core';
2
+ import { Result, trail } from '@ontrails/core';
3
+ import {
4
+ buildWardenGuideManifest,
5
+ formatWardenGuide,
6
+ wardenDepthValues,
7
+ wardenFixClasses,
8
+ wardenFixSafeties,
9
+ wardenGuideFormatValues,
10
+ wardenRuleConcerns,
11
+ wardenRuleLifecycleStates,
12
+ wardenRuleScopes,
13
+ wardenRuleTiers,
14
+ } from '@ontrails/warden';
15
+ import { z } from 'zod';
16
+
17
+ const wardenGuidanceLinkSchema = z.object({
18
+ label: z.string(),
19
+ path: z.string().optional(),
20
+ url: z.string().optional(),
21
+ });
22
+
23
+ const wardenGuidanceSchema = z.object({
24
+ commands: z.array(z.string()).readonly().optional(),
25
+ docs: z.array(wardenGuidanceLinkSchema).readonly().optional(),
26
+ relatedRules: z.array(z.string()).readonly().optional(),
27
+ steps: z.array(z.string()).readonly().optional(),
28
+ summary: z.string(),
29
+ });
30
+
31
+ const wardenRuleGuideEntrySchema = z.object({
32
+ concern: z.enum(wardenRuleConcerns),
33
+ depth: z.enum(wardenDepthValues),
34
+ description: z.string(),
35
+ docs: z.array(wardenGuidanceLinkSchema).readonly(),
36
+ fix: z
37
+ .object({
38
+ class: z.enum(wardenFixClasses),
39
+ safety: z.enum(wardenFixSafeties),
40
+ })
41
+ .optional(),
42
+ guidance: wardenGuidanceSchema.optional(),
43
+ id: z.string(),
44
+ invariant: z.string(),
45
+ lifecycle: z.object({
46
+ retireWhen: z.string().optional(),
47
+ state: z.enum(wardenRuleLifecycleStates),
48
+ }),
49
+ scope: z.enum(wardenRuleScopes),
50
+ severity: z.enum(['error', 'warn']),
51
+ tier: z.enum(wardenRuleTiers),
52
+ });
53
+
54
+ const wardenGuideManifestSchema = z.object({
55
+ generatedFrom: z.object({
56
+ package: z.literal('@ontrails/warden'),
57
+ registries: z.tuple([
58
+ z.literal('wardenRules'),
59
+ z.literal('wardenTopoRules'),
60
+ ]),
61
+ source: z.literal('builtin-rule-metadata'),
62
+ }),
63
+ kind: z.literal('trails-warden-guide-manifest'),
64
+ ruleCount: z.number(),
65
+ rules: z.array(wardenRuleGuideEntrySchema).readonly(),
66
+ version: z.literal(1),
67
+ });
68
+
69
+ const wardenGuideInputSchema = z.object({
70
+ guideFormat: z
71
+ .enum(wardenGuideFormatValues)
72
+ .default('markdown')
73
+ .describe('Guide output format'),
74
+ });
75
+
76
+ const wardenGuideFields = {
77
+ guideFormat: {
78
+ aliases: true,
79
+ options: [
80
+ {
81
+ hint: 'Human-readable Warden guide',
82
+ label: 'Markdown',
83
+ value: 'markdown',
84
+ },
85
+ {
86
+ hint: 'Compact guidance for agent context',
87
+ label: 'Agent JSON',
88
+ value: 'agent-json',
89
+ },
90
+ {
91
+ hint: 'Full structured rule manifest',
92
+ label: 'Manifest',
93
+ value: 'manifest',
94
+ },
95
+ ],
96
+ },
97
+ } satisfies Readonly<
98
+ Record<'guideFormat', FieldOverride & { readonly aliases: true }>
99
+ >;
100
+
101
+ export const wardenGuideTrail = trail('warden.guide', {
102
+ blaze: (input) => {
103
+ const manifest = buildWardenGuideManifest();
104
+ return Result.ok({
105
+ format: input.guideFormat,
106
+ formatted: formatWardenGuide(manifest, input.guideFormat),
107
+ manifest,
108
+ });
109
+ },
110
+ description: 'Project Warden rule guidance as markdown or JSON',
111
+ examples: [
112
+ {
113
+ input: { guideFormat: 'markdown' },
114
+ name: 'Markdown guide',
115
+ },
116
+ {
117
+ input: { guideFormat: 'agent-json' },
118
+ name: 'Agent JSON guide',
119
+ },
120
+ ],
121
+ fields: wardenGuideFields,
122
+ input: wardenGuideInputSchema,
123
+ intent: 'read',
124
+ output: z.object({
125
+ format: z.enum(wardenGuideFormatValues),
126
+ formatted: z.string(),
127
+ manifest: wardenGuideManifestSchema,
128
+ }),
129
+ });
@@ -1,32 +1,176 @@
1
1
  /**
2
2
  * `warden` trail -- Governance checks.
3
3
  *
4
- * Thin wrapper around `runWarden` and `formatWardenReport` from @ontrails/warden.
4
+ * Thin wrapper around the shared @ontrails/warden command surface.
5
5
  */
6
6
 
7
7
  import { Result, trail } from '@ontrails/core';
8
8
  import {
9
- formatGitHubAnnotations,
10
- formatJson,
11
- formatSummary,
12
- formatWardenReport,
13
- runWarden,
9
+ diagnosticSchema,
10
+ runWardenCommand,
11
+ wardenDepthValues,
12
+ wardenDraftsValues,
13
+ wardenFailOnValues,
14
+ wardenFormatValues,
15
+ wardenLockValues,
14
16
  } from '@ontrails/warden';
15
17
  import { z } from 'zod';
16
18
 
17
- import { loadApp } from './load-app.js';
19
+ import { resolveTrailRootDir } from './root-dir.js';
18
20
 
19
21
  // ---------------------------------------------------------------------------
20
22
  // Trail definition
21
23
  // ---------------------------------------------------------------------------
22
24
 
25
+ const wardenInputSchema = z.object({
26
+ adapterCheck: z
27
+ .boolean()
28
+ .default(false)
29
+ .describe('Run shared adapter authoring checks'),
30
+ apps: z
31
+ .array(z.string())
32
+ .optional()
33
+ .describe('App names or module paths to govern'),
34
+ cached: z.boolean().default(false).describe('Alias for --lock cached'),
35
+ ci: z.boolean().default(false).describe('Use the CI Warden preset'),
36
+ configPath: z.string().optional().describe('Path to trails.config.ts'),
37
+ depth: z
38
+ .enum(wardenDepthValues)
39
+ .optional()
40
+ .describe('Cumulative analysis depth'),
41
+ drafts: z.enum(wardenDraftsValues).optional().describe('Draft state mode'),
42
+ excludeDrafts: z
43
+ .boolean()
44
+ .default(false)
45
+ .describe('Alias for --drafts exclude'),
46
+ failOn: z.enum(wardenFailOnValues).optional().describe('Failure threshold'),
47
+ fix: z.boolean().default(false).describe('Apply safe source fixes'),
48
+ format: z.enum(wardenFormatValues).optional().describe('Output format'),
49
+ github: z.boolean().default(false).describe('Alias for --format github'),
50
+ includeDrafts: z
51
+ .boolean()
52
+ .default(false)
53
+ .describe('Alias for --drafts include'),
54
+ json: z.boolean().default(false).describe('Alias for --format json'),
55
+ lock: z.enum(wardenLockValues).optional().describe('Lockfile mode'),
56
+ noLockMutation: z
57
+ .boolean()
58
+ .default(false)
59
+ .describe('Suppress lockfile mutation'),
60
+ onlyDrafts: z.boolean().default(false).describe('Alias for --drafts only'),
61
+ prePush: z.boolean().default(false).describe('Use the pre-push preset'),
62
+ refresh: z.boolean().default(false).describe('Alias for --lock refresh'),
63
+ rootDir: z.string().optional().describe('Root directory to scan'),
64
+ skipLock: z.boolean().default(false).describe('Alias for --lock skip'),
65
+ strict: z.boolean().default(false).describe('Alias for --fail-on warning'),
66
+ summary: z.boolean().default(false).describe('Alias for --format summary'),
67
+ });
68
+
69
+ type WardenTrailInput = z.infer<typeof wardenInputSchema>;
70
+
71
+ const pushFlag = (args: string[], condition: boolean, flag: string): void => {
72
+ if (condition) {
73
+ args.push(flag);
74
+ }
75
+ };
76
+
77
+ const pushValue = (
78
+ args: string[],
79
+ flag: string,
80
+ value: string | undefined
81
+ ): void => {
82
+ if (value !== undefined) {
83
+ args.push(flag, value);
84
+ }
85
+ };
86
+
87
+ const pushApps = (
88
+ args: string[],
89
+ apps: readonly string[] | undefined
90
+ ): void => {
91
+ if (apps !== undefined && apps.length > 0) {
92
+ args.push('--apps', apps.join(','));
93
+ }
94
+ };
95
+
96
+ export const buildWardenCommandArgs = (
97
+ input: WardenTrailInput
98
+ ): readonly string[] => {
99
+ const args: string[] = [];
100
+
101
+ pushFlag(args, input.prePush, '--pre-push');
102
+ pushFlag(args, input.ci, '--ci');
103
+ pushValue(args, '--depth', input.depth);
104
+ if (input.strict) {
105
+ args.push('--strict');
106
+ } else {
107
+ pushValue(args, '--fail-on', input.failOn);
108
+ }
109
+ if (input.github) {
110
+ args.push('--github');
111
+ } else if (input.json) {
112
+ args.push('--json');
113
+ } else if (input.summary) {
114
+ args.push('--summary');
115
+ } else {
116
+ pushValue(args, '--format', input.format);
117
+ }
118
+ if (input.skipLock) {
119
+ args.push('--skip-lock');
120
+ } else if (input.refresh) {
121
+ args.push('--refresh');
122
+ } else if (input.cached) {
123
+ args.push('--cached');
124
+ } else {
125
+ pushValue(args, '--lock', input.lock);
126
+ }
127
+ if (input.onlyDrafts) {
128
+ args.push('--only-drafts');
129
+ } else if (input.excludeDrafts) {
130
+ args.push('--exclude-drafts');
131
+ } else if (input.includeDrafts) {
132
+ args.push('--include-drafts');
133
+ } else {
134
+ pushValue(args, '--drafts', input.drafts);
135
+ }
136
+ pushFlag(args, input.noLockMutation, '--no-lock-mutation');
137
+ pushFlag(args, input.fix, '--fix');
138
+ pushFlag(args, input.adapterCheck, '--adapter-check');
139
+ pushValue(args, '--config-path', input.configPath);
140
+ pushApps(args, input.apps);
141
+
142
+ return args;
143
+ };
144
+
23
145
  export const wardenTrail = trail('warden', {
146
+ blaze: async (input, ctx) => {
147
+ const rootDirResult = resolveTrailRootDir(input.rootDir, ctx.cwd);
148
+ if (rootDirResult.isErr()) {
149
+ return rootDirResult;
150
+ }
151
+ const rootDir = rootDirResult.value;
152
+ const result = await runWardenCommand({
153
+ args: buildWardenCommandArgs(input),
154
+ cwd: rootDir,
155
+ env: ctx.env ?? {},
156
+ });
157
+ const { report } = result;
158
+
159
+ return Result.ok({
160
+ diagnostics: [...report.diagnostics],
161
+ drift: report.drift,
162
+ errorCount: report.errorCount,
163
+ fixes: report.fixes,
164
+ formatted: result.output,
165
+ passed: report.passed,
166
+ warnCount: report.warnCount,
167
+ });
168
+ },
24
169
  description: 'Run governance checks (lint + drift)',
25
170
  examples: [
26
171
  {
27
172
  input: {
28
- driftOnly: false,
29
- lintOnly: false,
173
+ lock: 'skip',
30
174
  },
31
175
  name: 'Default warden run',
32
176
  },
@@ -37,68 +181,31 @@ export const wardenTrail = trail('warden', {
37
181
  name: 'GitHub Actions annotations',
38
182
  },
39
183
  ],
40
- implementation: async (input, ctx) => {
41
- const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
42
- // oxlint-disable-next-line prefer-await-to-then -- catch converts rejection to undefined cleanly
43
- const topo = await loadApp('./src/app.ts', rootDir).catch(
44
- (): undefined => undefined
45
- );
46
-
47
- const report = await runWarden({
48
- driftOnly: input.driftOnly,
49
- lintOnly: input.lintOnly,
50
- rootDir,
51
- topo,
52
- });
53
-
54
- const formatters: Record<string, (r: typeof report) => string> = {
55
- github: formatGitHubAnnotations,
56
- json: formatJson,
57
- summary: formatSummary,
58
- text: formatWardenReport,
59
- };
60
- const formatter = formatters[input.format] ?? formatWardenReport;
61
- const formatted = formatter(report);
62
-
63
- return Result.ok({
64
- diagnostics: report.diagnostics,
65
- drift: report.drift,
66
- errorCount: report.errorCount,
67
- formatted,
68
- passed: report.passed,
69
- warnCount: report.warnCount,
70
- });
71
- },
72
- input: z.object({
73
- driftOnly: z.boolean().default(false).describe('Only run drift detection'),
74
- format: z
75
- .enum(['text', 'json', 'github', 'summary'])
76
- .default('text')
77
- .describe('Output format: text, json, github, or summary'),
78
- lintOnly: z.boolean().default(false).describe('Only run lint rules'),
79
- rootDir: z.string().optional().describe('Root directory to scan'),
80
- }),
184
+ input: wardenInputSchema,
185
+ intent: 'write',
81
186
  output: z.object({
82
187
  diagnostics: z.array(
83
- z.object({
84
- filePath: z.string(),
85
- line: z.number(),
86
- message: z.string(),
87
- rule: z.string(),
88
- severity: z.enum(['error', 'warn']),
89
- })
188
+ diagnosticSchema.extend({ topoName: z.string().optional() })
90
189
  ),
91
190
  drift: z
92
191
  .object({
192
+ blockedReason: z.string().optional(),
93
193
  committedHash: z.string().nullable(),
94
194
  currentHash: z.string(),
95
195
  stale: z.boolean(),
96
196
  })
97
197
  .nullable(),
98
198
  errorCount: z.number(),
199
+ fixes: z
200
+ .object({
201
+ applied: z.number(),
202
+ filesChanged: z.number(),
203
+ skipped: z.number(),
204
+ })
205
+ .optional(),
99
206
  formatted: z.string(),
100
207
  passed: z.boolean(),
101
208
  warnCount: z.number(),
102
209
  }),
103
- readOnly: true,
210
+ permit: 'public',
104
211
  });
@@ -0,0 +1,31 @@
1
+ import { scaffoldDependencyVersions } from './scaffold-versions.generated.js';
2
+
3
+ interface PackageJson {
4
+ readonly version?: string;
5
+ }
6
+
7
+ const readPackageJson = async (url: URL): Promise<PackageJson> =>
8
+ (await Bun.file(url).json()) as PackageJson;
9
+
10
+ const appPackageJson = await readPackageJson(
11
+ new URL('../package.json', import.meta.url)
12
+ );
13
+
14
+ const requireVersion = (value: string | undefined, label: string): string => {
15
+ if (typeof value !== 'string' || value.length === 0) {
16
+ throw new Error(`Missing version for ${label}`);
17
+ }
18
+ return value;
19
+ };
20
+
21
+ export const trailsPackageVersion = requireVersion(
22
+ appPackageJson.version,
23
+ '@ontrails/trails'
24
+ );
25
+
26
+ export const ontrailsPackageRange = requireVersion(
27
+ trailsPackageVersion,
28
+ '@ontrails/* scaffold package range'
29
+ );
30
+
31
+ export { scaffoldDependencyVersions };
@@ -1 +0,0 @@
1
- $ tsc -b
@@ -1,3 +0,0 @@
1
- $ oxlint ./src
2
- Found 0 warnings and 0 errors.
3
- Finished in 39ms on 18 files with 93 rules using 24 threads.
@@ -1 +0,0 @@
1
- $ tsc --noEmit
@@ -1,6 +0,0 @@
1
- /* oxlint-disable eslint-plugin-jest/require-hook -- testExamples registers tests at module scope */
2
- import { testExamples } from '@ontrails/testing';
3
-
4
- import { app } from '../src/app.js';
5
-
6
- testExamples(app);
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env bun
2
- import '../src/cli.js';
3
- //# sourceMappingURL=trails.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trails.d.ts","sourceRoot":"","sources":["../../bin/trails.ts"],"names":[],"mappings":";AAEA,OAAO,eAAe,CAAC"}
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env bun
2
- /* oxlint-disable eslint-plugin-jest/require-hook -- CLI bin entrypoints execute at module scope */
3
- import '../src/cli.js';
4
- //# sourceMappingURL=trails.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trails.js","sourceRoot":"","sources":["../../bin/trails.ts"],"names":[],"mappings":";AACA,mGAAmG;AACnG,OAAO,eAAe,CAAC"}
package/dist/src/app.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare const app: import("@ontrails/core").Topo;
2
- //# sourceMappingURL=app.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,GAAG,+BAUf,CAAC"}
package/dist/src/app.js DELETED
@@ -1,11 +0,0 @@
1
- import { topo } from '@ontrails/core';
2
- import * as addSurface from './trails/add-surface.js';
3
- import * as addTrail from './trails/add-trail.js';
4
- import * as addVerify from './trails/add-verify.js';
5
- import * as create from './trails/create.js';
6
- import * as createScaffold from './trails/create-scaffold.js';
7
- import * as guide from './trails/guide.js';
8
- import * as survey from './trails/survey.js';
9
- import * as warden from './trails/warden.js';
10
- export const app = topo('trails', survey, guide, warden, create, createScaffold, addSurface, addVerify, addTrail);
11
- //# sourceMappingURL=app.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,UAAU,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAE7C,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,CACrB,QAAQ,EACR,MAAM,EACN,KAAK,EACL,MAAM,EACN,MAAM,EACN,cAAc,EACd,UAAU,EACV,SAAS,EACT,QAAQ,CACT,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Clack-backed input resolver for the Trails CLI.
3
- *
4
- * This stays at the app layer so @ontrails/cli remains prompt-library agnostic.
5
- */
6
- import type { InputResolver } from '@ontrails/cli';
7
- /** Fill missing input by prompting with Clack when interactive. */
8
- export declare const resolveInputWithClack: InputResolver;
9
- //# sourceMappingURL=clack.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clack.d.ts","sourceRoot":"","sources":["../../src/clack.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAS,aAAa,EAAuB,MAAM,eAAe,CAAC;AA6D/E,mEAAmE;AACnE,eAAO,MAAM,qBAAqB,EAAE,aAoBnC,CAAC"}
package/dist/src/clack.js DELETED
@@ -1,62 +0,0 @@
1
- /**
2
- * Clack-backed input resolver for the Trails CLI.
3
- *
4
- * This stays at the app layer so @ontrails/cli remains prompt-library agnostic.
5
- */
6
- import { isInteractive } from '@ontrails/cli';
7
- import * as clack from '@clack/prompts';
8
- /** Check whether a field still needs input. */
9
- const needsInput = (field, current) => current[field.name] === undefined &&
10
- field.required &&
11
- field.default === undefined;
12
- /** Build Clack options from field options. */
13
- const toClackOptions = (field) => field.options?.map((option) => ({
14
- ...(option.hint === undefined ? {} : { hint: option.hint }),
15
- label: option.label ?? option.value,
16
- value: option.value,
17
- })) ?? [];
18
- /** Normalize cancelled prompts to `undefined`. */
19
- const cancelable = async (value) => await (clack.isCancel(value) ? undefined : value);
20
- const fieldResolvers = {
21
- boolean: async (field) => cancelable(await clack.confirm({
22
- initialValue: field.default ?? false,
23
- message: field.label,
24
- })),
25
- enum: async (field) => cancelable(await clack.select({
26
- message: field.label,
27
- options: toClackOptions(field),
28
- })),
29
- multiselect: async (field) => cancelable(await clack.multiselect({
30
- initialValues: field.default ?? [],
31
- message: field.label,
32
- options: toClackOptions(field),
33
- })),
34
- number: async (field) => {
35
- const raw = await clack.text({ message: field.label });
36
- return clack.isCancel(raw) ? undefined : Number(raw);
37
- },
38
- string: async (field) => cancelable(await clack.text({ message: field.label })),
39
- };
40
- /** Resolve a single field value with Clack. */
41
- const resolveField = (field) => {
42
- const resolver = fieldResolvers[field.type];
43
- return resolver(field);
44
- };
45
- /** Fill missing input by prompting with Clack when interactive. */
46
- export const resolveInputWithClack = async (fields, provided, options) => {
47
- if (!isInteractive(options)) {
48
- return provided;
49
- }
50
- const resolved = { ...provided };
51
- for (const field of fields) {
52
- if (!needsInput(field, resolved)) {
53
- continue;
54
- }
55
- const value = await resolveField(field);
56
- if (value !== undefined) {
57
- resolved[field.name] = value;
58
- }
59
- }
60
- return resolved;
61
- };
62
- //# sourceMappingURL=clack.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clack.js","sourceRoot":"","sources":["../../src/clack.ts"],"names":[],"mappings":"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"}
package/dist/src/cli.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=cli.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":""}
package/dist/src/cli.js DELETED
@@ -1,13 +0,0 @@
1
- import { outputModePreset } from '@ontrails/cli';
2
- import { blaze } from '@ontrails/cli/commander';
3
- import { app } from './app.js';
4
- import { resolveInputWithClack } from './clack.js';
5
- // oxlint-disable-next-line require-hook -- CLI entry point
6
- blaze(app, {
7
- description: 'Agent-native, contract-first TypeScript framework',
8
- name: 'trails',
9
- presets: [outputModePreset()],
10
- resolveInput: resolveInputWithClack,
11
- version: '0.1.0',
12
- });
13
- //# sourceMappingURL=cli.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAEhD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,2DAA2D;AAC3D,KAAK,CAAC,GAAG,EAAE;IACT,WAAW,EAAE,mDAAmD;IAChE,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC7B,YAAY,EAAE,qBAAqB;IACnC,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC"}
@@ -1,13 +0,0 @@
1
- /**
2
- * `add.surface` trail -- Add a surface to an existing project.
3
- *
4
- * Generates the CLI or MCP entry point and updates package.json dependencies.
5
- */
6
- export declare const addSurface: import("@ontrails/core").Trail<{
7
- surface: "cli" | "mcp";
8
- dir?: string | undefined;
9
- }, {
10
- created: string;
11
- dependency: string;
12
- }>;
13
- //# sourceMappingURL=add-surface.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-surface.d.ts","sourceRoot":"","sources":["../../../src/trails/add-surface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwFH,eAAO,MAAM,UAAU;;;;;;EA0BrB,CAAC"}