@telora/factory 0.4.5

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 (301) hide show
  1. package/dist/audit.d.ts +69 -0
  2. package/dist/audit.d.ts.map +1 -0
  3. package/dist/audit.js +376 -0
  4. package/dist/audit.js.map +1 -0
  5. package/dist/builder-completion.d.ts +35 -0
  6. package/dist/builder-completion.d.ts.map +1 -0
  7. package/dist/builder-completion.js +375 -0
  8. package/dist/builder-completion.js.map +1 -0
  9. package/dist/builder-spawner.d.ts +40 -0
  10. package/dist/builder-spawner.d.ts.map +1 -0
  11. package/dist/builder-spawner.js +493 -0
  12. package/dist/builder-spawner.js.map +1 -0
  13. package/dist/completion-gate.d.ts +52 -0
  14. package/dist/completion-gate.d.ts.map +1 -0
  15. package/dist/completion-gate.js +336 -0
  16. package/dist/completion-gate.js.map +1 -0
  17. package/dist/completion-report.d.ts +36 -0
  18. package/dist/completion-report.d.ts.map +1 -0
  19. package/dist/completion-report.js +348 -0
  20. package/dist/completion-report.js.map +1 -0
  21. package/dist/completion.d.ts +58 -0
  22. package/dist/completion.d.ts.map +1 -0
  23. package/dist/completion.js +287 -0
  24. package/dist/completion.js.map +1 -0
  25. package/dist/config.d.ts +16 -0
  26. package/dist/config.d.ts.map +1 -0
  27. package/dist/config.js +57 -0
  28. package/dist/config.js.map +1 -0
  29. package/dist/context-manager.d.ts +152 -0
  30. package/dist/context-manager.d.ts.map +1 -0
  31. package/dist/context-manager.js +421 -0
  32. package/dist/context-manager.js.map +1 -0
  33. package/dist/crash-detection.d.ts +70 -0
  34. package/dist/crash-detection.d.ts.map +1 -0
  35. package/dist/crash-detection.js +123 -0
  36. package/dist/crash-detection.js.map +1 -0
  37. package/dist/crash-recovery.d.ts +83 -0
  38. package/dist/crash-recovery.d.ts.map +1 -0
  39. package/dist/crash-recovery.js +522 -0
  40. package/dist/crash-recovery.js.map +1 -0
  41. package/dist/crash-resolution.d.ts +34 -0
  42. package/dist/crash-resolution.d.ts.map +1 -0
  43. package/dist/crash-resolution.js +382 -0
  44. package/dist/crash-resolution.js.map +1 -0
  45. package/dist/escalation.d.ts +150 -0
  46. package/dist/escalation.d.ts.map +1 -0
  47. package/dist/escalation.js +352 -0
  48. package/dist/escalation.js.map +1 -0
  49. package/dist/execution-target.d.ts +31 -0
  50. package/dist/execution-target.d.ts.map +1 -0
  51. package/dist/execution-target.js +71 -0
  52. package/dist/execution-target.js.map +1 -0
  53. package/dist/execution-unit-init.d.ts +28 -0
  54. package/dist/execution-unit-init.d.ts.map +1 -0
  55. package/dist/execution-unit-init.js +115 -0
  56. package/dist/execution-unit-init.js.map +1 -0
  57. package/dist/execution.d.ts +17 -0
  58. package/dist/execution.d.ts.map +1 -0
  59. package/dist/execution.js +20 -0
  60. package/dist/execution.js.map +1 -0
  61. package/dist/factory-engine.d.ts +100 -0
  62. package/dist/factory-engine.d.ts.map +1 -0
  63. package/dist/factory-engine.js +243 -0
  64. package/dist/factory-engine.js.map +1 -0
  65. package/dist/gap-detection.d.ts +43 -0
  66. package/dist/gap-detection.d.ts.map +1 -0
  67. package/dist/gap-detection.js +149 -0
  68. package/dist/gap-detection.js.map +1 -0
  69. package/dist/gate-context.d.ts +23 -0
  70. package/dist/gate-context.d.ts.map +1 -0
  71. package/dist/gate-context.js +63 -0
  72. package/dist/gate-context.js.map +1 -0
  73. package/dist/gate-engine.d.ts +55 -0
  74. package/dist/gate-engine.d.ts.map +1 -0
  75. package/dist/gate-engine.js +191 -0
  76. package/dist/gate-engine.js.map +1 -0
  77. package/dist/gates/adversarial.d.ts +59 -0
  78. package/dist/gates/adversarial.d.ts.map +1 -0
  79. package/dist/gates/adversarial.js +426 -0
  80. package/dist/gates/adversarial.js.map +1 -0
  81. package/dist/gates/adversary-spawner.d.ts +35 -0
  82. package/dist/gates/adversary-spawner.d.ts.map +1 -0
  83. package/dist/gates/adversary-spawner.js +286 -0
  84. package/dist/gates/adversary-spawner.js.map +1 -0
  85. package/dist/gates/adversary-test-dir.d.ts +41 -0
  86. package/dist/gates/adversary-test-dir.d.ts.map +1 -0
  87. package/dist/gates/adversary-test-dir.js +150 -0
  88. package/dist/gates/adversary-test-dir.js.map +1 -0
  89. package/dist/gates/behavioral-parser.d.ts +32 -0
  90. package/dist/gates/behavioral-parser.d.ts.map +1 -0
  91. package/dist/gates/behavioral-parser.js +190 -0
  92. package/dist/gates/behavioral-parser.js.map +1 -0
  93. package/dist/gates/behavioral-runner.d.ts +36 -0
  94. package/dist/gates/behavioral-runner.d.ts.map +1 -0
  95. package/dist/gates/behavioral-runner.js +306 -0
  96. package/dist/gates/behavioral-runner.js.map +1 -0
  97. package/dist/gates/behavioral.d.ts +37 -0
  98. package/dist/gates/behavioral.d.ts.map +1 -0
  99. package/dist/gates/behavioral.js +485 -0
  100. package/dist/gates/behavioral.js.map +1 -0
  101. package/dist/gates/deterministic.d.ts +24 -0
  102. package/dist/gates/deterministic.d.ts.map +1 -0
  103. package/dist/gates/deterministic.js +186 -0
  104. package/dist/gates/deterministic.js.map +1 -0
  105. package/dist/git-factory.d.ts +59 -0
  106. package/dist/git-factory.d.ts.map +1 -0
  107. package/dist/git-factory.js +102 -0
  108. package/dist/git-factory.js.map +1 -0
  109. package/dist/guard-evaluation.d.ts +48 -0
  110. package/dist/guard-evaluation.d.ts.map +1 -0
  111. package/dist/guard-evaluation.js +416 -0
  112. package/dist/guard-evaluation.js.map +1 -0
  113. package/dist/index.d.ts +30 -0
  114. package/dist/index.d.ts.map +1 -0
  115. package/dist/index.js +39 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/instance-completion.d.ts +34 -0
  118. package/dist/instance-completion.d.ts.map +1 -0
  119. package/dist/instance-completion.js +366 -0
  120. package/dist/instance-completion.js.map +1 -0
  121. package/dist/instance-lifecycle.d.ts +15 -0
  122. package/dist/instance-lifecycle.d.ts.map +1 -0
  123. package/dist/instance-lifecycle.js +18 -0
  124. package/dist/instance-lifecycle.js.map +1 -0
  125. package/dist/instance-phase-dispatch.d.ts +75 -0
  126. package/dist/instance-phase-dispatch.d.ts.map +1 -0
  127. package/dist/instance-phase-dispatch.js +674 -0
  128. package/dist/instance-phase-dispatch.js.map +1 -0
  129. package/dist/instance-poll-loop.d.ts +43 -0
  130. package/dist/instance-poll-loop.d.ts.map +1 -0
  131. package/dist/instance-poll-loop.js +360 -0
  132. package/dist/instance-poll-loop.js.map +1 -0
  133. package/dist/instance-state-machine.d.ts +52 -0
  134. package/dist/instance-state-machine.d.ts.map +1 -0
  135. package/dist/instance-state-machine.js +235 -0
  136. package/dist/instance-state-machine.js.map +1 -0
  137. package/dist/log-manager.d.ts +28 -0
  138. package/dist/log-manager.d.ts.map +1 -0
  139. package/dist/log-manager.js +71 -0
  140. package/dist/log-manager.js.map +1 -0
  141. package/dist/pipeline-evaluator.d.ts +61 -0
  142. package/dist/pipeline-evaluator.d.ts.map +1 -0
  143. package/dist/pipeline-evaluator.js +107 -0
  144. package/dist/pipeline-evaluator.js.map +1 -0
  145. package/dist/pipeline-metrics.d.ts +52 -0
  146. package/dist/pipeline-metrics.d.ts.map +1 -0
  147. package/dist/pipeline-metrics.js +40 -0
  148. package/dist/pipeline-metrics.js.map +1 -0
  149. package/dist/pipeline-traversal.d.ts +43 -0
  150. package/dist/pipeline-traversal.d.ts.map +1 -0
  151. package/dist/pipeline-traversal.js +68 -0
  152. package/dist/pipeline-traversal.js.map +1 -0
  153. package/dist/plan-parser.d.ts +76 -0
  154. package/dist/plan-parser.d.ts.map +1 -0
  155. package/dist/plan-parser.js +223 -0
  156. package/dist/plan-parser.js.map +1 -0
  157. package/dist/planning-phase.d.ts +52 -0
  158. package/dist/planning-phase.d.ts.map +1 -0
  159. package/dist/planning-phase.js +444 -0
  160. package/dist/planning-phase.js.map +1 -0
  161. package/dist/planning-prompt.d.ts +64 -0
  162. package/dist/planning-prompt.d.ts.map +1 -0
  163. package/dist/planning-prompt.js +251 -0
  164. package/dist/planning-prompt.js.map +1 -0
  165. package/dist/planning.d.ts +16 -0
  166. package/dist/planning.d.ts.map +1 -0
  167. package/dist/planning.js +17 -0
  168. package/dist/planning.js.map +1 -0
  169. package/dist/process-runner.d.ts +41 -0
  170. package/dist/process-runner.d.ts.map +1 -0
  171. package/dist/process-runner.js +81 -0
  172. package/dist/process-runner.js.map +1 -0
  173. package/dist/product-config.d.ts +34 -0
  174. package/dist/product-config.d.ts.map +1 -0
  175. package/dist/product-config.js +43 -0
  176. package/dist/product-config.js.map +1 -0
  177. package/dist/queries/cycle-evaluations.d.ts +23 -0
  178. package/dist/queries/cycle-evaluations.d.ts.map +1 -0
  179. package/dist/queries/cycle-evaluations.js +37 -0
  180. package/dist/queries/cycle-evaluations.js.map +1 -0
  181. package/dist/queries/escalations.d.ts +30 -0
  182. package/dist/queries/escalations.d.ts.map +1 -0
  183. package/dist/queries/escalations.js +42 -0
  184. package/dist/queries/escalations.js.map +1 -0
  185. package/dist/queries/execution-units.d.ts +76 -0
  186. package/dist/queries/execution-units.d.ts.map +1 -0
  187. package/dist/queries/execution-units.js +109 -0
  188. package/dist/queries/execution-units.js.map +1 -0
  189. package/dist/queries/gate-results.d.ts +32 -0
  190. package/dist/queries/gate-results.d.ts.map +1 -0
  191. package/dist/queries/gate-results.js +44 -0
  192. package/dist/queries/gate-results.js.map +1 -0
  193. package/dist/queries/instances.d.ts +51 -0
  194. package/dist/queries/instances.d.ts.map +1 -0
  195. package/dist/queries/instances.js +77 -0
  196. package/dist/queries/instances.js.map +1 -0
  197. package/dist/queries/sessions.d.ts +50 -0
  198. package/dist/queries/sessions.d.ts.map +1 -0
  199. package/dist/queries/sessions.js +81 -0
  200. package/dist/queries/sessions.js.map +1 -0
  201. package/dist/queries/shared.d.ts +38 -0
  202. package/dist/queries/shared.d.ts.map +1 -0
  203. package/dist/queries/shared.js +119 -0
  204. package/dist/queries/shared.js.map +1 -0
  205. package/dist/queries/specs.d.ts +12 -0
  206. package/dist/queries/specs.d.ts.map +1 -0
  207. package/dist/queries/specs.js +21 -0
  208. package/dist/queries/specs.js.map +1 -0
  209. package/dist/queries/strategies.d.ts +14 -0
  210. package/dist/queries/strategies.d.ts.map +1 -0
  211. package/dist/queries/strategies.js +18 -0
  212. package/dist/queries/strategies.js.map +1 -0
  213. package/dist/queries/work-units.d.ts +42 -0
  214. package/dist/queries/work-units.d.ts.map +1 -0
  215. package/dist/queries/work-units.js +57 -0
  216. package/dist/queries/work-units.js.map +1 -0
  217. package/dist/queries/workflows.d.ts +29 -0
  218. package/dist/queries/workflows.d.ts.map +1 -0
  219. package/dist/queries/workflows.js +103 -0
  220. package/dist/queries/workflows.js.map +1 -0
  221. package/dist/remediation-units.d.ts +40 -0
  222. package/dist/remediation-units.d.ts.map +1 -0
  223. package/dist/remediation-units.js +263 -0
  224. package/dist/remediation-units.js.map +1 -0
  225. package/dist/replanning.d.ts +72 -0
  226. package/dist/replanning.d.ts.map +1 -0
  227. package/dist/replanning.js +403 -0
  228. package/dist/replanning.js.map +1 -0
  229. package/dist/resource-limits.d.ts +62 -0
  230. package/dist/resource-limits.d.ts.map +1 -0
  231. package/dist/resource-limits.js +322 -0
  232. package/dist/resource-limits.js.map +1 -0
  233. package/dist/scheduler.d.ts +98 -0
  234. package/dist/scheduler.d.ts.map +1 -0
  235. package/dist/scheduler.js +203 -0
  236. package/dist/scheduler.js.map +1 -0
  237. package/dist/session-adapter.d.ts +89 -0
  238. package/dist/session-adapter.d.ts.map +1 -0
  239. package/dist/session-adapter.js +108 -0
  240. package/dist/session-adapter.js.map +1 -0
  241. package/dist/sop-generator.d.ts +29 -0
  242. package/dist/sop-generator.d.ts.map +1 -0
  243. package/dist/sop-generator.js +235 -0
  244. package/dist/sop-generator.js.map +1 -0
  245. package/dist/spec-profiles.d.ts +41 -0
  246. package/dist/spec-profiles.d.ts.map +1 -0
  247. package/dist/spec-profiles.js +131 -0
  248. package/dist/spec-profiles.js.map +1 -0
  249. package/dist/strategy-design-graph.d.ts +23 -0
  250. package/dist/strategy-design-graph.d.ts.map +1 -0
  251. package/dist/strategy-design-graph.js +205 -0
  252. package/dist/strategy-design-graph.js.map +1 -0
  253. package/dist/strategy-design-prompt.d.ts +28 -0
  254. package/dist/strategy-design-prompt.d.ts.map +1 -0
  255. package/dist/strategy-design-prompt.js +108 -0
  256. package/dist/strategy-design-prompt.js.map +1 -0
  257. package/dist/strategy-design-schema.d.ts +767 -0
  258. package/dist/strategy-design-schema.d.ts.map +1 -0
  259. package/dist/strategy-design-schema.js +126 -0
  260. package/dist/strategy-design-schema.js.map +1 -0
  261. package/dist/strategy-design.d.ts +69 -0
  262. package/dist/strategy-design.d.ts.map +1 -0
  263. package/dist/strategy-design.js +411 -0
  264. package/dist/strategy-design.js.map +1 -0
  265. package/dist/strategy-gating.d.ts +31 -0
  266. package/dist/strategy-gating.d.ts.map +1 -0
  267. package/dist/strategy-gating.js +276 -0
  268. package/dist/strategy-gating.js.map +1 -0
  269. package/dist/team-prompt-builder.d.ts +47 -0
  270. package/dist/team-prompt-builder.d.ts.map +1 -0
  271. package/dist/team-prompt-builder.js +362 -0
  272. package/dist/team-prompt-builder.js.map +1 -0
  273. package/dist/trace-engine.d.ts +40 -0
  274. package/dist/trace-engine.d.ts.map +1 -0
  275. package/dist/trace-engine.js +344 -0
  276. package/dist/trace-engine.js.map +1 -0
  277. package/dist/types.d.ts +612 -0
  278. package/dist/types.d.ts.map +1 -0
  279. package/dist/types.js +9 -0
  280. package/dist/types.js.map +1 -0
  281. package/dist/unit-session-lifecycle.d.ts +78 -0
  282. package/dist/unit-session-lifecycle.d.ts.map +1 -0
  283. package/dist/unit-session-lifecycle.js +141 -0
  284. package/dist/unit-session-lifecycle.js.map +1 -0
  285. package/dist/unit-session.d.ts +30 -0
  286. package/dist/unit-session.d.ts.map +1 -0
  287. package/dist/unit-session.js +370 -0
  288. package/dist/unit-session.js.map +1 -0
  289. package/dist/watchdogs.d.ts +33 -0
  290. package/dist/watchdogs.d.ts.map +1 -0
  291. package/dist/watchdogs.js +170 -0
  292. package/dist/watchdogs.js.map +1 -0
  293. package/dist/work-unit-scheduler.d.ts +34 -0
  294. package/dist/work-unit-scheduler.d.ts.map +1 -0
  295. package/dist/work-unit-scheduler.js +91 -0
  296. package/dist/work-unit-scheduler.js.map +1 -0
  297. package/dist/workflow-transition.d.ts +90 -0
  298. package/dist/workflow-transition.d.ts.map +1 -0
  299. package/dist/workflow-transition.js +340 -0
  300. package/dist/workflow-transition.js.map +1 -0
  301. package/package.json +65 -0
@@ -0,0 +1,344 @@
1
+ /**
2
+ * Cross-boundary dependency trace engine.
3
+ *
4
+ * Scans source files for references (e.g. API call names, import symbols)
5
+ * and target files for registrations (e.g. handler names, exports), then
6
+ * reports any references that have no matching target. This catches gaps
7
+ * that are invisible to compilation and unit tests but fatal at runtime.
8
+ */
9
+ import { readFileSync, readdirSync, statSync } from 'node:fs';
10
+ import { join, relative } from 'node:path';
11
+ // ============================================================================
12
+ // Built-in trace check definitions
13
+ // ============================================================================
14
+ const ACTION_HANDLER_TRACE = {
15
+ name: 'API action -> handler',
16
+ type: 'action_handler',
17
+ sourceGlob: 'packages/*/src/queries/**/*.ts',
18
+ sourcePattern: "callApi(?:<[^>]*>)?\\s*\\(\\s*['\"]([^'\"]+)['\"]",
19
+ targetGlob: 'supabase/functions/*/handlers/**/*.ts',
20
+ targetPattern: "'([^']+)'\\s*:",
21
+ description: 'Every callApi action name must have a registered handler in the edge function',
22
+ };
23
+ const IMPORT_EXPORT_TRACE = {
24
+ name: 'Import -> Export resolution',
25
+ type: 'import_export',
26
+ sourceGlob: 'packages/*/src/**/*.ts',
27
+ sourcePattern: "import\\s*\\{([^}]+)\\}\\s*from\\s*['\"]([^'\"]+)['\"]",
28
+ targetGlob: 'packages/*/src/**/*.ts',
29
+ targetPattern: "export\\s+(?:function|const|class|type|interface|enum)\\s+(\\w+)",
30
+ description: 'Named imports must resolve to actual exports in the target module',
31
+ };
32
+ /** Map of built-in trace type identifiers to their default TraceCheck definitions. */
33
+ export const BUILTIN_TRACES = {
34
+ action_handler: ACTION_HANDLER_TRACE,
35
+ import_export: IMPORT_EXPORT_TRACE,
36
+ };
37
+ // ============================================================================
38
+ // Constants
39
+ // ============================================================================
40
+ const LOG_PREFIX = '[trace]';
41
+ // ============================================================================
42
+ // Configuration resolution
43
+ // ============================================================================
44
+ /**
45
+ * Resolve an array of TraceCheckConfig entries into fully populated TraceCheck
46
+ * objects by merging user config with built-in defaults.
47
+ *
48
+ * Built-in types fill missing fields from BUILTIN_TRACES. Custom types require
49
+ * all fields to be present.
50
+ */
51
+ export function resolveTraceChecks(configs) {
52
+ const resolved = [];
53
+ for (const cfg of configs) {
54
+ const builtin = BUILTIN_TRACES[cfg.type];
55
+ if (builtin) {
56
+ resolved.push({
57
+ name: cfg.name ?? builtin.name,
58
+ type: cfg.type,
59
+ sourceGlob: cfg.sourceGlob ?? builtin.sourceGlob,
60
+ sourcePattern: cfg.sourcePattern ?? builtin.sourcePattern,
61
+ targetGlob: cfg.targetGlob ?? builtin.targetGlob,
62
+ targetPattern: cfg.targetPattern ?? builtin.targetPattern,
63
+ description: cfg.description ?? builtin.description,
64
+ });
65
+ }
66
+ else if (cfg.type === 'custom') {
67
+ if (!cfg.sourceGlob || !cfg.sourcePattern || !cfg.targetGlob || !cfg.targetPattern) {
68
+ console.warn(`${LOG_PREFIX} Custom trace check "${cfg.name ?? 'unnamed'}" missing required fields, skipping`);
69
+ continue;
70
+ }
71
+ resolved.push({
72
+ name: cfg.name ?? 'Custom trace check',
73
+ type: 'custom',
74
+ sourceGlob: cfg.sourceGlob,
75
+ sourcePattern: cfg.sourcePattern,
76
+ targetGlob: cfg.targetGlob,
77
+ targetPattern: cfg.targetPattern,
78
+ description: cfg.description ?? '',
79
+ });
80
+ }
81
+ else {
82
+ console.warn(`${LOG_PREFIX} Unknown trace check type "${cfg.type}", skipping`);
83
+ }
84
+ }
85
+ return resolved;
86
+ }
87
+ // ============================================================================
88
+ // Glob implementation (simple, no external dependencies)
89
+ // ============================================================================
90
+ /**
91
+ * Simple glob matching for file paths. Supports `*` (single segment) and
92
+ * `**` (recursive descent). Does not support character classes or braces.
93
+ */
94
+ function matchGlob(pattern, filepath) {
95
+ const patternParts = pattern.split('/');
96
+ const pathParts = filepath.split('/');
97
+ return matchParts(patternParts, 0, pathParts, 0);
98
+ }
99
+ function matchParts(pattern, pi, path, fi) {
100
+ while (pi < pattern.length && fi < path.length) {
101
+ const p = pattern[pi];
102
+ if (p === '**') {
103
+ // ** matches zero or more path segments
104
+ // Try matching the rest of the pattern at each remaining position
105
+ for (let i = fi; i <= path.length; i++) {
106
+ if (matchParts(pattern, pi + 1, path, i)) {
107
+ return true;
108
+ }
109
+ }
110
+ return false;
111
+ }
112
+ if (!matchSegment(p, path[fi])) {
113
+ return false;
114
+ }
115
+ pi++;
116
+ fi++;
117
+ }
118
+ // Skip trailing ** patterns (they match empty)
119
+ while (pi < pattern.length && pattern[pi] === '**') {
120
+ pi++;
121
+ }
122
+ return pi === pattern.length && fi === path.length;
123
+ }
124
+ function matchSegment(pattern, segment) {
125
+ // Simple * wildcard matching within a single segment
126
+ if (pattern === '*')
127
+ return true;
128
+ if (!pattern.includes('*')) {
129
+ return pattern === segment;
130
+ }
131
+ // Convert segment pattern to regex
132
+ const regexStr = '^' + pattern.replace(/\*/g, '[^/]*') + '$';
133
+ try {
134
+ return new RegExp(regexStr).test(segment);
135
+ }
136
+ catch {
137
+ return false;
138
+ }
139
+ }
140
+ /**
141
+ * Recursively collect all files under basePath that match the glob pattern.
142
+ */
143
+ export function globFiles(basePath, pattern) {
144
+ const results = [];
145
+ function walk(dir) {
146
+ let entries;
147
+ try {
148
+ entries = readdirSync(dir);
149
+ }
150
+ catch {
151
+ return;
152
+ }
153
+ for (const entry of entries) {
154
+ // Skip common non-source directories
155
+ if (entry === 'node_modules' || entry === '.git' || entry === 'dist') {
156
+ continue;
157
+ }
158
+ const fullPath = join(dir, entry);
159
+ let stat;
160
+ try {
161
+ stat = statSync(fullPath);
162
+ }
163
+ catch {
164
+ continue;
165
+ }
166
+ if (stat.isDirectory()) {
167
+ walk(fullPath);
168
+ }
169
+ else if (stat.isFile()) {
170
+ const relPath = relative(basePath, fullPath);
171
+ if (matchGlob(pattern, relPath)) {
172
+ results.push(relPath);
173
+ }
174
+ }
175
+ }
176
+ }
177
+ walk(basePath);
178
+ return results;
179
+ }
180
+ /**
181
+ * Scan files for regex matches and extract capture group 1 values.
182
+ */
183
+ function scanFiles(basePath, files, pattern) {
184
+ const matches = [];
185
+ for (const file of files) {
186
+ let content;
187
+ try {
188
+ content = readFileSync(join(basePath, file), 'utf-8');
189
+ }
190
+ catch {
191
+ continue;
192
+ }
193
+ const lines = content.split('\n');
194
+ for (let i = 0; i < lines.length; i++) {
195
+ const line = lines[i];
196
+ let match;
197
+ // Reset regex state for each line
198
+ const lineRegex = new RegExp(pattern.source, pattern.flags.replace('g', '') + 'g');
199
+ while ((match = lineRegex.exec(line)) !== null) {
200
+ if (match[1] !== undefined) {
201
+ matches.push({
202
+ value: match[1].trim(),
203
+ file,
204
+ line: i + 1,
205
+ });
206
+ }
207
+ }
208
+ }
209
+ }
210
+ return matches;
211
+ }
212
+ // ============================================================================
213
+ // Public API
214
+ // ============================================================================
215
+ /**
216
+ * Run a single trace check against the codebase at basePath.
217
+ *
218
+ * Globs source and target files, scans for pattern matches, and computes
219
+ * the set difference to find missing targets (failures) and orphaned
220
+ * targets (informational).
221
+ */
222
+ export async function runTraceCheck(check, basePath) {
223
+ const startTime = Date.now();
224
+ // Validate regex patterns
225
+ let sourceRegex;
226
+ let targetRegex;
227
+ try {
228
+ sourceRegex = new RegExp(check.sourcePattern, 'g');
229
+ }
230
+ catch (err) {
231
+ return {
232
+ checkName: check.name,
233
+ passed: false,
234
+ missingTargets: [],
235
+ orphanedTargets: [],
236
+ sourceCount: 0,
237
+ targetCount: 0,
238
+ durationMs: Date.now() - startTime,
239
+ error: `Invalid source pattern: ${err instanceof Error ? err.message : String(err)}`,
240
+ };
241
+ }
242
+ try {
243
+ targetRegex = new RegExp(check.targetPattern, 'g');
244
+ }
245
+ catch (err) {
246
+ return {
247
+ checkName: check.name,
248
+ passed: false,
249
+ missingTargets: [],
250
+ orphanedTargets: [],
251
+ sourceCount: 0,
252
+ targetCount: 0,
253
+ durationMs: Date.now() - startTime,
254
+ error: `Invalid target pattern: ${err instanceof Error ? err.message : String(err)}`,
255
+ };
256
+ }
257
+ // Glob source and target files
258
+ const sourceFiles = globFiles(basePath, check.sourceGlob);
259
+ const targetFiles = globFiles(basePath, check.targetGlob);
260
+ // Scan for matches
261
+ const sourceMatches = scanFiles(basePath, sourceFiles, sourceRegex);
262
+ const targetMatches = scanFiles(basePath, targetFiles, targetRegex);
263
+ // Build target value set
264
+ const targetSet = new Set(targetMatches.map((m) => m.value));
265
+ const sourceSet = new Set(sourceMatches.map((m) => m.value));
266
+ // Compute missing targets (source references with no target)
267
+ const missingTargets = [];
268
+ const seenMissing = new Set();
269
+ for (const src of sourceMatches) {
270
+ if (!targetSet.has(src.value) && !seenMissing.has(src.value)) {
271
+ seenMissing.add(src.value);
272
+ missingTargets.push({
273
+ value: src.value,
274
+ sourceFile: src.file,
275
+ line: src.line,
276
+ });
277
+ }
278
+ }
279
+ // Compute orphaned targets (targets with no source reference)
280
+ const orphanedTargets = targetMatches
281
+ .map((m) => m.value)
282
+ .filter((v) => !sourceSet.has(v))
283
+ .filter((v, i, arr) => arr.indexOf(v) === i); // deduplicate
284
+ const durationMs = Date.now() - startTime;
285
+ const passed = missingTargets.length === 0;
286
+ console.log(`${LOG_PREFIX} ${check.name}: ${passed ? 'PASSED' : 'FAILED'} ` +
287
+ `(${sourceMatches.length} source refs, ${targetMatches.length} targets, ` +
288
+ `${missingTargets.length} missing, ${orphanedTargets.length} orphaned, ${durationMs}ms)`);
289
+ return {
290
+ checkName: check.name,
291
+ passed,
292
+ missingTargets,
293
+ orphanedTargets,
294
+ sourceCount: sourceMatches.length,
295
+ targetCount: targetMatches.length,
296
+ durationMs,
297
+ };
298
+ }
299
+ /**
300
+ * Run multiple trace checks sequentially.
301
+ */
302
+ export async function runTraceChecks(checks, basePath) {
303
+ const results = [];
304
+ for (const check of checks) {
305
+ const result = await runTraceCheck(check, basePath);
306
+ results.push(result);
307
+ }
308
+ return results;
309
+ }
310
+ // ============================================================================
311
+ // Output formatting
312
+ // ============================================================================
313
+ /**
314
+ * Format a trace result as human-readable text for gate output.
315
+ */
316
+ export function formatTraceOutput(result) {
317
+ if (result.error) {
318
+ return `Cross-boundary trace ERROR: ${result.checkName}\n${result.error}`;
319
+ }
320
+ if (result.passed) {
321
+ return (`Cross-boundary trace PASSED: ${result.checkName}\n` +
322
+ `${result.sourceCount} source reference(s), ${result.targetCount} target(s), ` +
323
+ `all resolved (${result.durationMs}ms)`);
324
+ }
325
+ const lines = [
326
+ `Cross-boundary trace FAILED: ${result.checkName}`,
327
+ `Missing targets (${result.missingTargets.length}):`,
328
+ ];
329
+ for (const miss of result.missingTargets) {
330
+ lines.push(` - ${miss.value} (${miss.sourceFile}:${miss.line})`);
331
+ }
332
+ if (result.orphanedTargets.length > 0) {
333
+ lines.push('');
334
+ lines.push(`Orphaned targets (${result.orphanedTargets.length}, informational):`);
335
+ for (const orphan of result.orphanedTargets.slice(0, 10)) {
336
+ lines.push(` - ${orphan}`);
337
+ }
338
+ if (result.orphanedTargets.length > 10) {
339
+ lines.push(` ... and ${result.orphanedTargets.length - 10} more`);
340
+ }
341
+ }
342
+ return lines.join('\n');
343
+ }
344
+ //# sourceMappingURL=trace-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-engine.js","sourceRoot":"","sources":["../src/trace-engine.ts"],"names":[],"mappings":"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"}