@ontrails/trails 1.0.0-beta.15 → 1.0.0-beta.16
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/CHANGELOG.md +197 -2
- package/README.md +27 -0
- package/package.json +19 -8
- package/src/app.ts +15 -5
- package/src/cli.ts +303 -10
- package/src/completions.ts +240 -0
- package/src/load-app-mirror.ts +160 -0
- package/src/local-state-io.ts +153 -0
- package/src/project-writes.ts +320 -0
- package/src/run-collision.ts +125 -0
- package/src/run-completions-install.ts +179 -0
- package/src/run-example.ts +149 -0
- package/src/run-examples.ts +148 -0
- package/src/run-quiet.ts +75 -0
- package/src/run-trace.ts +273 -0
- package/src/run-warden.ts +39 -0
- package/src/run-watch.ts +432 -0
- package/src/scaffold-versions.generated.ts +12 -0
- package/src/trails/add-surface.ts +45 -23
- package/src/trails/add-trail.ts +27 -17
- package/src/trails/add-verify.ts +57 -17
- package/src/trails/completions-complete.ts +165 -0
- package/src/trails/completions.ts +47 -0
- package/src/trails/create-scaffold.ts +86 -33
- package/src/trails/create.ts +11 -3
- package/src/trails/dev-clean.ts +6 -1
- package/src/trails/dev-reset.ts +6 -1
- package/src/trails/dev-stats.ts +6 -1
- package/src/trails/dev-support.ts +29 -17
- package/src/trails/draft-promote.ts +289 -80
- package/src/trails/guide.ts +54 -34
- package/src/trails/load-app.ts +251 -56
- package/src/trails/root-dir.ts +21 -0
- package/src/trails/run-example.ts +482 -0
- package/src/trails/run-examples.ts +141 -0
- package/src/trails/run.ts +403 -0
- package/src/trails/survey.ts +506 -200
- package/src/trails/topo-activation.ts +385 -0
- package/src/trails/topo-compile.ts +55 -0
- package/src/trails/topo-history.ts +6 -1
- package/src/trails/topo-output-schemas.ts +175 -0
- package/src/trails/topo-pin.ts +19 -6
- package/src/trails/topo-read-support.ts +171 -228
- package/src/trails/topo-reports.ts +400 -25
- package/src/trails/topo-store-support.ts +43 -19
- package/src/trails/topo-support.ts +18 -28
- package/src/trails/topo-unpin.ts +6 -1
- package/src/trails/topo-verify.ts +18 -5
- package/src/trails/topo.ts +60 -23
- package/src/trails/warden-guide.ts +121 -0
- package/src/trails/warden.ts +137 -56
- package/src/versions.ts +3 -18
- package/.turbo/turbo-build.log +0 -1
- package/.turbo/turbo-lint.log +0 -3
- package/.turbo/turbo-typecheck.log +0 -1
- package/__tests__/examples.test.ts +0 -45
- package/dist/bin/trails.d.ts +0 -3
- package/dist/bin/trails.d.ts.map +0 -1
- package/dist/bin/trails.js +0 -4
- package/dist/bin/trails.js.map +0 -1
- package/dist/src/app.d.ts +0 -2
- package/dist/src/app.d.ts.map +0 -1
- package/dist/src/app.js +0 -22
- package/dist/src/app.js.map +0 -1
- package/dist/src/clack.d.ts +0 -9
- package/dist/src/clack.d.ts.map +0 -1
- package/dist/src/clack.js +0 -84
- package/dist/src/clack.js.map +0 -1
- package/dist/src/cli.d.ts +0 -2
- package/dist/src/cli.d.ts.map +0 -1
- package/dist/src/cli.js +0 -14
- package/dist/src/cli.js.map +0 -1
- package/dist/src/trails/add-surface.d.ts +0 -13
- package/dist/src/trails/add-surface.d.ts.map +0 -1
- package/dist/src/trails/add-surface.js +0 -110
- package/dist/src/trails/add-surface.js.map +0 -1
- package/dist/src/trails/add-trail.d.ts +0 -12
- package/dist/src/trails/add-trail.d.ts.map +0 -1
- package/dist/src/trails/add-trail.js +0 -104
- package/dist/src/trails/add-trail.js.map +0 -1
- package/dist/src/trails/add-trailhead.d.ts +0 -13
- package/dist/src/trails/add-trailhead.d.ts.map +0 -1
- package/dist/src/trails/add-trailhead.js +0 -88
- package/dist/src/trails/add-trailhead.js.map +0 -1
- package/dist/src/trails/add-verify.d.ts +0 -10
- package/dist/src/trails/add-verify.d.ts.map +0 -1
- package/dist/src/trails/add-verify.js +0 -68
- package/dist/src/trails/add-verify.js.map +0 -1
- package/dist/src/trails/create-scaffold.d.ts +0 -15
- package/dist/src/trails/create-scaffold.d.ts.map +0 -1
- package/dist/src/trails/create-scaffold.js +0 -295
- package/dist/src/trails/create-scaffold.js.map +0 -1
- package/dist/src/trails/create.d.ts +0 -18
- package/dist/src/trails/create.d.ts.map +0 -1
- package/dist/src/trails/create.js +0 -126
- package/dist/src/trails/create.js.map +0 -1
- package/dist/src/trails/dev-clean.d.ts +0 -9
- package/dist/src/trails/dev-clean.d.ts.map +0 -1
- package/dist/src/trails/dev-clean.js +0 -66
- package/dist/src/trails/dev-clean.js.map +0 -1
- package/dist/src/trails/dev-reset.d.ts +0 -6
- package/dist/src/trails/dev-reset.d.ts.map +0 -1
- package/dist/src/trails/dev-reset.js +0 -39
- package/dist/src/trails/dev-reset.js.map +0 -1
- package/dist/src/trails/dev-stats.d.ts +0 -7
- package/dist/src/trails/dev-stats.d.ts.map +0 -1
- package/dist/src/trails/dev-stats.js +0 -61
- package/dist/src/trails/dev-stats.js.map +0 -1
- package/dist/src/trails/dev-support.d.ts +0 -64
- package/dist/src/trails/dev-support.d.ts.map +0 -1
- package/dist/src/trails/dev-support.js +0 -181
- package/dist/src/trails/dev-support.js.map +0 -1
- package/dist/src/trails/draft-promote.d.ts +0 -18
- package/dist/src/trails/draft-promote.d.ts.map +0 -1
- package/dist/src/trails/draft-promote.js +0 -400
- package/dist/src/trails/draft-promote.js.map +0 -1
- package/dist/src/trails/guide.d.ts +0 -21
- package/dist/src/trails/guide.d.ts.map +0 -1
- package/dist/src/trails/guide.js +0 -61
- package/dist/src/trails/guide.js.map +0 -1
- package/dist/src/trails/load-app.d.ts +0 -12
- package/dist/src/trails/load-app.d.ts.map +0 -1
- package/dist/src/trails/load-app.js +0 -415
- package/dist/src/trails/load-app.js.map +0 -1
- package/dist/src/trails/project.d.ts +0 -8
- package/dist/src/trails/project.d.ts.map +0 -1
- package/dist/src/trails/project.js +0 -54
- package/dist/src/trails/project.js.map +0 -1
- package/dist/src/trails/survey.d.ts +0 -18
- package/dist/src/trails/survey.d.ts.map +0 -1
- package/dist/src/trails/survey.js +0 -234
- package/dist/src/trails/survey.js.map +0 -1
- package/dist/src/trails/topo-constants.d.ts +0 -3
- package/dist/src/trails/topo-constants.d.ts.map +0 -1
- package/dist/src/trails/topo-constants.js +0 -3
- package/dist/src/trails/topo-constants.js.map +0 -1
- package/dist/src/trails/topo-export.d.ts +0 -19
- package/dist/src/trails/topo-export.d.ts.map +0 -1
- package/dist/src/trails/topo-export.js +0 -31
- package/dist/src/trails/topo-export.js.map +0 -1
- package/dist/src/trails/topo-history.d.ts +0 -20
- package/dist/src/trails/topo-history.d.ts.map +0 -1
- package/dist/src/trails/topo-history.js +0 -32
- package/dist/src/trails/topo-history.js.map +0 -1
- package/dist/src/trails/topo-pin.d.ts +0 -17
- package/dist/src/trails/topo-pin.d.ts.map +0 -1
- package/dist/src/trails/topo-pin.js +0 -31
- package/dist/src/trails/topo-pin.js.map +0 -1
- package/dist/src/trails/topo-read-support.d.ts +0 -58
- package/dist/src/trails/topo-read-support.d.ts.map +0 -1
- package/dist/src/trails/topo-read-support.js +0 -167
- package/dist/src/trails/topo-read-support.js.map +0 -1
- package/dist/src/trails/topo-reports.d.ts +0 -54
- package/dist/src/trails/topo-reports.d.ts.map +0 -1
- package/dist/src/trails/topo-reports.js +0 -128
- package/dist/src/trails/topo-reports.js.map +0 -1
- package/dist/src/trails/topo-show.d.ts +0 -23
- package/dist/src/trails/topo-show.d.ts.map +0 -1
- package/dist/src/trails/topo-show.js +0 -49
- package/dist/src/trails/topo-show.js.map +0 -1
- package/dist/src/trails/topo-store-support.d.ts +0 -13
- package/dist/src/trails/topo-store-support.d.ts.map +0 -1
- package/dist/src/trails/topo-store-support.js +0 -55
- package/dist/src/trails/topo-store-support.js.map +0 -1
- package/dist/src/trails/topo-support.d.ts +0 -76
- package/dist/src/trails/topo-support.d.ts.map +0 -1
- package/dist/src/trails/topo-support.js +0 -132
- package/dist/src/trails/topo-support.js.map +0 -1
- package/dist/src/trails/topo-unpin.d.ts +0 -20
- package/dist/src/trails/topo-unpin.d.ts.map +0 -1
- package/dist/src/trails/topo-unpin.js +0 -44
- package/dist/src/trails/topo-unpin.js.map +0 -1
- package/dist/src/trails/topo-verify.d.ts +0 -5
- package/dist/src/trails/topo-verify.d.ts.map +0 -1
- package/dist/src/trails/topo-verify.js +0 -24
- package/dist/src/trails/topo-verify.js.map +0 -1
- package/dist/src/trails/topo.d.ts +0 -5
- package/dist/src/trails/topo.d.ts.map +0 -1
- package/dist/src/trails/topo.js +0 -63
- package/dist/src/trails/topo.js.map +0 -1
- package/dist/src/trails/warden.d.ts +0 -20
- package/dist/src/trails/warden.d.ts.map +0 -1
- package/dist/src/trails/warden.js +0 -98
- package/dist/src/trails/warden.js.map +0 -1
- package/dist/src/versions.d.ts +0 -12
- package/dist/src/versions.d.ts.map +0 -1
- package/dist/src/versions.js +0 -23
- package/dist/src/versions.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/src/__tests__/add-trail.test.ts +0 -97
- package/src/__tests__/create.test.ts +0 -415
- package/src/__tests__/draft-promote.test.ts +0 -144
- package/src/__tests__/guide.test.ts +0 -96
- package/src/__tests__/load-app.test.ts +0 -419
- package/src/__tests__/survey.test.ts +0 -377
- package/src/__tests__/topo-dev.test.ts +0 -426
- package/src/__tests__/warden.test.ts +0 -74
- package/src/trails/topo-export.ts +0 -35
- package/src/trails/topo-show.ts +0 -54
- package/tsconfig.json +0 -9
- package/tsconfig.tests.json +0 -10
package/dist/src/clack.d.ts
DELETED
|
@@ -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
|
package/dist/src/clack.d.ts.map
DELETED
|
@@ -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;AAmF/E,mEAAmE;AACnE,eAAO,MAAM,qBAAqB,EAAE,aAoBnC,CAAC"}
|
package/dist/src/clack.js
DELETED
|
@@ -1,84 +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
|
-
'number[]': async (field) => {
|
|
39
|
-
const raw = await clack.text({
|
|
40
|
-
message: `${field.label} (comma-separated numbers)`,
|
|
41
|
-
});
|
|
42
|
-
if (clack.isCancel(raw)) {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
return String(raw)
|
|
46
|
-
.split(',')
|
|
47
|
-
.map((s) => Number(s.trim()));
|
|
48
|
-
},
|
|
49
|
-
string: async (field) => cancelable(await clack.text({ message: field.label })),
|
|
50
|
-
'string[]': async (field) => {
|
|
51
|
-
const raw = await clack.text({
|
|
52
|
-
message: `${field.label} (comma-separated)`,
|
|
53
|
-
});
|
|
54
|
-
if (clack.isCancel(raw)) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
return String(raw)
|
|
58
|
-
.split(',')
|
|
59
|
-
.map((s) => s.trim());
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
/** Resolve a single field value with Clack. */
|
|
63
|
-
const resolveField = (field) => {
|
|
64
|
-
const resolver = fieldResolvers[field.type];
|
|
65
|
-
return resolver(field);
|
|
66
|
-
};
|
|
67
|
-
/** Fill missing input by prompting with Clack when interactive. */
|
|
68
|
-
export const resolveInputWithClack = async (fields, provided, options) => {
|
|
69
|
-
if (!isInteractive(options)) {
|
|
70
|
-
return provided;
|
|
71
|
-
}
|
|
72
|
-
const resolved = { ...provided };
|
|
73
|
-
for (const field of fields) {
|
|
74
|
-
if (!needsInput(field, resolved)) {
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
const value = await resolveField(field);
|
|
78
|
-
if (value !== undefined) {
|
|
79
|
-
resolved[field.name] = value;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return resolved;
|
|
83
|
-
};
|
|
84
|
-
//# sourceMappingURL=clack.js.map
|
package/dist/src/clack.js.map
DELETED
|
@@ -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
package/dist/src/cli.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/src/cli.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { outputModePreset } from '@ontrails/cli';
|
|
2
|
-
import { surface } from '@ontrails/cli/commander';
|
|
3
|
-
import { app } from './app.js';
|
|
4
|
-
import { resolveInputWithClack } from './clack.js';
|
|
5
|
-
import { trailsPackageVersion } from './versions.js';
|
|
6
|
-
// oxlint-disable-next-line require-hook -- CLI entry point
|
|
7
|
-
await surface(app, {
|
|
8
|
-
description: 'Agent-native, contract-first TypeScript framework',
|
|
9
|
-
name: 'trails',
|
|
10
|
-
presets: [outputModePreset()],
|
|
11
|
-
resolveInput: resolveInputWithClack,
|
|
12
|
-
version: trailsPackageVersion,
|
|
13
|
-
});
|
|
14
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/src/cli.js.map
DELETED
|
@@ -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,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 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `add.surface` trail -- Add a surface to an existing project.
|
|
3
|
-
*
|
|
4
|
-
* Generates surface entry points and updates package.json dependencies.
|
|
5
|
-
*/
|
|
6
|
-
export declare const addSurface: import("@ontrails/core").Trail<{
|
|
7
|
-
surface: "cli" | "http" | "mcp";
|
|
8
|
-
dir?: string | undefined;
|
|
9
|
-
}, {
|
|
10
|
-
created: string;
|
|
11
|
-
dependency: string;
|
|
12
|
-
}, never>;
|
|
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;AAqHH,eAAO,MAAM,UAAU;;;;;;SA4BrB,CAAC"}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `add.surface` trail -- Add a surface to an existing project.
|
|
3
|
-
*
|
|
4
|
-
* Generates surface entry points 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 { ontrailsPackageRange, scaffoldDependencyVersions, } from '../versions.js';
|
|
11
|
-
import { findTopoPath } from './project.js';
|
|
12
|
-
const generateCliEntry = (appImportPath) => `import { surface } from '@ontrails/cli/commander';
|
|
13
|
-
|
|
14
|
-
import { app } from '${appImportPath}';
|
|
15
|
-
|
|
16
|
-
await surface(app);
|
|
17
|
-
`;
|
|
18
|
-
const generateMcpEntry = (appImportPath) => `import { surface } from '@ontrails/mcp';
|
|
19
|
-
|
|
20
|
-
import { app } from '${appImportPath}';
|
|
21
|
-
|
|
22
|
-
await surface(app);
|
|
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
|
-
};
|
|
40
|
-
/** Resolve the entry file for a surface. */
|
|
41
|
-
const getEntryFile = (surface) => surfaceEntryFiles[surface];
|
|
42
|
-
// ---------------------------------------------------------------------------
|
|
43
|
-
// Trail definition
|
|
44
|
-
// ---------------------------------------------------------------------------
|
|
45
|
-
/** Patch deps and optionally bin in a parsed package.json. */
|
|
46
|
-
const patchPkgDeps = (pkg, surface, cwd) => {
|
|
47
|
-
const [depName = ''] = surfaceDependencies[surface];
|
|
48
|
-
const deps = (pkg['dependencies'] ?? {});
|
|
49
|
-
for (const dependency of surfaceDependencies[surface]) {
|
|
50
|
-
deps[dependency] = ontrailsPackageRange;
|
|
51
|
-
}
|
|
52
|
-
if (surface === 'cli') {
|
|
53
|
-
deps['commander'] = scaffoldDependencyVersions.commander;
|
|
54
|
-
pkg['bin'] = {
|
|
55
|
-
[pkg['name'] ?? basename(cwd)]: './src/cli.ts',
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
pkg['dependencies'] = Object.fromEntries(Object.entries(deps).toSorted(([a], [b]) => a.localeCompare(b)));
|
|
59
|
-
return depName;
|
|
60
|
-
};
|
|
61
|
-
/** Update package.json with surface dependency and CLI bin if needed. */
|
|
62
|
-
const updatePkgJsonForSurface = async (cwd, surface) => {
|
|
63
|
-
const pkgPath = join(cwd, 'package.json');
|
|
64
|
-
if (!existsSync(pkgPath)) {
|
|
65
|
-
return surfaceDependencies[surface][0] ?? '';
|
|
66
|
-
}
|
|
67
|
-
const pkg = (await Bun.file(pkgPath).json());
|
|
68
|
-
const depName = patchPkgDeps(pkg, surface, cwd);
|
|
69
|
-
await Bun.write(pkgPath, `${JSON.stringify(pkg, null, 2)}\n`);
|
|
70
|
-
return depName;
|
|
71
|
-
};
|
|
72
|
-
/** Create the entry file for a surface and return the relative path. */
|
|
73
|
-
const writeSurfaceEntry = async (cwd, surface) => {
|
|
74
|
-
const entryFile = getEntryFile(surface);
|
|
75
|
-
const fullEntryPath = join(cwd, entryFile);
|
|
76
|
-
const appImport = (await findTopoPath(cwd)) ?? './app.js';
|
|
77
|
-
const generators = {
|
|
78
|
-
cli: generateCliEntry,
|
|
79
|
-
http: generateHttpEntry,
|
|
80
|
-
mcp: generateMcpEntry,
|
|
81
|
-
};
|
|
82
|
-
const content = generators[surface](appImport);
|
|
83
|
-
mkdirSync(dirname(fullEntryPath), { recursive: true });
|
|
84
|
-
await Bun.write(fullEntryPath, content);
|
|
85
|
-
return entryFile;
|
|
86
|
-
};
|
|
87
|
-
export const addSurface = trail('add.surface', {
|
|
88
|
-
blaze: async (input) => {
|
|
89
|
-
const cwd = resolve(input.dir ?? '.');
|
|
90
|
-
const { surface } = input;
|
|
91
|
-
const entryFile = getEntryFile(surface);
|
|
92
|
-
if (existsSync(join(cwd, entryFile))) {
|
|
93
|
-
return Result.err(new Error(`${surface.toUpperCase()} surface already exists. Nothing to do.`));
|
|
94
|
-
}
|
|
95
|
-
return Result.ok({
|
|
96
|
-
created: await writeSurfaceEntry(cwd, surface),
|
|
97
|
-
dependency: await updatePkgJsonForSurface(cwd, surface),
|
|
98
|
-
});
|
|
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
|
-
}),
|
|
109
|
-
});
|
|
110
|
-
//# sourceMappingURL=add-surface.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add-surface.js","sourceRoot":"","sources":["../../../src/trails/add-surface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `add.trail` trail -- Scaffold a new trail file with tests.
|
|
3
|
-
*/
|
|
4
|
-
export declare const addTrail: import("@ontrails/core").Trail<{
|
|
5
|
-
description: string;
|
|
6
|
-
exampleName: string;
|
|
7
|
-
id: string;
|
|
8
|
-
intent: "read" | "write" | "destroy";
|
|
9
|
-
}, {
|
|
10
|
-
created: string[];
|
|
11
|
-
}, never>;
|
|
12
|
-
//# sourceMappingURL=add-trail.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `add.trail` trail -- Scaffold a new trail file with tests.
|
|
3
|
-
*/
|
|
4
|
-
import { mkdirSync } from 'node:fs';
|
|
5
|
-
import { dirname, join, resolve } from 'node:path';
|
|
6
|
-
import { Result, trail } from '@ontrails/core';
|
|
7
|
-
import { z } from 'zod';
|
|
8
|
-
// ---------------------------------------------------------------------------
|
|
9
|
-
// Helpers
|
|
10
|
-
// ---------------------------------------------------------------------------
|
|
11
|
-
const literal = (value) => JSON.stringify(value);
|
|
12
|
-
const deriveExampleMessage = (id) => `${id} completed`;
|
|
13
|
-
const generateTrailFile = (id, description, exampleName, intent) => {
|
|
14
|
-
const intentLine = intent === 'write' ? '' : `\n intent: '${intent}',`;
|
|
15
|
-
const exampleMessage = deriveExampleMessage(id);
|
|
16
|
-
return `import { Result, trail } from '@ontrails/core';
|
|
17
|
-
import { z } from 'zod';
|
|
18
|
-
|
|
19
|
-
export const ${id.replaceAll('.', '_')} = trail('${id}', {
|
|
20
|
-
blaze: async () => {
|
|
21
|
-
return Result.ok({ message: ${literal(exampleMessage)} });
|
|
22
|
-
},
|
|
23
|
-
description: ${literal(description)},
|
|
24
|
-
examples: [
|
|
25
|
-
{
|
|
26
|
-
expected: { message: ${literal(exampleMessage)} },
|
|
27
|
-
input: {},
|
|
28
|
-
name: ${literal(exampleName)},
|
|
29
|
-
},
|
|
30
|
-
],
|
|
31
|
-
input: z.object({}),${intentLine}
|
|
32
|
-
output: z.object({ message: z.string() }),
|
|
33
|
-
});
|
|
34
|
-
`;
|
|
35
|
-
};
|
|
36
|
-
const generateTestFile = (id, exampleName) => {
|
|
37
|
-
const moduleName = id.replaceAll('.', '-');
|
|
38
|
-
const trailName = id.replaceAll('.', '_');
|
|
39
|
-
const exampleMessage = deriveExampleMessage(id);
|
|
40
|
-
return `import { testTrail } from '@ontrails/testing';
|
|
41
|
-
import { ${trailName} } from '../src/trails/${moduleName}.js';
|
|
42
|
-
|
|
43
|
-
testTrail(${trailName}, [
|
|
44
|
-
{
|
|
45
|
-
description: ${literal(exampleName)},
|
|
46
|
-
expectValue: { message: ${literal(exampleMessage)} },
|
|
47
|
-
input: {},
|
|
48
|
-
},
|
|
49
|
-
]);
|
|
50
|
-
`;
|
|
51
|
-
};
|
|
52
|
-
// ---------------------------------------------------------------------------
|
|
53
|
-
// Trail definition
|
|
54
|
-
// ---------------------------------------------------------------------------
|
|
55
|
-
/** Write a file, creating parent directories as needed. */
|
|
56
|
-
const writeWithDirs = async (filePath, content) => {
|
|
57
|
-
mkdirSync(dirname(filePath), { recursive: true });
|
|
58
|
-
await Bun.write(filePath, content);
|
|
59
|
-
};
|
|
60
|
-
export const addTrail = trail('add.trail', {
|
|
61
|
-
args: ['id'],
|
|
62
|
-
blaze: async (input, ctx) => {
|
|
63
|
-
const { id } = input;
|
|
64
|
-
const moduleName = id.replaceAll('.', '-');
|
|
65
|
-
const cwd = resolve(ctx.cwd ?? '.');
|
|
66
|
-
const files = new Map([
|
|
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
|
-
],
|
|
75
|
-
]);
|
|
76
|
-
for (const [relativePath, content] of files) {
|
|
77
|
-
await writeWithDirs(join(cwd, relativePath), content);
|
|
78
|
-
}
|
|
79
|
-
return Result.ok({ created: [...files.keys()] });
|
|
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
|
-
}),
|
|
103
|
-
});
|
|
104
|
-
//# sourceMappingURL=add-trail.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add-trail.js","sourceRoot":"","sources":["../../../src/trails/add-trail.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,88 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add-trailhead.js","sourceRoot":"","sources":["../../../src/trails/add-trailhead.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `add.verify` trail -- Add testing + warden setup to a project.
|
|
3
|
-
*/
|
|
4
|
-
export declare const addVerify: import("@ontrails/core").Trail<{
|
|
5
|
-
name: string;
|
|
6
|
-
dir?: string | undefined;
|
|
7
|
-
}, {
|
|
8
|
-
created: string[];
|
|
9
|
-
}, never>;
|
|
10
|
-
//# sourceMappingURL=add-verify.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `add.verify` trail -- Add testing + warden setup to a project.
|
|
3
|
-
*/
|
|
4
|
-
import { existsSync, mkdirSync } from 'node:fs';
|
|
5
|
-
import { dirname, join, resolve } from 'node:path';
|
|
6
|
-
import { Result, trail } from '@ontrails/core';
|
|
7
|
-
import { z } from 'zod';
|
|
8
|
-
import { ontrailsPackageRange, scaffoldDependencyVersions, } from '../versions.js';
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
|
-
// Content generators
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
const generateTestFile = () => `import { testAllEstablished } from '@ontrails/testing';
|
|
13
|
-
import { app } from '../src/app.js';
|
|
14
|
-
|
|
15
|
-
testAllEstablished(app);
|
|
16
|
-
`;
|
|
17
|
-
const generateLefthookYml = () => `pre-push:
|
|
18
|
-
commands:
|
|
19
|
-
warden:
|
|
20
|
-
run: bunx trails warden
|
|
21
|
-
`;
|
|
22
|
-
/** Add testing and warden devDependencies to package.json when present. */
|
|
23
|
-
const patchVerifyDeps = (pkg) => {
|
|
24
|
-
const devDeps = (pkg['devDependencies'] ?? {});
|
|
25
|
-
devDeps['@ontrails/testing'] = ontrailsPackageRange;
|
|
26
|
-
devDeps['@ontrails/warden'] = ontrailsPackageRange;
|
|
27
|
-
devDeps['lefthook'] = scaffoldDependencyVersions.lefthook;
|
|
28
|
-
pkg['devDependencies'] = Object.fromEntries(Object.entries(devDeps).toSorted(([a], [b]) => a.localeCompare(b)));
|
|
29
|
-
};
|
|
30
|
-
/** Update package.json in the target project with verify dependencies. */
|
|
31
|
-
const updatePackageJsonForVerify = async (projectDir) => {
|
|
32
|
-
const pkgPath = join(projectDir, 'package.json');
|
|
33
|
-
if (!existsSync(pkgPath)) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
const pkg = (await Bun.file(pkgPath).json());
|
|
37
|
-
patchVerifyDeps(pkg);
|
|
38
|
-
await Bun.write(pkgPath, `${JSON.stringify(pkg, null, 2)}\n`);
|
|
39
|
-
};
|
|
40
|
-
// ---------------------------------------------------------------------------
|
|
41
|
-
// Trail definition
|
|
42
|
-
// ---------------------------------------------------------------------------
|
|
43
|
-
export const addVerify = trail('add.verify', {
|
|
44
|
-
blaze: async (input) => {
|
|
45
|
-
const projectDir = resolve(input.dir ?? '.', input.name);
|
|
46
|
-
const files = [];
|
|
47
|
-
const writeFile = async (relativePath, content) => {
|
|
48
|
-
const fullPath = join(projectDir, relativePath);
|
|
49
|
-
mkdirSync(dirname(fullPath), { recursive: true });
|
|
50
|
-
await Bun.write(fullPath, content);
|
|
51
|
-
files.push(relativePath);
|
|
52
|
-
};
|
|
53
|
-
await writeFile('__tests__/examples.test.ts', generateTestFile());
|
|
54
|
-
await writeFile('lefthook.yml', generateLefthookYml());
|
|
55
|
-
await updatePackageJsonForVerify(projectDir);
|
|
56
|
-
return Result.ok({ created: files });
|
|
57
|
-
},
|
|
58
|
-
description: 'Add testing and warden verification',
|
|
59
|
-
input: z.object({
|
|
60
|
-
dir: z.string().optional().describe('Parent directory'),
|
|
61
|
-
name: z.string().describe('Project name'),
|
|
62
|
-
}),
|
|
63
|
-
meta: { internal: true },
|
|
64
|
-
output: z.object({
|
|
65
|
-
created: z.array(z.string()),
|
|
66
|
-
}),
|
|
67
|
-
});
|
|
68
|
-
//# sourceMappingURL=add-verify.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add-verify.js","sourceRoot":"","sources":["../../../src/trails/add-verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `create.scaffold` trail -- Creates base project structure.
|
|
3
|
-
*
|
|
4
|
-
* Generates package.json, tsconfig, app.ts, starter trails, and .trails/ directory.
|
|
5
|
-
*/
|
|
6
|
-
export declare const createScaffold: import("@ontrails/core").Trail<{
|
|
7
|
-
name: string;
|
|
8
|
-
starter: "empty" | "entity" | "hello";
|
|
9
|
-
dir?: string | undefined;
|
|
10
|
-
}, {
|
|
11
|
-
created: string[];
|
|
12
|
-
dir: string;
|
|
13
|
-
name: string;
|
|
14
|
-
}, never>;
|
|
15
|
-
//# sourceMappingURL=create-scaffold.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-scaffold.d.ts","sourceRoot":"","sources":["../../../src/trails/create-scaffold.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2UH,eAAO,MAAM,cAAc;;;;;;;;SA6BzB,CAAC"}
|