@ontrails/trails 1.0.0-beta.13 → 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.
Files changed (140) hide show
  1. package/.turbo/turbo-lint.log +1 -1
  2. package/CHANGELOG.md +16 -0
  3. package/__tests__/examples.test.ts +14 -0
  4. package/dist/src/app.d.ts.map +1 -1
  5. package/dist/src/app.js +13 -2
  6. package/dist/src/app.js.map +1 -1
  7. package/dist/src/clack.d.ts +1 -1
  8. package/dist/src/clack.js +1 -1
  9. package/dist/src/cli.js +2 -2
  10. package/dist/src/cli.js.map +1 -1
  11. package/dist/src/trails/add-trail.js +13 -13
  12. package/dist/src/trails/add-trail.js.map +1 -1
  13. package/dist/src/trails/add-trailhead.d.ts +13 -0
  14. package/dist/src/trails/add-trailhead.d.ts.map +1 -0
  15. package/dist/src/trails/add-trailhead.js +88 -0
  16. package/dist/src/trails/add-trailhead.js.map +1 -0
  17. package/dist/src/trails/add-verify.js +10 -10
  18. package/dist/src/trails/add-verify.js.map +1 -1
  19. package/dist/src/trails/create-scaffold.js +26 -26
  20. package/dist/src/trails/create-scaffold.js.map +1 -1
  21. package/dist/src/trails/create.d.ts +6 -6
  22. package/dist/src/trails/create.d.ts.map +1 -1
  23. package/dist/src/trails/create.js +29 -29
  24. package/dist/src/trails/create.js.map +1 -1
  25. package/dist/src/trails/dev-clean.d.ts +9 -0
  26. package/dist/src/trails/dev-clean.d.ts.map +1 -0
  27. package/dist/src/trails/dev-clean.js +65 -0
  28. package/dist/src/trails/dev-clean.js.map +1 -0
  29. package/dist/src/trails/dev-reset.d.ts +6 -0
  30. package/dist/src/trails/dev-reset.d.ts.map +1 -0
  31. package/dist/src/trails/dev-reset.js +38 -0
  32. package/dist/src/trails/dev-reset.js.map +1 -0
  33. package/dist/src/trails/dev-stats.d.ts +7 -0
  34. package/dist/src/trails/dev-stats.d.ts.map +1 -0
  35. package/dist/src/trails/dev-stats.js +61 -0
  36. package/dist/src/trails/dev-stats.js.map +1 -0
  37. package/dist/src/trails/dev-support.d.ts +64 -0
  38. package/dist/src/trails/dev-support.d.ts.map +1 -0
  39. package/dist/src/trails/dev-support.js +178 -0
  40. package/dist/src/trails/dev-support.js.map +1 -0
  41. package/dist/src/trails/draft-promote.d.ts +18 -0
  42. package/dist/src/trails/draft-promote.d.ts.map +1 -0
  43. package/dist/src/trails/draft-promote.js +386 -0
  44. package/dist/src/trails/draft-promote.js.map +1 -0
  45. package/dist/src/trails/guide.d.ts +13 -3
  46. package/dist/src/trails/guide.d.ts.map +1 -1
  47. package/dist/src/trails/guide.js +21 -37
  48. package/dist/src/trails/guide.js.map +1 -1
  49. package/dist/src/trails/load-app.d.ts +3 -1
  50. package/dist/src/trails/load-app.d.ts.map +1 -1
  51. package/dist/src/trails/load-app.js +53 -10
  52. package/dist/src/trails/load-app.js.map +1 -1
  53. package/dist/src/trails/project.d.ts.map +1 -1
  54. package/dist/src/trails/project.js +14 -3
  55. package/dist/src/trails/project.js.map +1 -1
  56. package/dist/src/trails/survey.d.ts +4 -58
  57. package/dist/src/trails/survey.d.ts.map +1 -1
  58. package/dist/src/trails/survey.js +52 -173
  59. package/dist/src/trails/survey.js.map +1 -1
  60. package/dist/src/trails/topo-constants.d.ts +3 -0
  61. package/dist/src/trails/topo-constants.d.ts.map +1 -0
  62. package/dist/src/trails/topo-constants.js +3 -0
  63. package/dist/src/trails/topo-constants.js.map +1 -0
  64. package/dist/src/trails/topo-export.d.ts +18 -0
  65. package/dist/src/trails/topo-export.d.ts.map +1 -0
  66. package/dist/src/trails/topo-export.js +34 -0
  67. package/dist/src/trails/topo-export.js.map +1 -0
  68. package/dist/src/trails/topo-history.d.ts +24 -0
  69. package/dist/src/trails/topo-history.d.ts.map +1 -0
  70. package/dist/src/trails/topo-history.js +33 -0
  71. package/dist/src/trails/topo-history.js.map +1 -0
  72. package/dist/src/trails/topo-pin.d.ts +21 -0
  73. package/dist/src/trails/topo-pin.d.ts.map +1 -0
  74. package/dist/src/trails/topo-pin.js +35 -0
  75. package/dist/src/trails/topo-pin.js.map +1 -0
  76. package/dist/src/trails/topo-read-support.d.ts +54 -0
  77. package/dist/src/trails/topo-read-support.d.ts.map +1 -0
  78. package/dist/src/trails/topo-read-support.js +178 -0
  79. package/dist/src/trails/topo-read-support.js.map +1 -0
  80. package/dist/src/trails/topo-reports.d.ts +50 -0
  81. package/dist/src/trails/topo-reports.d.ts.map +1 -0
  82. package/dist/src/trails/topo-reports.js +122 -0
  83. package/dist/src/trails/topo-reports.js.map +1 -0
  84. package/dist/src/trails/topo-show.d.ts +23 -0
  85. package/dist/src/trails/topo-show.d.ts.map +1 -0
  86. package/dist/src/trails/topo-show.js +53 -0
  87. package/dist/src/trails/topo-show.js.map +1 -0
  88. package/dist/src/trails/topo-store-support.d.ts +13 -0
  89. package/dist/src/trails/topo-store-support.d.ts.map +1 -0
  90. package/dist/src/trails/topo-store-support.js +55 -0
  91. package/dist/src/trails/topo-store-support.js.map +1 -0
  92. package/dist/src/trails/topo-support.d.ts +87 -0
  93. package/dist/src/trails/topo-support.d.ts.map +1 -0
  94. package/dist/src/trails/topo-support.js +165 -0
  95. package/dist/src/trails/topo-support.js.map +1 -0
  96. package/dist/src/trails/topo-unpin.d.ts +15 -0
  97. package/dist/src/trails/topo-unpin.d.ts.map +1 -0
  98. package/dist/src/trails/topo-unpin.js +39 -0
  99. package/dist/src/trails/topo-unpin.js.map +1 -0
  100. package/dist/src/trails/topo-verify.d.ts +5 -0
  101. package/dist/src/trails/topo-verify.d.ts.map +1 -0
  102. package/dist/src/trails/topo-verify.js +28 -0
  103. package/dist/src/trails/topo-verify.js.map +1 -0
  104. package/dist/src/trails/topo.d.ts +5 -0
  105. package/dist/src/trails/topo.d.ts.map +1 -0
  106. package/dist/src/trails/topo.js +67 -0
  107. package/dist/src/trails/topo.js.map +1 -0
  108. package/dist/src/trails/warden.d.ts +1 -1
  109. package/dist/src/trails/warden.d.ts.map +1 -1
  110. package/dist/src/trails/warden.js +28 -27
  111. package/dist/src/trails/warden.js.map +1 -1
  112. package/dist/tsconfig.tsbuildinfo +1 -1
  113. package/package.json +8 -7
  114. package/src/__tests__/draft-promote.test.ts +144 -0
  115. package/src/__tests__/load-app.test.ts +43 -0
  116. package/src/__tests__/survey.test.ts +85 -0
  117. package/src/__tests__/topo-dev.test.ts +424 -0
  118. package/src/app.ts +22 -0
  119. package/src/trails/dev-clean.ts +73 -0
  120. package/src/trails/dev-reset.ts +44 -0
  121. package/src/trails/dev-stats.ts +64 -0
  122. package/src/trails/dev-support.ts +326 -0
  123. package/src/trails/draft-promote.ts +704 -0
  124. package/src/trails/guide.ts +22 -37
  125. package/src/trails/load-app.ts +76 -13
  126. package/src/trails/project.ts +17 -3
  127. package/src/trails/survey.ts +56 -256
  128. package/src/trails/topo-constants.ts +2 -0
  129. package/src/trails/topo-export.ts +39 -0
  130. package/src/trails/topo-history.ts +40 -0
  131. package/src/trails/topo-pin.ts +42 -0
  132. package/src/trails/topo-read-support.ts +332 -0
  133. package/src/trails/topo-reports.ts +221 -0
  134. package/src/trails/topo-show.ts +58 -0
  135. package/src/trails/topo-store-support.ts +96 -0
  136. package/src/trails/topo-support.ts +274 -0
  137. package/src/trails/topo-unpin.ts +51 -0
  138. package/src/trails/topo-verify.ts +29 -0
  139. package/src/trails/topo.ts +73 -0
  140. package/src/trails/warden.ts +1 -0
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * `create` route -- Create a new Trails project.
3
3
  *
4
- * Composes create.scaffold, add.surface, and add.verify sub-trails
5
- * via ctx.follow().
4
+ * Composes create.scaffold, add.trailhead, and add.verify sub-trails
5
+ * via ctx.cross().
6
6
  */
7
7
  import { Result, trail } from '@ontrails/core';
8
8
  import { z } from 'zod';
@@ -11,19 +11,19 @@ const buildScaffoldInput = (input) => ({
11
11
  name: input.name,
12
12
  starter: input.starter,
13
13
  });
14
- const buildSurfaceInput = (dir, surface) => ({
14
+ const buildTrailheadInput = (dir, trailhead) => ({
15
15
  dir,
16
- surface,
16
+ trailhead,
17
17
  });
18
18
  const buildVerifyInput = (input) => ({
19
19
  ...(input.dir === undefined ? {} : { dir: input.dir }),
20
20
  name: input.name,
21
21
  });
22
- const scaffoldProject = (follow, input) => follow('create.scaffold', buildScaffoldInput(input));
23
- const addSurfaceFiles = async (follow, dir, surfaces) => {
22
+ const scaffoldProject = (cross, input) => cross('create.scaffold', buildScaffoldInput(input));
23
+ const addTrailheadFiles = async (cross, dir, trailheads) => {
24
24
  const created = [];
25
- for (const surface of surfaces) {
26
- const result = await follow('add.surface', buildSurfaceInput(dir, surface));
25
+ for (const trailhead of trailheads) {
26
+ const result = await cross('add.trailhead', buildTrailheadInput(dir, trailhead));
27
27
  if (result.isErr()) {
28
28
  return Result.err(result.error);
29
29
  }
@@ -31,31 +31,31 @@ const addSurfaceFiles = async (follow, dir, surfaces) => {
31
31
  }
32
32
  return Result.ok(created);
33
33
  };
34
- const collectVerifyFiles = async (follow, input) => {
34
+ const collectVerifyFiles = async (cross, input) => {
35
35
  if (!input.verify) {
36
36
  return Result.ok([]);
37
37
  }
38
- const result = await follow('add.verify', buildVerifyInput(input));
38
+ const result = await cross('add.verify', buildVerifyInput(input));
39
39
  return result.isErr()
40
40
  ? Result.err(result.error)
41
41
  : Result.ok(result.value.created);
42
42
  };
43
- const collectCreatedFiles = (scaffolded, surfaces, verify) => [...scaffolded, ...surfaces, ...verify];
44
- const runCreate = async (follow, input) => {
45
- const scaffolded = await scaffoldProject(follow, input);
43
+ const collectCreatedFiles = (scaffolded, trailheads, verify) => [...scaffolded, ...trailheads, ...verify];
44
+ const runCreate = async (cross, input) => {
45
+ const scaffolded = await scaffoldProject(cross, input);
46
46
  if (scaffolded.isErr()) {
47
47
  return Result.err(scaffolded.error);
48
48
  }
49
- const surfaceResults = await addSurfaceFiles(follow, scaffolded.value.dir, input.surfaces);
50
- if (surfaceResults.isErr()) {
51
- return Result.err(surfaceResults.error);
49
+ const trailheadResults = await addTrailheadFiles(cross, scaffolded.value.dir, input.trailheads);
50
+ if (trailheadResults.isErr()) {
51
+ return Result.err(trailheadResults.error);
52
52
  }
53
- const verifyFiles = await collectVerifyFiles(follow, input);
53
+ const verifyFiles = await collectVerifyFiles(cross, input);
54
54
  if (verifyFiles.isErr()) {
55
55
  return Result.err(verifyFiles.error);
56
56
  }
57
57
  return Result.ok({
58
- created: collectCreatedFiles(scaffolded.value.created, surfaceResults.value, verifyFiles.value),
58
+ created: collectCreatedFiles(scaffolded.value.created, trailheadResults.value, verifyFiles.value),
59
59
  dir: scaffolded.value.dir,
60
60
  name: input.name,
61
61
  });
@@ -64,6 +64,13 @@ const runCreate = async (follow, input) => {
64
64
  // Route definition
65
65
  // ---------------------------------------------------------------------------
66
66
  export const createRoute = trail('create', {
67
+ blaze: async (input, ctx) => {
68
+ if (!ctx.cross) {
69
+ return Result.err(new Error('create route requires ctx.cross'));
70
+ }
71
+ return await runCreate(ctx.cross, input);
72
+ },
73
+ crosses: ['create.scaffold', 'add.trailhead', 'add.verify'],
67
74
  description: 'Create a new Trails project',
68
75
  fields: {
69
76
  starter: {
@@ -74,14 +81,14 @@ export const createRoute = trail('create', {
74
81
  value: 'hello',
75
82
  },
76
83
  {
77
- hint: '4 trails, event, store',
84
+ hint: '4 trails, signal, store',
78
85
  label: 'Entity CRUD',
79
86
  value: 'entity',
80
87
  },
81
88
  { hint: 'Just the structure', label: 'Empty', value: 'empty' },
82
89
  ],
83
90
  },
84
- surfaces: {
91
+ trailheads: {
85
92
  options: [
86
93
  { hint: 'Commander-based command line', label: 'CLI', value: 'cli' },
87
94
  {
@@ -92,7 +99,6 @@ export const createRoute = trail('create', {
92
99
  ],
93
100
  },
94
101
  },
95
- follow: ['create.scaffold', 'add.surface', 'add.verify'],
96
102
  input: z.object({
97
103
  dir: z.string().optional().describe('Parent directory'),
98
104
  name: z.string().describe('Project name'),
@@ -100,10 +106,10 @@ export const createRoute = trail('create', {
100
106
  .enum(['hello', 'entity', 'empty'])
101
107
  .default('hello')
102
108
  .describe('Starter trail'),
103
- surfaces: z
109
+ trailheads: z
104
110
  .array(z.enum(['cli', 'mcp']))
105
111
  .default(['cli'])
106
- .describe('Surfaces'),
112
+ .describe('Trailheads'),
107
113
  verify: z.boolean().default(true).describe('Include testing + warden'),
108
114
  }),
109
115
  output: z.object({
@@ -111,11 +117,5 @@ export const createRoute = trail('create', {
111
117
  dir: z.string(),
112
118
  name: z.string(),
113
119
  }),
114
- run: async (input, ctx) => {
115
- if (!ctx.follow) {
116
- return Result.err(new Error('create route requires ctx.follow'));
117
- }
118
- return await runCreate(ctx.follow, input);
119
- },
120
120
  });
121
121
  //# sourceMappingURL=create.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/trails/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/trails/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const devCleanTrail: import("@ontrails/core").Trail<{
2
+ dryRun: boolean;
3
+ saves: number;
4
+ trackAgeMs: number;
5
+ tracks: number;
6
+ yes: boolean;
7
+ rootDir?: string | undefined;
8
+ }, import("./dev-support.js").DevCleanReport>;
9
+ //# sourceMappingURL=dev-clean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-clean.d.ts","sourceRoot":"","sources":["../../../src/trails/dev-clean.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa;;;;;;;6CAkExB,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { Result, ValidationError, trail } from '@ontrails/core';
2
+ import { z } from 'zod';
3
+ import { cleanDevState, DEFAULT_TOPO_SAVE_RETENTION } from './dev-support.js';
4
+ import { isolatedExampleInput } from './topo-support.js';
5
+ export const devCleanTrail = trail('dev.clean', {
6
+ blaze: (input, ctx) => {
7
+ if (input.dryRun !== true && input.yes !== true) {
8
+ return Result.err(new ValidationError('Refusing to clean local state without `--yes` or `--dry-run`.'));
9
+ }
10
+ const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
11
+ return Result.ok(cleanDevState({
12
+ dryRun: input.dryRun,
13
+ maxAge: input.trackAgeMs,
14
+ maxRecords: input.tracks,
15
+ rootDir,
16
+ saveRetention: input.saves,
17
+ }));
18
+ },
19
+ description: 'Prune unpinned topo saves and old track records',
20
+ examples: [
21
+ {
22
+ input: {
23
+ dryRun: true,
24
+ rootDir: isolatedExampleInput('dev-clean').rootDir,
25
+ },
26
+ name: 'Preview local cleanup',
27
+ },
28
+ ],
29
+ input: z.object({
30
+ dryRun: z
31
+ .boolean()
32
+ .default(true)
33
+ .describe('Preview cleanup without changing state'),
34
+ rootDir: z.string().optional().describe('Workspace root directory'),
35
+ saves: z
36
+ .number()
37
+ .default(DEFAULT_TOPO_SAVE_RETENTION)
38
+ .describe('Unpinned topo saves to retain'),
39
+ trackAgeMs: z
40
+ .number()
41
+ .default(7 * 24 * 60 * 60 * 1000)
42
+ .describe('Maximum retained track age in milliseconds'),
43
+ tracks: z.number().default(10_000).describe('Maximum retained track count'),
44
+ yes: z.boolean().default(false).describe('Confirm destructive changes'),
45
+ }),
46
+ intent: 'destroy',
47
+ output: z.object({
48
+ dryRun: z.boolean(),
49
+ remaining: z.object({
50
+ pinCount: z.number(),
51
+ saveCount: z.number(),
52
+ trackCount: z.number(),
53
+ }),
54
+ removed: z.object({
55
+ topoSaves: z.number(),
56
+ trackRecords: z.number(),
57
+ }),
58
+ retention: z.object({
59
+ saves: z.number(),
60
+ trackAgeMs: z.number(),
61
+ tracks: z.number(),
62
+ }),
63
+ }),
64
+ });
65
+ //# sourceMappingURL=dev-clean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-clean.js","sourceRoot":"","sources":["../../../src/trails/dev-clean.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const devResetTrail: import("@ontrails/core").Trail<{
2
+ dryRun: boolean;
3
+ yes: boolean;
4
+ rootDir?: string | undefined;
5
+ }, import("./dev-support.js").DevResetReport>;
6
+ //# sourceMappingURL=dev-reset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-reset.d.ts","sourceRoot":"","sources":["../../../src/trails/dev-reset.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa;;;;6CAqCxB,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { Result, ValidationError, trail } from '@ontrails/core';
2
+ import { z } from 'zod';
3
+ import { resetDevState } from './dev-support.js';
4
+ import { isolatedExampleInput } from './topo-support.js';
5
+ export const devResetTrail = trail('dev.reset', {
6
+ blaze: (input, ctx) => {
7
+ if (input.dryRun !== true && input.yes !== true) {
8
+ return Result.err(new ValidationError('Refusing to reset local state without `--yes` or `--dry-run`.'));
9
+ }
10
+ const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
11
+ return Result.ok(resetDevState({ dryRun: input.dryRun, rootDir }));
12
+ },
13
+ description: 'Remove local Trails database artifacts',
14
+ examples: [
15
+ {
16
+ input: {
17
+ dryRun: true,
18
+ rootDir: isolatedExampleInput('dev-reset').rootDir,
19
+ },
20
+ name: 'Preview local reset',
21
+ },
22
+ ],
23
+ input: z.object({
24
+ dryRun: z
25
+ .boolean()
26
+ .default(true)
27
+ .describe('Preview reset without changing state'),
28
+ rootDir: z.string().optional().describe('Workspace root directory'),
29
+ yes: z.boolean().default(false).describe('Confirm destructive changes'),
30
+ }),
31
+ intent: 'destroy',
32
+ output: z.object({
33
+ dryRun: z.boolean(),
34
+ removedCount: z.number(),
35
+ removedFiles: z.array(z.string()),
36
+ }),
37
+ });
38
+ //# sourceMappingURL=dev-reset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-reset.js","sourceRoot":"","sources":["../../../src/trails/dev-reset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,EAAE;IAC9C,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,GAAG,CACf,IAAI,eAAe,CACjB,+DAA+D,CAChE,CACF,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,WAAW,EAAE,wCAAwC;IACrD,QAAQ,EAAE;QACR;YACE,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,OAAO;aACnD;YACD,IAAI,EAAE,qBAAqB;SAC5B;KACF;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,CAAC;aACN,OAAO,EAAE;aACT,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CAAC,sCAAsC,CAAC;QACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACnE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACxE,CAAC;IACF,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;QACnB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAClC,CAAC;CACH,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const devStatsTrail: import("@ontrails/core").Trail<{
2
+ saves: number;
3
+ trackAgeMs: number;
4
+ tracks: number;
5
+ rootDir?: string | undefined;
6
+ }, import("./dev-support.js").DevStatsReport>;
7
+ //# sourceMappingURL=dev-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-stats.d.ts","sourceRoot":"","sources":["../../../src/trails/dev-stats.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa;;;;;6CAyDxB,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { Result, trail } from '@ontrails/core';
2
+ import { z } from 'zod';
3
+ import { buildDevStats, DEFAULT_TOPO_SAVE_RETENTION } from './dev-support.js';
4
+ import { isolatedExampleInput } from './topo-support.js';
5
+ export const devStatsTrail = trail('dev.stats', {
6
+ blaze: (input, ctx) => {
7
+ const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
8
+ return Result.ok(buildDevStats({
9
+ maxAge: input.trackAgeMs,
10
+ maxRecords: input.tracks,
11
+ rootDir,
12
+ saveRetention: input.saves,
13
+ }));
14
+ },
15
+ description: 'Show local Trails workspace state and retention',
16
+ examples: [
17
+ {
18
+ input: { rootDir: isolatedExampleInput('dev-stats').rootDir },
19
+ name: 'Show local dev state',
20
+ },
21
+ ],
22
+ input: z.object({
23
+ rootDir: z.string().optional().describe('Workspace root directory'),
24
+ saves: z
25
+ .number()
26
+ .default(DEFAULT_TOPO_SAVE_RETENTION)
27
+ .describe('Unpinned topo saves to retain'),
28
+ trackAgeMs: z
29
+ .number()
30
+ .default(7 * 24 * 60 * 60 * 1000)
31
+ .describe('Maximum retained track age in milliseconds'),
32
+ tracks: z.number().default(10_000).describe('Maximum retained track count'),
33
+ }),
34
+ intent: 'read',
35
+ output: z.object({
36
+ db: z.object({
37
+ exists: z.boolean(),
38
+ fileSizeBytes: z.number(),
39
+ path: z.string(),
40
+ }),
41
+ lock: z.object({
42
+ exists: z.boolean(),
43
+ fileSizeBytes: z.number(),
44
+ path: z.string(),
45
+ }),
46
+ retention: z.object({
47
+ saves: z.number(),
48
+ trackAgeMs: z.number(),
49
+ tracks: z.number(),
50
+ }),
51
+ topo: z.object({
52
+ pinCount: z.number(),
53
+ prunableSaveCount: z.number(),
54
+ saveCount: z.number(),
55
+ }),
56
+ tracker: z.object({
57
+ recordCount: z.number(),
58
+ }),
59
+ }),
60
+ });
61
+ //# sourceMappingURL=dev-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-stats.js","sourceRoot":"","sources":["../../../src/trails/dev-stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,EAAE;IAC9C,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC,EAAE,CACd,aAAa,CAAC;YACZ,MAAM,EAAE,KAAK,CAAC,UAAU;YACxB,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,OAAO;YACP,aAAa,EAAE,KAAK,CAAC,KAAK;SAC3B,CAAC,CACH,CAAC;IACJ,CAAC;IACD,WAAW,EAAE,iDAAiD;IAC9D,QAAQ,EAAE;QACR;YACE,KAAK,EAAE,EAAE,OAAO,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;YAC7D,IAAI,EAAE,sBAAsB;SAC7B;KACF;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACnE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,OAAO,CAAC,2BAA2B,CAAC;aACpC,QAAQ,CAAC,+BAA+B,CAAC;QAC5C,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;aAChC,QAAQ,CAAC,4CAA4C,CAAC;QACzD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KAC5E,CAAC;IACF,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;YACX,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;YACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;SACjB,CAAC;QACF,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACb,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;YACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;SACjB,CAAC;QACF,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;YAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;YACtB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACnB,CAAC;QACF,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACb,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;YAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;SACtB,CAAC;QACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;SACxB,CAAC;KACH,CAAC;CACH,CAAC,CAAC"}
@@ -0,0 +1,64 @@
1
+ export declare const DEFAULT_TOPO_SAVE_RETENTION = 50;
2
+ export interface DevStatsReport {
3
+ readonly db: {
4
+ readonly exists: boolean;
5
+ readonly fileSizeBytes: number;
6
+ readonly path: string;
7
+ };
8
+ readonly lock: {
9
+ readonly exists: boolean;
10
+ readonly fileSizeBytes: number;
11
+ readonly path: string;
12
+ };
13
+ readonly retention: {
14
+ readonly saves: number;
15
+ readonly trackAgeMs: number;
16
+ readonly tracks: number;
17
+ };
18
+ readonly topo: {
19
+ readonly pinCount: number;
20
+ readonly prunableSaveCount: number;
21
+ readonly saveCount: number;
22
+ };
23
+ readonly tracker: {
24
+ readonly recordCount: number;
25
+ };
26
+ }
27
+ export interface DevCleanReport {
28
+ readonly dryRun: boolean;
29
+ readonly remaining: {
30
+ readonly pinCount: number;
31
+ readonly saveCount: number;
32
+ readonly trackCount: number;
33
+ };
34
+ readonly removed: {
35
+ readonly topoSaves: number;
36
+ readonly trackRecords: number;
37
+ };
38
+ readonly retention: {
39
+ readonly saves: number;
40
+ readonly trackAgeMs: number;
41
+ readonly tracks: number;
42
+ };
43
+ }
44
+ export interface DevResetReport {
45
+ readonly dryRun: boolean;
46
+ readonly removedCount: number;
47
+ readonly removedFiles: readonly string[];
48
+ }
49
+ interface DevRetentionOptions {
50
+ readonly maxAge?: number;
51
+ readonly maxRecords?: number;
52
+ readonly rootDir?: string;
53
+ readonly saveRetention?: number;
54
+ }
55
+ export declare const buildDevStats: (options?: DevRetentionOptions) => DevStatsReport;
56
+ export declare const cleanDevState: (options?: DevRetentionOptions & {
57
+ readonly dryRun?: boolean;
58
+ }) => DevCleanReport;
59
+ export declare const resetDevState: (options?: {
60
+ readonly dryRun?: boolean;
61
+ readonly rootDir?: string;
62
+ }) => DevResetReport;
63
+ export {};
64
+ //# sourceMappingURL=dev-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-support.d.ts","sourceRoot":"","sources":["../../../src/trails/dev-support.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAY9C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE;QACX,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AA2KD,eAAO,MAAM,aAAa,GACxB,UAAU,mBAAmB,KAC5B,cAeF,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,UAAU,mBAAmB,GAAG;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,KAC5D,cAeF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,UAAU;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,KAAG,cAqBH,CAAC"}
@@ -0,0 +1,178 @@
1
+ import { existsSync, rmSync, statSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { countPrunableTopoSaves, countTopoPins, countTopoSaves, pruneUnpinnedTopoSaves, } from '@ontrails/core/internal/topo-saves';
4
+ import { openReadTrailsDb, openWriteTrailsDb, resolveTrailsDbPath, resolveTrailsDir, } from '@ontrails/core/internal/trails-db';
5
+ import { DEFAULT_MAX_AGE, DEFAULT_MAX_RECORDS, applyTrackCleanup, countTrackRecords, previewTrackCleanup, } from '@ontrails/tracker/internal/dev-state';
6
+ import { resolveLockPath } from './topo-support.js';
7
+ export const DEFAULT_TOPO_SAVE_RETENTION = 50;
8
+ const resolveRootDir = (cwd) => cwd ?? process.cwd();
9
+ const removeIfPresent = (filePath) => {
10
+ if (!existsSync(filePath)) {
11
+ return false;
12
+ }
13
+ rmSync(filePath, { force: true });
14
+ return true;
15
+ };
16
+ const buildRetention = (options) => ({
17
+ saves: options?.saveRetention ?? DEFAULT_TOPO_SAVE_RETENTION,
18
+ trackAgeMs: options?.maxAge ?? DEFAULT_MAX_AGE,
19
+ tracks: options?.maxRecords ?? DEFAULT_MAX_RECORDS,
20
+ });
21
+ const emptyDevClean = (retention, dryRun) => ({
22
+ dryRun,
23
+ remaining: {
24
+ pinCount: 0,
25
+ saveCount: 0,
26
+ trackCount: 0,
27
+ },
28
+ removed: {
29
+ topoSaves: 0,
30
+ trackRecords: 0,
31
+ },
32
+ retention,
33
+ });
34
+ const buildLockStats = (lockPath) => ({
35
+ exists: existsSync(lockPath),
36
+ fileSizeBytes: existsSync(lockPath) ? statSync(lockPath).size : 0,
37
+ path: lockPath,
38
+ });
39
+ const buildDbStats = (dbPath, exists) => ({
40
+ exists,
41
+ fileSizeBytes: exists ? statSync(dbPath).size : 0,
42
+ path: '.trails/trails.db',
43
+ });
44
+ const emptyDevStats = (dbPath, lockPath, retention) => ({
45
+ db: buildDbStats(dbPath, false),
46
+ lock: buildLockStats(lockPath),
47
+ retention,
48
+ topo: {
49
+ pinCount: 0,
50
+ prunableSaveCount: 0,
51
+ saveCount: 0,
52
+ },
53
+ tracker: {
54
+ recordCount: 0,
55
+ },
56
+ });
57
+ const liveDevStats = (db, dbPath, lockPath, retention) => ({
58
+ db: buildDbStats(dbPath, true),
59
+ lock: buildLockStats(lockPath),
60
+ retention,
61
+ topo: {
62
+ pinCount: countTopoPins(db),
63
+ prunableSaveCount: countPrunableTopoSaves(db, { keep: retention.saves }),
64
+ saveCount: countTopoSaves(db),
65
+ },
66
+ tracker: {
67
+ recordCount: countTrackRecords(db),
68
+ },
69
+ });
70
+ const resolveDevStatsContext = (options) => {
71
+ const rootDir = resolveRootDir(options?.rootDir);
72
+ const dbPath = resolveTrailsDbPath({ rootDir });
73
+ const trailsDir = resolveTrailsDir({ rootDir });
74
+ const lockPath = resolveLockPath(trailsDir);
75
+ return {
76
+ dbExists: existsSync(dbPath),
77
+ dbPath,
78
+ lockPath,
79
+ retention: buildRetention(options),
80
+ rootDir,
81
+ };
82
+ };
83
+ const resolveDevCleanupContext = (options) => {
84
+ const rootDir = resolveRootDir(options?.rootDir);
85
+ return {
86
+ dbPath: resolveTrailsDbPath({ rootDir }),
87
+ dryRun: options?.dryRun ?? false,
88
+ retention: buildRetention(options),
89
+ rootDir,
90
+ };
91
+ };
92
+ const cleanupTracks = (db, context) => context.dryRun
93
+ ? previewTrackCleanup(db, {
94
+ maxAge: context.retention.trackAgeMs,
95
+ maxRecords: context.retention.tracks,
96
+ })
97
+ : applyTrackCleanup(db, {
98
+ maxAge: context.retention.trackAgeMs,
99
+ maxRecords: context.retention.tracks,
100
+ });
101
+ const cleanupTopoSaves = (db, context) => context.dryRun
102
+ ? countPrunableTopoSaves(db, { keep: context.retention.saves })
103
+ : pruneUnpinnedTopoSaves(db, { keep: context.retention.saves });
104
+ const buildCleanReport = (db, context) => {
105
+ const trackReport = cleanupTracks(db, context);
106
+ const topoRemoved = cleanupTopoSaves(db, context);
107
+ const saveCount = countTopoSaves(db);
108
+ return {
109
+ dryRun: context.dryRun,
110
+ remaining: {
111
+ pinCount: countTopoPins(db),
112
+ saveCount: context.dryRun ? saveCount - topoRemoved : saveCount,
113
+ trackCount: context.dryRun
114
+ ? trackReport.remaining - trackReport.removedTotal
115
+ : trackReport.remaining,
116
+ },
117
+ removed: {
118
+ topoSaves: topoRemoved,
119
+ trackRecords: trackReport.removedTotal,
120
+ },
121
+ retention: context.retention,
122
+ };
123
+ };
124
+ const RESET_FILES = [
125
+ '.trails/trails.db',
126
+ '.trails/trails.db-shm',
127
+ '.trails/trails.db-wal',
128
+ '.trails/dev/tracker.db',
129
+ '.trails/dev/tracker.db-shm',
130
+ '.trails/dev/tracker.db-wal',
131
+ ];
132
+ const presentResetFiles = (rootDir) => RESET_FILES.filter((relativePath) => existsSync(join(rootDir, relativePath)));
133
+ export const buildDevStats = (options) => {
134
+ const { dbExists, dbPath, lockPath, retention, rootDir } = resolveDevStatsContext(options);
135
+ if (!dbExists) {
136
+ return emptyDevStats(dbPath, lockPath, retention);
137
+ }
138
+ const db = openReadTrailsDb({ rootDir });
139
+ try {
140
+ return liveDevStats(db, dbPath, lockPath, retention);
141
+ }
142
+ finally {
143
+ db.close();
144
+ }
145
+ };
146
+ export const cleanDevState = (options) => {
147
+ const context = resolveDevCleanupContext(options);
148
+ if (!existsSync(context.dbPath)) {
149
+ return emptyDevClean(context.retention, context.dryRun);
150
+ }
151
+ const db = context.dryRun
152
+ ? openReadTrailsDb({ rootDir: context.rootDir })
153
+ : openWriteTrailsDb({ rootDir: context.rootDir });
154
+ try {
155
+ return buildCleanReport(db, context);
156
+ }
157
+ finally {
158
+ db.close();
159
+ }
160
+ };
161
+ export const resetDevState = (options) => {
162
+ const rootDir = resolveRootDir(options?.rootDir);
163
+ const files = presentResetFiles(rootDir);
164
+ if (options?.dryRun === true) {
165
+ return {
166
+ dryRun: true,
167
+ removedCount: files.length,
168
+ removedFiles: files,
169
+ };
170
+ }
171
+ const removedFiles = files.filter((relativePath) => removeIfPresent(join(rootDir, relativePath)));
172
+ return {
173
+ dryRun: false,
174
+ removedCount: removedFiles.length,
175
+ removedFiles,
176
+ };
177
+ };
178
+ //# sourceMappingURL=dev-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-support.js","sourceRoot":"","sources":["../../../src/trails/dev-support.ts"],"names":[],"mappings":"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"}