@ontrails/trails 1.0.0-beta.13 → 1.0.0-beta.15

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/.turbo/turbo-lint.log +1 -1
  2. package/CHANGELOG.md +29 -0
  3. package/__tests__/examples.test.ts +39 -0
  4. package/dist/src/app.d.ts.map +1 -1
  5. package/dist/src/app.js +12 -1
  6. package/dist/src/app.js.map +1 -1
  7. package/dist/src/cli.js +4 -3
  8. package/dist/src/cli.js.map +1 -1
  9. package/dist/src/trails/add-surface.d.ts +3 -3
  10. package/dist/src/trails/add-surface.d.ts.map +1 -1
  11. package/dist/src/trails/add-surface.js +46 -24
  12. package/dist/src/trails/add-surface.js.map +1 -1
  13. package/dist/src/trails/add-trail.d.ts +3 -1
  14. package/dist/src/trails/add-trail.d.ts.map +1 -1
  15. package/dist/src/trails/add-trail.js +49 -22
  16. package/dist/src/trails/add-trail.js.map +1 -1
  17. package/dist/src/trails/add-trailhead.d.ts +13 -0
  18. package/dist/src/trails/add-trailhead.d.ts.map +1 -0
  19. package/dist/src/trails/add-trailhead.js +88 -0
  20. package/dist/src/trails/add-trailhead.js.map +1 -0
  21. package/dist/src/trails/add-verify.d.ts +1 -1
  22. package/dist/src/trails/add-verify.d.ts.map +1 -1
  23. package/dist/src/trails/add-verify.js +17 -16
  24. package/dist/src/trails/add-verify.js.map +1 -1
  25. package/dist/src/trails/create-scaffold.d.ts +1 -1
  26. package/dist/src/trails/create-scaffold.d.ts.map +1 -1
  27. package/dist/src/trails/create-scaffold.js +34 -27
  28. package/dist/src/trails/create-scaffold.js.map +1 -1
  29. package/dist/src/trails/create.d.ts +9 -13
  30. package/dist/src/trails/create.d.ts.map +1 -1
  31. package/dist/src/trails/create.js +40 -35
  32. package/dist/src/trails/create.js.map +1 -1
  33. package/dist/src/trails/dev-clean.d.ts +9 -0
  34. package/dist/src/trails/dev-clean.d.ts.map +1 -0
  35. package/dist/src/trails/dev-clean.js +66 -0
  36. package/dist/src/trails/dev-clean.js.map +1 -0
  37. package/dist/src/trails/dev-reset.d.ts +6 -0
  38. package/dist/src/trails/dev-reset.d.ts.map +1 -0
  39. package/dist/src/trails/dev-reset.js +39 -0
  40. package/dist/src/trails/dev-reset.js.map +1 -0
  41. package/dist/src/trails/dev-stats.d.ts +7 -0
  42. package/dist/src/trails/dev-stats.d.ts.map +1 -0
  43. package/dist/src/trails/dev-stats.js +61 -0
  44. package/dist/src/trails/dev-stats.js.map +1 -0
  45. package/dist/src/trails/dev-support.d.ts +64 -0
  46. package/dist/src/trails/dev-support.d.ts.map +1 -0
  47. package/dist/src/trails/dev-support.js +181 -0
  48. package/dist/src/trails/dev-support.js.map +1 -0
  49. package/dist/src/trails/draft-promote.d.ts +18 -0
  50. package/dist/src/trails/draft-promote.d.ts.map +1 -0
  51. package/dist/src/trails/draft-promote.js +400 -0
  52. package/dist/src/trails/draft-promote.js.map +1 -0
  53. package/dist/src/trails/guide.d.ts +14 -4
  54. package/dist/src/trails/guide.d.ts.map +1 -1
  55. package/dist/src/trails/guide.js +22 -41
  56. package/dist/src/trails/guide.js.map +1 -1
  57. package/dist/src/trails/load-app.d.ts +9 -1
  58. package/dist/src/trails/load-app.d.ts.map +1 -1
  59. package/dist/src/trails/load-app.js +404 -13
  60. package/dist/src/trails/load-app.js.map +1 -1
  61. package/dist/src/trails/project.d.ts.map +1 -1
  62. package/dist/src/trails/project.js +14 -3
  63. package/dist/src/trails/project.js.map +1 -1
  64. package/dist/src/trails/survey.d.ts +6 -60
  65. package/dist/src/trails/survey.d.ts.map +1 -1
  66. package/dist/src/trails/survey.js +83 -182
  67. package/dist/src/trails/survey.js.map +1 -1
  68. package/dist/src/trails/topo-constants.d.ts +3 -0
  69. package/dist/src/trails/topo-constants.d.ts.map +1 -0
  70. package/dist/src/trails/topo-constants.js +3 -0
  71. package/dist/src/trails/topo-constants.js.map +1 -0
  72. package/dist/src/trails/topo-export.d.ts +19 -0
  73. package/dist/src/trails/topo-export.d.ts.map +1 -0
  74. package/dist/src/trails/topo-export.js +31 -0
  75. package/dist/src/trails/topo-export.js.map +1 -0
  76. package/dist/src/trails/topo-history.d.ts +20 -0
  77. package/dist/src/trails/topo-history.d.ts.map +1 -0
  78. package/dist/src/trails/topo-history.js +32 -0
  79. package/dist/src/trails/topo-history.js.map +1 -0
  80. package/dist/src/trails/topo-pin.d.ts +17 -0
  81. package/dist/src/trails/topo-pin.d.ts.map +1 -0
  82. package/dist/src/trails/topo-pin.js +31 -0
  83. package/dist/src/trails/topo-pin.js.map +1 -0
  84. package/dist/src/trails/topo-read-support.d.ts +58 -0
  85. package/dist/src/trails/topo-read-support.d.ts.map +1 -0
  86. package/dist/src/trails/topo-read-support.js +167 -0
  87. package/dist/src/trails/topo-read-support.js.map +1 -0
  88. package/dist/src/trails/topo-reports.d.ts +54 -0
  89. package/dist/src/trails/topo-reports.d.ts.map +1 -0
  90. package/dist/src/trails/topo-reports.js +128 -0
  91. package/dist/src/trails/topo-reports.js.map +1 -0
  92. package/dist/src/trails/topo-show.d.ts +23 -0
  93. package/dist/src/trails/topo-show.d.ts.map +1 -0
  94. package/dist/src/trails/topo-show.js +49 -0
  95. package/dist/src/trails/topo-show.js.map +1 -0
  96. package/dist/src/trails/topo-store-support.d.ts +13 -0
  97. package/dist/src/trails/topo-store-support.d.ts.map +1 -0
  98. package/dist/src/trails/topo-store-support.js +55 -0
  99. package/dist/src/trails/topo-store-support.js.map +1 -0
  100. package/dist/src/trails/topo-support.d.ts +76 -0
  101. package/dist/src/trails/topo-support.d.ts.map +1 -0
  102. package/dist/src/trails/topo-support.js +132 -0
  103. package/dist/src/trails/topo-support.js.map +1 -0
  104. package/dist/src/trails/topo-unpin.d.ts +20 -0
  105. package/dist/src/trails/topo-unpin.d.ts.map +1 -0
  106. package/dist/src/trails/topo-unpin.js +44 -0
  107. package/dist/src/trails/topo-unpin.js.map +1 -0
  108. package/dist/src/trails/topo-verify.d.ts +5 -0
  109. package/dist/src/trails/topo-verify.d.ts.map +1 -0
  110. package/dist/src/trails/topo-verify.js +24 -0
  111. package/dist/src/trails/topo-verify.js.map +1 -0
  112. package/dist/src/trails/topo.d.ts +5 -0
  113. package/dist/src/trails/topo.d.ts.map +1 -0
  114. package/dist/src/trails/topo.js +63 -0
  115. package/dist/src/trails/topo.js.map +1 -0
  116. package/dist/src/trails/warden.d.ts +3 -2
  117. package/dist/src/trails/warden.d.ts.map +1 -1
  118. package/dist/src/trails/warden.js +37 -27
  119. package/dist/src/trails/warden.js.map +1 -1
  120. package/dist/src/versions.d.ts +12 -0
  121. package/dist/src/versions.d.ts.map +1 -0
  122. package/dist/src/versions.js +23 -0
  123. package/dist/src/versions.js.map +1 -0
  124. package/dist/tsconfig.tsbuildinfo +1 -1
  125. package/package.json +8 -7
  126. package/src/__tests__/add-trail.test.ts +97 -0
  127. package/src/__tests__/create.test.ts +91 -27
  128. package/src/__tests__/draft-promote.test.ts +144 -0
  129. package/src/__tests__/guide.test.ts +10 -5
  130. package/src/__tests__/load-app.test.ts +406 -2
  131. package/src/__tests__/survey.test.ts +221 -60
  132. package/src/__tests__/topo-dev.test.ts +426 -0
  133. package/src/app.ts +24 -2
  134. package/src/clack.ts +1 -1
  135. package/src/cli.ts +4 -3
  136. package/src/trails/add-surface.ts +150 -0
  137. package/src/trails/add-trail.ts +46 -10
  138. package/src/trails/add-verify.ts +11 -6
  139. package/src/trails/create-scaffold.ts +16 -3
  140. package/src/trails/create.ts +76 -71
  141. package/src/trails/dev-clean.ts +77 -0
  142. package/src/trails/dev-reset.ts +45 -0
  143. package/src/trails/dev-stats.ts +67 -0
  144. package/src/trails/dev-support.ts +328 -0
  145. package/src/trails/draft-promote.ts +739 -0
  146. package/src/trails/guide.ts +23 -41
  147. package/src/trails/load-app.ts +556 -14
  148. package/src/trails/project.ts +17 -3
  149. package/src/trails/survey.ts +110 -285
  150. package/src/trails/topo-constants.ts +2 -0
  151. package/src/trails/topo-export.ts +35 -0
  152. package/src/trails/topo-history.ts +38 -0
  153. package/src/trails/topo-pin.ts +38 -0
  154. package/src/trails/topo-read-support.ts +329 -0
  155. package/src/trails/topo-reports.ts +228 -0
  156. package/src/trails/topo-show.ts +54 -0
  157. package/src/trails/topo-store-support.ts +104 -0
  158. package/src/trails/topo-support.ts +230 -0
  159. package/src/trails/topo-unpin.ts +56 -0
  160. package/src/trails/topo-verify.ts +25 -0
  161. package/src/trails/topo.ts +69 -0
  162. package/src/trails/warden.ts +13 -3
  163. package/src/versions.ts +43 -0
  164. package/tsconfig.tests.json +10 -0
  165. package/src/trails/add-trailhead.ts +0 -121
@@ -1,3 +1,3 @@
1
1
  $ oxlint ./src
2
2
  Found 0 warnings and 0 errors.
3
- Finished in 56ms on 18 files with 93 rules using 24 threads.
3
+ Finished in 57ms on 38 files with 93 rules using 24 threads.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # trails
2
2
 
3
+ ## 1.0.0-beta.15
4
+
5
+ ### Patch Changes
6
+
7
+ - 2003fa5: Prepare the Trails CLI for beta.15 release publishing: derive the CLI version from package metadata, scaffold publishable package ranges, add HTTP surface generation, include the scaffold toolchain dependencies, and avoid generating unsupported Warden flags.
8
+ - Updated dependencies [4ad6b25]
9
+ - @ontrails/core@1.0.0-beta.15
10
+ - @ontrails/cli@1.0.0-beta.15
11
+ - @ontrails/tracing@1.0.0-beta.15
12
+ - @ontrails/warden@1.0.0-beta.15
13
+ - @ontrails/logging@1.0.0-beta.15
14
+ - @ontrails/schema@1.0.0-beta.15
15
+
16
+ ## 1.0.0-beta.14
17
+
18
+ ### Minor Changes
19
+
20
+ - 69057e9: Add hierarchical CLI command trees and structured input, enforce established-only topo exports across trailheads, move developer topo and tracker state onto shared `trails.db` with pins and maintenance flows, and ship schema-derived stores through `@ontrails/store` and its Drizzle runtime.
21
+
22
+ ### Patch Changes
23
+
24
+ - Updated dependencies [69057e9]
25
+ - @ontrails/cli@1.0.0-beta.14
26
+ - @ontrails/core@1.0.0-beta.14
27
+ - @ontrails/logging@1.0.0-beta.14
28
+ - @ontrails/schema@1.0.0-beta.14
29
+ - @ontrails/tracker@1.0.0-beta.14
30
+ - @ontrails/warden@1.0.0-beta.14
31
+
3
32
  ## 1.0.0-beta.13
4
33
 
5
34
  ### Patch Changes
@@ -1,6 +1,45 @@
1
1
  /* oxlint-disable eslint-plugin-jest/require-hook -- testExamples registers tests at module scope */
2
+ import { afterAll, beforeAll } from 'bun:test';
3
+ import { mkdirSync, rmSync, writeFileSync } from 'node:fs';
4
+ import { join, resolve } from 'node:path';
5
+
2
6
  import { testExamples } from '@ontrails/testing';
3
7
 
4
8
  import { app } from '../src/app.js';
5
9
 
10
+ const trailsWorkspaceDir = resolve(import.meta.dir, '..', '.trails');
11
+ const trailsGitignorePath = join(trailsWorkspaceDir, '.gitignore');
12
+ const trailsWorkspaceSubdirs = ['config', 'dev', 'generated'] as const;
13
+ const trailsGitignore = `# Local config overrides
14
+ config/
15
+
16
+ # Development state
17
+ dev/
18
+
19
+ # Generated artifacts
20
+ generated/
21
+
22
+ # Shared Trails database
23
+ trails.db
24
+ trails.db-shm
25
+ trails.db-wal
26
+ `;
27
+
28
+ const resetTrailsWorkspace = (): void => {
29
+ rmSync(trailsWorkspaceDir, { force: true, recursive: true });
30
+ mkdirSync(trailsWorkspaceDir, { recursive: true });
31
+ for (const subdir of trailsWorkspaceSubdirs) {
32
+ mkdirSync(join(trailsWorkspaceDir, subdir), { recursive: true });
33
+ }
34
+ writeFileSync(trailsGitignorePath, trailsGitignore);
35
+ };
36
+
37
+ beforeAll(() => {
38
+ resetTrailsWorkspace();
39
+ });
40
+
41
+ afterAll(() => {
42
+ resetTrailsWorkspace();
43
+ });
44
+
6
45
  testExamples(app);
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,GAAG,+BAUf,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,GAAG,+BAqBf,CAAC"}
package/dist/src/app.js CHANGED
@@ -4,8 +4,19 @@ import * as addTrail from './trails/add-trail.js';
4
4
  import * as addVerify from './trails/add-verify.js';
5
5
  import * as create from './trails/create.js';
6
6
  import * as createScaffold from './trails/create-scaffold.js';
7
+ import * as devClean from './trails/dev-clean.js';
8
+ import * as devReset from './trails/dev-reset.js';
9
+ import * as devStats from './trails/dev-stats.js';
10
+ import * as draftPromote from './trails/draft-promote.js';
7
11
  import * as guide from './trails/guide.js';
8
12
  import * as survey from './trails/survey.js';
13
+ import * as topoExport from './trails/topo-export.js';
14
+ import * as topoHistory from './trails/topo-history.js';
15
+ import * as topoPin from './trails/topo-pin.js';
16
+ import * as topoShow from './trails/topo-show.js';
17
+ import * as topoCommand from './trails/topo.js';
18
+ import * as topoUnpin from './trails/topo-unpin.js';
19
+ import * as topoVerify from './trails/topo-verify.js';
9
20
  import * as warden from './trails/warden.js';
10
- export const app = topo('trails', survey, guide, warden, create, createScaffold, addSurface, addVerify, addTrail);
21
+ export const app = topo('trails', survey, topoCommand, topoShow, topoHistory, topoPin, topoUnpin, topoExport, topoVerify, devStats, devClean, devReset, guide, draftPromote, warden, create, createScaffold, addSurface, addVerify, addTrail);
11
22
  //# sourceMappingURL=app.js.map
@@ -1 +1 @@
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
+ {"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,QAAQ,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,YAAY,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,UAAU,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,UAAU,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAE7C,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,CACrB,QAAQ,EACR,MAAM,EACN,WAAW,EACX,QAAQ,EACR,WAAW,EACX,OAAO,EACP,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,MAAM,EACN,MAAM,EACN,cAAc,EACd,UAAU,EACV,SAAS,EACT,QAAQ,CACT,CAAC"}
package/dist/src/cli.js CHANGED
@@ -1,13 +1,14 @@
1
1
  import { outputModePreset } from '@ontrails/cli';
2
- import { blaze } from '@ontrails/cli/commander';
2
+ import { surface } from '@ontrails/cli/commander';
3
3
  import { app } from './app.js';
4
4
  import { resolveInputWithClack } from './clack.js';
5
+ import { trailsPackageVersion } from './versions.js';
5
6
  // oxlint-disable-next-line require-hook -- CLI entry point
6
- blaze(app, {
7
+ await surface(app, {
7
8
  description: 'Agent-native, contract-first TypeScript framework',
8
9
  name: 'trails',
9
10
  presets: [outputModePreset()],
10
11
  resolveInput: resolveInputWithClack,
11
- version: '0.1.0',
12
+ version: trailsPackageVersion,
12
13
  });
13
14
  //# sourceMappingURL=cli.js.map
@@ -1 +1 @@
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
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,2DAA2D;AAC3D,MAAM,OAAO,CAAC,GAAG,EAAE;IACjB,WAAW,EAAE,mDAAmD;IAChE,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC7B,YAAY,EAAE,qBAAqB;IACnC,OAAO,EAAE,oBAAoB;CAC9B,CAAC,CAAC"}
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * `add.surface` trail -- Add a surface to an existing project.
3
3
  *
4
- * Generates the CLI or MCP entry point and updates package.json dependencies.
4
+ * Generates surface entry points and updates package.json dependencies.
5
5
  */
6
6
  export declare const addSurface: import("@ontrails/core").Trail<{
7
- surface: "cli" | "mcp";
7
+ surface: "cli" | "http" | "mcp";
8
8
  dir?: string | undefined;
9
9
  }, {
10
10
  created: string;
11
11
  dependency: string;
12
- }>;
12
+ }, never>;
13
13
  //# sourceMappingURL=add-surface.d.ts.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"add-surface.d.ts","sourceRoot":"","sources":["../../../src/trails/add-surface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqHH,eAAO,MAAM,UAAU;;;;;;SA4BrB,CAAC"}
@@ -1,37 +1,56 @@
1
1
  /**
2
2
  * `add.surface` trail -- Add a surface to an existing project.
3
3
  *
4
- * Generates the CLI or MCP entry point and updates package.json dependencies.
4
+ * Generates surface entry points and updates package.json dependencies.
5
5
  */
6
6
  import { existsSync, mkdirSync } from 'node:fs';
7
7
  import { basename, dirname, join, resolve } from 'node:path';
8
8
  import { Result, trail } from '@ontrails/core';
9
9
  import { z } from 'zod';
10
+ import { ontrailsPackageRange, scaffoldDependencyVersions, } from '../versions.js';
10
11
  import { findTopoPath } from './project.js';
11
- const generateCliEntry = (appImportPath) => `import { blaze } from '@ontrails/cli/commander';
12
+ const generateCliEntry = (appImportPath) => `import { surface } from '@ontrails/cli/commander';
12
13
 
13
14
  import { app } from '${appImportPath}';
14
15
 
15
- blaze(app);
16
+ await surface(app);
16
17
  `;
17
- const generateMcpEntry = (appImportPath) => `import { blaze } from '@ontrails/mcp';
18
+ const generateMcpEntry = (appImportPath) => `import { surface } from '@ontrails/mcp';
18
19
 
19
20
  import { app } from '${appImportPath}';
20
21
 
21
- await blaze(app);
22
+ await surface(app);
22
23
  `;
24
+ const generateHttpEntry = (appImportPath) => `import { surface } from '@ontrails/hono';
25
+
26
+ import { app } from '${appImportPath}';
27
+
28
+ await surface(app, { port: 3000 });
29
+ `;
30
+ const surfaceEntryFiles = {
31
+ cli: 'src/cli.ts',
32
+ http: 'src/http.ts',
33
+ mcp: 'src/mcp.ts',
34
+ };
35
+ const surfaceDependencies = {
36
+ cli: ['@ontrails/cli'],
37
+ http: ['@ontrails/hono', '@ontrails/http'],
38
+ mcp: ['@ontrails/mcp'],
39
+ };
23
40
  /** Resolve the entry file for a surface. */
24
- const getEntryFile = (surface) => surface === 'cli' ? 'src/cli.ts' : 'src/mcp.ts';
41
+ const getEntryFile = (surface) => surfaceEntryFiles[surface];
25
42
  // ---------------------------------------------------------------------------
26
43
  // Trail definition
27
44
  // ---------------------------------------------------------------------------
28
45
  /** Patch deps and optionally bin in a parsed package.json. */
29
46
  const patchPkgDeps = (pkg, surface, cwd) => {
30
- const depName = surface === 'cli' ? '@ontrails/cli' : '@ontrails/mcp';
47
+ const [depName = ''] = surfaceDependencies[surface];
31
48
  const deps = (pkg['dependencies'] ?? {});
32
- deps[depName] = 'workspace:*';
49
+ for (const dependency of surfaceDependencies[surface]) {
50
+ deps[dependency] = ontrailsPackageRange;
51
+ }
33
52
  if (surface === 'cli') {
34
- deps['commander'] = '^14.0.0';
53
+ deps['commander'] = scaffoldDependencyVersions.commander;
35
54
  pkg['bin'] = {
36
55
  [pkg['name'] ?? basename(cwd)]: './src/cli.ts',
37
56
  };
@@ -43,7 +62,7 @@ const patchPkgDeps = (pkg, surface, cwd) => {
43
62
  const updatePkgJsonForSurface = async (cwd, surface) => {
44
63
  const pkgPath = join(cwd, 'package.json');
45
64
  if (!existsSync(pkgPath)) {
46
- return surface === 'cli' ? '@ontrails/cli' : '@ontrails/mcp';
65
+ return surfaceDependencies[surface][0] ?? '';
47
66
  }
48
67
  const pkg = (await Bun.file(pkgPath).json());
49
68
  const depName = patchPkgDeps(pkg, surface, cwd);
@@ -55,34 +74,37 @@ const writeSurfaceEntry = async (cwd, surface) => {
55
74
  const entryFile = getEntryFile(surface);
56
75
  const fullEntryPath = join(cwd, entryFile);
57
76
  const appImport = (await findTopoPath(cwd)) ?? './app.js';
58
- const content = surface === 'cli'
59
- ? generateCliEntry(appImport)
60
- : generateMcpEntry(appImport);
77
+ const generators = {
78
+ cli: generateCliEntry,
79
+ http: generateHttpEntry,
80
+ mcp: generateMcpEntry,
81
+ };
82
+ const content = generators[surface](appImport);
61
83
  mkdirSync(dirname(fullEntryPath), { recursive: true });
62
84
  await Bun.write(fullEntryPath, content);
63
85
  return entryFile;
64
86
  };
65
87
  export const addSurface = trail('add.surface', {
66
- description: 'Add a surface to an existing project',
67
- input: z.object({
68
- dir: z.string().optional().describe('Project directory'),
69
- surface: z.enum(['cli', 'mcp']).describe('Surface to add'),
70
- }),
71
- output: z.object({
72
- created: z.string(),
73
- dependency: z.string(),
74
- }),
75
- run: async (input) => {
88
+ blaze: async (input) => {
76
89
  const cwd = resolve(input.dir ?? '.');
77
90
  const { surface } = input;
78
91
  const entryFile = getEntryFile(surface);
79
92
  if (existsSync(join(cwd, entryFile))) {
80
- return Result.err(new Error(`${surface.toUpperCase()} is already blazed. Nothing to do.`));
93
+ return Result.err(new Error(`${surface.toUpperCase()} surface already exists. Nothing to do.`));
81
94
  }
82
95
  return Result.ok({
83
96
  created: await writeSurfaceEntry(cwd, surface),
84
97
  dependency: await updatePkgJsonForSurface(cwd, surface),
85
98
  });
86
99
  },
100
+ description: 'Add a surface to an existing project',
101
+ input: z.object({
102
+ dir: z.string().optional().describe('Project directory'),
103
+ surface: z.enum(['cli', 'http', 'mcp']).describe('Surface to add'),
104
+ }),
105
+ output: z.object({
106
+ created: z.string(),
107
+ dependency: z.string(),
108
+ }),
87
109
  });
88
110
  //# sourceMappingURL=add-surface.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-surface.js","sourceRoot":"","sources":["../../../src/trails/add-surface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add-surface.js","sourceRoot":"","sources":["../../../src/trails/add-surface.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,11 @@
2
2
  * `add.trail` trail -- Scaffold a new trail file with tests.
3
3
  */
4
4
  export declare const addTrail: import("@ontrails/core").Trail<{
5
+ description: string;
6
+ exampleName: string;
5
7
  id: string;
6
8
  intent: "read" | "write" | "destroy";
7
9
  }, {
8
10
  created: string[];
9
- }>;
11
+ }, never>;
10
12
  //# sourceMappingURL=add-trail.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-trail.d.ts","sourceRoot":"","sources":["../../../src/trails/add-trail.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+DH,eAAO,MAAM,QAAQ;;;;;EA4BnB,CAAC"}
1
+ {"version":3,"file":"add-trail.d.ts","sourceRoot":"","sources":["../../../src/trails/add-trail.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4EH,eAAO,MAAM,QAAQ;;;;;;;SAmDnB,CAAC"}
@@ -8,35 +8,44 @@ import { z } from 'zod';
8
8
  // ---------------------------------------------------------------------------
9
9
  // Helpers
10
10
  // ---------------------------------------------------------------------------
11
- const generateTrailFile = (id, intent) => {
11
+ const literal = (value) => JSON.stringify(value);
12
+ const deriveExampleMessage = (id) => `${id} completed`;
13
+ const generateTrailFile = (id, description, exampleName, intent) => {
12
14
  const intentLine = intent === 'write' ? '' : `\n intent: '${intent}',`;
15
+ const exampleMessage = deriveExampleMessage(id);
13
16
  return `import { Result, trail } from '@ontrails/core';
14
17
  import { z } from 'zod';
15
18
 
16
19
  export const ${id.replaceAll('.', '_')} = trail('${id}', {
17
- description: 'TODO: describe this trail',
20
+ blaze: async () => {
21
+ return Result.ok({ message: ${literal(exampleMessage)} });
22
+ },
23
+ description: ${literal(description)},
18
24
  examples: [
19
25
  {
26
+ expected: { message: ${literal(exampleMessage)} },
20
27
  input: {},
21
- name: 'TODO: add example',
28
+ name: ${literal(exampleName)},
22
29
  },
23
30
  ],
24
- run: async (input) => {
25
- return Result.ok({ message: 'TODO' });
26
- },
27
31
  input: z.object({}),${intentLine}
28
32
  output: z.object({ message: z.string() }),
29
33
  });
30
34
  `;
31
35
  };
32
- const generateTestFile = (id) => {
36
+ const generateTestFile = (id, exampleName) => {
33
37
  const moduleName = id.replaceAll('.', '-');
34
38
  const trailName = id.replaceAll('.', '_');
39
+ const exampleMessage = deriveExampleMessage(id);
35
40
  return `import { testTrail } from '@ontrails/testing';
36
41
  import { ${trailName} } from '../src/trails/${moduleName}.js';
37
42
 
38
43
  testTrail(${trailName}, [
39
- { description: 'basic test', input: {}, expectOk: true },
44
+ {
45
+ description: ${literal(exampleName)},
46
+ expectValue: { message: ${literal(exampleMessage)} },
47
+ input: {},
48
+ },
40
49
  ]);
41
50
  `;
42
51
  };
@@ -49,29 +58,47 @@ const writeWithDirs = async (filePath, content) => {
49
58
  await Bun.write(filePath, content);
50
59
  };
51
60
  export const addTrail = trail('add.trail', {
52
- description: 'Scaffold a new trail with tests and examples',
53
- input: z.object({
54
- id: z.string().describe('Trail ID (e.g., entity.update)'),
55
- intent: z
56
- .enum(['read', 'write', 'destroy'])
57
- .default('write')
58
- .describe('Trail intent'),
59
- }),
60
- output: z.object({
61
- created: z.array(z.string()),
62
- }),
63
- run: async (input, ctx) => {
61
+ args: ['id'],
62
+ blaze: async (input, ctx) => {
64
63
  const { id } = input;
65
64
  const moduleName = id.replaceAll('.', '-');
66
65
  const cwd = resolve(ctx.cwd ?? '.');
67
66
  const files = new Map([
68
- [`src/trails/${moduleName}.ts`, generateTrailFile(id, input.intent)],
69
- [`__tests__/${moduleName}.test.ts`, generateTestFile(id)],
67
+ [
68
+ `src/trails/${moduleName}.ts`,
69
+ generateTrailFile(id, input.description, input.exampleName, input.intent),
70
+ ],
71
+ [
72
+ `__tests__/${moduleName}.test.ts`,
73
+ generateTestFile(id, input.exampleName),
74
+ ],
70
75
  ]);
71
76
  for (const [relativePath, content] of files) {
72
77
  await writeWithDirs(join(cwd, relativePath), content);
73
78
  }
74
79
  return Result.ok({ created: [...files.keys()] });
75
80
  },
81
+ description: 'Scaffold a new trail with tests and examples',
82
+ input: z.object({
83
+ description: z
84
+ .string()
85
+ .min(1, 'Trail description is required')
86
+ .describe('Trail description'),
87
+ exampleName: z
88
+ .string()
89
+ .min(1, 'Starter example name is required')
90
+ .describe('Starter example name'),
91
+ id: z
92
+ .string()
93
+ .min(1, 'Trail ID is required')
94
+ .describe('Trail ID (e.g., entity.update)'),
95
+ intent: z
96
+ .enum(['read', 'write', 'destroy'])
97
+ .default('write')
98
+ .describe('Trail intent'),
99
+ }),
100
+ output: z.object({
101
+ created: z.array(z.string()),
102
+ }),
76
103
  });
77
104
  //# sourceMappingURL=add-trail.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-trail.js","sourceRoot":"","sources":["../../../src/trails/add-trail.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add-trail.js","sourceRoot":"","sources":["../../../src/trails/add-trail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `add.trailhead` trail -- Add a trailhead to an existing project.
3
+ *
4
+ * Generates the CLI or MCP entry point and updates package.json dependencies.
5
+ */
6
+ export declare const addTrailhead: import("@ontrails/core").Trail<{
7
+ trailhead: "cli" | "mcp";
8
+ dir?: string | undefined;
9
+ }, {
10
+ created: string;
11
+ dependency: string;
12
+ }, never>;
13
+ //# sourceMappingURL=add-trailhead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-trailhead.d.ts","sourceRoot":"","sources":["../../../src/trails/add-trailhead.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwFH,eAAO,MAAM,YAAY;;;;;;SA4BvB,CAAC"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * `add.trailhead` trail -- Add a trailhead to an existing project.
3
+ *
4
+ * Generates the CLI or MCP entry point and updates package.json dependencies.
5
+ */
6
+ import { existsSync, mkdirSync } from 'node:fs';
7
+ import { basename, dirname, join, resolve } from 'node:path';
8
+ import { Result, trail } from '@ontrails/core';
9
+ import { z } from 'zod';
10
+ import { findTopoPath } from './project.js';
11
+ const generateCliEntry = (appImportPath) => `import { surface } from '@ontrails/cli/commander';
12
+
13
+ import { app } from '${appImportPath}';
14
+
15
+ await surface(app);
16
+ `;
17
+ const generateMcpEntry = (appImportPath) => `import { surface } from '@ontrails/mcp';
18
+
19
+ import { app } from '${appImportPath}';
20
+
21
+ await surface(app);
22
+ `;
23
+ /** Resolve the entry file for a trailhead. */
24
+ const getEntryFile = (trailhead) => trailhead === 'cli' ? 'src/cli.ts' : 'src/mcp.ts';
25
+ // ---------------------------------------------------------------------------
26
+ // Trail definition
27
+ // ---------------------------------------------------------------------------
28
+ /** Patch deps and optionally bin in a parsed package.json. */
29
+ const patchPkgDeps = (pkg, trailhead, cwd) => {
30
+ const depName = trailhead === 'cli' ? '@ontrails/cli' : '@ontrails/mcp';
31
+ const deps = (pkg['dependencies'] ?? {});
32
+ deps[depName] = 'workspace:*';
33
+ if (trailhead === 'cli') {
34
+ deps['commander'] = '^14.0.0';
35
+ pkg['bin'] = {
36
+ [pkg['name'] ?? basename(cwd)]: './src/cli.ts',
37
+ };
38
+ }
39
+ pkg['dependencies'] = Object.fromEntries(Object.entries(deps).toSorted(([a], [b]) => a.localeCompare(b)));
40
+ return depName;
41
+ };
42
+ /** Update package.json with trailhead dependency and CLI bin if needed. */
43
+ const updatePkgJsonForTrailhead = async (cwd, trailhead) => {
44
+ const pkgPath = join(cwd, 'package.json');
45
+ if (!existsSync(pkgPath)) {
46
+ return trailhead === 'cli' ? '@ontrails/cli' : '@ontrails/mcp';
47
+ }
48
+ const pkg = (await Bun.file(pkgPath).json());
49
+ const depName = patchPkgDeps(pkg, trailhead, cwd);
50
+ await Bun.write(pkgPath, `${JSON.stringify(pkg, null, 2)}\n`);
51
+ return depName;
52
+ };
53
+ /** Create the entry file for a trailhead and return the relative path. */
54
+ const writeTrailheadEntry = async (cwd, trailhead) => {
55
+ const entryFile = getEntryFile(trailhead);
56
+ const fullEntryPath = join(cwd, entryFile);
57
+ const appImport = (await findTopoPath(cwd)) ?? './app.js';
58
+ const content = trailhead === 'cli'
59
+ ? generateCliEntry(appImport)
60
+ : generateMcpEntry(appImport);
61
+ mkdirSync(dirname(fullEntryPath), { recursive: true });
62
+ await Bun.write(fullEntryPath, content);
63
+ return entryFile;
64
+ };
65
+ export const addTrailhead = trail('add.trailhead', {
66
+ blaze: async (input) => {
67
+ const cwd = resolve(input.dir ?? '.');
68
+ const { trailhead } = input;
69
+ const entryFile = getEntryFile(trailhead);
70
+ if (existsSync(join(cwd, entryFile))) {
71
+ return Result.err(new Error(`${trailhead.toUpperCase()} trailhead already exists. Nothing to do.`));
72
+ }
73
+ return Result.ok({
74
+ created: await writeTrailheadEntry(cwd, trailhead),
75
+ dependency: await updatePkgJsonForTrailhead(cwd, trailhead),
76
+ });
77
+ },
78
+ description: 'Add a trailhead to an existing project',
79
+ input: z.object({
80
+ dir: z.string().optional().describe('Project directory'),
81
+ trailhead: z.enum(['cli', 'mcp']).describe('Trailhead to add'),
82
+ }),
83
+ output: z.object({
84
+ created: z.string(),
85
+ dependency: z.string(),
86
+ }),
87
+ });
88
+ //# sourceMappingURL=add-trailhead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-trailhead.js","sourceRoot":"","sources":["../../../src/trails/add-trailhead.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,5 @@ export declare const addVerify: import("@ontrails/core").Trail<{
6
6
  dir?: string | undefined;
7
7
  }, {
8
8
  created: string[];
9
- }>;
9
+ }, never>;
10
10
  //# sourceMappingURL=add-verify.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-verify.d.ts","sourceRoot":"","sources":["../../../src/trails/add-verify.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsDH,eAAO,MAAM,SAAS;;;;;EA8BpB,CAAC"}
1
+ {"version":3,"file":"add-verify.d.ts","sourceRoot":"","sources":["../../../src/trails/add-verify.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2DH,eAAO,MAAM,SAAS;;;;;SA8BpB,CAAC"}