@ontrails/core 1.0.0-beta.12 → 1.0.0-beta.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/.turbo/turbo-lint.log +1 -1
  2. package/CHANGELOG.md +65 -35
  3. package/README.md +21 -20
  4. package/dist/context.d.ts +1 -1
  5. package/dist/context.d.ts.map +1 -1
  6. package/dist/context.js +5 -4
  7. package/dist/context.js.map +1 -1
  8. package/dist/derive.d.ts +14 -3
  9. package/dist/derive.d.ts.map +1 -1
  10. package/dist/derive.js +36 -12
  11. package/dist/derive.js.map +1 -1
  12. package/dist/draft.d.ts +28 -0
  13. package/dist/draft.d.ts.map +1 -0
  14. package/dist/draft.js +156 -0
  15. package/dist/draft.js.map +1 -0
  16. package/dist/event.d.ts +4 -41
  17. package/dist/event.d.ts.map +1 -1
  18. package/dist/event.js +4 -14
  19. package/dist/event.js.map +1 -1
  20. package/dist/execute.d.ts +10 -10
  21. package/dist/execute.d.ts.map +1 -1
  22. package/dist/execute.js +35 -28
  23. package/dist/execute.js.map +1 -1
  24. package/dist/gate.d.ts +17 -0
  25. package/dist/gate.d.ts.map +1 -0
  26. package/dist/gate.js +21 -0
  27. package/dist/gate.js.map +1 -0
  28. package/dist/index.d.ts +16 -9
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +14 -9
  31. package/dist/index.js.map +1 -1
  32. package/dist/internal/topo-saves.d.ts +47 -0
  33. package/dist/internal/topo-saves.d.ts.map +1 -0
  34. package/dist/internal/topo-saves.js +310 -0
  35. package/dist/internal/topo-saves.js.map +1 -0
  36. package/dist/internal/topo-store-read.d.ts +67 -0
  37. package/dist/internal/topo-store-read.d.ts.map +1 -0
  38. package/dist/internal/topo-store-read.js +222 -0
  39. package/dist/internal/topo-store-read.js.map +1 -0
  40. package/dist/internal/topo-store.d.ts +12 -0
  41. package/dist/internal/topo-store.d.ts.map +1 -0
  42. package/dist/internal/topo-store.js +571 -0
  43. package/dist/internal/topo-store.js.map +1 -0
  44. package/dist/internal/trails-db.d.ts +16 -0
  45. package/dist/internal/trails-db.d.ts.map +1 -0
  46. package/dist/internal/trails-db.js +118 -0
  47. package/dist/internal/trails-db.js.map +1 -0
  48. package/dist/layer.d.ts +5 -16
  49. package/dist/layer.d.ts.map +1 -1
  50. package/dist/layer.js +3 -20
  51. package/dist/layer.js.map +1 -1
  52. package/dist/provision-config.d.ts +22 -0
  53. package/dist/provision-config.d.ts.map +1 -0
  54. package/dist/provision-config.js +210 -0
  55. package/dist/provision-config.js.map +1 -0
  56. package/dist/provision.d.ts +71 -0
  57. package/dist/provision.d.ts.map +1 -0
  58. package/dist/provision.js +56 -0
  59. package/dist/provision.js.map +1 -0
  60. package/dist/run.d.ts +27 -0
  61. package/dist/run.d.ts.map +1 -0
  62. package/dist/run.js +34 -0
  63. package/dist/run.js.map +1 -0
  64. package/dist/service-config.d.ts +7 -7
  65. package/dist/service-config.d.ts.map +1 -1
  66. package/dist/service-config.js +75 -73
  67. package/dist/service-config.js.map +1 -1
  68. package/dist/service.d.ts +32 -36
  69. package/dist/service.d.ts.map +1 -1
  70. package/dist/service.js +21 -21
  71. package/dist/service.js.map +1 -1
  72. package/dist/signal.d.ts +33 -0
  73. package/dist/signal.d.ts.map +1 -0
  74. package/dist/signal.js +17 -0
  75. package/dist/signal.js.map +1 -0
  76. package/dist/topo-store.d.ts +48 -0
  77. package/dist/topo-store.d.ts.map +1 -0
  78. package/dist/topo-store.js +175 -0
  79. package/dist/topo-store.js.map +1 -0
  80. package/dist/topo.d.ts +10 -10
  81. package/dist/topo.d.ts.map +1 -1
  82. package/dist/topo.js +48 -35
  83. package/dist/topo.js.map +1 -1
  84. package/dist/trail.d.ts +16 -16
  85. package/dist/trail.d.ts.map +1 -1
  86. package/dist/trail.js +5 -4
  87. package/dist/trail.js.map +1 -1
  88. package/dist/types.d.ts +10 -10
  89. package/dist/types.d.ts.map +1 -1
  90. package/dist/types.js +2 -2
  91. package/dist/types.js.map +1 -1
  92. package/dist/validate-established-topo.d.ts +76 -0
  93. package/dist/validate-established-topo.d.ts.map +1 -0
  94. package/dist/validate-established-topo.js +43 -0
  95. package/dist/validate-established-topo.js.map +1 -0
  96. package/dist/validate-topo.d.ts +2 -2
  97. package/dist/validate-topo.d.ts.map +1 -1
  98. package/dist/validate-topo.js +34 -32
  99. package/dist/validate-topo.js.map +1 -1
  100. package/package.json +4 -1
  101. package/src/__tests__/context.test.ts +8 -8
  102. package/src/__tests__/derive.test.ts +58 -1
  103. package/src/__tests__/execute.test.ts +124 -122
  104. package/src/__tests__/{layer.test.ts → gate.test.ts} +26 -26
  105. package/src/__tests__/{dispatch.test.ts → run.test.ts} +39 -39
  106. package/src/__tests__/service-config.test.ts +41 -37
  107. package/src/__tests__/service.test.ts +71 -71
  108. package/src/__tests__/{event.test.ts → signal.test.ts} +15 -15
  109. package/src/__tests__/topo-store-read.test.ts +251 -0
  110. package/src/__tests__/topo-store.test.ts +469 -0
  111. package/src/__tests__/topo.test.ts +54 -54
  112. package/src/__tests__/trail-permit.test.ts +4 -4
  113. package/src/__tests__/trail.test.ts +58 -58
  114. package/src/__tests__/trails-db.test.ts +191 -0
  115. package/src/__tests__/type-utils.test.ts +3 -3
  116. package/src/__tests__/validate-topo.test.ts +205 -38
  117. package/src/context.ts +5 -4
  118. package/src/derive.ts +47 -16
  119. package/src/draft.ts +334 -0
  120. package/src/event.ts +11 -73
  121. package/src/execute.ts +56 -40
  122. package/src/{layer.ts → gate.ts} +13 -13
  123. package/src/index.ts +54 -23
  124. package/src/internal/topo-saves.ts +429 -0
  125. package/src/internal/topo-store-read.ts +473 -0
  126. package/src/internal/topo-store.ts +1087 -0
  127. package/src/internal/trails-db.ts +189 -0
  128. package/src/{service-config.ts → provision-config.ts} +124 -105
  129. package/src/provision.ts +148 -0
  130. package/src/{dispatch.ts → run.ts} +8 -8
  131. package/src/signal.ts +65 -0
  132. package/src/topo-store.ts +301 -0
  133. package/src/topo.ts +74 -52
  134. package/src/trail.ts +23 -22
  135. package/src/types.ts +11 -11
  136. package/src/validate-established-topo.ts +63 -0
  137. package/src/validate-topo.ts +38 -34
  138. package/tsconfig.tsbuildinfo +1 -1
  139. package/src/service.ts +0 -145
package/dist/draft.js ADDED
@@ -0,0 +1,156 @@
1
+ import { ValidationError } from './errors.js';
2
+ import { Result } from './result.js';
3
+ export const DRAFT_ID_PREFIX = '_draft.';
4
+ const replacedByTarget = (value) => {
5
+ const raw = value;
6
+ return typeof raw.replacedBy === 'string' ? raw.replacedBy : undefined;
7
+ };
8
+ export const isDraftId = (id) => id.startsWith(DRAFT_ID_PREFIX);
9
+ const dependenciesFromIds = (fromId, toIds, kind) => toIds.map((toId) => ({
10
+ fromId,
11
+ kind,
12
+ toId,
13
+ }));
14
+ const dependencyFromTarget = (fromId, toId, kind) => toId === undefined
15
+ ? []
16
+ : [
17
+ {
18
+ fromId,
19
+ kind,
20
+ toId,
21
+ },
22
+ ];
23
+ const dependenciesFromDetours = (fromId, detours) => Object.values(detours).flatMap((targets) => dependenciesFromIds(fromId, targets, 'detour'));
24
+ const trailDependencies = (trail) => {
25
+ const { detours } = trail;
26
+ return [
27
+ ...dependenciesFromIds(trail.id, trail.crosses, 'cross'),
28
+ ...dependenciesFromIds(trail.id, trail.provisions.map(({ id }) => id), 'provision'),
29
+ ...(detours === undefined
30
+ ? []
31
+ : dependenciesFromDetours(trail.id, detours)),
32
+ ...dependencyFromTarget(trail.id, replacedByTarget(trail), 'replaced-by'),
33
+ ];
34
+ };
35
+ const signalDependencies = (signal) => [
36
+ ...dependenciesFromIds(signal.id, signal.from ?? [], 'signal-from'),
37
+ ...dependencyFromTarget(signal.id, replacedByTarget(signal), 'replaced-by'),
38
+ ];
39
+ const provisionDependencies = (provision) => dependencyFromTarget(provision.id, replacedByTarget(provision), 'replaced-by');
40
+ const nodeKind = (id, trails, signals, provisions) => {
41
+ if (trails.has(id)) {
42
+ return 'trail';
43
+ }
44
+ if (signals.has(id)) {
45
+ return 'signal';
46
+ }
47
+ if (provisions.has(id)) {
48
+ return 'provision';
49
+ }
50
+ return 'unknown';
51
+ };
52
+ const displayKind = (kind) => kind === 'unknown' ? 'Node' : kind[0]?.toUpperCase() + kind.slice(1);
53
+ const draftIdsFromKeys = (keys) => [...keys].filter(isDraftId);
54
+ const collectDeclaredDraftIds = (topo) => new Set([
55
+ ...draftIdsFromKeys(topo.trails.keys()),
56
+ ...draftIdsFromKeys(topo.signals.keys()),
57
+ ...draftIdsFromKeys(topo.provisions.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, trails, signals, provisions) => {
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, trails, signals, provisions), reason);
120
+ };
121
+ const collectFindings = (declaredDraftIds, contaminatedIds, reasons, trails, signals, provisions) => [
122
+ ...[...declaredDraftIds]
123
+ .toSorted()
124
+ .map((id) => findingForDraftId(id, nodeKind(id, trails, signals, provisions))),
125
+ ...[...contaminatedIds].toSorted().flatMap((id) => {
126
+ const finding = contaminationFindingForId(id, declaredDraftIds, reasons, trails, signals, provisions);
127
+ return finding === undefined ? [] : [finding];
128
+ }),
129
+ ];
130
+ const collectDependencies = (topo) => [
131
+ ...[...topo.trails.values()].flatMap(trailDependencies),
132
+ ...[...topo.signals.values()].flatMap(signalDependencies),
133
+ ...[...topo.provisions.values()].flatMap(provisionDependencies),
134
+ ];
135
+ export const analyzeDraftState = (topo) => {
136
+ const declaredDraftIds = collectDeclaredDraftIds(topo);
137
+ const dependencies = collectDependencies(topo);
138
+ const { contaminatedIds, reasons } = propagateContaminatedIds(declaredDraftIds, dependencies);
139
+ const findings = collectFindings(declaredDraftIds, contaminatedIds, reasons, topo.trails, topo.signals, topo.provisions);
140
+ return {
141
+ contaminatedIds,
142
+ declaredDraftIds,
143
+ dependencies,
144
+ findings,
145
+ };
146
+ };
147
+ export const validateEstablishedTopo = (topo) => {
148
+ const analysis = analyzeDraftState(topo);
149
+ if (analysis.findings.length === 0) {
150
+ return Result.ok();
151
+ }
152
+ return Result.err(new ValidationError(`Established topo validation failed with ${analysis.findings.length} draft issue(s)`, {
153
+ context: { issues: analysis.findings },
154
+ }));
155
+ };
156
+ //# 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/event.d.ts CHANGED
@@ -1,45 +1,8 @@
1
1
  /**
2
- * Event a named payload schema with optional provenance metadata.
3
- */
4
- import type { z } from 'zod';
5
- export interface EventSpec<T> {
6
- readonly payload: z.ZodType<T>;
7
- readonly description?: string | undefined;
8
- readonly metadata?: Readonly<Record<string, unknown>> | undefined;
9
- /** Trail IDs that produce this event (e.g. the trails it originates from). */
10
- readonly from?: readonly string[] | undefined;
11
- }
12
- export interface Event<T> {
13
- readonly id: string;
14
- readonly kind: 'event';
15
- readonly payload: z.ZodType<T>;
16
- readonly description?: string | undefined;
17
- readonly metadata?: Readonly<Record<string, unknown>> | undefined;
18
- /** Trail IDs that produce this event (e.g. the trails it originates from). */
19
- readonly from?: readonly string[] | undefined;
20
- }
21
- /**
22
- * Create an event definition.
23
- *
24
- * An event is a named payload schema describing something that happened.
25
- * Returns a frozen object with `kind: "event"` and all spec fields.
26
- *
27
- * @example
28
- * ```typescript
29
- * // ID as first argument
30
- * const updated = event("entity.updated", {
31
- * payload: EntityUpdatedSchema,
32
- * from: ["entity.add", "entity.update"],
33
- * });
2
+ * Legacy event aliases for the signal model.
34
3
  *
35
- * // Full spec object (programmatic)
36
- * const updated = event({ id: "entity.updated", payload: ..., from: [...] });
37
- * ```
4
+ * Keep this file as a compatibility seam while the repo-wide cutover lands.
38
5
  */
39
- export declare function event<T>(id: string, spec: EventSpec<T>): Event<T>;
40
- export declare function event<T>(spec: EventSpec<T> & {
41
- readonly id: string;
42
- }): Event<T>;
43
- /** Existential type for heterogeneous event collections */
44
- export type AnyEvent = Event<unknown>;
6
+ export { signal as event } from './signal.js';
7
+ export type { AnySignal, AnySignal as AnyEvent, Signal, Signal as Event, SignalSpec, SignalSpec as EventSpec, } from './signal.js';
45
8
  //# sourceMappingURL=event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../src/event.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAM7B,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAClE,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CAC/C;AAMD,MAAM,WAAW,KAAK,CAAC,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAClE,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CAC/C;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACnE,wBAAgB,KAAK,CAAC,CAAC,EACrB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC3C,KAAK,CAAC,CAAC,CAAC,CAAC;AAkBZ,2DAA2D;AAC3D,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../src/event.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EACV,SAAS,EACT,SAAS,IAAI,QAAQ,EACrB,MAAM,EACN,MAAM,IAAI,KAAK,EACf,UAAU,EACV,UAAU,IAAI,SAAS,GACxB,MAAM,aAAa,CAAC"}
package/dist/event.js CHANGED
@@ -1,17 +1,7 @@
1
1
  /**
2
- * Event a named payload schema with optional provenance metadata.
2
+ * Legacy event aliases for the signal model.
3
+ *
4
+ * Keep this file as a compatibility seam while the repo-wide cutover lands.
3
5
  */
4
- export function event(idOrSpec, maybeSpec) {
5
- const resolvedId = typeof idOrSpec === 'string' ? idOrSpec : idOrSpec.id;
6
- // oxlint-disable-next-line no-non-null-assertion -- overload guarantees maybeSpec when idOrSpec is string
7
- const resolvedSpec = typeof idOrSpec === 'string' ? maybeSpec : idOrSpec;
8
- return Object.freeze({
9
- description: resolvedSpec.description,
10
- from: resolvedSpec.from ? Object.freeze([...resolvedSpec.from]) : undefined,
11
- id: resolvedId,
12
- kind: 'event',
13
- metadata: resolvedSpec.metadata,
14
- payload: resolvedSpec.payload,
15
- });
16
- }
6
+ export { signal as event } from './signal.js';
17
7
  //# sourceMappingURL=event.js.map
package/dist/event.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"event.js","sourceRoot":"","sources":["../src/event.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwDH,MAAM,UAAU,KAAK,CACnB,QAA2D,EAC3D,SAAwB;IAExB,MAAM,UAAU,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IACzE,0GAA0G;IAC1G,MAAM,YAAY,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1E,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,YAAY,CAAC,WAAW;QACrC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3E,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,OAAgB;QACtB,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,OAAO,EAAE,YAAY,CAAC,OAAO;KAC9B,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../src/event.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,aAAa,CAAC"}
package/dist/execute.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * Centralized trail execution pipeline.
3
3
  *
4
- * Validates input, builds context, composes layers, and runs the
4
+ * Validates input, builds context, composes gates, and runs the
5
5
  * implementation. Surfaces (CLI, MCP, HTTP) delegate here instead
6
6
  * of reimplementing the pipeline.
7
7
  */
8
8
  import type { AnyTrail } from './trail.js';
9
- import type { Layer } from './layer.js';
10
- import type { ServiceOverrideMap } from './service.js';
9
+ import type { Gate } from './gate.js';
10
+ import type { ProvisionOverrideMap } from './provision.js';
11
11
  import type { TrailContextInit } from './types.js';
12
12
  import { Result } from './result.js';
13
13
  /** Options for executeTrail. */
@@ -15,18 +15,18 @@ export interface ExecuteTrailOptions {
15
15
  /** Partial context overrides merged on top of the base context. */
16
16
  readonly ctx?: Partial<TrailContextInit> | undefined;
17
17
  /** AbortSignal override (takes final precedence over ctx and factory). */
18
- readonly signal?: AbortSignal | undefined;
19
- /** Layers to compose around the implementation. */
20
- readonly layers?: readonly Layer[] | undefined;
18
+ readonly abortSignal?: AbortSignal | undefined;
19
+ /** Gates to compose around the implementation. */
20
+ readonly gates?: readonly Gate[] | undefined;
21
21
  /** Factory that produces a base TrailContext (takes precedence over defaults). */
22
22
  readonly createContext?: (() => TrailContextInit | Promise<TrailContextInit>) | undefined;
23
- /** Explicit service instance overrides keyed by service ID. */
24
- readonly services?: ServiceOverrideMap | undefined;
25
- /** Config values for services that declare a `config` schema, keyed by service ID. */
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. */
26
26
  readonly configValues?: Readonly<Record<string, Record<string, unknown>>> | undefined;
27
27
  }
28
28
  /**
29
- * Execute a trail through the standard validate-context-layers-run pipeline.
29
+ * Execute a trail through the standard validate-context-gates-run pipeline.
30
30
  *
31
31
  * The function never throws -- unexpected exceptions are caught and
32
32
  * 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,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,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,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,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,+DAA+D;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACnD,sFAAsF;IACtF,QAAQ,CAAC,YAAY,CAAC,EAClB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GACjD,SAAS,CAAC;CACf;AAsED;;;;;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,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"}
package/dist/execute.js CHANGED
@@ -1,64 +1,71 @@
1
1
  /**
2
2
  * Centralized trail execution pipeline.
3
3
  *
4
- * Validates input, builds context, composes layers, and runs the
4
+ * Validates input, builds context, composes gates, and runs the
5
5
  * implementation. Surfaces (CLI, MCP, HTTP) delegate here instead
6
6
  * of reimplementing the pipeline.
7
7
  */
8
- import { composeLayers } from './layer.js';
8
+ import { composeGates } from './gate.js';
9
9
  import { createTrailContext } from './context.js';
10
10
  import { InternalError } from './errors.js';
11
11
  import { Result } from './result.js';
12
- import { createServiceLookup } from './service.js';
13
- import { resolveServices } from './service-config.js';
12
+ import { createProvisionLookup } from './provision.js';
13
+ import { resolveProvisions } from './provision-config.js';
14
14
  import { validateInput } from './validation.js';
15
15
  // ---------------------------------------------------------------------------
16
16
  // Context resolution
17
17
  // ---------------------------------------------------------------------------
18
+ const applyContextOverrides = (base, options) => {
19
+ const withOverrides = options?.ctx
20
+ ? {
21
+ ...base,
22
+ ...options.ctx,
23
+ extensions: { ...base.extensions, ...options.ctx.extensions },
24
+ }
25
+ : base;
26
+ return options?.abortSignal
27
+ ? { ...withOverrides, abortSignal: options.abortSignal }
28
+ : withOverrides;
29
+ };
30
+ const bindProvisionLookup = (resolved, options) => {
31
+ if (options?.ctx?.extensions === undefined &&
32
+ resolved.provision !== undefined) {
33
+ return resolved;
34
+ }
35
+ const bound = { ...resolved };
36
+ const lookup = createProvisionLookup(() => bound);
37
+ bound.provision = lookup;
38
+ return bound;
39
+ };
18
40
  /**
19
41
  * Build a TrailContext from options.
20
42
  *
21
43
  * Resolution order:
22
44
  * 1. Factory (`createContext`) or `createTrailContext()` defaults.
23
45
  * 2. Partial `ctx` overrides merged on top.
24
- * 3. `signal` override takes final precedence.
46
+ * 3. `abortSignal` override takes final precedence.
25
47
  */
26
48
  const resolveContext = async (options) => {
27
49
  const seed = options?.createContext
28
50
  ? await options.createContext()
29
51
  : createTrailContext();
30
- const base = seed.service ? seed : createTrailContext(seed);
31
- const withOverrides = options?.ctx
32
- ? {
33
- ...base,
34
- ...options.ctx,
35
- extensions: { ...base.extensions, ...options.ctx.extensions },
36
- }
37
- : base;
38
- const resolved = options?.signal
39
- ? { ...withOverrides, signal: options.signal }
40
- : withOverrides;
41
- if (options?.ctx?.extensions !== undefined ||
42
- resolved.service === undefined) {
43
- const bound = { ...resolved };
44
- bound.service = createServiceLookup(() => bound);
45
- return bound;
46
- }
47
- return resolved;
52
+ const base = seed.provision ? seed : createTrailContext(seed);
53
+ const resolved = applyContextOverrides(base, options);
54
+ return bindProvisionLookup(resolved, options);
48
55
  };
49
56
  const prepareContext = async (trail, options) => {
50
57
  const baseCtx = await resolveContext(options);
51
- return await resolveServices(trail, baseCtx, options?.services, options?.configValues);
58
+ return await resolveProvisions(trail, baseCtx, options?.provisions, options?.configValues);
52
59
  };
53
- const runTrail = async (trail, input, ctx, layers) => {
54
- const impl = composeLayers([...layers], trail, trail.run);
60
+ const runTrail = async (trail, input, ctx, gates) => {
61
+ const impl = composeGates([...gates], trail, trail.blaze);
55
62
  return await impl(input, ctx);
56
63
  };
57
64
  // ---------------------------------------------------------------------------
58
65
  // Pipeline
59
66
  // ---------------------------------------------------------------------------
60
67
  /**
61
- * Execute a trail through the standard validate-context-layers-run pipeline.
68
+ * Execute a trail through the standard validate-context-gates-run pipeline.
62
69
  *
63
70
  * The function never throws -- unexpected exceptions are caught and
64
71
  * returned as `Result.err(InternalError)`.
@@ -73,7 +80,7 @@ export const executeTrail = async (trail, rawInput, options) => {
73
80
  if (resolvedCtx.isErr()) {
74
81
  return resolvedCtx;
75
82
  }
76
- return await runTrail(trail, validated.value, resolvedCtx.value, options?.layers ?? []);
83
+ return await runTrail(trail, validated.value, resolvedCtx.value, options?.gates ?? []);
77
84
  }
78
85
  catch (error) {
79
86
  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/gate.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ import type { Trail } from './trail.js';
2
+ import type { Implementation } from './types.js';
3
+ /** A composable gate that wraps trail implementations. */
4
+ export interface Gate {
5
+ readonly name: string;
6
+ readonly description?: string | undefined;
7
+ /** Wrap a trail's implementation, returning a new implementation. */
8
+ wrap<I, O>(trail: Trail<I, O>, implementation: Implementation<I, O>): Implementation<I, O>;
9
+ }
10
+ /**
11
+ * Apply gates outermost-first: gates[0] wraps gates[1] wraps ... wraps
12
+ * the base implementation.
13
+ *
14
+ * An empty gates array returns the implementation unchanged.
15
+ */
16
+ export declare const composeGates: <I, O>(gates: readonly Gate[], trail: Trail<I, O>, implementation: Implementation<I, O>) => Implementation<I, O>;
17
+ //# sourceMappingURL=gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,0DAA0D;AAC1D,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1C,qEAAqE;IACrE,IAAI,CAAC,CAAC,EAAE,CAAC,EACP,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAClB,cAAc,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GACnC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACzB;AAMD;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,EAC/B,OAAO,SAAS,IAAI,EAAE,EACtB,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAClB,gBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,KACnC,cAAc,CAAC,CAAC,EAAE,CAAC,CAUrB,CAAC"}
package/dist/gate.js ADDED
@@ -0,0 +1,21 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Composition
3
+ // ---------------------------------------------------------------------------
4
+ /**
5
+ * Apply gates outermost-first: gates[0] wraps gates[1] wraps ... wraps
6
+ * the base implementation.
7
+ *
8
+ * An empty gates array returns the implementation unchanged.
9
+ */
10
+ export const composeGates = (gates, trail, implementation) => {
11
+ // Fold right so gates[0] is the outermost wrapper.
12
+ let result = implementation;
13
+ for (let i = gates.length - 1; i >= 0; i -= 1) {
14
+ const gate = gates[i];
15
+ if (gate) {
16
+ result = gate.wrap(trail, result);
17
+ }
18
+ }
19
+ return result;
20
+ };
21
+ //# sourceMappingURL=gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAmBA,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,KAAsB,EACtB,KAAkB,EAClB,cAAoC,EACd,EAAE;IACxB,mDAAmD;IACnD,IAAI,MAAM,GAAG,cAAc,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,29 +1,36 @@
1
1
  export { Result } from './result.js';
2
2
  export { TrailsError, ValidationError, AmbiguousError, AssertionError, NotFoundError, AlreadyExistsError, ConflictError, PermissionError, TimeoutError, RateLimitError, NetworkError, InternalError, AuthError, CancelledError, exitCodeMap, statusCodeMap, jsonRpcCodeMap, retryableMap, isRetryable, isTrailsError, } from './errors.js';
3
3
  export type { ErrorCategory } from './errors.js';
4
- export type { Implementation, TrailContext, TrailContextInit, FollowFn, BasePermit, PermitRequirement, ProgressCallback, ProgressEvent, Logger, ServiceLookup, } from './types.js';
5
- export { SURFACE_KEY } from './types.js';
4
+ export type { Implementation, TrailContext, TrailContextInit, CrossFn, BasePermit, PermitRequirement, ProgressCallback, ProgressEvent, Logger, ProvisionLookup, } from './types.js';
5
+ export { TRAILHEAD_KEY } from './types.js';
6
6
  export { createTrailContext } from './context.js';
7
- export { createServiceLookup, findDuplicateServiceId, isService, service, } from './service.js';
8
- export type { AnyService, Service, ServiceContext, ServiceOverrideMap, ServiceSpec, } from './service.js';
7
+ export { createProvisionLookup, findDuplicateProvisionId, isProvision, provision, } from './provision.js';
8
+ export type { AnyProvision, Provision, ProvisionContext, ProvisionOverrideMap, ProvisionSpec, } from './provision.js';
9
9
  export { trail } from './trail.js';
10
10
  export type { AnyTrail, Intent, Trail, TrailSpec, TrailExample, } from './trail.js';
11
11
  export type { TrailInput, TrailOutput, TrailResult } from './type-utils.js';
12
12
  export { inputOf, outputOf } from './type-utils.js';
13
+ export { signal } from './signal.js';
14
+ export type { AnySignal, Signal, SignalSpec } from './signal.js';
13
15
  export { event } from './event.js';
14
16
  export type { AnyEvent, Event, EventSpec } from './event.js';
15
17
  export { topo } from './topo.js';
16
18
  export type { Topo } from './topo.js';
19
+ export { createMockTopoStore, createTopoStore, topoStore, } from './topo-store.js';
20
+ export type { MockTopoStoreSeed, ReadOnlyTopoStore, TopoStoreExportRecord, TopoStoreProvisionRecord, TopoStoreRef, TopoStoreTrailDetailRecord, TopoStoreTrailRecord, } from './topo-store.js';
21
+ export { DRAFT_ID_PREFIX, analyzeDraftState, isDraftId, validateEstablishedTopo as validateDraftFreeTopo, } from './draft.js';
22
+ export type { DraftDependency, DraftDependencyKind, DraftFinding, DraftStateAnalysis, } from './draft.js';
17
23
  export { validateTopo } from './validate-topo.js';
18
24
  export type { TopoIssue } from './validate-topo.js';
19
- export { composeLayers } from './layer.js';
20
- export type { Layer } from './layer.js';
21
- export { deriveFields } from './derive.js';
25
+ export { validateEstablishedTopo } from './validate-established-topo.js';
26
+ export { composeGates } from './gate.js';
27
+ export type { Gate } from './gate.js';
28
+ export { deriveCliPath, deriveFields } from './derive.js';
22
29
  export type { Field, FieldOverride } from './derive.js';
23
30
  export { executeTrail } from './execute.js';
24
31
  export type { ExecuteTrailOptions } from './execute.js';
25
- export { dispatch } from './dispatch.js';
26
- export type { DispatchOptions } from './dispatch.js';
32
+ export { run } from './run.js';
33
+ export type { RunOptions } from './run.js';
27
34
  export { validateInput, validateOutput, formatZodIssues, zodToJsonSchema, } from './validation.js';
28
35
  export { serializeError, deserializeError } from './serialization.js';
29
36
  export type { SerializedError } from './serialization.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EACT,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,YAAY,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,MAAM,EACN,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EACV,QAAQ,EACR,MAAM,EACN,KAAK,EACL,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,SAAS,GACV,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,YAAY,EACZ,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,uBAAuB,IAAI,qBAAqB,GACjD,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGxD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EACL,KAAK,EACL,WAAW,EACX,WAAW,EACX,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAKpD,OAAO,EACL,KAAK,EACL,OAAO,EACP,IAAI,EACJ,KAAK,EACL,cAAc,EACd,WAAW,EACX,OAAO,EACP,MAAM,GACP,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,OAAO,EACP,IAAI,EACJ,KAAK,EACL,cAAc,EACd,WAAW,GACZ,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG7E,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACzD,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,aAAa,EACb,WAAW,EACX,QAAQ,EACR,UAAU,GACX,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -2,28 +2,33 @@
2
2
  export { Result } from './result.js';
3
3
  // Errors
4
4
  export { TrailsError, ValidationError, AmbiguousError, AssertionError, NotFoundError, AlreadyExistsError, ConflictError, PermissionError, TimeoutError, RateLimitError, NetworkError, InternalError, AuthError, CancelledError, exitCodeMap, statusCodeMap, jsonRpcCodeMap, retryableMap, isRetryable, isTrailsError, } from './errors.js';
5
- export { SURFACE_KEY } from './types.js';
5
+ export { TRAILHEAD_KEY } from './types.js';
6
6
  // Context factory
7
7
  export { createTrailContext } from './context.js';
8
- // Service
9
- export { createServiceLookup, findDuplicateServiceId, isService, service, } from './service.js';
8
+ // Provision
9
+ export { createProvisionLookup, findDuplicateProvisionId, isProvision, provision, } from './provision.js';
10
10
  // Trail
11
11
  export { trail } from './trail.js';
12
12
  export { inputOf, outputOf } from './type-utils.js';
13
- // Event
13
+ // Signal
14
+ export { signal } from './signal.js';
14
15
  export { event } from './event.js';
15
16
  // Topo
16
17
  export { topo } from './topo.js';
18
+ export { createMockTopoStore, createTopoStore, topoStore, } from './topo-store.js';
19
+ // Draft state
20
+ export { DRAFT_ID_PREFIX, analyzeDraftState, isDraftId, validateEstablishedTopo as validateDraftFreeTopo, } from './draft.js';
17
21
  // Topo validation
18
22
  export { validateTopo } from './validate-topo.js';
19
- // Layer
20
- export { composeLayers } from './layer.js';
23
+ export { validateEstablishedTopo } from './validate-established-topo.js';
24
+ // Gate
25
+ export { composeGates } from './gate.js';
21
26
  // Derive
22
- export { deriveFields } from './derive.js';
27
+ export { deriveCliPath, deriveFields } from './derive.js';
23
28
  // Execute
24
29
  export { executeTrail } from './execute.js';
25
- // Dispatch
26
- export { dispatch } from './dispatch.js';
30
+ // Run
31
+ export { run } from './run.js';
27
32
  // Validation
28
33
  export { validateInput, validateOutput, formatZodIssues, zodToJsonSchema, } from './validation.js';
29
34
  // Serialization
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,SAAS;AACT,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EACT,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AAgBrB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,kBAAkB;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,UAAU;AACV,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,SAAS,EACT,OAAO,GACR,MAAM,cAAc,CAAC;AAStB,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEpD,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO;AACP,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,WAAW;AACX,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,aAAa;AACb,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,gBAAgB;AAChB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtE,aAAa;AACb,OAAO,EACL,KAAK,EACL,WAAW,EACX,WAAW,EACX,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,uDAAuD;AAEvD,gBAAgB;AAChB,OAAO,EACL,KAAK,EACL,OAAO,EACP,IAAI,EACJ,KAAK,EACL,cAAc,EACd,WAAW,EACX,OAAO,EACP,MAAM,GACP,MAAM,cAAc,CAAC;AAStB,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE7E,YAAY;AACZ,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO;AACP,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGzD,SAAS;AACT,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,cAAc;AACd,OAAO,EACL,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,SAAS;AACT,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EACT,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AAgBrB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,kBAAkB;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,YAAY;AACZ,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,SAAS,GACV,MAAM,gBAAgB,CAAC;AASxB,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEpD,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO;AACP,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,SAAS,GACV,MAAM,iBAAiB,CAAC;AAWzB,cAAc;AACd,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,uBAAuB,IAAI,qBAAqB,GACjD,MAAM,YAAY,CAAC;AAQpB,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO;AACP,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG1D,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM;AACN,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAG/B,aAAa;AACb,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,gBAAgB;AAChB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtE,aAAa;AACb,OAAO,EACL,KAAK,EACL,WAAW,EACX,WAAW,EACX,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,uDAAuD;AAEvD,gBAAgB;AAChB,OAAO,EACL,KAAK,EACL,OAAO,EACP,IAAI,EACJ,KAAK,EACL,cAAc,EACd,WAAW,EACX,OAAO,EACP,MAAM,GACP,MAAM,cAAc,CAAC;AAStB,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE7E,YAAY;AACZ,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO;AACP,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGzD,SAAS;AACT,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,cAAc;AACd,OAAO,EACL,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,eAAe,GAChB,MAAM,kBAAkB,CAAC"}