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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/.turbo/turbo-lint.log +1 -1
  2. package/CHANGELOG.md +17 -0
  3. package/README.md +19 -14
  4. package/dist/branded.d.ts +1 -1
  5. package/dist/branded.d.ts.map +1 -1
  6. package/dist/branded.js +1 -1
  7. package/dist/branded.js.map +1 -1
  8. package/dist/context.d.ts +13 -1
  9. package/dist/context.d.ts.map +1 -1
  10. package/dist/context.js +19 -3
  11. package/dist/context.js.map +1 -1
  12. package/dist/contour.d.ts +81 -0
  13. package/dist/contour.d.ts.map +1 -0
  14. package/dist/contour.js +176 -0
  15. package/dist/contour.js.map +1 -0
  16. package/dist/cross-schema.d.ts +18 -0
  17. package/dist/cross-schema.d.ts.map +1 -0
  18. package/dist/cross-schema.js +29 -0
  19. package/dist/cross-schema.js.map +1 -0
  20. package/dist/derive.d.ts +6 -0
  21. package/dist/derive.d.ts.map +1 -1
  22. package/dist/derive.js +29 -5
  23. package/dist/derive.js.map +1 -1
  24. package/dist/draft.d.ts +28 -0
  25. package/dist/draft.d.ts.map +1 -0
  26. package/dist/draft.js +157 -0
  27. package/dist/draft.js.map +1 -0
  28. package/dist/errors.d.ts +62 -4
  29. package/dist/errors.d.ts.map +1 -1
  30. package/dist/errors.js +44 -1
  31. package/dist/errors.js.map +1 -1
  32. package/dist/execute.d.ts +26 -9
  33. package/dist/execute.d.ts.map +1 -1
  34. package/dist/execute.js +441 -20
  35. package/dist/execute.js.map +1 -1
  36. package/dist/fire.d.ts +43 -0
  37. package/dist/fire.d.ts.map +1 -0
  38. package/dist/fire.js +185 -0
  39. package/dist/fire.js.map +1 -0
  40. package/dist/index.d.ts +33 -17
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +26 -12
  43. package/dist/index.js.map +1 -1
  44. package/dist/internal/cross-batch.d.ts +44 -0
  45. package/dist/internal/cross-batch.d.ts.map +1 -0
  46. package/dist/internal/cross-batch.js +58 -0
  47. package/dist/internal/cross-batch.js.map +1 -0
  48. package/dist/internal/fork-ctx.d.ts +41 -0
  49. package/dist/internal/fork-ctx.d.ts.map +1 -0
  50. package/dist/internal/fork-ctx.js +47 -0
  51. package/dist/internal/fork-ctx.js.map +1 -0
  52. package/dist/internal/signal-ref.d.ts +15 -0
  53. package/dist/internal/signal-ref.d.ts.map +1 -0
  54. package/dist/internal/signal-ref.js +41 -0
  55. package/dist/internal/signal-ref.js.map +1 -0
  56. package/dist/internal/topo-saves.d.ts +53 -0
  57. package/dist/internal/topo-saves.d.ts.map +1 -0
  58. package/dist/internal/topo-saves.js +449 -0
  59. package/dist/internal/topo-saves.js.map +1 -0
  60. package/dist/internal/topo-snapshots.d.ts +57 -0
  61. package/dist/internal/topo-snapshots.d.ts.map +1 -0
  62. package/dist/internal/topo-snapshots.js +372 -0
  63. package/dist/internal/topo-snapshots.js.map +1 -0
  64. package/dist/internal/topo-store-read.d.ts +70 -0
  65. package/dist/internal/topo-store-read.d.ts.map +1 -0
  66. package/dist/internal/topo-store-read.js +221 -0
  67. package/dist/internal/topo-store-read.js.map +1 -0
  68. package/dist/internal/topo-store.d.ts +26 -0
  69. package/dist/internal/topo-store.d.ts.map +1 -0
  70. package/dist/internal/topo-store.js +621 -0
  71. package/dist/internal/topo-store.js.map +1 -0
  72. package/dist/internal/tracing.d.ts +98 -0
  73. package/dist/internal/tracing.d.ts.map +1 -0
  74. package/dist/internal/tracing.js +102 -0
  75. package/dist/internal/tracing.js.map +1 -0
  76. package/dist/internal/trails-db.d.ts +16 -0
  77. package/dist/internal/trails-db.d.ts.map +1 -0
  78. package/dist/internal/trails-db.js +118 -0
  79. package/dist/internal/trails-db.js.map +1 -0
  80. package/dist/internal/zod-wrappers.d.ts +40 -0
  81. package/dist/internal/zod-wrappers.d.ts.map +1 -0
  82. package/dist/internal/zod-wrappers.js +59 -0
  83. package/dist/internal/zod-wrappers.js.map +1 -0
  84. package/dist/layer.d.ts +22 -5
  85. package/dist/layer.d.ts.map +1 -1
  86. package/dist/layer.js +20 -3
  87. package/dist/layer.js.map +1 -1
  88. package/dist/path-security.d.ts +1 -1
  89. package/dist/path-security.d.ts.map +1 -1
  90. package/dist/path-security.js +1 -1
  91. package/dist/path-security.js.map +1 -1
  92. package/dist/resilience.d.ts +1 -1
  93. package/dist/resilience.d.ts.map +1 -1
  94. package/dist/resilience.js +3 -3
  95. package/dist/resilience.js.map +1 -1
  96. package/dist/resource-config.d.ts +22 -0
  97. package/dist/resource-config.d.ts.map +1 -0
  98. package/dist/resource-config.js +210 -0
  99. package/dist/resource-config.js.map +1 -0
  100. package/dist/resource.d.ts +74 -0
  101. package/dist/resource.d.ts.map +1 -0
  102. package/dist/resource.js +61 -0
  103. package/dist/resource.js.map +1 -0
  104. package/dist/run.d.ts +4 -3
  105. package/dist/run.d.ts.map +1 -1
  106. package/dist/run.js +5 -4
  107. package/dist/run.js.map +1 -1
  108. package/dist/serialization.d.ts.map +1 -1
  109. package/dist/serialization.js +2 -1
  110. package/dist/serialization.js.map +1 -1
  111. package/dist/store/accessor-protocol.d.ts +51 -0
  112. package/dist/store/accessor-protocol.d.ts.map +1 -0
  113. package/dist/store/accessor-protocol.js +2 -0
  114. package/dist/store/accessor-protocol.js.map +1 -0
  115. package/dist/store/index.d.ts +2 -0
  116. package/dist/store/index.d.ts.map +1 -0
  117. package/dist/store/index.js +2 -0
  118. package/dist/store/index.js.map +1 -0
  119. package/dist/surface-filter.d.ts +13 -0
  120. package/dist/surface-filter.d.ts.map +1 -0
  121. package/dist/surface-filter.js +76 -0
  122. package/dist/surface-filter.js.map +1 -0
  123. package/dist/topo-store.d.ts +62 -0
  124. package/dist/topo-store.d.ts.map +1 -0
  125. package/dist/topo-store.js +319 -0
  126. package/dist/topo-store.js.map +1 -0
  127. package/dist/topo.d.ts +23 -9
  128. package/dist/topo.d.ts.map +1 -1
  129. package/dist/topo.js +175 -46
  130. package/dist/topo.js.map +1 -1
  131. package/dist/trail.d.ts +86 -19
  132. package/dist/trail.d.ts.map +1 -1
  133. package/dist/trail.js +59 -4
  134. package/dist/trail.js.map +1 -1
  135. package/dist/trails/derive-trail.d.ts +66 -0
  136. package/dist/trails/derive-trail.d.ts.map +1 -0
  137. package/dist/trails/derive-trail.js +378 -0
  138. package/dist/trails/derive-trail.js.map +1 -0
  139. package/dist/trails/index.d.ts +5 -0
  140. package/dist/trails/index.d.ts.map +1 -0
  141. package/dist/trails/index.js +3 -0
  142. package/dist/trails/index.js.map +1 -0
  143. package/dist/trails/ingest.d.ts +24 -0
  144. package/dist/trails/ingest.d.ts.map +1 -0
  145. package/dist/trails/ingest.js +63 -0
  146. package/dist/trails/ingest.js.map +1 -0
  147. package/dist/transport-error-map.d.ts +106 -0
  148. package/dist/transport-error-map.d.ts.map +1 -0
  149. package/dist/transport-error-map.js +24 -0
  150. package/dist/transport-error-map.js.map +1 -0
  151. package/dist/type-checks.test-d.d.ts +71 -0
  152. package/dist/type-checks.test-d.d.ts.map +1 -0
  153. package/dist/type-checks.test-d.js +12 -0
  154. package/dist/type-checks.test-d.js.map +1 -0
  155. package/dist/type-utils.d.ts +11 -2
  156. package/dist/type-utils.d.ts.map +1 -1
  157. package/dist/type-utils.js.map +1 -1
  158. package/dist/types.d.ts +113 -7
  159. package/dist/types.d.ts.map +1 -1
  160. package/dist/types.js.map +1 -1
  161. package/dist/validate-established-topo.d.ts +76 -0
  162. package/dist/validate-established-topo.d.ts.map +1 -0
  163. package/dist/validate-established-topo.js +43 -0
  164. package/dist/validate-established-topo.js.map +1 -0
  165. package/dist/validate-topo.d.ts.map +1 -1
  166. package/dist/validate-topo.js +27 -8
  167. package/dist/validate-topo.js.map +1 -1
  168. package/dist/workspace.d.ts +1 -1
  169. package/dist/workspace.d.ts.map +1 -1
  170. package/dist/workspace.js +1 -1
  171. package/dist/workspace.js.map +1 -1
  172. package/package.json +10 -1
  173. package/src/__tests__/branded.test.ts +5 -5
  174. package/src/__tests__/context.test.ts +3 -3
  175. package/src/__tests__/contour.test.ts +263 -0
  176. package/src/__tests__/derive-trail.test.ts +668 -0
  177. package/src/__tests__/derive.test.ts +58 -1
  178. package/src/__tests__/errors.test.ts +118 -0
  179. package/src/__tests__/execute.test.ts +1179 -141
  180. package/src/__tests__/fire.test.ts +1056 -0
  181. package/src/__tests__/fork-ctx.test.ts +83 -0
  182. package/src/__tests__/ingest.test.ts +191 -0
  183. package/src/__tests__/{gate.test.ts → layer.test.ts} +21 -21
  184. package/src/__tests__/path-security.test.ts +7 -7
  185. package/src/__tests__/resilience.test.ts +8 -8
  186. package/src/__tests__/resource.test.ts +204 -0
  187. package/src/__tests__/run.test.ts +13 -13
  188. package/src/__tests__/service-config.test.ts +28 -32
  189. package/src/__tests__/surface-filter.test.ts +196 -0
  190. package/src/__tests__/topo-store-read.test.ts +256 -0
  191. package/src/__tests__/topo-store.test.ts +869 -0
  192. package/src/__tests__/topo.test.ts +350 -54
  193. package/src/__tests__/trail.test.ts +189 -24
  194. package/src/__tests__/trails-db.test.ts +198 -0
  195. package/src/__tests__/transport-error-map.test.ts +82 -0
  196. package/src/__tests__/type-utils.test.ts +29 -1
  197. package/src/__tests__/validate-topo.test.ts +305 -16
  198. package/src/__tests__/workspace.test.ts +6 -6
  199. package/src/__tests__/zod-wrappers.test.ts +62 -0
  200. package/src/branded.ts +1 -1
  201. package/src/context.ts +24 -4
  202. package/src/contour.ts +344 -0
  203. package/src/cross-schema.ts +36 -0
  204. package/src/derive.ts +39 -8
  205. package/src/draft.ts +338 -0
  206. package/src/errors.ts +62 -18
  207. package/src/execute.ts +840 -29
  208. package/src/fire.ts +295 -0
  209. package/src/index.ts +142 -26
  210. package/src/internal/cross-batch.ts +77 -0
  211. package/src/internal/fork-ctx.ts +69 -0
  212. package/src/internal/signal-ref.ts +87 -0
  213. package/src/internal/topo-snapshots.ts +517 -0
  214. package/src/internal/topo-store-read.ts +481 -0
  215. package/src/internal/topo-store.ts +1192 -0
  216. package/src/internal/tracing.ts +187 -0
  217. package/src/internal/trails-db.ts +187 -0
  218. package/src/internal/zod-wrappers.ts +78 -0
  219. package/src/layer.ts +50 -0
  220. package/src/path-security.ts +1 -1
  221. package/src/resilience.ts +3 -3
  222. package/src/{provision-config.ts → resource-config.ts} +109 -123
  223. package/src/resource.ts +155 -0
  224. package/src/run.ts +5 -4
  225. package/src/serialization.ts +2 -0
  226. package/src/store/accessor-protocol.ts +56 -0
  227. package/src/store/index.ts +4 -0
  228. package/src/surface-filter.ts +182 -0
  229. package/src/topo-store.ts +510 -0
  230. package/src/topo.ts +328 -57
  231. package/src/trail.ts +199 -31
  232. package/src/trails/derive-trail.ts +842 -0
  233. package/src/trails/index.ts +9 -0
  234. package/src/trails/ingest.ts +146 -0
  235. package/src/transport-error-map.ts +56 -0
  236. package/src/type-checks.test-d.ts +106 -0
  237. package/src/type-utils.ts +17 -2
  238. package/src/types.ts +148 -11
  239. package/src/validate-established-topo.ts +63 -0
  240. package/src/validate-topo.ts +37 -9
  241. package/src/workspace.ts +1 -1
  242. package/tsconfig.tests.json +10 -0
  243. package/tsconfig.tsbuildinfo +1 -1
  244. package/dist/adapters.d.ts +0 -39
  245. package/dist/adapters.d.ts.map +0 -1
  246. package/dist/adapters.js +0 -2
  247. package/dist/adapters.js.map +0 -1
  248. package/dist/dispatch.d.ts +0 -27
  249. package/dist/dispatch.d.ts.map +0 -1
  250. package/dist/dispatch.js +0 -34
  251. package/dist/dispatch.js.map +0 -1
  252. package/dist/event.d.ts +0 -8
  253. package/dist/event.d.ts.map +0 -1
  254. package/dist/event.js +0 -7
  255. package/dist/event.js.map +0 -1
  256. package/dist/gate.d.ts +0 -17
  257. package/dist/gate.d.ts.map +0 -1
  258. package/dist/gate.js +0 -21
  259. package/dist/gate.js.map +0 -1
  260. package/dist/health.d.ts +0 -18
  261. package/dist/health.d.ts.map +0 -1
  262. package/dist/health.js +0 -5
  263. package/dist/health.js.map +0 -1
  264. package/dist/job.d.ts +0 -24
  265. package/dist/job.d.ts.map +0 -1
  266. package/dist/job.js +0 -17
  267. package/dist/job.js.map +0 -1
  268. package/dist/provision-config.d.ts +0 -22
  269. package/dist/provision-config.d.ts.map +0 -1
  270. package/dist/provision-config.js +0 -210
  271. package/dist/provision-config.js.map +0 -1
  272. package/dist/provision.d.ts +0 -71
  273. package/dist/provision.d.ts.map +0 -1
  274. package/dist/provision.js +0 -56
  275. package/dist/provision.js.map +0 -1
  276. package/dist/service-config.d.ts +0 -22
  277. package/dist/service-config.d.ts.map +0 -1
  278. package/dist/service-config.js +0 -210
  279. package/dist/service-config.js.map +0 -1
  280. package/dist/service.d.ts +0 -71
  281. package/dist/service.d.ts.map +0 -1
  282. package/dist/service.js +0 -56
  283. package/dist/service.js.map +0 -1
  284. package/src/__tests__/service.test.ts +0 -197
  285. package/src/event.ts +0 -15
  286. package/src/gate.ts +0 -44
  287. package/src/provision.ts +0 -148
package/dist/derive.js CHANGED
@@ -4,6 +4,7 @@
4
4
  * Introspects Zod v4 schemas to produce a runtime-agnostic Field[] descriptor
5
5
  * that UI consumers (CLI prompts, web forms, etc.) can consume.
6
6
  */
7
+ import { ValidationError } from './errors.js';
7
8
  // ---------------------------------------------------------------------------
8
9
  // Helpers
9
10
  // ---------------------------------------------------------------------------
@@ -55,11 +56,15 @@ const unwrap = (s) => {
55
56
  const fieldTypeByDef = {
56
57
  array: (s) => {
57
58
  const element = s._zod.def['element'];
58
- const elementType = element._zod.def['type'];
59
+ const { inner } = unwrap(element);
60
+ const elementType = inner._zod.def['type'];
59
61
  if (elementType === 'enum') {
60
- const entries = element._zod.def['entries'];
62
+ const entries = inner._zod.def['entries'];
61
63
  return { options: Object.values(entries), type: 'multiselect' };
62
64
  }
65
+ if (elementType !== 'number' && elementType !== 'string') {
66
+ return null;
67
+ }
63
68
  return {
64
69
  options: undefined,
65
70
  type: elementType === 'number' ? 'number[]' : 'string[]',
@@ -77,7 +82,7 @@ const fieldTypeByDef = {
77
82
  const deriveFieldType = (s) => {
78
83
  const defType = s._zod.def['type'];
79
84
  const derive = fieldTypeByDef[defType];
80
- return derive ? derive(s) : { options: undefined, type: 'string' };
85
+ return derive ? derive(s) : null;
81
86
  };
82
87
  /** Build options array, merging with overrides when present. */
83
88
  const buildOptions = (rawOptions, overrideOptions) => {
@@ -93,13 +98,30 @@ const buildOptions = (rawOptions, overrideOptions) => {
93
98
  return ov ? { hint: ov.hint, label: ov.label, value: v } : { value: v };
94
99
  });
95
100
  };
101
+ /**
102
+ * Derive the canonical ordered CLI path from a trail ID.
103
+ *
104
+ * @throws {ValidationError} if the trail ID contains empty segments (e.g. consecutive dots).
105
+ */
106
+ export const deriveCliPath = (trailId) => {
107
+ const segments = trailId.split('.');
108
+ const emptyIndex = segments.findIndex((s) => s.length === 0);
109
+ if (emptyIndex !== -1) {
110
+ throw new ValidationError(`Trail ID "${trailId}" contains an empty segment at position ${emptyIndex}`);
111
+ }
112
+ return segments;
113
+ };
96
114
  // ---------------------------------------------------------------------------
97
115
  // Public API
98
116
  // ---------------------------------------------------------------------------
99
117
  /** Derive a single field from a shape entry. */
100
118
  const deriveField = (key, value, overrides) => {
101
119
  const { inner, required, defaultValue, description } = unwrap(value);
102
- const { type, options: rawOptions } = deriveFieldType(inner);
120
+ const derived = deriveFieldType(inner);
121
+ if (!derived) {
122
+ return null;
123
+ }
124
+ const { type, options: rawOptions } = derived;
103
125
  const override = overrides?.[key];
104
126
  const label = override?.label ?? description ?? humanize(key);
105
127
  const options = buildOptions(rawOptions, override?.options);
@@ -120,6 +142,8 @@ export const deriveFields = (schema, overrides) => {
120
142
  return [];
121
143
  }
122
144
  const fields = Object.entries(shape).map(([key, value]) => deriveField(key, value, overrides));
123
- return fields.toSorted((a, b) => a.name.localeCompare(b.name));
145
+ return fields
146
+ .filter((field) => field !== null)
147
+ .toSorted((a, b) => a.name.localeCompare(b.name));
124
148
  };
125
149
  //# sourceMappingURL=derive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"derive.js","sourceRoot":"","sources":["../src/derive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"derive.js","sourceRoot":"","sources":["../src/derive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { ValidationError } from './errors.js';
2
+ import { Result } from './result.js';
3
+ import type { Topo } from './topo.js';
4
+ export declare const DRAFT_ID_PREFIX = "_draft.";
5
+ export type DraftDependencyKind = 'cross' | 'contour' | 'resource' | 'replaced-by' | 'schema-reference' | 'signal-from';
6
+ export interface DraftDependency {
7
+ readonly fromId: string;
8
+ readonly kind: DraftDependencyKind;
9
+ readonly toId: string;
10
+ }
11
+ export interface DraftFinding {
12
+ readonly id: string;
13
+ readonly kind: 'contour' | 'resource' | 'signal' | 'trail' | 'unknown';
14
+ readonly message: string;
15
+ readonly rule: 'draft-contamination' | 'draft-id';
16
+ readonly via?: DraftDependencyKind | undefined;
17
+ readonly dependsOn?: string | undefined;
18
+ }
19
+ export interface DraftReport {
20
+ readonly contaminatedIds: ReadonlySet<string>;
21
+ readonly declaredDraftIds: ReadonlySet<string>;
22
+ readonly dependencies: readonly DraftDependency[];
23
+ readonly findings: readonly DraftFinding[];
24
+ }
25
+ export declare const isDraftId: (id: string) => boolean;
26
+ export declare const deriveDraftReport: (topo: Topo) => DraftReport;
27
+ export declare const validateDraftFreeTopo: (topo: Topo) => Result<void, ValidationError>;
28
+ //# sourceMappingURL=draft.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft.d.ts","sourceRoot":"","sources":["../src/draft.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGtC,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC,MAAM,MAAM,mBAAmB,GAC3B,OAAO,GACP,SAAS,GACT,UAAU,GACV,aAAa,GACb,kBAAkB,GAClB,aAAa,CAAC;AAElB,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,qBAAqB,GAAG,UAAU,CAAC;IAClD,QAAQ,CAAC,GAAG,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,YAAY,EAAE,SAAS,eAAe,EAAE,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;CAC5C;AAcD,eAAO,MAAM,SAAS,GAAI,IAAI,MAAM,KAAG,OACP,CAAC;AAiPjC,eAAO,MAAM,iBAAiB,GAAI,MAAM,IAAI,KAAG,WAuB9C,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,MAAM,IAAI,KACT,MAAM,CAAC,IAAI,EAAE,eAAe,CAe9B,CAAC"}
package/dist/draft.js ADDED
@@ -0,0 +1,157 @@
1
+ import { getContourReferences } from './contour.js';
2
+ import { ValidationError } from './errors.js';
3
+ import { Result } from './result.js';
4
+ export const DRAFT_ID_PREFIX = '_draft.';
5
+ const replacedByTarget = (value) => {
6
+ const raw = value;
7
+ return typeof raw.replacedBy === 'string' ? raw.replacedBy : undefined;
8
+ };
9
+ export const isDraftId = (id) => id.startsWith(DRAFT_ID_PREFIX);
10
+ const dependenciesFromIds = (fromId, toIds, kind) => toIds.map((toId) => ({
11
+ fromId,
12
+ kind,
13
+ toId,
14
+ }));
15
+ const dependencyFromTarget = (fromId, toId, kind) => toId === undefined
16
+ ? []
17
+ : [
18
+ {
19
+ fromId,
20
+ kind,
21
+ toId,
22
+ },
23
+ ];
24
+ const trailDependencies = (trail) => [
25
+ ...dependenciesFromIds(trail.id, (trail.contours ?? []).map((contour) => contour.name), 'contour'),
26
+ ...dependenciesFromIds(trail.id, trail.crosses, 'cross'),
27
+ ...dependenciesFromIds(trail.id, trail.resources.map(({ id }) => id), 'resource'),
28
+ ...dependencyFromTarget(trail.id, replacedByTarget(trail), 'replaced-by'),
29
+ ];
30
+ const contourDependencies = (contour) => dependenciesFromIds(contour.name, getContourReferences(contour).map((reference) => reference.contour), 'schema-reference');
31
+ const signalDependencies = (signal) => [
32
+ ...dependenciesFromIds(signal.id, signal.from ?? [], 'signal-from'),
33
+ ...dependencyFromTarget(signal.id, replacedByTarget(signal), 'replaced-by'),
34
+ ];
35
+ const resourceDependencies = (resource) => dependencyFromTarget(resource.id, replacedByTarget(resource), 'replaced-by');
36
+ const nodeKind = (id, contours, trails, signals, resources) => {
37
+ if (contours.has(id)) {
38
+ return 'contour';
39
+ }
40
+ if (trails.has(id)) {
41
+ return 'trail';
42
+ }
43
+ if (signals.has(id)) {
44
+ return 'signal';
45
+ }
46
+ if (resources.has(id)) {
47
+ return 'resource';
48
+ }
49
+ return 'unknown';
50
+ };
51
+ const displayKind = (kind) => kind === 'unknown' ? 'Node' : kind[0]?.toUpperCase() + kind.slice(1);
52
+ const draftIdsFromKeys = (keys) => [...keys].filter(isDraftId);
53
+ const collectDeclaredDraftIds = (topo) => new Set([
54
+ ...draftIdsFromKeys(topo.contours.keys()),
55
+ ...draftIdsFromKeys(topo.trails.keys()),
56
+ ...draftIdsFromKeys(topo.signals.keys()),
57
+ ...draftIdsFromKeys(topo.resources.keys()),
58
+ ]);
59
+ const findingForDraftId = (id, kind) => ({
60
+ id,
61
+ kind,
62
+ message: `${displayKind(id ? kind : 'unknown')} "${id}" is draft and cannot appear in the established graph.`,
63
+ rule: 'draft-id',
64
+ });
65
+ const findingForContamination = (id, kind, reason) => {
66
+ const dependencyLabel = isDraftId(reason.dependsOn)
67
+ ? `draft "${reason.dependsOn}"`
68
+ : `draft-contaminated "${reason.dependsOn}"`;
69
+ return {
70
+ dependsOn: reason.dependsOn,
71
+ id,
72
+ kind,
73
+ message: `Established ${kind} "${id}" depends on ${dependencyLabel} ` +
74
+ `via ${reason.via} and cannot appear in the established graph.`,
75
+ rule: 'draft-contamination',
76
+ via: reason.via,
77
+ };
78
+ };
79
+ const contaminationReason = (dependency, contaminatedIds) => {
80
+ if (contaminatedIds.has(dependency.fromId)) {
81
+ return undefined;
82
+ }
83
+ if (!isDraftId(dependency.toId) && !contaminatedIds.has(dependency.toId)) {
84
+ return undefined;
85
+ }
86
+ return {
87
+ dependsOn: dependency.toId,
88
+ via: dependency.kind,
89
+ };
90
+ };
91
+ const markContaminatedDependency = (dependency, contaminatedIds, reasons) => {
92
+ const reason = contaminationReason(dependency, contaminatedIds);
93
+ if (reason === undefined) {
94
+ return false;
95
+ }
96
+ contaminatedIds.add(dependency.fromId);
97
+ reasons.set(dependency.fromId, reason);
98
+ return true;
99
+ };
100
+ const propagateContaminatedIds = (declaredDraftIds, dependencies) => {
101
+ const contaminatedIds = new Set(declaredDraftIds);
102
+ const reasons = new Map();
103
+ const visit = () => {
104
+ if (dependencies.some((dependency) => markContaminatedDependency(dependency, contaminatedIds, reasons))) {
105
+ visit();
106
+ }
107
+ };
108
+ visit();
109
+ return { contaminatedIds, reasons };
110
+ };
111
+ const contaminationFindingForId = (id, declaredDraftIds, reasons, contours, trails, signals, resources) => {
112
+ if (declaredDraftIds.has(id)) {
113
+ return undefined;
114
+ }
115
+ const reason = reasons.get(id);
116
+ if (reason === undefined) {
117
+ return undefined;
118
+ }
119
+ return findingForContamination(id, nodeKind(id, contours, trails, signals, resources), reason);
120
+ };
121
+ const collectFindings = (declaredDraftIds, contaminatedIds, reasons, contours, trails, signals, resources) => [
122
+ ...[...declaredDraftIds]
123
+ .toSorted()
124
+ .map((id) => findingForDraftId(id, nodeKind(id, contours, trails, signals, resources))),
125
+ ...[...contaminatedIds].toSorted().flatMap((id) => {
126
+ const finding = contaminationFindingForId(id, declaredDraftIds, reasons, contours, trails, signals, resources);
127
+ return finding === undefined ? [] : [finding];
128
+ }),
129
+ ];
130
+ const collectDependencies = (topo) => [
131
+ ...[...topo.contours.values()].flatMap(contourDependencies),
132
+ ...[...topo.trails.values()].flatMap(trailDependencies),
133
+ ...[...topo.signals.values()].flatMap(signalDependencies),
134
+ ...[...topo.resources.values()].flatMap(resourceDependencies),
135
+ ];
136
+ export const deriveDraftReport = (topo) => {
137
+ const declaredDraftIds = collectDeclaredDraftIds(topo);
138
+ const dependencies = collectDependencies(topo);
139
+ const { contaminatedIds, reasons } = propagateContaminatedIds(declaredDraftIds, dependencies);
140
+ const findings = collectFindings(declaredDraftIds, contaminatedIds, reasons, topo.contours, topo.trails, topo.signals, topo.resources);
141
+ return {
142
+ contaminatedIds,
143
+ declaredDraftIds,
144
+ dependencies,
145
+ findings,
146
+ };
147
+ };
148
+ export const validateDraftFreeTopo = (topo) => {
149
+ const analysis = deriveDraftReport(topo);
150
+ if (analysis.findings.length === 0) {
151
+ return Result.ok();
152
+ }
153
+ return Result.err(new ValidationError(`Established topo validation failed with ${analysis.findings.length} draft issue(s)`, {
154
+ context: { issues: analysis.findings },
155
+ }));
156
+ };
157
+ //# sourceMappingURL=draft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft.js","sourceRoot":"","sources":["../src/draft.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -4,7 +4,8 @@
4
4
  * Provides a structured error hierarchy with category-based mapping
5
5
  * to exit codes, HTTP status codes, and JSON-RPC error codes.
6
6
  */
7
- export type ErrorCategory = 'validation' | 'not_found' | 'conflict' | 'permission' | 'timeout' | 'rate_limit' | 'network' | 'internal' | 'auth' | 'cancelled';
7
+ export declare const errorCategories: readonly ["validation", "not_found", "conflict", "permission", "timeout", "rate_limit", "network", "internal", "auth", "cancelled"];
8
+ export type ErrorCategory = (typeof errorCategories)[number];
8
9
  export declare abstract class TrailsError extends Error {
9
10
  abstract readonly category: ErrorCategory;
10
11
  abstract readonly retryable: boolean;
@@ -61,6 +62,10 @@ export declare class NetworkError extends TrailsError {
61
62
  readonly retryable: true;
62
63
  }
63
64
  export declare class InternalError extends TrailsError {
65
+ readonly category: ErrorCategory;
66
+ readonly retryable: false;
67
+ }
68
+ export declare class DerivationError extends TrailsError {
64
69
  readonly category: "internal";
65
70
  readonly retryable: false;
66
71
  }
@@ -72,9 +77,62 @@ export declare class CancelledError extends TrailsError {
72
77
  readonly category: "cancelled";
73
78
  readonly retryable: false;
74
79
  }
75
- export declare const exitCodeMap: Record<ErrorCategory, number>;
76
- export declare const statusCodeMap: Record<ErrorCategory, number>;
77
- export declare const jsonRpcCodeMap: Record<ErrorCategory, number>;
80
+ /**
81
+ * Returned when a detour exhausts all recovery attempts.
82
+ *
83
+ * Inherits the wrapped error's category for trailhead mapping (e.g. a
84
+ * `RetryExhaustedError<ConflictError>` maps to HTTP 409), but always
85
+ * sets `retryable = false` to prevent amplification across `ctx.cross()`
86
+ * boundaries or stacked layers.
87
+ */
88
+ export declare class RetryExhaustedError<TErr extends TrailsError = TrailsError> extends InternalError {
89
+ readonly category: ErrorCategory;
90
+ readonly cause: TErr;
91
+ /** Number of recovery attempts made before exhaustion. */
92
+ readonly attempts: number;
93
+ /** Name of the detour whose recovery was exhausted. */
94
+ readonly detour: string;
95
+ constructor(wrapped: TErr, metadata: {
96
+ readonly attempts: number;
97
+ readonly detour: string;
98
+ });
99
+ }
100
+ export declare const exitCodeMap: {
101
+ readonly auth: 9;
102
+ readonly cancelled: 130;
103
+ readonly conflict: 3;
104
+ readonly internal: 8;
105
+ readonly network: 7;
106
+ readonly not_found: 2;
107
+ readonly permission: 4;
108
+ readonly rate_limit: 6;
109
+ readonly timeout: 5;
110
+ readonly validation: 1;
111
+ };
112
+ export declare const statusCodeMap: {
113
+ readonly auth: 401;
114
+ readonly cancelled: 499;
115
+ readonly conflict: 409;
116
+ readonly internal: 500;
117
+ readonly network: 502;
118
+ readonly not_found: 404;
119
+ readonly permission: 403;
120
+ readonly rate_limit: 429;
121
+ readonly timeout: 504;
122
+ readonly validation: 400;
123
+ };
124
+ export declare const jsonRpcCodeMap: {
125
+ readonly auth: -32600;
126
+ readonly cancelled: -32603;
127
+ readonly conflict: -32603;
128
+ readonly internal: -32603;
129
+ readonly network: -32603;
130
+ readonly not_found: -32601;
131
+ readonly permission: -32600;
132
+ readonly rate_limit: -32603;
133
+ readonly timeout: -32603;
134
+ readonly validation: -32602;
135
+ };
78
136
  export declare const retryableMap: Record<ErrorCategory, boolean>;
79
137
  /** Type guard: narrows unknown to TrailsError */
80
138
  export declare const isTrailsError: (error?: unknown) => error is TrailsError;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/errors.js CHANGED
@@ -6,6 +6,21 @@
6
6
  * to exit codes, HTTP status codes, and JSON-RPC error codes.
7
7
  */
8
8
  // ---------------------------------------------------------------------------
9
+ // Category
10
+ // ---------------------------------------------------------------------------
11
+ export const errorCategories = [
12
+ 'validation',
13
+ 'not_found',
14
+ 'conflict',
15
+ 'permission',
16
+ 'timeout',
17
+ 'rate_limit',
18
+ 'network',
19
+ 'internal',
20
+ 'auth',
21
+ 'cancelled',
22
+ ];
23
+ // ---------------------------------------------------------------------------
9
24
  // Base class
10
25
  // ---------------------------------------------------------------------------
11
26
  export class TrailsError extends Error {
@@ -68,6 +83,10 @@ export class InternalError extends TrailsError {
68
83
  category = 'internal';
69
84
  retryable = false;
70
85
  }
86
+ export class DerivationError extends TrailsError {
87
+ category = 'internal';
88
+ retryable = false;
89
+ }
71
90
  export class AuthError extends TrailsError {
72
91
  category = 'auth';
73
92
  retryable = false;
@@ -76,6 +95,30 @@ export class CancelledError extends TrailsError {
76
95
  category = 'cancelled';
77
96
  retryable = false;
78
97
  }
98
+ /**
99
+ * Returned when a detour exhausts all recovery attempts.
100
+ *
101
+ * Inherits the wrapped error's category for trailhead mapping (e.g. a
102
+ * `RetryExhaustedError<ConflictError>` maps to HTTP 409), but always
103
+ * sets `retryable = false` to prevent amplification across `ctx.cross()`
104
+ * boundaries or stacked layers.
105
+ */
106
+ export class RetryExhaustedError extends InternalError {
107
+ category;
108
+ cause;
109
+ /** Number of recovery attempts made before exhaustion. */
110
+ attempts;
111
+ /** Name of the detour whose recovery was exhausted. */
112
+ detour;
113
+ constructor(wrapped, metadata) {
114
+ super(`Recovery exhausted after ${metadata.attempts} attempts: ${wrapped.message}`, { cause: wrapped });
115
+ this.cause = wrapped;
116
+ this.attempts = metadata.attempts;
117
+ this.detour = metadata.detour;
118
+ // Dynamic — inherited from wrapped error at construction time.
119
+ this.category = wrapped.category;
120
+ }
121
+ }
79
122
  // ---------------------------------------------------------------------------
80
123
  // Taxonomy maps
81
124
  // ---------------------------------------------------------------------------
@@ -135,7 +178,7 @@ export const isTrailsError = (error) => error instanceof TrailsError;
135
178
  /** Returns true if the error is retryable (TrailsError with retryable category). */
136
179
  export const isRetryable = (error) => {
137
180
  if (isTrailsError(error)) {
138
- return retryableMap[error.category];
181
+ return error.retryable;
139
182
  }
140
183
  return false;
141
184
  };
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG;;;;;GAKG;AAEH,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY;IACZ,WAAW;IACX,UAAU;IACV,YAAY;IACZ,SAAS;IACT,YAAY;IACZ,SAAS;IACT,UAAU;IACV,MAAM;IACN,WAAW;CACH,CAAC;AAIX,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,OAAgB,WAAY,SAAQ,KAAK;IAGpC,OAAO,CAAuC;IAEvD,YACE,OAAe,EACf,OAA8D;QAE9D,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;IAClC,CAAC;CACF;AAED,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,MAAM,OAAO,eAAgB,SAAQ,WAAW;IACrC,QAAQ,GAAG,YAAqB,CAAC;IACjC,SAAS,GAAG,KAAc,CAAC;CACrC;AAED,MAAM,OAAO,cAAe,SAAQ,WAAW;IACpC,QAAQ,GAAG,YAAqB,CAAC;IACjC,SAAS,GAAG,KAAc,CAAC;CACrC;AAED,MAAM,OAAO,cAAe,SAAQ,WAAW;IACpC,QAAQ,GAAG,UAAmB,CAAC;IAC/B,SAAS,GAAG,KAAc,CAAC;CACrC;AAED,MAAM,OAAO,aAAc,SAAQ,WAAW;IACnC,QAAQ,GAAG,WAAoB,CAAC;IAChC,SAAS,GAAG,KAAc,CAAC;CACrC;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACxC,QAAQ,GAAG,UAAmB,CAAC;IAC/B,SAAS,GAAG,KAAc,CAAC;CACrC;AAED,MAAM,OAAO,aAAc,SAAQ,WAAW;IACnC,QAAQ,GAAG,UAAmB,CAAC;IAC/B,SAAS,GAAG,KAAc,CAAC;CACrC;AAED,MAAM,OAAO,eAAgB,SAAQ,WAAW;IACrC,QAAQ,GAAG,YAAqB,CAAC;IACjC,SAAS,GAAG,KAAc,CAAC;CACrC;AAED,MAAM,OAAO,YAAa,SAAQ,WAAW;IAClC,QAAQ,GAAG,SAAkB,CAAC;IAC9B,SAAS,GAAG,IAAa,CAAC;CACpC;AAED,MAAM,OAAO,cAAe,SAAQ,WAAW;IACpC,QAAQ,GAAG,YAAqB,CAAC;IACjC,SAAS,GAAG,IAAa,CAAC;IAC1B,UAAU,CAAsB;IAEzC,YACE,OAAe,EACf,OAIC;QAED,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IACxC,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,WAAW;IAClC,QAAQ,GAAG,SAAkB,CAAC;IAC9B,SAAS,GAAG,IAAa,CAAC;CACpC;AAED,MAAM,OAAO,aAAc,SAAQ,WAAW;IACnC,QAAQ,GAAkB,UAAU,CAAC;IACrC,SAAS,GAAG,KAAc,CAAC;CACrC;AAED,MAAM,OAAO,eAAgB,SAAQ,WAAW;IACrC,QAAQ,GAAG,UAAmB,CAAC;IAC/B,SAAS,GAAG,KAAc,CAAC;CACrC;AAED,MAAM,OAAO,SAAU,SAAQ,WAAW;IAC/B,QAAQ,GAAG,MAAe,CAAC;IAC3B,SAAS,GAAG,KAAc,CAAC;CACrC;AAED,MAAM,OAAO,cAAe,SAAQ,WAAW;IACpC,QAAQ,GAAG,WAAoB,CAAC;IAChC,SAAS,GAAG,KAAc,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,mBAEX,SAAQ,aAAa;IACZ,QAAQ,CAAgB;IACxB,KAAK,CAAO;IAErB,0DAA0D;IACjD,QAAQ,CAAS;IAE1B,uDAAuD;IAC9C,MAAM,CAAS;IAExB,YACE,OAAa,EACb,QAAgE;QAEhE,KAAK,CACH,4BAA4B,QAAQ,CAAC,QAAQ,cAAc,OAAO,CAAC,OAAO,EAAE,EAC5E,EAAE,KAAK,EAAE,OAAO,EAAE,CACnB,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,+DAA+D;QAC/D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACnC,CAAC;CACF;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,CAAC;IACZ,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,CAAC;CACmC,CAAC;AAEnD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,GAAG;IACT,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,SAAS,EAAE,GAAG;IACd,UAAU,EAAE,GAAG;IACf,UAAU,EAAE,GAAG;IACf,OAAO,EAAE,GAAG;IACZ,UAAU,EAAE,GAAG;CACiC,CAAC;AAEnD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,CAAC,MAAM;IACb,SAAS,EAAE,CAAC,MAAM;IAClB,QAAQ,EAAE,CAAC,MAAM;IACjB,QAAQ,EAAE,CAAC,MAAM;IACjB,OAAO,EAAE,CAAC,MAAM;IAChB,SAAS,EAAE,CAAC,MAAM;IAClB,UAAU,EAAE,CAAC,MAAM;IACnB,UAAU,EAAE,CAAC,MAAM;IACnB,OAAO,EAAE,CAAC,MAAM;IAChB,UAAU,EAAE,CAAC,MAAM;CAC6B,CAAC;AAEnD,MAAM,CAAC,MAAM,YAAY,GAAmC;IAC1D,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,KAAK;IAChB,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,KAAK;IAChB,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,KAAK;CACT,CAAC;AAEX,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,iDAAiD;AACjD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAe,EAAwB,EAAE,CACrE,KAAK,YAAY,WAAW,CAAC;AAE/B,oFAAoF;AACpF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAY,EAAW,EAAE;IACnD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,SAAS,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
package/dist/execute.d.ts CHANGED
@@ -1,13 +1,15 @@
1
1
  /**
2
2
  * Centralized trail execution pipeline.
3
3
  *
4
- * Validates input, builds context, composes gates, and runs the
4
+ * Validates input, builds context, composes layers, and runs the
5
5
  * implementation. Surfaces (CLI, MCP, HTTP) delegate here instead
6
6
  * of reimplementing the pipeline.
7
7
  */
8
+ import type { z } from 'zod';
8
9
  import type { AnyTrail } from './trail.js';
9
- import type { Gate } from './gate.js';
10
- import type { ProvisionOverrideMap } from './provision.js';
10
+ import type { Layer } from './layer.js';
11
+ import type { ResourceOverrideMap } from './resource.js';
12
+ import type { Topo } from './topo.js';
11
13
  import type { TrailContextInit } from './types.js';
12
14
  import { Result } from './result.js';
13
15
  /** Options for executeTrail. */
@@ -16,17 +18,32 @@ export interface ExecuteTrailOptions {
16
18
  readonly ctx?: Partial<TrailContextInit> | undefined;
17
19
  /** AbortSignal override (takes final precedence over ctx and factory). */
18
20
  readonly abortSignal?: AbortSignal | undefined;
19
- /** Gates to compose around the implementation. */
20
- readonly gates?: readonly Gate[] | undefined;
21
+ /** Layers to compose around the implementation. */
22
+ readonly layers?: readonly Layer[] | undefined;
21
23
  /** Factory that produces a base TrailContext (takes precedence over defaults). */
22
24
  readonly createContext?: (() => TrailContextInit | Promise<TrailContextInit>) | undefined;
23
- /** Explicit provision instance overrides keyed by provision ID. */
24
- readonly provisions?: ProvisionOverrideMap | undefined;
25
- /** Config values for provisions that declare a `config` schema, keyed by provision ID. */
25
+ /** Explicit resource instance overrides keyed by resource ID. */
26
+ readonly resources?: ResourceOverrideMap | undefined;
27
+ /** Config values for resources that declare a `config` schema, keyed by resource ID. */
26
28
  readonly configValues?: Readonly<Record<string, Record<string, unknown>>> | undefined;
29
+ /** Topo used for signal-driven activation; required for `ctx.fire()` to work. */
30
+ readonly topo?: Topo | undefined;
31
+ /**
32
+ * Override the validation schema used for input validation.
33
+ *
34
+ * When a trail is invoked via `ctx.cross()` and the target declares
35
+ * `crossInput`, the cross function merges `trail.input` with
36
+ * `trail.crossInput` and passes the merged schema here so validation
37
+ * accepts both public and composition-only fields.
38
+ *
39
+ * Used by the cross execution path; not part of the public API.
40
+ *
41
+ * @internal
42
+ */
43
+ readonly validationSchema?: z.ZodType | undefined;
27
44
  }
28
45
  /**
29
- * Execute a trail through the standard validate-context-gates-run pipeline.
46
+ * Execute a trail through the standard validate-context-layers-run pipeline.
30
47
  *
31
48
  * The function never throws -- unexpected exceptions are caught and
32
49
  * returned as `Result.err(InternalError)`.
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAgB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAKjE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAarC,gCAAgC;AAChC,MAAM,WAAW,mBAAmB;IAClC,mEAAmE;IACnE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;IACrD,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/C,kDAAkD;IAClD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,CAAC;IAC7C,kFAAkF;IAClF,QAAQ,CAAC,aAAa,CAAC,EACnB,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,GACpD,SAAS,CAAC;IACd,mEAAmE;IACnE,QAAQ,CAAC,UAAU,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACvD,0FAA0F;IAC1F,QAAQ,CAAC,YAAY,CAAC,EAClB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GACjD,SAAS,CAAC;CACf;AAsFD;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GACvB,OAAO,QAAQ,EACf,UAAU,OAAO,EACjB,UAAU,mBAAmB,KAC5B,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAsBhC,CAAC"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,KAAK,EAOV,gBAAgB,EACjB,MAAM,YAAY,CAAC;AA0BpB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAcrC,gCAAgC;AAChC,MAAM,WAAW,mBAAmB;IAClC,mEAAmE;IACnE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;IACrD,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/C,mDAAmD;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,GAAG,SAAS,CAAC;IAC/C,kFAAkF;IAClF,QAAQ,CAAC,aAAa,CAAC,EACnB,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,GACpD,SAAS,CAAC;IACd,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACrD,wFAAwF;IACxF,QAAQ,CAAC,YAAY,CAAC,EAClB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GACjD,SAAS,CAAC;IACd,iFAAiF;IACjF,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACjC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC;CACnD;AAy0BD;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GACvB,OAAO,QAAQ,EACf,UAAU,OAAO,EACjB,UAAU,mBAAmB,KAC5B,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CA2BhC,CAAC"}