@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/execute.js CHANGED
@@ -1,16 +1,21 @@
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 { composeGates } from './gate.js';
9
- import { createTrailContext } from './context.js';
10
- import { InternalError } from './errors.js';
8
+ import { createFireFn } from './fire.js';
9
+ import { createTrailContext, passthroughTrace } from './context.js';
10
+ import { buildCrossValidationSchema } from './cross-schema.js';
11
+ import { CancelledError, InternalError, NotFoundError, RetryExhaustedError, TrailsError, } from './errors.js';
12
+ import { claimNextCrossBatchIndex, createCrossBatchValidationResults, normalizeCrossBatchConcurrency, } from './internal/cross-batch.js';
13
+ import { forkCtx } from './internal/fork-ctx.js';
14
+ import { TRACE_CONTEXT_KEY, completeRecord, createSpanRecord, createTraceRecord, getTraceSink, isTracingDisabled, writeToSink, } from './internal/tracing.js';
11
15
  import { Result } from './result.js';
12
- import { createProvisionLookup } from './provision.js';
13
- import { resolveProvisions } from './provision-config.js';
16
+ import { createResourceLookup } from './resource.js';
17
+ import { createResources } from './resource-config.js';
18
+ import { TRAILHEAD_KEY } from './types.js';
14
19
  import { validateInput } from './validation.js';
15
20
  // ---------------------------------------------------------------------------
16
21
  // Context resolution
@@ -27,14 +32,14 @@ const applyContextOverrides = (base, options) => {
27
32
  ? { ...withOverrides, abortSignal: options.abortSignal }
28
33
  : withOverrides;
29
34
  };
30
- const bindProvisionLookup = (resolved, options) => {
35
+ const bindResourceLookup = (resolved, options) => {
31
36
  if (options?.ctx?.extensions === undefined &&
32
- resolved.provision !== undefined) {
37
+ resolved.resource !== undefined) {
33
38
  return resolved;
34
39
  }
35
40
  const bound = { ...resolved };
36
- const lookup = createProvisionLookup(() => bound);
37
- bound.provision = lookup;
41
+ const lookup = createResourceLookup(() => bound);
42
+ bound.resource = lookup;
38
43
  return bound;
39
44
  };
40
45
  /**
@@ -48,31 +53,447 @@ const bindProvisionLookup = (resolved, options) => {
48
53
  const resolveContext = async (options) => {
49
54
  const seed = options?.createContext
50
55
  ? await options.createContext()
51
- : createTrailContext();
52
- const base = seed.provision ? seed : createTrailContext(seed);
56
+ : undefined;
57
+ const base = createTrailContext(seed);
53
58
  const resolved = applyContextOverrides(base, options);
54
- return bindProvisionLookup(resolved, options);
59
+ return bindResourceLookup(resolved, options);
55
60
  };
56
61
  const prepareContext = async (trail, options) => {
57
62
  const baseCtx = await resolveContext(options);
58
- return await resolveProvisions(trail, baseCtx, options?.provisions, options?.configValues);
63
+ return await createResources(trail, baseCtx, options?.resources, options?.configValues);
59
64
  };
60
- const runTrail = async (trail, input, ctx, gates) => {
61
- const impl = composeGates([...gates], trail, trail.blaze);
62
- return await impl(input, ctx);
65
+ // ---------------------------------------------------------------------------
66
+ // Intrinsic tracing
67
+ // ---------------------------------------------------------------------------
68
+ /** Derive the status + error category fields from a trail result. */
69
+ const deriveResultErrorCategory = (error) => {
70
+ if (error instanceof TrailsError) {
71
+ return error.category;
72
+ }
73
+ return 'internal';
74
+ };
75
+ const deriveOutcome = (result) => result.match({
76
+ err: (error) => ({
77
+ errorCategory: deriveResultErrorCategory(error),
78
+ status: error instanceof CancelledError ? 'cancelled' : 'err',
79
+ }),
80
+ ok: () => ({ errorCategory: undefined, status: 'ok' }),
81
+ });
82
+ /**
83
+ * Best-effort error category for a thrown (not Result.err) value.
84
+ *
85
+ * Unknown/non-Error throws normalize to `'internal'` so the trace record
86
+ * always carries a category when the trail unexpectedly throws.
87
+ */
88
+ const categorizeSpanError = (error) => {
89
+ if (error instanceof TrailsError) {
90
+ return error.category;
91
+ }
92
+ return 'internal';
93
+ };
94
+ /** Extract the permit identity fields for the trace record. */
95
+ const extractPermit = (ctx) => {
96
+ if (ctx.permit === undefined) {
97
+ return undefined;
98
+ }
99
+ const tenantId = 'tenantId' in ctx.permit
100
+ ? ctx.permit.tenantId
101
+ : undefined;
102
+ return tenantId === undefined
103
+ ? { id: ctx.permit.id }
104
+ : { id: ctx.permit.id, tenantId };
105
+ };
106
+ /**
107
+ * Build a `ctx.trace` function bound to a parent trace context.
108
+ *
109
+ * Each call creates a child span under the parent, times the callback,
110
+ * records success/failure with the appropriate error category, writes the
111
+ * completed span to the sink, and returns the callback result. Errors
112
+ * thrown by the callback are recorded and then rethrown.
113
+ *
114
+ * The returned function reads the *current* trace context from its captured
115
+ * parent. That means direct nesting (`ctx.trace('a', () => ctx.trace('b',
116
+ * ...))`) produces siblings under `a`'s parent, not children of `a`. For
117
+ * true child nesting, callers should cross into another trail (which gets
118
+ * its own root record parented by this one) — full cross-trail parenting
119
+ * is implemented in a later phase. For Phase 1, sibling spans under the
120
+ * trail's root are the supported shape.
121
+ */
122
+ const buildTraceFn = (parent, sink) => async (label, fn) => {
123
+ const record = createSpanRecord(parent, label);
124
+ try {
125
+ const value = await fn();
126
+ await writeToSink(sink, completeRecord(record, 'ok'));
127
+ return value;
128
+ }
129
+ catch (error) {
130
+ const errorCategory = categorizeSpanError(error);
131
+ const status = error instanceof CancelledError ? 'cancelled' : 'err';
132
+ await writeToSink(sink, completeRecord(record, status, errorCategory));
133
+ throw error;
134
+ }
135
+ };
136
+ /** Build the root trace record + trace-enriched context for a trail run. */
137
+ const buildTracedContext = (trail, ctx, sink) => {
138
+ // If a parent trace context is present (set by an outer executeTrail when
139
+ // the current trail was invoked via ctx.cross or ctx.fire), inherit its
140
+ // traceId/rootId so the trace tree spans trail boundaries. Otherwise this
141
+ // execution becomes a fresh root.
142
+ const parent = ctx.extensions?.[TRACE_CONTEXT_KEY];
143
+ const record = createTraceRecord({
144
+ intent: trail.intent,
145
+ parentId: parent?.spanId,
146
+ permit: extractPermit(ctx),
147
+ rootId: parent?.rootId,
148
+ traceId: parent?.traceId,
149
+ trailId: trail.id,
150
+ trailhead: ctx.extensions?.[TRAILHEAD_KEY],
151
+ });
152
+ // Root trace context for this trail's span. When inheriting a parent, the
153
+ // traceId/rootId carry forward and only spanId advances to the new record.
154
+ const rootTrace = {
155
+ rootId: parent?.rootId ?? record.id,
156
+ sampled: true,
157
+ spanId: record.id,
158
+ traceId: record.traceId,
159
+ };
160
+ const tracedCtx = {
161
+ ...ctx,
162
+ extensions: {
163
+ ...ctx.extensions,
164
+ [TRACE_CONTEXT_KEY]: rootTrace,
165
+ },
166
+ trace: buildTraceFn(rootTrace, sink),
167
+ };
168
+ return { record, tracedCtx };
169
+ };
170
+ const buildUntracedContext = (ctx) => {
171
+ const { [TRACE_CONTEXT_KEY]: _traceContext, ...extensions } = ctx.extensions ?? {};
172
+ const hasExtensions = Object.keys(extensions).length > 0;
173
+ return {
174
+ ...ctx,
175
+ extensions: hasExtensions ? extensions : undefined,
176
+ trace: passthroughTrace,
177
+ };
178
+ };
179
+ /** Run the composed implementation and write the root record on any outcome. */
180
+ const runImplWithRootRecord = async (impl, input, tracedCtx, record, sink) => {
181
+ try {
182
+ const result = await impl(input, tracedCtx);
183
+ const outcome = deriveOutcome(result);
184
+ await writeToSink(sink, completeRecord(record, outcome.status, outcome.errorCategory));
185
+ return result;
186
+ }
187
+ catch (error) {
188
+ // Normalize unexpected throws so the root record still reflects the error
189
+ // outcome. The outer executeTrail try/catch converts the thrown value into
190
+ // a Result.err(InternalError) for the caller.
191
+ const status = error instanceof CancelledError ? 'cancelled' : 'err';
192
+ const errorCategory = categorizeSpanError(error);
193
+ await writeToSink(sink, completeRecord(record, status, errorCategory));
194
+ throw error;
195
+ }
196
+ };
197
+ const resolveCrossTarget = (trailOrId, topo) => {
198
+ if (typeof trailOrId !== 'string') {
199
+ return Result.ok(trailOrId);
200
+ }
201
+ if (topo === undefined) {
202
+ return Result.err(new NotFoundError(`Trail "${trailOrId}" cannot be crossed without topo access`));
203
+ }
204
+ const target = topo.get(trailOrId);
205
+ return target
206
+ ? Result.ok(target)
207
+ : Result.err(new NotFoundError(`Trail "${trailOrId}" not found in topo "${topo.name}"`));
208
+ };
209
+ const collectConcurrentBranchResourceIds = (target, topo) => new Set(topo?.resourceIds() ?? target.resources.map((resource) => resource.id));
210
+ const stripInheritedResourceExtensions = (ctx, target, topo) => {
211
+ const resourceIds = collectConcurrentBranchResourceIds(target, topo);
212
+ const entries = Object.entries(ctx.extensions ?? {}).filter(([key]) => !resourceIds.has(key));
213
+ return Object.fromEntries(entries);
214
+ };
215
+ const deriveConcurrentBranchLogger = (ctx, target, branchIndex) => ctx.logger?.child?.({
216
+ branchIndex,
217
+ crossedTrailId: target.id,
218
+ }) ?? ctx.logger;
219
+ /**
220
+ * Build a child context for one concurrent crossing branch.
221
+ *
222
+ * Concurrent crossings should not inherit already-resolved resource instances
223
+ * from the parent execution scope. Stripping resource IDs from extensions
224
+ * forces each branch to resolve its own scope while still carrying forward
225
+ * request-scoped values like tracing, trailhead identity, permits, and the
226
+ * shared AbortSignal.
227
+ *
228
+ * `cross`, `fire`, and `resource` are cleared so the child execution can
229
+ * rebind them to the branch-local context instead of reusing closures that
230
+ * capture the parent scope.
231
+ */
232
+ const buildConcurrentBranchContext = (ctx, target, topo, branchIndex) => forkCtx(ctx, {
233
+ extensions: stripInheritedResourceExtensions(ctx, target, topo),
234
+ logger: deriveConcurrentBranchLogger(ctx, target, branchIndex),
235
+ });
236
+ const executeResolvedCrossTarget = async (target, input, ctx, topo, forwarded) => await // eslint-disable-next-line no-use-before-define -- executor closure runs only after executeTrail is defined
237
+ executeTrail(target, input, {
238
+ ...forwarded,
239
+ ctx,
240
+ topo,
241
+ validationSchema: buildCrossValidationSchema(target),
242
+ });
243
+ const executeCrossTarget = async (trailOrId, input, ctx, topo, forwarded) => {
244
+ const target = resolveCrossTarget(trailOrId, topo);
245
+ if (target.isErr()) {
246
+ return target;
247
+ }
248
+ return await executeResolvedCrossTarget(target.value, input, ctx, topo, forwarded);
249
+ };
250
+ const executeConcurrentCrossBatchCall = async (call, branchIndex, ctx, topo, forwarded) => {
251
+ const [trailOrId, batchInput] = call;
252
+ const target = resolveCrossTarget(trailOrId, topo);
253
+ if (target.isErr()) {
254
+ return target;
255
+ }
256
+ return await executeResolvedCrossTarget(target.value, batchInput, buildConcurrentBranchContext(ctx, target.value, topo, branchIndex), topo, forwarded);
257
+ };
258
+ const executeUnlimitedCrossBatch = async (calls, ctx, topo, forwarded) => await Promise.all(calls.map((call, branchIndex) => executeConcurrentCrossBatchCall(call, branchIndex, ctx, topo, forwarded)));
259
+ const createCrossBatchResults = (calls) => Array.from({ length: calls.length });
260
+ const executeLimitedCrossBatch = async (calls, ctx, topo, forwarded, limit) => {
261
+ const results = createCrossBatchResults(calls);
262
+ const nextIndex = { value: 0 };
263
+ const runWorker = async () => {
264
+ while (true) {
265
+ const branchIndex = claimNextCrossBatchIndex(nextIndex, calls);
266
+ if (branchIndex === undefined) {
267
+ return;
268
+ }
269
+ const call = calls[branchIndex];
270
+ if (call === undefined) {
271
+ // Defensive: `claimNextCrossBatchIndex` only returns indices within
272
+ // bounds, so this slot should always be populated. If it ever isn't,
273
+ // surface a clear InternalError in place of the missing slot and keep
274
+ // the worker loop running so sibling branches still get processed.
275
+ results[branchIndex] = Result.err(new InternalError(`unreachable: concurrent cross batch call missing at index ${branchIndex}`));
276
+ continue;
277
+ }
278
+ results[branchIndex] = await executeConcurrentCrossBatchCall(call, branchIndex, ctx, topo, forwarded);
279
+ }
280
+ };
281
+ await Promise.all(Array.from({ length: limit }, runWorker));
282
+ return results;
283
+ };
284
+ const executeCrossBatch = async (calls, ctx, topo, forwarded, batchOptions) => {
285
+ if (calls.length === 0) {
286
+ return [];
287
+ }
288
+ const concurrency = normalizeCrossBatchConcurrency(batchOptions);
289
+ if (concurrency.isErr()) {
290
+ return createCrossBatchValidationResults(calls, concurrency.error);
291
+ }
292
+ const limit = concurrency.value ?? calls.length;
293
+ return limit >= calls.length
294
+ ? await executeUnlimitedCrossBatch(calls, ctx, topo, forwarded)
295
+ : await executeLimitedCrossBatch(calls, ctx, topo, forwarded, limit);
296
+ };
297
+ const bindCrossToCtx = (ctx, topo, options) => {
298
+ if (ctx.cross !== undefined) {
299
+ return ctx;
300
+ }
301
+ const { createContext: _omit, validationSchema: _omitSchema, ...forwarded } = options ?? {};
302
+ const cross = (async (trailOrCalls, inputOrOptions) => {
303
+ if (Array.isArray(trailOrCalls)) {
304
+ return await executeCrossBatch(trailOrCalls, ctx, topo, forwarded, inputOrOptions);
305
+ }
306
+ return await executeCrossTarget(trailOrCalls, inputOrOptions, ctx, topo, forwarded);
307
+ });
308
+ return {
309
+ ...ctx,
310
+ cross,
311
+ };
312
+ };
313
+ const bindFireToCtx = (ctx, topo, options) => {
314
+ if (topo === undefined) {
315
+ return ctx;
316
+ }
317
+ // Forward the producer's execution options to consumers so resources,
318
+ // layers, configValues, and abortSignal propagate through signal fan-out.
319
+ // `createContext` is intentionally stripped — consumers inherit the
320
+ // already-resolved ctx via `consumerCtx`, and re-running the factory would
321
+ // clobber that.
322
+ // Strip createContext (consumers inherit resolved ctx) and validationSchema
323
+ // (consumers validate against their own schema, not the producer's cross schema).
324
+ const { createContext: _omit, validationSchema: _omitSchema, ...forwarded } = options ?? {};
325
+ const fire = createFireFn(topo, ctx, (consumer, input, consumerCtx) =>
326
+ // eslint-disable-next-line no-use-before-define -- executor closure runs only after executeTrail is defined
327
+ executeTrail(consumer, input, {
328
+ ...forwarded,
329
+ ctx: consumerCtx,
330
+ topo,
331
+ }));
332
+ return { ...ctx, fire };
333
+ };
334
+ const bindCrossAtLayerBoundary = (implementation, topo, options) => (input, ctx) => implementation(input, bindCrossToCtx(ctx, topo, options));
335
+ const bindFireAtLayerBoundary = (implementation, topo, options) => {
336
+ if (topo === undefined) {
337
+ return implementation;
338
+ }
339
+ return (input, ctx) => implementation(input, bindFireToCtx(ctx, topo, options));
340
+ };
341
+ // ---------------------------------------------------------------------------
342
+ // Detour loop
343
+ // ---------------------------------------------------------------------------
344
+ const DETOUR_MAX_ATTEMPTS_CAP = 5;
345
+ /**
346
+ * Find the first detour whose `on` class matches the error via `instanceof`.
347
+ *
348
+ * Declaration order wins — no most-specific-first hierarchy walking.
349
+ */
350
+ const findMatchingDetour = (
351
+ /* oxlint-disable-next-line no-explicit-any -- existential detour array from AnyTrail */
352
+ detours, error
353
+ /* oxlint-disable-next-line no-explicit-any -- matched detour carries runtime generics */
354
+ ) => detours.find((d) => error instanceof d.on);
355
+ /** Execute a single detour recovery attempt, routing through ctx.trace when available. */
356
+ const executeDetourAttempt = async (
357
+ /* oxlint-disable-next-line no-explicit-any -- existential detour from AnyTrail */
358
+ detour, attempt, lastError, input, ctx) => {
359
+ const run = async () => await detour.recover({ attempt, error: lastError, input }, ctx);
360
+ return ctx.trace
361
+ ? await ctx.trace(`detour:${detour.on.name}:${attempt}`, run)
362
+ : await run();
363
+ };
364
+ /** Classify a detour attempt result: continue the loop, or return early. */
365
+ const classifyDetourResult = (result,
366
+ /* oxlint-disable-next-line no-explicit-any -- existential detour from AnyTrail */
367
+ detour) => {
368
+ if (result.isOk()) {
369
+ return { done: true, result };
370
+ }
371
+ const recoverError = result.error;
372
+ if (!(recoverError instanceof TrailsError) ||
373
+ !(recoverError instanceof detour.on)) {
374
+ return { done: true, result };
375
+ }
376
+ return { done: false, nextError: recoverError };
377
+ };
378
+ /** Resolve effective maxAttempts, warning if the declared value exceeds the hard cap. */
379
+ const resolveMaxAttempts = (
380
+ /* oxlint-disable-next-line no-explicit-any -- existential detour from AnyTrail */
381
+ detour, ctx) => {
382
+ const declared = detour.maxAttempts ?? 1;
383
+ const clamped = Math.max(1, Math.min(declared, DETOUR_MAX_ATTEMPTS_CAP));
384
+ if (clamped === declared) {
385
+ return clamped;
386
+ }
387
+ ctx.logger?.warn('detour maxAttempts clamped', {
388
+ declared,
389
+ detour: detour.on.name,
390
+ effective: clamped,
391
+ });
392
+ return clamped;
393
+ };
394
+ /** Run the detour recovery loop for a single matched detour. */
395
+ const runDetourRecovery = async (
396
+ /* oxlint-disable-next-line no-explicit-any -- existential detour from AnyTrail */
397
+ detour, error, input, ctx) => {
398
+ const maxAttempts = resolveMaxAttempts(detour, ctx);
399
+ let lastError = error;
400
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
401
+ ctx.logger?.debug('detour recovery attempt', {
402
+ attempt,
403
+ errorClass: lastError.name,
404
+ matchedDetour: detour.on.name,
405
+ maxAttempts,
406
+ });
407
+ const result = await executeDetourAttempt(detour, attempt, lastError, input, ctx);
408
+ const classification = classifyDetourResult(result, detour);
409
+ if (classification.done) {
410
+ return classification.result;
411
+ }
412
+ lastError = classification.nextError;
413
+ }
414
+ return Result.err(new RetryExhaustedError(lastError, {
415
+ attempts: maxAttempts,
416
+ detour: detour.on.name,
417
+ }));
418
+ };
419
+ /**
420
+ * Wrap a blaze with the detour recovery loop.
421
+ *
422
+ * If the trail has no detours, returns the blaze unchanged (no wrapper overhead).
423
+ * The detour loop runs inside the layer stack, closest to the blaze.
424
+ */
425
+ const wrapWithDetours = (blaze,
426
+ /* oxlint-disable-next-line no-explicit-any -- existential detour array from AnyTrail */
427
+ detours) => {
428
+ if (detours.length === 0) {
429
+ return blaze;
430
+ }
431
+ return async (input, ctx) => {
432
+ const result = await blaze(input, ctx);
433
+ if (result.isOk()) {
434
+ return result;
435
+ }
436
+ const { error } = result;
437
+ if (!(error instanceof TrailsError)) {
438
+ return result;
439
+ }
440
+ const matched = findMatchingDetour(detours, error);
441
+ if (matched === undefined) {
442
+ return result;
443
+ }
444
+ return await runDetourRecovery(matched, error, input, ctx);
445
+ };
446
+ };
447
+ const prepareRunImpl = (trail, ctx, layers, topo, options) => {
448
+ const ctxWithIntrinsics = bindFireToCtx(bindCrossToCtx(ctx, topo, options), topo, options);
449
+ // Detour loop wraps the blaze (inside layer stack, closest to blaze)
450
+ let impl = wrapWithDetours(bindFireAtLayerBoundary(bindCrossAtLayerBoundary(trail.blaze, topo, options), topo, options), trail.detours);
451
+ for (let i = layers.length - 1; i >= 0; i -= 1) {
452
+ const layer = layers[i];
453
+ if (layer) {
454
+ impl = bindFireAtLayerBoundary(bindCrossAtLayerBoundary(layer.wrap(trail, impl), topo, options), topo, options);
455
+ }
456
+ }
457
+ return {
458
+ ctxWithIntrinsics,
459
+ impl,
460
+ };
461
+ };
462
+ const runImplWithoutTracing = async (trail, input, ctx, layers, topo, options) => {
463
+ const prepared = prepareRunImpl(trail, buildUntracedContext(ctx), layers, topo, options);
464
+ return await prepared.impl(input, prepared.ctxWithIntrinsics);
465
+ };
466
+ const runTrailWithTracing = async (trail, input, ctx, layers, topo, options, sink) => {
467
+ const { record, tracedCtx } = buildTracedContext(trail, ctx, sink);
468
+ let prepared;
469
+ try {
470
+ prepared = prepareRunImpl(trail, tracedCtx, layers, topo, options);
471
+ }
472
+ catch (error) {
473
+ const status = error instanceof CancelledError ? 'cancelled' : 'err';
474
+ await writeToSink(sink, completeRecord(record, status, categorizeSpanError(error)));
475
+ throw error;
476
+ }
477
+ return await runImplWithRootRecord(prepared.impl, input, prepared.ctxWithIntrinsics, record, sink);
478
+ };
479
+ const runTrail = async (trail, input, ctx, layers, topo, options) => {
480
+ const sink = getTraceSink();
481
+ return isTracingDisabled(sink)
482
+ ? await runImplWithoutTracing(trail, input, ctx, layers, topo, options)
483
+ : await runTrailWithTracing(trail, input, ctx, layers, topo, options, sink);
63
484
  };
64
485
  // ---------------------------------------------------------------------------
65
486
  // Pipeline
66
487
  // ---------------------------------------------------------------------------
67
488
  /**
68
- * Execute a trail through the standard validate-context-gates-run pipeline.
489
+ * Execute a trail through the standard validate-context-layers-run pipeline.
69
490
  *
70
491
  * The function never throws -- unexpected exceptions are caught and
71
492
  * returned as `Result.err(InternalError)`.
72
493
  */
73
494
  export const executeTrail = async (trail, rawInput, options) => {
74
495
  try {
75
- const validated = validateInput(trail.input, rawInput);
496
+ const validated = validateInput(options?.validationSchema ?? trail.input, rawInput);
76
497
  if (validated.isErr()) {
77
498
  return validated;
78
499
  }
@@ -80,7 +501,7 @@ export const executeTrail = async (trail, rawInput, options) => {
80
501
  if (resolvedCtx.isErr()) {
81
502
  return resolvedCtx;
82
503
  }
83
- return await runTrail(trail, validated.value, resolvedCtx.value, options?.gates ?? []);
504
+ return await runTrail(trail, validated.value, resolvedCtx.value, options?.layers ?? [], options?.topo, options);
84
505
  }
85
506
  catch (error) {
86
507
  const message = error instanceof Error ? error.message : String(error);
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"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"}
package/dist/fire.d.ts ADDED
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Signal emission and auto-activation.
3
+ *
4
+ * `createFireFn(topo, producerCtx?, executor)` returns a `FireFn` bound to
5
+ * a topo. Calling `fire(signalId, payload)` looks up the signal, validates
6
+ * the payload against its schema, finds every trail with the signal in its
7
+ * `on:` array, and invokes each consumer via the supplied executor.
8
+ *
9
+ * The `executor` parameter is an indirection that lets `execute.ts` pass in
10
+ * `executeTrail` without `fire.ts` importing it directly — keeping the two
11
+ * modules dependency-cycle-free.
12
+ *
13
+ * Consumer contexts inherit the producer's full ctx (logger, extensions,
14
+ * resources, abortSignal, requestId, env, workspaceRoot, permit) with
15
+ * `fire` rebound to the same closure so consumers can fan out further.
16
+ * Each consumer gets its own derived context so sibling fan-out branches do
17
+ * not share mutable top-level state. The consumer logger is derived from the
18
+ * producer logger as a child tagged with `signalId` and `consumerId` when
19
+ * `logger.child` exists.
20
+ *
21
+ * Error semantics match the fire-and-forget framing: producers get
22
+ * `Result.ok(undefined)` unless the signal id is unknown or the payload
23
+ * fails schema validation. Consumer errors are logged via the producer's
24
+ * logger but do NOT propagate back to the producer. Consumers that need
25
+ * transactional coupling should use `crosses:`.
26
+ */
27
+ import { Result } from './result.js';
28
+ import type { Topo } from './topo.js';
29
+ import type { AnyTrail } from './trail.js';
30
+ import type { FireFn, TrailContextInit } from './types.js';
31
+ /** Signature execute.ts passes in to avoid a fire ↔ execute import cycle. */
32
+ export type ConsumerExecutor = (consumer: AnyTrail, input: unknown, ctx: Partial<TrailContextInit>) => Promise<Result<unknown, Error>>;
33
+ /**
34
+ * Build a `FireFn` closure bound to a topo.
35
+ *
36
+ * When `producerCtx` is provided, consumer trails activated via `on:`
37
+ * inherit the producer's logger, extensions, resources, abortSignal,
38
+ * requestId, env, workspaceRoot, and permit. `ctx.fire` on the consumer
39
+ * is rebound to the same closure so consumers can emit downstream
40
+ * signals naturally.
41
+ */
42
+ export declare const createFireFn: (topo: Topo, producerCtx: TrailContextInit | undefined, executor: ConsumerExecutor) => FireFn;
43
+ //# sourceMappingURL=fire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fire.d.ts","sourceRoot":"","sources":["../src/fire.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAU,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnE,6EAA6E;AAC7E,MAAM,MAAM,gBAAgB,GAAG,CAC7B,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAC3B,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAyKrC;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,IAAI,EACV,aAAa,gBAAgB,GAAG,SAAS,EACzC,UAAU,gBAAgB,KACzB,MAyEF,CAAC"}