@ontrails/trails 1.0.0-beta.12 → 1.0.0-beta.14
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.
- package/.turbo/turbo-lint.log +1 -1
- package/CHANGELOG.md +40 -12
- package/__tests__/examples.test.ts +14 -0
- package/dist/src/app.d.ts.map +1 -1
- package/dist/src/app.js +13 -2
- package/dist/src/app.js.map +1 -1
- package/dist/src/clack.d.ts +1 -1
- package/dist/src/clack.js +1 -1
- package/dist/src/cli.js +2 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/trails/add-trail.js +13 -13
- package/dist/src/trails/add-trail.js.map +1 -1
- package/dist/src/trails/add-trailhead.d.ts +13 -0
- package/dist/src/trails/add-trailhead.d.ts.map +1 -0
- package/dist/src/trails/add-trailhead.js +88 -0
- package/dist/src/trails/add-trailhead.js.map +1 -0
- package/dist/src/trails/add-verify.js +10 -10
- package/dist/src/trails/add-verify.js.map +1 -1
- package/dist/src/trails/create-scaffold.js +26 -26
- package/dist/src/trails/create-scaffold.js.map +1 -1
- package/dist/src/trails/create.d.ts +6 -6
- package/dist/src/trails/create.d.ts.map +1 -1
- package/dist/src/trails/create.js +29 -29
- package/dist/src/trails/create.js.map +1 -1
- package/dist/src/trails/dev-clean.d.ts +9 -0
- package/dist/src/trails/dev-clean.d.ts.map +1 -0
- package/dist/src/trails/dev-clean.js +65 -0
- package/dist/src/trails/dev-clean.js.map +1 -0
- package/dist/src/trails/dev-reset.d.ts +6 -0
- package/dist/src/trails/dev-reset.d.ts.map +1 -0
- package/dist/src/trails/dev-reset.js +38 -0
- package/dist/src/trails/dev-reset.js.map +1 -0
- package/dist/src/trails/dev-stats.d.ts +7 -0
- package/dist/src/trails/dev-stats.d.ts.map +1 -0
- package/dist/src/trails/dev-stats.js +61 -0
- package/dist/src/trails/dev-stats.js.map +1 -0
- package/dist/src/trails/dev-support.d.ts +64 -0
- package/dist/src/trails/dev-support.d.ts.map +1 -0
- package/dist/src/trails/dev-support.js +178 -0
- package/dist/src/trails/dev-support.js.map +1 -0
- package/dist/src/trails/draft-promote.d.ts +18 -0
- package/dist/src/trails/draft-promote.d.ts.map +1 -0
- package/dist/src/trails/draft-promote.js +386 -0
- package/dist/src/trails/draft-promote.js.map +1 -0
- package/dist/src/trails/guide.d.ts +13 -3
- package/dist/src/trails/guide.d.ts.map +1 -1
- package/dist/src/trails/guide.js +21 -37
- package/dist/src/trails/guide.js.map +1 -1
- package/dist/src/trails/load-app.d.ts +3 -1
- package/dist/src/trails/load-app.d.ts.map +1 -1
- package/dist/src/trails/load-app.js +53 -10
- package/dist/src/trails/load-app.js.map +1 -1
- package/dist/src/trails/project.d.ts.map +1 -1
- package/dist/src/trails/project.js +14 -3
- package/dist/src/trails/project.js.map +1 -1
- package/dist/src/trails/survey.d.ts +4 -58
- package/dist/src/trails/survey.d.ts.map +1 -1
- package/dist/src/trails/survey.js +52 -173
- package/dist/src/trails/survey.js.map +1 -1
- package/dist/src/trails/topo-constants.d.ts +3 -0
- package/dist/src/trails/topo-constants.d.ts.map +1 -0
- package/dist/src/trails/topo-constants.js +3 -0
- package/dist/src/trails/topo-constants.js.map +1 -0
- package/dist/src/trails/topo-export.d.ts +18 -0
- package/dist/src/trails/topo-export.d.ts.map +1 -0
- package/dist/src/trails/topo-export.js +34 -0
- package/dist/src/trails/topo-export.js.map +1 -0
- package/dist/src/trails/topo-history.d.ts +24 -0
- package/dist/src/trails/topo-history.d.ts.map +1 -0
- package/dist/src/trails/topo-history.js +33 -0
- package/dist/src/trails/topo-history.js.map +1 -0
- package/dist/src/trails/topo-pin.d.ts +21 -0
- package/dist/src/trails/topo-pin.d.ts.map +1 -0
- package/dist/src/trails/topo-pin.js +35 -0
- package/dist/src/trails/topo-pin.js.map +1 -0
- package/dist/src/trails/topo-read-support.d.ts +54 -0
- package/dist/src/trails/topo-read-support.d.ts.map +1 -0
- package/dist/src/trails/topo-read-support.js +178 -0
- package/dist/src/trails/topo-read-support.js.map +1 -0
- package/dist/src/trails/topo-reports.d.ts +50 -0
- package/dist/src/trails/topo-reports.d.ts.map +1 -0
- package/dist/src/trails/topo-reports.js +122 -0
- package/dist/src/trails/topo-reports.js.map +1 -0
- package/dist/src/trails/topo-show.d.ts +23 -0
- package/dist/src/trails/topo-show.d.ts.map +1 -0
- package/dist/src/trails/topo-show.js +53 -0
- package/dist/src/trails/topo-show.js.map +1 -0
- package/dist/src/trails/topo-store-support.d.ts +13 -0
- package/dist/src/trails/topo-store-support.d.ts.map +1 -0
- package/dist/src/trails/topo-store-support.js +55 -0
- package/dist/src/trails/topo-store-support.js.map +1 -0
- package/dist/src/trails/topo-support.d.ts +87 -0
- package/dist/src/trails/topo-support.d.ts.map +1 -0
- package/dist/src/trails/topo-support.js +165 -0
- package/dist/src/trails/topo-support.js.map +1 -0
- package/dist/src/trails/topo-unpin.d.ts +15 -0
- package/dist/src/trails/topo-unpin.d.ts.map +1 -0
- package/dist/src/trails/topo-unpin.js +39 -0
- package/dist/src/trails/topo-unpin.js.map +1 -0
- package/dist/src/trails/topo-verify.d.ts +5 -0
- package/dist/src/trails/topo-verify.d.ts.map +1 -0
- package/dist/src/trails/topo-verify.js +28 -0
- package/dist/src/trails/topo-verify.js.map +1 -0
- package/dist/src/trails/topo.d.ts +5 -0
- package/dist/src/trails/topo.d.ts.map +1 -0
- package/dist/src/trails/topo.js +67 -0
- package/dist/src/trails/topo.js.map +1 -0
- package/dist/src/trails/warden.d.ts +1 -1
- package/dist/src/trails/warden.d.ts.map +1 -1
- package/dist/src/trails/warden.js +28 -27
- package/dist/src/trails/warden.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -7
- package/src/__tests__/create.test.ts +35 -33
- package/src/__tests__/draft-promote.test.ts +144 -0
- package/src/__tests__/guide.test.ts +4 -4
- package/src/__tests__/load-app.test.ts +43 -0
- package/src/__tests__/survey.test.ts +140 -55
- package/src/__tests__/topo-dev.test.ts +424 -0
- package/src/__tests__/warden.test.ts +2 -2
- package/src/app.ts +24 -2
- package/src/clack.ts +1 -1
- package/src/cli.ts +2 -2
- package/src/trails/add-trail.ts +13 -13
- package/src/trails/{add-surface.ts → add-trailhead.ts} +39 -37
- package/src/trails/add-verify.ts +10 -10
- package/src/trails/create-scaffold.ts +28 -28
- package/src/trails/create.ts +42 -42
- package/src/trails/dev-clean.ts +73 -0
- package/src/trails/dev-reset.ts +44 -0
- package/src/trails/dev-stats.ts +64 -0
- package/src/trails/dev-support.ts +326 -0
- package/src/trails/draft-promote.ts +704 -0
- package/src/trails/guide.ts +29 -44
- package/src/trails/load-app.ts +76 -13
- package/src/trails/project.ts +17 -3
- package/src/trails/survey.ts +80 -279
- package/src/trails/topo-constants.ts +2 -0
- package/src/trails/topo-export.ts +39 -0
- package/src/trails/topo-history.ts +40 -0
- package/src/trails/topo-pin.ts +42 -0
- package/src/trails/topo-read-support.ts +332 -0
- package/src/trails/topo-reports.ts +221 -0
- package/src/trails/topo-show.ts +58 -0
- package/src/trails/topo-store-support.ts +96 -0
- package/src/trails/topo-support.ts +274 -0
- package/src/trails/topo-unpin.ts +51 -0
- package/src/trails/topo-verify.ts +29 -0
- package/src/trails/topo.ts +73 -0
- package/src/trails/warden.ts +33 -32
package/.turbo/turbo-lint.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# trails
|
|
2
2
|
|
|
3
|
+
## 1.0.0-beta.14
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 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.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [69057e9]
|
|
12
|
+
- @ontrails/cli@1.0.0-beta.14
|
|
13
|
+
- @ontrails/core@1.0.0-beta.14
|
|
14
|
+
- @ontrails/logging@1.0.0-beta.14
|
|
15
|
+
- @ontrails/schema@1.0.0-beta.14
|
|
16
|
+
- @ontrails/tracker@1.0.0-beta.14
|
|
17
|
+
- @ontrails/warden@1.0.0-beta.14
|
|
18
|
+
|
|
19
|
+
## 1.0.0-beta.13
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- Updated dependencies [6944147]
|
|
24
|
+
- Updated dependencies
|
|
25
|
+
- @ontrails/core@1.0.0-beta.13
|
|
26
|
+
- @ontrails/cli@1.0.0-beta.13
|
|
27
|
+
- @ontrails/schema@1.0.0-beta.13
|
|
28
|
+
- @ontrails/warden@1.0.0-beta.13
|
|
29
|
+
- @ontrails/logging@1.0.0-beta.13
|
|
30
|
+
|
|
3
31
|
## 1.0.0-beta.12
|
|
4
32
|
|
|
5
33
|
### Patch Changes
|
|
@@ -17,17 +45,17 @@
|
|
|
17
45
|
|
|
18
46
|
- Add services as a first-class primitive.
|
|
19
47
|
|
|
20
|
-
Services make infrastructure dependencies declarative, injectable, and governable. Define a service with `
|
|
48
|
+
Services make infrastructure dependencies declarative, injectable, and governable. Define a service with `provision()`, declare it on a trail with `provisions: [db]`, and access it with `db.from(ctx)` or `ctx.provision()`.
|
|
21
49
|
|
|
22
|
-
**Core:** `
|
|
50
|
+
**Core:** `provision()` factory, `ServiceSpec<T>`, `ServiceContext`, singleton resolution in `executeTrail`, in-flight creation dedup, `isService` guard, `findDuplicateServiceId`, topo service discovery and validation, `services` field on trail specs.
|
|
23
51
|
|
|
24
|
-
**Testing:** Auto-resolution of `mock` factories in `testAll`, `testExamples`, `testContracts`, and `
|
|
52
|
+
**Testing:** Auto-resolution of `mock` factories in `testAll`, `testExamples`, `testContracts`, and `testCrosses`. Explicit `services` overrides with correct precedence (`explicit > ctx.extensions > auto-mock`). Service mock propagation through crossing graphs.
|
|
25
53
|
|
|
26
|
-
**Warden:** `service-declarations` rule validates `db.from(ctx)` and `ctx.
|
|
54
|
+
**Warden:** `service-declarations` rule validates `db.from(ctx)` and `ctx.provision()` usage matches declared `provisions: [...]`. `service-exists` rule validates declared service IDs resolve in project context. Scope-aware AST walking skips nested function boundaries.
|
|
27
55
|
|
|
28
|
-
**
|
|
56
|
+
**Trailheads:** Service overrides thread through `run` and `trailhead` on CLI, MCP, and HTTP.
|
|
29
57
|
|
|
30
|
-
**Introspection:** Survey and
|
|
58
|
+
**Introspection:** Survey and trailhead map outputs include service graph. Topo exposes `.services`, `.getService()`, `.hasService()`, `.listServices()`, `.serviceIds()`, `.serviceCount`.
|
|
31
59
|
|
|
32
60
|
**Docs:** ADR-009 accepted. Unified services guide, updated vocabulary, getting-started, architecture, and package READMEs.
|
|
33
61
|
|
|
@@ -75,9 +103,9 @@
|
|
|
75
103
|
|
|
76
104
|
### Minor Changes
|
|
77
105
|
|
|
78
|
-
- HTTP
|
|
106
|
+
- HTTP trailhead and OpenAPI generation.
|
|
79
107
|
|
|
80
|
-
**http**: New `@ontrails/http` package — Hono-based HTTP
|
|
108
|
+
**http**: New `@ontrails/http` package — Hono-based HTTP connector. `trailhead()` derives routes from trail IDs, maps intent to HTTP verbs (read→GET, write→POST, destroy→DELETE), and maps error taxonomy to status codes. Returns the Hono instance.
|
|
81
109
|
|
|
82
110
|
**schema**: Add `generateOpenApiSpec(topo)` — generates a complete OpenAPI 3.1 spec from the topo. Each trail becomes an operation with path, method, schemas, and error responses derived from the contract.
|
|
83
111
|
|
|
@@ -122,15 +150,15 @@
|
|
|
122
150
|
|
|
123
151
|
**BREAKING CHANGES:**
|
|
124
152
|
|
|
125
|
-
- `hike()` removed — use `trail()` with optional `
|
|
126
|
-
- `follows` renamed to `
|
|
153
|
+
- `hike()` removed — use `trail()` with optional `crosses: [...]` field
|
|
154
|
+
- `follows` renamed to `crosses` (matching `ctx.cross()`)
|
|
127
155
|
- `topo.hikes` removed — single `topo.trails` map
|
|
128
156
|
- `kind: 'hike'` removed — everything is `kind: 'trail'`
|
|
129
157
|
- `readOnly`/`destructive` booleans replaced by `intent: 'read' | 'write' | 'destroy'`
|
|
130
158
|
- `implementation` field renamed to `run`
|
|
131
159
|
- `markers` field renamed to `metadata`
|
|
132
|
-
- `testHike` renamed to `
|
|
133
|
-
- `
|
|
160
|
+
- `testHike` renamed to `testCrosses`, `HikeScenario` to `CrossScenario`
|
|
161
|
+
- `trailhead()` now returns the trailhead handle (`Command` for CLI, `Server` for MCP)
|
|
134
162
|
|
|
135
163
|
### Patch Changes
|
|
136
164
|
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
/* oxlint-disable eslint-plugin-jest/require-hook -- testExamples registers tests at module scope */
|
|
2
|
+
import { afterAll, beforeAll } from 'bun:test';
|
|
3
|
+
import { rmSync } from 'node:fs';
|
|
4
|
+
import { 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
|
+
|
|
12
|
+
beforeAll(() => {
|
|
13
|
+
rmSync(trailsWorkspaceDir, { force: true, recursive: true });
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
afterAll(() => {
|
|
17
|
+
rmSync(trailsWorkspaceDir, { force: true, recursive: true });
|
|
18
|
+
});
|
|
19
|
+
|
|
6
20
|
testExamples(app);
|
package/dist/src/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"
|
|
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
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
import { topo } from '@ontrails/core';
|
|
2
|
-
import * as
|
|
2
|
+
import * as addTrailhead from './trails/add-trailhead.js';
|
|
3
3
|
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,
|
|
21
|
+
export const app = topo('trails', survey, topoCommand, topoShow, topoHistory, topoPin, topoUnpin, topoExport, topoVerify, devStats, devClean, devReset, guide, draftPromote, warden, create, createScaffold, addTrailhead, addVerify, addTrail);
|
|
11
22
|
//# sourceMappingURL=app.js.map
|
package/dist/src/app.js.map
CHANGED
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,YAAY,MAAM,2BAA2B,CAAC;AAC1D,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,YAAY,EACZ,SAAS,EACT,QAAQ,CACT,CAAC"}
|
package/dist/src/clack.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Clack-backed input resolver for the Trails CLI.
|
|
3
3
|
*
|
|
4
|
-
* This stays at the app
|
|
4
|
+
* This stays at the app gate so @ontrails/cli remains prompt-library agnostic.
|
|
5
5
|
*/
|
|
6
6
|
import type { InputResolver } from '@ontrails/cli';
|
|
7
7
|
/** Fill missing input by prompting with Clack when interactive. */
|
package/dist/src/clack.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Clack-backed input resolver for the Trails CLI.
|
|
3
3
|
*
|
|
4
|
-
* This stays at the app
|
|
4
|
+
* This stays at the app gate so @ontrails/cli remains prompt-library agnostic.
|
|
5
5
|
*/
|
|
6
6
|
import { isInteractive } from '@ontrails/cli';
|
|
7
7
|
import * as clack from '@clack/prompts';
|
package/dist/src/cli.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { outputModePreset } from '@ontrails/cli';
|
|
2
|
-
import {
|
|
2
|
+
import { trailhead } from '@ontrails/cli/commander';
|
|
3
3
|
import { app } from './app.js';
|
|
4
4
|
import { resolveInputWithClack } from './clack.js';
|
|
5
5
|
// oxlint-disable-next-line require-hook -- CLI entry point
|
|
6
|
-
|
|
6
|
+
trailhead(app, {
|
|
7
7
|
description: 'Agent-native, contract-first TypeScript framework',
|
|
8
8
|
name: 'trails',
|
|
9
9
|
presets: [outputModePreset()],
|
package/dist/src/cli.js.map
CHANGED
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,2DAA2D;AAC3D,SAAS,CAAC,GAAG,EAAE;IACb,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"}
|
|
@@ -21,7 +21,7 @@ export const ${id.replaceAll('.', '_')} = trail('${id}', {
|
|
|
21
21
|
name: 'TODO: add example',
|
|
22
22
|
},
|
|
23
23
|
],
|
|
24
|
-
|
|
24
|
+
blaze: async (input) => {
|
|
25
25
|
return Result.ok({ message: 'TODO' });
|
|
26
26
|
},
|
|
27
27
|
input: z.object({}),${intentLine}
|
|
@@ -49,18 +49,7 @@ const writeWithDirs = async (filePath, content) => {
|
|
|
49
49
|
await Bun.write(filePath, content);
|
|
50
50
|
};
|
|
51
51
|
export const addTrail = trail('add.trail', {
|
|
52
|
-
|
|
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) => {
|
|
52
|
+
blaze: async (input, ctx) => {
|
|
64
53
|
const { id } = input;
|
|
65
54
|
const moduleName = id.replaceAll('.', '-');
|
|
66
55
|
const cwd = resolve(ctx.cwd ?? '.');
|
|
@@ -73,5 +62,16 @@ export const addTrail = trail('add.trail', {
|
|
|
73
62
|
}
|
|
74
63
|
return Result.ok({ created: [...files.keys()] });
|
|
75
64
|
},
|
|
65
|
+
description: 'Scaffold a new trail with tests and examples',
|
|
66
|
+
input: z.object({
|
|
67
|
+
id: z.string().describe('Trail ID (e.g., entity.update)'),
|
|
68
|
+
intent: z
|
|
69
|
+
.enum(['read', 'write', 'destroy'])
|
|
70
|
+
.default('write')
|
|
71
|
+
.describe('Trail intent'),
|
|
72
|
+
}),
|
|
73
|
+
output: z.object({
|
|
74
|
+
created: z.array(z.string()),
|
|
75
|
+
}),
|
|
76
76
|
});
|
|
77
77
|
//# sourceMappingURL=add-trail.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-trail.js","sourceRoot":"","sources":["../../../src/trails/add-trail.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG,CACxB,EAAU,EACV,MAAoC,EAC5B,EAAE;IACV,MAAM,UAAU,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,MAAM,IAAI,CAAC;IAExE,OAAO;;;eAGM,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,aAAa,EAAE;;;;;;;;;;;wBAW7B,UAAU;;;CAGjC,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,EAAU,EAAU,EAAE;IAC9C,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO;WACE,SAAS,0BAA0B,UAAU;;YAE5C,SAAS;;;CAGpB,CAAC;AACF,CAAC,CAAC;AAEF,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,2DAA2D;AAC3D,MAAM,aAAa,GAAG,KAAK,EACzB,QAAgB,EAChB,OAAe,EACA,EAAE;IACjB,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE;IACzC,
|
|
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
|
+
}>;
|
|
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;;;;;;EA4BvB,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 { trailhead } from '@ontrails/cli/commander';
|
|
12
|
+
|
|
13
|
+
import { app } from '${appImportPath}';
|
|
14
|
+
|
|
15
|
+
trailhead(app);
|
|
16
|
+
`;
|
|
17
|
+
const generateMcpEntry = (appImportPath) => `import { trailhead } from '@ontrails/mcp';
|
|
18
|
+
|
|
19
|
+
import { app } from '${appImportPath}';
|
|
20
|
+
|
|
21
|
+
await trailhead(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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"}
|
|
@@ -40,16 +40,7 @@ const updatePackageJsonForVerify = async (projectDir) => {
|
|
|
40
40
|
// Trail definition
|
|
41
41
|
// ---------------------------------------------------------------------------
|
|
42
42
|
export const addVerify = trail('add.verify', {
|
|
43
|
-
|
|
44
|
-
input: z.object({
|
|
45
|
-
dir: z.string().optional().describe('Parent directory'),
|
|
46
|
-
name: z.string().describe('Project name'),
|
|
47
|
-
}),
|
|
48
|
-
metadata: { internal: true },
|
|
49
|
-
output: z.object({
|
|
50
|
-
created: z.array(z.string()),
|
|
51
|
-
}),
|
|
52
|
-
run: async (input) => {
|
|
43
|
+
blaze: async (input) => {
|
|
53
44
|
const projectDir = resolve(input.dir ?? '.', input.name);
|
|
54
45
|
const files = [];
|
|
55
46
|
const writeFile = async (relativePath, content) => {
|
|
@@ -63,5 +54,14 @@ export const addVerify = trail('add.verify', {
|
|
|
63
54
|
await updatePackageJsonForVerify(projectDir);
|
|
64
55
|
return Result.ok({ created: files });
|
|
65
56
|
},
|
|
57
|
+
description: 'Add testing and warden verification',
|
|
58
|
+
input: z.object({
|
|
59
|
+
dir: z.string().optional().describe('Parent directory'),
|
|
60
|
+
name: z.string().describe('Project name'),
|
|
61
|
+
}),
|
|
62
|
+
meta: { internal: true },
|
|
63
|
+
output: z.object({
|
|
64
|
+
created: z.array(z.string()),
|
|
65
|
+
}),
|
|
66
66
|
});
|
|
67
67
|
//# sourceMappingURL=add-verify.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-verify.js","sourceRoot":"","sources":["../../../src/trails/add-verify.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,gBAAgB,GAAG,GAAW,EAAE,CACpC;;;;CAID,CAAC;AAEF,MAAM,mBAAmB,GAAG,GAAW,EAAE,CACvC;;;;CAID,CAAC;AAEF,2EAA2E;AAC3E,MAAM,eAAe,GAAG,CAAC,GAA4B,EAAQ,EAAE;IAC7D,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAA2B,CAAC;IACzE,OAAO,CAAC,mBAAmB,CAAC,GAAG,aAAa,CAAC;IAC7C,OAAO,CAAC,kBAAkB,CAAC,GAAG,aAAa,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;IAC/B,GAAG,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,WAAW,CACzC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CACnE,CAAC;AACJ,CAAC,CAAC;AAEF,0EAA0E;AAC1E,MAAM,0BAA0B,GAAG,KAAK,EACtC,UAAkB,EACH,EAAE;IACjB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC;IACxE,eAAe,CAAC,GAAG,CAAC,CAAC;IACrB,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE;IAC3C,
|
|
1
|
+
{"version":3,"file":"add-verify.js","sourceRoot":"","sources":["../../../src/trails/add-verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,7 +47,7 @@ const TSCONFIG_CONTENT = JSON.stringify({
|
|
|
47
47
|
const GITIGNORE_CONTENT = `node_modules/
|
|
48
48
|
dist/
|
|
49
49
|
*.tsbuildinfo
|
|
50
|
-
.trails/
|
|
50
|
+
.trails/_trailhead.json
|
|
51
51
|
`;
|
|
52
52
|
const OXLINTRC_CONTENT = JSON.stringify({
|
|
53
53
|
extends: ['ultracite'],
|
|
@@ -73,7 +73,7 @@ export const hello = trail('hello', {
|
|
|
73
73
|
name: 'Named greeting',
|
|
74
74
|
},
|
|
75
75
|
],
|
|
76
|
-
|
|
76
|
+
blaze: (input) => {
|
|
77
77
|
const name = input.name ?? 'world';
|
|
78
78
|
return Result.ok({ message: \`Hello, \${name}!\` });
|
|
79
79
|
},
|
|
@@ -103,7 +103,7 @@ export const show = trail('entity.show', {
|
|
|
103
103
|
name: 'Show entity',
|
|
104
104
|
},
|
|
105
105
|
],
|
|
106
|
-
|
|
106
|
+
blaze: (input) => {
|
|
107
107
|
return Result.ok({ id: input.id, name: 'Example' });
|
|
108
108
|
},
|
|
109
109
|
input: z.object({ id: z.string() }),
|
|
@@ -120,7 +120,7 @@ export const add = trail('entity.add', {
|
|
|
120
120
|
name: 'Add entity',
|
|
121
121
|
},
|
|
122
122
|
],
|
|
123
|
-
|
|
123
|
+
blaze: (input) => {
|
|
124
124
|
return Result.ok({ id: '1', name: input.name });
|
|
125
125
|
},
|
|
126
126
|
input: z.object({ name: z.string() }),
|
|
@@ -139,7 +139,7 @@ export const search = trail('search', {
|
|
|
139
139
|
name: 'Search entities',
|
|
140
140
|
},
|
|
141
141
|
],
|
|
142
|
-
|
|
142
|
+
blaze: () => {
|
|
143
143
|
return Result.ok({ results: [] });
|
|
144
144
|
},
|
|
145
145
|
input: z.object({ query: z.string() }),
|
|
@@ -154,9 +154,9 @@ import { z } from 'zod';
|
|
|
154
154
|
|
|
155
155
|
export const onboard = trail('entity.onboard', {
|
|
156
156
|
description: 'Onboard a new entity end-to-end',
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
const result = await ctx.
|
|
157
|
+
crosses: ['entity.add'],
|
|
158
|
+
blaze: async (input, ctx) => {
|
|
159
|
+
const result = await ctx.cross('entity.add', { name: input.name });
|
|
160
160
|
if (result.isErr()) {
|
|
161
161
|
return result;
|
|
162
162
|
}
|
|
@@ -166,10 +166,10 @@ export const onboard = trail('entity.onboard', {
|
|
|
166
166
|
output: z.object({ onboarded: z.boolean() }),
|
|
167
167
|
});
|
|
168
168
|
`;
|
|
169
|
-
const
|
|
169
|
+
const generateEntitySignals = () => `import { signal } from '@ontrails/core';
|
|
170
170
|
import { z } from 'zod';
|
|
171
171
|
|
|
172
|
-
export const entityUpdated =
|
|
172
|
+
export const entityUpdated = signal('entity.updated', {
|
|
173
173
|
description: 'Fired when an entity is updated',
|
|
174
174
|
payload: z.object({
|
|
175
175
|
entityId: z.string(),
|
|
@@ -200,9 +200,9 @@ const starterImports = {
|
|
|
200
200
|
"import * as entity from './trails/entity.js';",
|
|
201
201
|
"import * as search from './trails/search.js';",
|
|
202
202
|
"import * as onboard from './trails/onboard.js';",
|
|
203
|
-
"import * as
|
|
203
|
+
"import * as entitySignals from './signals/entity-signals.js';",
|
|
204
204
|
],
|
|
205
|
-
modules: ['entity', 'search', 'onboard', '
|
|
205
|
+
modules: ['entity', 'search', 'onboard', 'entitySignals'],
|
|
206
206
|
},
|
|
207
207
|
hello: {
|
|
208
208
|
imports: ["import * as hello from './trails/hello.js';"],
|
|
@@ -229,7 +229,7 @@ const starterFileGenerators = {
|
|
|
229
229
|
['src/trails/entity.ts', generateEntityTrails()],
|
|
230
230
|
['src/trails/search.ts', generateSearchTrail()],
|
|
231
231
|
['src/trails/onboard.ts', generateOnboardTrail()],
|
|
232
|
-
['src/
|
|
232
|
+
['src/signals/entity-signals.ts', generateEntitySignals()],
|
|
233
233
|
['src/store.ts', generateStore()],
|
|
234
234
|
],
|
|
235
235
|
hello: () => [['src/trails/hello.ts', generateHelloTrail()]],
|
|
@@ -257,6 +257,18 @@ const writeScaffoldFiles = async (projectDir, fileMap) => {
|
|
|
257
257
|
// Trail definition
|
|
258
258
|
// ---------------------------------------------------------------------------
|
|
259
259
|
export const createScaffold = trail('create.scaffold', {
|
|
260
|
+
blaze: async (input) => {
|
|
261
|
+
const projectDir = resolve(input.dir ?? '.', input.name);
|
|
262
|
+
const starter = (input.starter ?? 'hello');
|
|
263
|
+
const fileMap = collectScaffoldFiles(input.name, starter);
|
|
264
|
+
const files = await writeScaffoldFiles(projectDir, fileMap);
|
|
265
|
+
mkdirSync(join(projectDir, '.trails'), { recursive: true });
|
|
266
|
+
return Result.ok({
|
|
267
|
+
created: files,
|
|
268
|
+
dir: projectDir,
|
|
269
|
+
name: input.name,
|
|
270
|
+
});
|
|
271
|
+
},
|
|
260
272
|
description: 'Scaffold a new Trails project',
|
|
261
273
|
input: z.object({
|
|
262
274
|
dir: z.string().optional().describe('Parent directory'),
|
|
@@ -266,23 +278,11 @@ export const createScaffold = trail('create.scaffold', {
|
|
|
266
278
|
.default('hello')
|
|
267
279
|
.describe('Starter trail'),
|
|
268
280
|
}),
|
|
269
|
-
|
|
281
|
+
meta: { internal: true },
|
|
270
282
|
output: z.object({
|
|
271
283
|
created: z.array(z.string()),
|
|
272
284
|
dir: z.string(),
|
|
273
285
|
name: z.string(),
|
|
274
286
|
}),
|
|
275
|
-
run: async (input) => {
|
|
276
|
-
const projectDir = resolve(input.dir ?? '.', input.name);
|
|
277
|
-
const starter = (input.starter ?? 'hello');
|
|
278
|
-
const fileMap = collectScaffoldFiles(input.name, starter);
|
|
279
|
-
const files = await writeScaffoldFiles(projectDir, fileMap);
|
|
280
|
-
mkdirSync(join(projectDir, '.trails'), { recursive: true });
|
|
281
|
-
return Result.ok({
|
|
282
|
-
created: files,
|
|
283
|
-
dir: projectDir,
|
|
284
|
-
name: input.name,
|
|
285
|
-
});
|
|
286
|
-
},
|
|
287
287
|
});
|
|
288
288
|
//# sourceMappingURL=create-scaffold.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-scaffold.js","sourceRoot":"","sources":["../../../src/trails/create-scaffold.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAU,EAAE;IACnD,MAAM,IAAI,GAA2B;QACnC,gBAAgB,EAAE,aAAa;QAC/B,GAAG,EAAE,QAAQ;KACd,CAAC;IAEF,MAAM,GAAG,GAA4B;QACnC,YAAY,EAAE,MAAM,CAAC,WAAW,CAC9B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAChE;QACD,IAAI;QACJ,OAAO,EAAE;YACP,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,cAAc;SAC1B;QACD,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO;KACjB,CAAC;IAEF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CACrC;IACE,eAAe,EAAE;QACf,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,QAAQ;QAChB,gBAAgB,EAAE,SAAS;QAC3B,wBAAwB,EAAE,IAAI;QAC9B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,IAAI;QAClB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,QAAQ;QAChB,oBAAoB,EAAE,IAAI;KAC3B;IACD,OAAO,EAAE,CAAC,KAAK,CAAC;CACjB,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AAEF,MAAM,iBAAiB,GAAG;;;;CAIzB,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CACrC;IACE,OAAO,EAAE,CAAC,WAAW,CAAC;CACvB,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AAEF,MAAM,eAAe,GAAG;;;CAGvB,CAAC;AAEF,MAAM,kBAAkB,GAAG,GAAW,EAAE,CACtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BD,CAAC;AAEF,MAAM,oBAAoB,GAAG,GAAW,EAAE,CACxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCD,CAAC;AAEF,MAAM,mBAAmB,GAAG,GAAW,EAAE,CACvC;;;;;;;;;;;;;;;;;;;;;CAqBD,CAAC;AAEF,MAAM,oBAAoB,GAAG,GAAW,EAAE,CACxC;;;;;;;;;;;;;;;;CAgBD,CAAC;AAEF,MAAM,
|
|
1
|
+
{"version":3,"file":"create-scaffold.js","sourceRoot":"","sources":["../../../src/trails/create-scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `create` route -- Create a new Trails project.
|
|
3
3
|
*
|
|
4
|
-
* Composes create.scaffold, add.
|
|
5
|
-
* via ctx.
|
|
4
|
+
* Composes create.scaffold, add.trailhead, and add.verify sub-trails
|
|
5
|
+
* via ctx.cross().
|
|
6
6
|
*/
|
|
7
7
|
type Starter = 'empty' | 'entity' | 'hello';
|
|
8
|
-
type
|
|
9
|
-
interface
|
|
8
|
+
type Trailhead = 'cli' | 'mcp';
|
|
9
|
+
interface CreateInput {
|
|
10
10
|
readonly dir?: string | undefined;
|
|
11
11
|
readonly name: string;
|
|
12
12
|
readonly starter: Starter;
|
|
13
|
-
readonly
|
|
13
|
+
readonly trailheads: readonly Trailhead[];
|
|
14
14
|
readonly verify: boolean;
|
|
15
15
|
}
|
|
16
|
-
export declare const createRoute: import("@ontrails/core").Trail<
|
|
16
|
+
export declare const createRoute: import("@ontrails/core").Trail<CreateInput, {
|
|
17
17
|
created: string[];
|
|
18
18
|
dir: string;
|
|
19
19
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/trails/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,KAAK,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC5C,KAAK,
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/trails/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,KAAK,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC5C,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AAE/B,UAAU,WAAW;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AA4HD,eAAO,MAAM,WAAW;aAnCK,MAAM,EAAE;SAAO,MAAM;UAAQ,MAAM;EAyF9D,CAAC"}
|