@fulmenhq/tsfulmen 0.3.3 → 0.4.0

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 (123) hide show
  1. package/CHANGELOG.md +51 -1
  2. package/README.md +30 -1
  3. package/config/crucible-ts/taxonomy/metrics.yaml +1 -1
  4. package/dist/appidentity/index.js +9 -2209
  5. package/dist/appidentity/index.js.map +1 -1
  6. package/dist/assets/index.d.ts +179 -0
  7. package/dist/assets/index.js +4 -0
  8. package/dist/assets/index.js.map +1 -0
  9. package/dist/bin/prometheus-cli.js +15 -9139
  10. package/dist/bin/prometheus-cli.js.map +1 -1
  11. package/dist/bin/schema-cli.js +4 -6098
  12. package/dist/bin/schema-cli.js.map +1 -1
  13. package/dist/bin/signals-cli.js +15 -1910
  14. package/dist/bin/signals-cli.js.map +1 -1
  15. package/dist/chunk-3HISR2XI.js +36 -0
  16. package/dist/chunk-3HISR2XI.js.map +1 -0
  17. package/dist/chunk-5HZEJGZ5.js +725 -0
  18. package/dist/chunk-5HZEJGZ5.js.map +1 -0
  19. package/dist/chunk-7SVYOPJ3.js +9412 -0
  20. package/dist/chunk-7SVYOPJ3.js.map +1 -0
  21. package/dist/chunk-BCO3FUUO.js +682 -0
  22. package/dist/chunk-BCO3FUUO.js.map +1 -0
  23. package/dist/chunk-BJDL6JEX.js +208 -0
  24. package/dist/chunk-BJDL6JEX.js.map +1 -0
  25. package/dist/chunk-BTUS6PZZ.js +302 -0
  26. package/dist/chunk-BTUS6PZZ.js.map +1 -0
  27. package/dist/chunk-CW4CSNVF.js +410 -0
  28. package/dist/chunk-CW4CSNVF.js.map +1 -0
  29. package/dist/chunk-HIBZ2AY7.js +194 -0
  30. package/dist/chunk-HIBZ2AY7.js.map +1 -0
  31. package/dist/chunk-HS4F3BRR.js +985 -0
  32. package/dist/chunk-HS4F3BRR.js.map +1 -0
  33. package/dist/chunk-HY6JQOFN.js +32 -0
  34. package/dist/chunk-HY6JQOFN.js.map +1 -0
  35. package/dist/chunk-K2FYT43R.js +837 -0
  36. package/dist/chunk-K2FYT43R.js.map +1 -0
  37. package/dist/chunk-K7BMFGQP.js +43 -0
  38. package/dist/chunk-K7BMFGQP.js.map +1 -0
  39. package/dist/chunk-LWAH2UG7.js +103 -0
  40. package/dist/chunk-LWAH2UG7.js.map +1 -0
  41. package/dist/chunk-OHE2AOH4.js +273 -0
  42. package/dist/chunk-OHE2AOH4.js.map +1 -0
  43. package/dist/chunk-P3DNOZOG.js +1488 -0
  44. package/dist/chunk-P3DNOZOG.js.map +1 -0
  45. package/dist/chunk-PQ6TKPUN.js +27 -0
  46. package/dist/chunk-PQ6TKPUN.js.map +1 -0
  47. package/dist/chunk-QCCN6POA.js +211 -0
  48. package/dist/chunk-QCCN6POA.js.map +1 -0
  49. package/dist/chunk-RSLFR4TO.js +631 -0
  50. package/dist/chunk-RSLFR4TO.js.map +1 -0
  51. package/dist/chunk-UP2VWCW5.js +33 -0
  52. package/dist/chunk-UP2VWCW5.js.map +1 -0
  53. package/dist/chunk-W6TQFTTY.js +130 -0
  54. package/dist/chunk-W6TQFTTY.js.map +1 -0
  55. package/dist/chunk-WSMVLWLB.js +269 -0
  56. package/dist/chunk-WSMVLWLB.js.map +1 -0
  57. package/dist/config/index.js +6 -1220
  58. package/dist/config/index.js.map +1 -1
  59. package/dist/crucible/fulpack/index.js +2 -25
  60. package/dist/crucible/fulpack/index.js.map +1 -1
  61. package/dist/crucible/index.js +13 -1129
  62. package/dist/crucible/index.js.map +1 -1
  63. package/dist/docscribe/index.js +2 -680
  64. package/dist/docscribe/index.js.map +1 -1
  65. package/dist/errors/index.js +5 -1831
  66. package/dist/errors/index.js.map +1 -1
  67. package/dist/errors-D7KXV3QW.js +4 -0
  68. package/dist/errors-D7KXV3QW.js.map +1 -0
  69. package/dist/errors-RBJX6ETJ.js +8 -0
  70. package/dist/errors-RBJX6ETJ.js.map +1 -0
  71. package/dist/export-BWRETGYS.js +6 -0
  72. package/dist/export-BWRETGYS.js.map +1 -0
  73. package/dist/foundry/index.js +340 -3949
  74. package/dist/foundry/index.js.map +1 -1
  75. package/dist/foundry/similarity/index.js +3 -134
  76. package/dist/foundry/similarity/index.js.map +1 -1
  77. package/dist/fulencode/index.js +3 -319
  78. package/dist/fulencode/index.js.map +1 -1
  79. package/dist/fulhash/index.js +3 -611
  80. package/dist/fulhash/index.js.map +1 -1
  81. package/dist/fulpack/index.js +3 -1515
  82. package/dist/fulpack/index.js.map +1 -1
  83. package/dist/hash-YOJYVOWH.js +4 -0
  84. package/dist/hash-YOJYVOWH.js.map +1 -0
  85. package/dist/index.d.ts +1 -1
  86. package/dist/index.js +14 -4395
  87. package/dist/index.js.map +1 -1
  88. package/dist/loader-H5K7HSO5.js +9 -0
  89. package/dist/loader-H5K7HSO5.js.map +1 -0
  90. package/dist/logging/index.js +2 -723
  91. package/dist/logging/index.js.map +1 -1
  92. package/dist/pathfinder/index.js +18 -2341
  93. package/dist/pathfinder/index.js.map +1 -1
  94. package/dist/prom-client-PNEBGD3G.js +4801 -0
  95. package/dist/prom-client-PNEBGD3G.js.map +1 -0
  96. package/dist/reports/license-inventory.csv +1 -1
  97. package/dist/schema/index.d.ts +19 -6
  98. package/dist/schema/index.js +4 -6148
  99. package/dist/schema/index.js.map +1 -1
  100. package/dist/signals/index.js +8 -2767
  101. package/dist/signals/index.js.map +1 -1
  102. package/dist/similarity/index.js +3 -134
  103. package/dist/similarity/index.js.map +1 -1
  104. package/dist/telemetry/http/index.js +9 -930
  105. package/dist/telemetry/http/index.js.map +1 -1
  106. package/dist/telemetry/index.js +4 -1561
  107. package/dist/telemetry/index.js.map +1 -1
  108. package/dist/telemetry/prometheus/index.js +7 -8422
  109. package/dist/telemetry/prometheus/index.js.map +1 -1
  110. package/dist/validator-U4CKD2Y3.js +6 -0
  111. package/dist/validator-U4CKD2Y3.js.map +1 -0
  112. package/package.json +5 -1
  113. package/schemas/crucible-ts/library/module-manifest/v1.0.0/module-manifest.schema.json +1 -1
  114. package/schemas/crucible-ts/observability/logging/v1.0.0/definitions.schema.json +1 -1
  115. package/schemas/crucible-ts/observability/logging/v1.0.0/log-event.schema.json +13 -13
  116. package/schemas/crucible-ts/observability/logging/v1.0.0/logger-config.schema.json +2 -2
  117. package/schemas/crucible-ts/observability/logging/v1.0.0/logging-policy.schema.json +1 -1
  118. package/schemas/crucible-ts/observability/logging/v1.0.0/middleware-config.schema.json +2 -2
  119. package/schemas/crucible-ts/observability/logging/v1.0.0/severity-filter.schema.json +3 -3
  120. package/schemas/crucible-ts/upstream/3leaps/crucible/PROVENANCE.md +3 -3
  121. package/schemas/crucible-ts/upstream/3leaps/crucible/docs/catalog/classifiers/README.md +1 -1
  122. package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/classifiers-framework.md +1 -1
  123. package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/data-sensitivity-classification.md +1 -1
@@ -1,933 +1,12 @@
1
- import 'ajv-formats';
2
- import 'child_process';
3
- import { readFile } from 'fs/promises';
4
- import { parse } from 'yaml';
5
- import { join } from 'path';
6
- import 'url';
7
- import 'fast-glob';
8
- import 'ajv';
9
- import 'ajv/dist/2019.js';
10
- import 'ajv/dist/2020.js';
11
- import 'ajv-draft-04';
12
- import 'commander';
13
- import 'crypto';
14
-
15
- var __getOwnPropNames = Object.getOwnPropertyNames;
16
- var __esm = (fn, res) => function __init() {
17
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
18
- };
19
-
20
- // src/appidentity/constants.ts
21
- var init_constants = __esm({
22
- "src/appidentity/constants.ts"() {
23
- }
24
- });
25
- var init_ajv_formats = __esm({
26
- "src/schema/ajv-formats.ts"() {
27
- }
28
- });
29
-
30
- // src/schema/errors.ts
31
- var init_errors = __esm({
32
- "src/schema/errors.ts"() {
33
- }
34
- });
35
-
36
- // src/schema/utils.ts
37
- var init_utils = __esm({
38
- "src/schema/utils.ts"() {
39
- init_errors();
40
- }
41
- });
42
- var init_goneat_bridge = __esm({
43
- "src/schema/goneat-bridge.ts"() {
44
- init_utils();
45
- }
46
- });
47
- var init_normalizer = __esm({
48
- "src/schema/normalizer.ts"() {
49
- init_errors();
50
- }
51
- });
52
- var init_registry = __esm({
53
- "src/schema/registry.ts"() {
54
- init_errors();
55
- }
56
- });
57
-
58
- // src/telemetry/counter.ts
59
- var Counter;
60
- var init_counter = __esm({
61
- "src/telemetry/counter.ts"() {
62
- Counter = class {
63
- constructor(name) {
64
- this.name = name;
65
- }
66
- value = 0;
67
- labeledValues = /* @__PURE__ */ new Map();
68
- /**
69
- * Increment counter by delta (default: 1)
70
- *
71
- * @param delta - Amount to increment (must be non-negative)
72
- * @param labels - Optional label dimensions for this observation
73
- * @throws {Error} If delta is negative
74
- *
75
- * @example
76
- * ```typescript
77
- * counter.inc(); // Increment unlabeled by 1
78
- * counter.inc(5); // Increment unlabeled by 5
79
- * counter.inc(1, { status: '200' }); // Increment labeled instance
80
- * counter.inc(1, { result: 'success' }); // Different label set
81
- * ```
82
- */
83
- inc(delta = 1, labels) {
84
- if (delta < 0) {
85
- throw new Error(`Counter delta must be non-negative, got: ${delta}`);
86
- }
87
- if (labels && Object.keys(labels).length > 0) {
88
- const labelKey = this.serializeLabels(labels);
89
- const current = this.labeledValues.get(labelKey) || 0;
90
- this.labeledValues.set(labelKey, current + delta);
91
- } else {
92
- this.value += delta;
93
- }
94
- }
95
- /**
96
- * Get current counter value (unlabeled)
97
- */
98
- getValue() {
99
- return this.value;
100
- }
101
- /**
102
- * Get all labeled values
103
- * @returns Map of serialized label keys to values
104
- */
105
- getLabeledValues() {
106
- return new Map(this.labeledValues);
107
- }
108
- /**
109
- * Get value for specific label combination
110
- */
111
- getValueForLabels(labels) {
112
- const labelKey = this.serializeLabels(labels);
113
- return this.labeledValues.get(labelKey) || 0;
114
- }
115
- /**
116
- * Reset counter to zero (all label combinations)
117
- */
118
- reset() {
119
- this.value = 0;
120
- this.labeledValues.clear();
121
- }
122
- /**
123
- * Serialize labels to deterministic string key
124
- * Format: key1=value1,key2=value2 (sorted by key)
125
- */
126
- serializeLabels(labels) {
127
- return Object.entries(labels).sort(([a], [b]) => a.localeCompare(b)).map(([k, v]) => `${k}=${v}`).join(",");
128
- }
129
- };
130
- }
131
- });
132
-
133
- // src/telemetry/gauge.ts
134
- var Gauge;
135
- var init_gauge = __esm({
136
- "src/telemetry/gauge.ts"() {
137
- Gauge = class {
138
- constructor(name) {
139
- this.name = name;
140
- }
141
- value = 0;
142
- labeledValues = /* @__PURE__ */ new Map();
143
- /**
144
- * Set gauge to specific value
145
- *
146
- * @param value - New gauge value (can be any number, including negative)
147
- * @param labels - Optional label dimensions for this observation
148
- *
149
- * @example
150
- * ```typescript
151
- * gauge.set(42); // Set unlabeled to 42
152
- * gauge.set(-10); // Negative values allowed
153
- * gauge.set(1, { phase: 'collect' }); // Set labeled instance
154
- * ```
155
- */
156
- set(value, labels) {
157
- if (labels && Object.keys(labels).length > 0) {
158
- const labelKey = this.serializeLabels(labels);
159
- this.labeledValues.set(labelKey, value);
160
- } else {
161
- this.value = value;
162
- }
163
- }
164
- /**
165
- * Increment gauge by delta (default: 1)
166
- *
167
- * @param delta - Amount to increment (can be negative)
168
- * @param labels - Optional label dimensions for this observation
169
- */
170
- inc(delta = 1, labels) {
171
- if (labels && Object.keys(labels).length > 0) {
172
- const labelKey = this.serializeLabels(labels);
173
- const current = this.labeledValues.get(labelKey) || 0;
174
- this.labeledValues.set(labelKey, current + delta);
175
- } else {
176
- this.value += delta;
177
- }
178
- }
179
- /**
180
- * Decrement gauge by delta (default: 1)
181
- *
182
- * @param delta - Amount to decrement (can be negative)
183
- * @param labels - Optional label dimensions for this observation
184
- */
185
- dec(delta = 1, labels) {
186
- if (labels && Object.keys(labels).length > 0) {
187
- const labelKey = this.serializeLabels(labels);
188
- const current = this.labeledValues.get(labelKey) || 0;
189
- this.labeledValues.set(labelKey, current - delta);
190
- } else {
191
- this.value -= delta;
192
- }
193
- }
194
- /**
195
- * Get current gauge value (unlabeled)
196
- */
197
- getValue() {
198
- return this.value;
199
- }
200
- /**
201
- * Get all labeled values
202
- * @returns Map of serialized label keys to values
203
- */
204
- getLabeledValues() {
205
- return new Map(this.labeledValues);
206
- }
207
- /**
208
- * Get value for specific label combination
209
- */
210
- getValueForLabels(labels) {
211
- const labelKey = this.serializeLabels(labels);
212
- return this.labeledValues.get(labelKey) || 0;
213
- }
214
- /**
215
- * Reset gauge to zero (all label combinations)
216
- */
217
- reset() {
218
- this.value = 0;
219
- this.labeledValues.clear();
220
- }
221
- /**
222
- * Serialize labels to deterministic string key
223
- * Format: key1=value1,key2=value2 (sorted by key)
224
- */
225
- serializeLabels(labels) {
226
- return Object.entries(labels).sort(([a], [b]) => a.localeCompare(b)).map(([k, v]) => `${k}=${v}`).join(",");
227
- }
228
- };
229
- }
230
- });
231
- async function getDefaultUnit(name) {
232
- return TaxonomyLoader.getInstance().getDefaultUnit(name);
233
- }
234
- var DEFAULT_MS_BUCKETS, TaxonomyLoader;
235
- var init_taxonomy = __esm({
236
- "src/telemetry/taxonomy.ts"() {
237
- DEFAULT_MS_BUCKETS = [1, 5, 10, 50, 100, 500, 1e3, 5e3, 1e4];
238
- TaxonomyLoader = class _TaxonomyLoader {
239
- static instance;
240
- taxonomy = null;
241
- loadPromise = null;
242
- loadError = null;
243
- constructor() {
244
- }
245
- /**
246
- * Get singleton instance
247
- */
248
- static getInstance() {
249
- if (!_TaxonomyLoader.instance) {
250
- _TaxonomyLoader.instance = new _TaxonomyLoader();
251
- }
252
- return _TaxonomyLoader.instance;
253
- }
254
- /**
255
- * Load taxonomy from YAML file
256
- */
257
- async load() {
258
- if (this.taxonomy !== null) {
259
- return this.taxonomy;
260
- }
261
- if (this.loadError !== null) {
262
- throw this.loadError;
263
- }
264
- if (this.loadPromise) {
265
- return this.loadPromise;
266
- }
267
- this.loadPromise = (async () => {
268
- try {
269
- const taxonomyPath = join(
270
- __dirname,
271
- "..",
272
- "..",
273
- "config",
274
- "crucible-ts",
275
- "taxonomy",
276
- "metrics.yaml"
277
- );
278
- const content = await readFile(taxonomyPath, "utf-8");
279
- this.taxonomy = parse(content);
280
- return this.taxonomy;
281
- } catch (err) {
282
- this.loadError = err instanceof Error ? err : new Error(String(err));
283
- throw new Error(`Failed to load metrics taxonomy: ${this.loadError.message}`);
284
- }
285
- })();
286
- return this.loadPromise;
287
- }
288
- /**
289
- * Get taxonomy (async)
290
- */
291
- async getTaxonomy() {
292
- return this.load();
293
- }
294
- /**
295
- * Get metric definition by name
296
- */
297
- async getMetric(name) {
298
- const taxonomy = await this.load();
299
- return taxonomy.metrics.find((m) => m.name === name);
300
- }
301
- /**
302
- * Get default unit for metric
303
- */
304
- async getDefaultUnit(name) {
305
- const metric = await this.getMetric(name);
306
- return metric?.unit;
307
- }
308
- /**
309
- * Get default histogram buckets for metric
310
- * Returns ADR-0007 buckets for _ms metrics, undefined for others
311
- */
312
- async getDefaultBuckets(name) {
313
- if (name.endsWith("_ms")) {
314
- const taxonomy = await this.load();
315
- return taxonomy.defaults.histogram_buckets.ms_metrics;
316
- }
317
- return void 0;
318
- }
319
- /**
320
- * Check if metric name is valid (exists in taxonomy)
321
- */
322
- async isValidMetricName(name) {
323
- try {
324
- const taxonomy = await this.load();
325
- return taxonomy.metrics.some((m) => m.name === name);
326
- } catch {
327
- return false;
328
- }
329
- }
330
- /**
331
- * Reset loader state (for testing)
332
- * @internal
333
- */
334
- static _reset() {
335
- _TaxonomyLoader.instance = new _TaxonomyLoader();
336
- }
337
- };
338
- }
339
- });
340
-
341
- // src/telemetry/histogram.ts
342
- var Histogram;
343
- var init_histogram = __esm({
344
- "src/telemetry/histogram.ts"() {
345
- init_taxonomy();
346
- Histogram = class {
347
- constructor(name, options) {
348
- this.name = name;
349
- if (options?.buckets) {
350
- this.buckets = [...options.buckets].sort((a, b) => a - b);
351
- } else if (name.endsWith("_ms") || name.endsWith("_seconds")) {
352
- this.buckets = [...DEFAULT_MS_BUCKETS];
353
- } else {
354
- this.buckets = [];
355
- }
356
- for (const bucket of this.buckets) {
357
- this.bucketCounts.set(bucket, 0);
358
- }
359
- }
360
- count = 0;
361
- sum = 0;
362
- bucketCounts = /* @__PURE__ */ new Map();
363
- labeledStates = /* @__PURE__ */ new Map();
364
- buckets;
365
- /**
366
- * Record an observation
367
- *
368
- * @param value - Value to observe (typically a duration in ms or seconds)
369
- * @param labels - Optional label dimensions for this observation
370
- *
371
- * @example
372
- * ```typescript
373
- * const start = performance.now();
374
- * // ... operation ...
375
- * histogram.observe(performance.now() - start);
376
- * histogram.observe(duration, { phase: 'collect', result: 'success' });
377
- * ```
378
- */
379
- observe(value, labels) {
380
- if (labels && Object.keys(labels).length > 0) {
381
- const labelKey = this.serializeLabels(labels);
382
- let state = this.labeledStates.get(labelKey);
383
- if (!state) {
384
- state = {
385
- count: 0,
386
- sum: 0,
387
- bucketCounts: /* @__PURE__ */ new Map()
388
- };
389
- for (const bucket of this.buckets) {
390
- state.bucketCounts.set(bucket, 0);
391
- }
392
- this.labeledStates.set(labelKey, state);
393
- }
394
- state.count++;
395
- state.sum += value;
396
- for (const bucket of this.buckets) {
397
- if (value <= bucket) {
398
- state.bucketCounts.set(bucket, (state.bucketCounts.get(bucket) || 0) + 1);
399
- }
400
- }
401
- } else {
402
- this.count++;
403
- this.sum += value;
404
- for (const bucket of this.buckets) {
405
- if (value <= bucket) {
406
- this.bucketCounts.set(bucket, (this.bucketCounts.get(bucket) || 0) + 1);
407
- }
408
- }
409
- }
410
- }
411
- /**
412
- * Get histogram summary
413
- *
414
- * Returns OTLP-compatible histogram summary with cumulative bucket counts.
415
- */
416
- getSummary() {
417
- const buckets = this.buckets.map((le) => ({
418
- le,
419
- count: this.bucketCounts.get(le) || 0
420
- }));
421
- return {
422
- count: this.count,
423
- sum: this.sum,
424
- buckets
425
- };
426
- }
427
- /**
428
- * Get current observation count
429
- */
430
- getCount() {
431
- return this.count;
432
- }
433
- /**
434
- * Get sum of all observed values
435
- */
436
- getSum() {
437
- return this.sum;
438
- }
439
- /**
440
- * Get average of observed values
441
- */
442
- getAverage() {
443
- return this.count > 0 ? this.sum / this.count : 0;
444
- }
445
- /**
446
- * Get all labeled summaries
447
- * @returns Map of serialized label keys to histogram summaries
448
- */
449
- getLabeledSummaries() {
450
- const summaries = /* @__PURE__ */ new Map();
451
- for (const [labelKey, state] of this.labeledStates) {
452
- const buckets = this.buckets.map((le) => ({
453
- le,
454
- count: state.bucketCounts.get(le) || 0
455
- }));
456
- summaries.set(labelKey, {
457
- count: state.count,
458
- sum: state.sum,
459
- buckets
460
- });
461
- }
462
- return summaries;
463
- }
464
- /**
465
- * Get summary for specific label combination
466
- */
467
- getSummaryForLabels(labels) {
468
- const labelKey = this.serializeLabels(labels);
469
- const state = this.labeledStates.get(labelKey);
470
- if (!state) {
471
- return null;
472
- }
473
- const buckets = this.buckets.map((le) => ({
474
- le,
475
- count: state.bucketCounts.get(le) || 0
476
- }));
477
- return {
478
- count: state.count,
479
- sum: state.sum,
480
- buckets
481
- };
482
- }
483
- /**
484
- * Reset histogram to initial state (all label combinations)
485
- */
486
- reset() {
487
- this.count = 0;
488
- this.sum = 0;
489
- for (const bucket of this.buckets) {
490
- this.bucketCounts.set(bucket, 0);
491
- }
492
- this.labeledStates.clear();
493
- }
494
- /**
495
- * Serialize labels to deterministic string key
496
- * Format: key1=value1,key2=value2 (sorted by key)
497
- */
498
- serializeLabels(labels) {
499
- return Object.entries(labels).sort(([a], [b]) => a.localeCompare(b)).map(([k, v]) => `${k}=${v}`).join(",");
500
- }
501
- };
502
- }
503
- });
504
-
505
- // src/telemetry/registry.ts
506
- var MetricsRegistry;
507
- var init_registry2 = __esm({
508
- "src/telemetry/registry.ts"() {
509
- init_counter();
510
- init_gauge();
511
- init_histogram();
512
- init_taxonomy();
513
- MetricsRegistry = class {
514
- counters = /* @__PURE__ */ new Map();
515
- gauges = /* @__PURE__ */ new Map();
516
- histograms = /* @__PURE__ */ new Map();
517
- /**
518
- * Get or create a counter
519
- *
520
- * @param name - Metric name from taxonomy
521
- * @returns Counter instance
522
- *
523
- * @example
524
- * ```typescript
525
- * const counter = registry.counter('schema_validations');
526
- * counter.inc();
527
- * ```
528
- */
529
- counter(name) {
530
- let counter = this.counters.get(name);
531
- if (!counter) {
532
- counter = new Counter(name);
533
- this.counters.set(name, counter);
534
- }
535
- return counter;
536
- }
537
- /**
538
- * Get or create a gauge
539
- *
540
- * @param name - Metric name from taxonomy
541
- * @returns Gauge instance
542
- *
543
- * @example
544
- * ```typescript
545
- * const gauge = registry.gauge('foundry_lookup_count');
546
- * gauge.set(42);
547
- * ```
548
- */
549
- gauge(name) {
550
- let gauge = this.gauges.get(name);
551
- if (!gauge) {
552
- gauge = new Gauge(name);
553
- this.gauges.set(name, gauge);
554
- }
555
- return gauge;
556
- }
557
- /**
558
- * Get or create a histogram
559
- *
560
- * @param name - Metric name from taxonomy
561
- * @param options - Optional histogram options
562
- * @returns Histogram instance
563
- *
564
- * @example
565
- * ```typescript
566
- * // Auto-applies ADR-0007 buckets for _ms metrics
567
- * const histogram = registry.histogram('config_load_ms');
568
- * histogram.observe(42.5);
569
- *
570
- * // Custom buckets
571
- * const custom = registry.histogram('custom_metric', {
572
- * buckets: [10, 50, 100, 500, 1000]
573
- * });
574
- * ```
575
- */
576
- histogram(name, options) {
577
- let histogram = this.histograms.get(name);
578
- if (!histogram) {
579
- histogram = new Histogram(name, options);
580
- this.histograms.set(name, histogram);
581
- }
582
- return histogram;
583
- }
584
- /**
585
- * Export all metrics as events
586
- *
587
- * Returns array of schema-compliant MetricsEvent objects.
588
- * Does not clear metrics (use flush() to clear after export).
589
- *
590
- * @returns Promise resolving to array of metrics events
591
- *
592
- * @example
593
- * ```typescript
594
- * const events = await registry.export();
595
- * console.log(JSON.stringify(events, null, 2));
596
- * ```
597
- */
598
- async export() {
599
- const events = [];
600
- const timestamp = (/* @__PURE__ */ new Date()).toISOString();
601
- for (const [name, counter] of this.counters) {
602
- const unit = await getDefaultUnit(name);
603
- events.push({
604
- timestamp,
605
- name,
606
- value: counter.getValue(),
607
- unit
608
- });
609
- for (const [labelKey, value] of counter.getLabeledValues()) {
610
- if (value > 0) {
611
- const tags = this.deserializeLabels(labelKey);
612
- events.push({
613
- timestamp,
614
- name,
615
- value,
616
- tags,
617
- unit
618
- });
619
- }
620
- }
621
- }
622
- for (const [name, gauge] of this.gauges) {
623
- const unit = await getDefaultUnit(name);
624
- events.push({
625
- timestamp,
626
- name,
627
- value: gauge.getValue(),
628
- unit
629
- });
630
- for (const [labelKey, value] of gauge.getLabeledValues()) {
631
- const tags = this.deserializeLabels(labelKey);
632
- events.push({
633
- timestamp,
634
- name,
635
- value,
636
- tags,
637
- unit
638
- });
639
- }
640
- }
641
- for (const [name, histogram] of this.histograms) {
642
- const unit = await getDefaultUnit(name);
643
- events.push({
644
- timestamp,
645
- name,
646
- value: histogram.getSummary(),
647
- unit
648
- });
649
- for (const [labelKey, summary] of histogram.getLabeledSummaries()) {
650
- if (summary.count > 0) {
651
- const tags = this.deserializeLabels(labelKey);
652
- events.push({
653
- timestamp,
654
- name,
655
- value: summary,
656
- tags,
657
- unit
658
- });
659
- }
660
- }
661
- }
662
- return events;
663
- }
664
- /**
665
- * Deserialize label key back to tags object
666
- * Format: key1=value1,key2=value2 → {key1: "value1", key2: "value2"}
667
- */
668
- deserializeLabels(labelKey) {
669
- if (!labelKey) {
670
- return {};
671
- }
672
- const tags = {};
673
- for (const pair of labelKey.split(",")) {
674
- const [key, value] = pair.split("=");
675
- if (key && value) {
676
- tags[key] = value;
677
- }
678
- }
679
- return tags;
680
- }
681
- /**
682
- * Export and clear all metrics
683
- *
684
- * Exports metrics as events, optionally emits them via logger,
685
- * then resets all metrics to zero.
686
- *
687
- * @param options - Flush options
688
- * @returns Promise resolving to array of exported events
689
- *
690
- * @example
691
- * ```typescript
692
- * // Export and clear
693
- * const events = await registry.flush();
694
- *
695
- * // Export, emit to logger, and clear
696
- * const events = await registry.flush({
697
- * emit: (events) => console.log(JSON.stringify(events))
698
- * });
699
- * ```
700
- */
701
- async flush(options) {
702
- const events = await this.export();
703
- try {
704
- if (options?.emit) {
705
- options.emit(events);
706
- }
707
- } finally {
708
- this.clear();
709
- }
710
- return events;
711
- }
712
- /**
713
- * Clear all metrics (reset to zero)
714
- *
715
- * Resets all counters, gauges, and histograms to their initial state.
716
- */
717
- clear() {
718
- for (const counter of this.counters.values()) {
719
- counter.reset();
720
- }
721
- for (const gauge of this.gauges.values()) {
722
- gauge.reset();
723
- }
724
- for (const histogram of this.histograms.values()) {
725
- histogram.reset();
726
- }
727
- }
728
- /**
729
- * Get all registered metric names
730
- *
731
- * Returns array of all metric names that have been accessed
732
- * (counters, gauges, or histograms).
733
- */
734
- getMetricNames() {
735
- const names = /* @__PURE__ */ new Set();
736
- for (const name of this.counters.keys()) {
737
- names.add(name);
738
- }
739
- for (const name of this.gauges.keys()) {
740
- names.add(name);
741
- }
742
- for (const name of this.histograms.keys()) {
743
- names.add(name);
744
- }
745
- return Array.from(names);
746
- }
747
- /**
748
- * Get total count of registered metrics
749
- */
750
- getMetricCount() {
751
- return this.counters.size + this.gauges.size + this.histograms.size;
752
- }
753
- };
754
- }
755
- });
756
-
757
- // src/telemetry/types.ts
758
- var init_types = __esm({
759
- "src/telemetry/types.ts"() {
760
- }
761
- });
762
-
763
- // src/telemetry/validators.ts
764
- var init_validators = __esm({
765
- "src/telemetry/validators.ts"() {
766
- init_schema();
767
- }
768
- });
769
-
770
- // src/telemetry/index.ts
771
- var metrics;
772
- var init_telemetry = __esm({
773
- "src/telemetry/index.ts"() {
774
- init_registry2();
775
- init_registry2();
776
- init_counter();
777
- init_gauge();
778
- init_histogram();
779
- init_taxonomy();
780
- init_types();
781
- init_validators();
782
- metrics = new MetricsRegistry();
783
- }
784
- });
785
- var init_validator = __esm({
786
- "src/schema/validator.ts"() {
787
- init_telemetry();
788
- init_ajv_formats();
789
- init_errors();
790
- init_registry();
791
- init_utils();
792
- }
793
- });
794
- var init_cli = __esm({
795
- "src/schema/cli.ts"() {
796
- init_goneat_bridge();
797
- init_normalizer();
798
- init_registry();
799
- init_utils();
800
- init_validator();
801
- }
802
- });
803
- var init_export = __esm({
804
- "src/schema/export.ts"() {
805
- init_errors();
806
- init_registry();
807
- init_validator();
808
- }
809
- });
810
-
811
- // src/schema/index.ts
812
- var init_schema = __esm({
813
- "src/schema/index.ts"() {
814
- init_ajv_formats();
815
- init_cli();
816
- init_errors();
817
- init_export();
818
- init_goneat_bridge();
819
- init_normalizer();
820
- init_registry();
821
- init_utils();
822
- init_validator();
823
- }
824
- });
825
- var init_correlation = __esm({
826
- "src/errors/correlation.ts"() {
827
- }
828
- });
829
-
830
- // src/errors/severity.ts
831
- var init_severity = __esm({
832
- "src/errors/severity.ts"() {
833
- }
834
- });
835
-
836
- // src/errors/serialization.ts
837
- var init_serialization = __esm({
838
- "src/errors/serialization.ts"() {
839
- init_severity();
840
- }
841
- });
842
-
843
- // src/errors/validators.ts
844
- var init_validators2 = __esm({
845
- "src/errors/validators.ts"() {
846
- init_schema();
847
- }
848
- });
849
-
850
- // src/errors/fulmen-error.ts
851
- var init_fulmen_error = __esm({
852
- "src/errors/fulmen-error.ts"() {
853
- init_serialization();
854
- init_severity();
855
- init_validators2();
856
- }
857
- });
858
-
859
- // src/errors/index.ts
860
- var init_errors2 = __esm({
861
- "src/errors/index.ts"() {
862
- init_correlation();
863
- init_fulmen_error();
864
- init_serialization();
865
- init_severity();
866
- init_validators2();
867
- }
868
- });
869
-
870
- // src/appidentity/errors.ts
871
- var init_errors3 = __esm({
872
- "src/appidentity/errors.ts"() {
873
- init_errors2();
874
- }
875
- });
876
- var init_embedded = __esm({
877
- "src/appidentity/embedded.ts"() {
878
- init_schema();
879
- init_constants();
880
- init_errors3();
881
- }
882
- });
883
-
884
- // src/appidentity/cache.ts
885
- function getCachedIdentity() {
886
- return cachedIdentity;
887
- }
888
- var cachedIdentity;
889
- var init_cache = __esm({
890
- "src/appidentity/cache.ts"() {
891
- cachedIdentity = null;
892
- }
893
- });
894
- var init_discovery = __esm({
895
- "src/appidentity/discovery.ts"() {
896
- init_constants();
897
- init_errors3();
898
- }
899
- });
900
- var init_loader = __esm({
901
- "src/appidentity/loader.ts"() {
902
- init_schema();
903
- init_cache();
904
- init_constants();
905
- init_discovery();
906
- init_embedded();
907
- init_errors3();
908
- }
909
- });
910
-
911
- // src/appidentity/runtime.ts
912
- var init_runtime = __esm({
913
- "src/appidentity/runtime.ts"() {
914
- }
915
- });
916
-
917
- // src/appidentity/index.ts
918
- init_constants();
919
- init_embedded();
920
- init_errors3();
921
-
922
- // src/appidentity/helpers.ts
923
- init_loader();
924
-
925
- // src/appidentity/index.ts
926
- init_loader();
927
- init_runtime();
928
-
929
- // src/telemetry/http/index.ts
930
- init_telemetry();
1
+ import '../../chunk-K7BMFGQP.js';
2
+ import { getCachedIdentity } from '../../chunk-BJDL6JEX.js';
3
+ import '../../chunk-W6TQFTTY.js';
4
+ import '../../chunk-HY6JQOFN.js';
5
+ import '../../chunk-CW4CSNVF.js';
6
+ import { metrics } from '../../chunk-7SVYOPJ3.js';
7
+ import '../../chunk-QCCN6POA.js';
8
+ import '../../chunk-BTUS6PZZ.js';
9
+ import '../../chunk-UP2VWCW5.js';
931
10
 
932
11
  // src/telemetry/http/route-normalizer.ts
933
12
  var STATIC_SEGMENTS = /* @__PURE__ */ new Set([