log10x-mcp 1.30.20 → 1.30.21

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.
@@ -1647,8 +1647,10 @@ To configure advanced options (optional) for the Compiler app, [:material-cog: E
1647
1647
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
1648
1648
  jarFiles: []
1649
1649
 
1650
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
1651
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
1650
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
1651
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
1652
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
1653
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
1652
1654
 
1653
1655
  # specifies a list of launch arguments that are disallowed from either command line or user config files.
1654
1656
  disabledArgs: []
@@ -6,7 +6,7 @@ icon: "material/greater-than"
6
6
 
7
7
  ---
8
8
 
9
- Search and visualize [compact](https://doc.log10x.com/run/transform/#compact) events in Splunk; the original lines expand back exactly at search time. This [open-source app](https://github.com/log-10x/splunk-app){target="_blank"} transparently expands compact events at search time for interactive queries and dashboards, and compiles scheduled alerts at save time so they run natively, while reducing ingested volume.
9
+ Search and visualize [compact](https://doc.log10x.com/run/transform/#compact) events in Splunk; the original lines expand back exactly at search time. This [open-source app](https://github.com/log-10x/splunk-app){target="_blank"} expands compact events at search time: classic dashboards keep their panels unchanged, the search bar wraps a query in one command, and scheduled alerts compile once at save time so the scheduler runs them natively.
10
10
 
11
11
  Use the [Reporter](https://doc.log10x.com/apps/reporter/) (DaemonSet, pre-ingestion) or the [MCP server](https://github.com/log-10x/log10x-mcp){target="_blank"}'s SIEM-sample tool (agentless, via Splunk REST API) to identify optimization opportunities in your existing Splunk data.
12
12
 
@@ -39,7 +39,9 @@ The app includes a built-in analytics dashboard providing real-time visibility i
39
39
 
40
40
  ## :material-lightbulb-outline: How It Works
41
41
 
42
- The app intercepts search requests and automatically expands [compact events](https://doc.log10x.com/run/transform/#compact) before displaying results. Users search and build dashboards exactly as before, on the original, fully expanded data; scheduled alerts are compiled once at save time (see below), then run the same way.
42
+ A [compact event](https://doc.log10x.com/run/transform/#compact) carries a template hash and the event's variable values. The constant words live in the KV Store, so the app puts them back at search time and re-applies the search to the expanded lines.
43
+
44
+ Classic dashboards are rewritten in the browser and keep their panels unchanged. Splunk's search page loads no app JavaScript, so a query typed there is wrapped in the `tenxsearch` command, which runs the same rewrite server-side. Scheduled alerts compile once at save time and then run as ordinary saved searches.
43
45
 
44
46
  Compact mode encodes the entire event for Splunk, including the Kubernetes metadata, into a single compact line. Splunk bills against uncompressed ingest volume, so compacting everything maximizes license-cost reduction. The Receiver uses a different mode for Elasticsearch from the same forwarder pipeline; there, only the log message is encoded so plugin queries on metadata still work. The [splunk-app README](https://github.com/log-10x/splunk-app#receiver-side-configuration){target="_blank"} covers the Receiver setting.
45
47
 
@@ -76,14 +78,15 @@ graph LR
76
78
 
77
79
  ### :material-magnify: Search Flow
78
80
 
79
- Searches are transparently transformed to [expand](https://doc.log10x.com/run/transform/#expand) compact events:
81
+ Two paths reach the same rewrite, then [expand](https://doc.log10x.com/run/transform/#expand) the events:
80
82
 
81
83
  <div style="text-align: center;">
82
84
 
83
85
  ```mermaid
84
86
  graph LR
85
- E["<div style='font-size: 14px;'>👤 User</div><div style='font-size: 10px;'>Search</div>"] --> F["<div style='font-size: 14px;'>🪝 Hook</div><div style='font-size: 10px;'>Intercept</div>"]
86
- F --> G["<div style='font-size: 14px;'>🔄 Transform</div><div style='font-size: 10px;'>Add Macro</div>"]
87
+ E["<div style='font-size: 14px;'>📊 Dashboard</div><div style='font-size: 10px;'>Panel SPL</div>"] --> F["<div style='font-size: 14px;'>🪝 Hook</div><div style='font-size: 10px;'>Intercept</div>"]
88
+ E2["<div style='font-size: 14px;'>👤 Search Bar</div><div style='font-size: 10px;'>tenxsearch</div>"] --> G
89
+ F --> G["<div style='font-size: 14px;'>🔄 Transform</div><div style='font-size: 10px;'>Prefilter + Macro</div>"]
87
90
  G --> H["<div style='font-size: 14px;'>📖 Expand</div><div style='font-size: 10px;'>Expand</div>"]
88
91
  H --> I["<div style='font-size: 14px;'>📊 Results</div><div style='font-size: 10px;'>Full Data</div>"]
89
92
 
@@ -91,22 +94,22 @@ graph LR
91
94
  classDef hook fill:#f59e0b,stroke:#d97706,color:#ffffff,stroke-width:2px,rx:8,ry:8
92
95
  classDef result fill:#ea580c88,stroke:#c2410c,color:#ffffff,stroke-width:2px,rx:8,ry:8
93
96
 
94
- class E user
97
+ class E,E2 user
95
98
  class F,G hook
96
99
  class H,I result
97
100
  ```
98
101
 
99
102
  </div>
100
103
 
101
- 👤 **User**: Submits search query through Splunk UI or API
104
+ 📊 **Dashboard**: `dashboard.js` loads on every classic dashboard in the app carrying it and points the panel's search at the app's REST endpoint, via `$.ajaxSetup`
102
105
 
103
- 🪝 **Hook**: JavaScript `dashboard.js` intercepts `/search/jobs` requests via `$.ajaxSetup`
106
+ 👤 **Search Bar**: `| tenxsearch searchstring="..."` runs the same rewrite server-side, and works in saved searches and the REST API too
104
107
 
105
- 🔄 **Transform**: REST handler transforms SPL to include `tenx-inflate` macro
108
+ 🔄 **Transform**: each search word is resolved against the templates, and the SPL becomes a hash prefilter plus the `tenx-inflate` macro
106
109
 
107
- 📖 **Expand**: Macro joins [compact events](https://doc.log10x.com/run/transform/#compact) with templates from KV Store
110
+ 📖 **Expand**: the macro joins [compact events](https://doc.log10x.com/run/transform/#compact) with templates from the KV Store
108
111
 
109
- 📊 **Results**: Fully expanded events returned with original field names and values
112
+ 📊 **Results**: fully expanded events, with the original search re-applied so only true matches remain
110
113
 
111
114
  **Scheduled alerts** run server-side, where the browser hook never fires. They are instead compiled once at save time into a native saved search (a template-hash prefilter plus the [`tenx-inflate`](https://github.com/log-10x/splunk-app) macro), so the scheduler runs an ordinary search with no per-run proxy. The **10x Compile Alert** view and the `/tenx-alert` endpoint handle this, and a recompile pass migrates legacy alerts to native form and refreshes their prefilters as new templates appear. See [SAVE_TIME_ALERTS.md](https://github.com/log-10x/splunk-app/blob/main/SAVE_TIME_ALERTS.md){target="_blank"}.
112
115
 
@@ -329,32 +332,35 @@ Get encoded events flowing to Splunk in under 15 minutes.
329
332
 
330
333
  **3. Check compact events expand:**
331
334
  ```spl
332
- index=your_logs_index | head 10
335
+ | tenxsearch searchstring="index=your_logs_index" | head 10
333
336
  ```
334
337
  :material-check-circle-outline:{ .success } Expected: Full expanded events, not `~hash,var1,var2...` format
335
338
 
336
339
  !!! tip "First Templates Take Time"
337
340
  The "Consume KV" saved search runs every 2 minutes. If KV store is empty, wait 2-3 minutes and check again.
338
341
 
339
- ??? tenx-step-search "Step 5: Enable Expansion in Search & Reporting (Optional)"
342
+ ??? tenx-step-search "Step 5: Search from the Search Bar"
340
343
 
341
- The verification queries in Step 4 run from within the **10x for Splunk** app, where the search hook is already active. If you also want to search encoded events from Splunk's default **Search & Reporting** app, copy the search hook:
344
+ Splunk's search page loads no app JavaScript, so the hook cannot reach the search bar. Wrap the search in the `tenxsearch` command instead:
342
345
 
343
- ``` { .console .copy }
344
- cp $SPLUNK_HOME/etc/apps/tenx-for-splunk/appserver/static/dashboard.js \
345
- $SPLUNK_HOME/etc/apps/search/appserver/static/
346
+ ```spl
347
+ | tenxsearch searchstring="index=your_logs_index sourcetype=tenx_encoded error"
346
348
  ```
349
+ :material-check-circle-outline:{ .success } Expected: expanded events on the Events tab
347
350
 
348
- After copying, bump Splunk's static file cache or restart:
351
+ Escape a quoted phrase inside the wrapper:
349
352
 
350
- ``` { .console .copy }
351
- $SPLUNK_HOME/bin/splunk restart
353
+ ```spl
354
+ | tenxsearch searchstring="index=your_logs_index \"connection refused\""
352
355
  ```
353
356
 
354
- Now searches in the default Search app will also expand events automatically.
357
+ `NOT`, `OR`, `AND`, parenthesised groups, wildcards, field conditions, inline `earliest=`/`latest=` and a trailing pipeline all behave as they do on the original data. The command also runs in saved searches, alerts and the REST API.
358
+
359
+ !!! warning "A search without the command returns zero"
360
+ A bare search on a compact sourcetype finds nothing and reports no matches, because the constant words are in the KV Store rather than the event. Keep compact indexes out of users' default index sets and name them so the omission is visible.
355
361
 
356
- !!! tip "Only needed if you use the default Search app"
357
- If you only use the 10x for Splunk dashboards or custom apps where you've already added the hook, you can skip this step.
362
+ !!! tip "Dashboards need no command"
363
+ Classic dashboards in an app carrying `dashboard.js` keep their panel SPL unchanged. See [Expansion in Other Splunk Apps](#expansion-in-other-splunk-apps) below.
358
364
 
359
365
  ---
360
366
 
@@ -459,7 +465,7 @@ Use this checklist to diagnose issues at each stage of the pipeline.
459
465
  |-------|----------|
460
466
  | Template hash not in KV store | Wait 2 min for "Consume KV" to run, or trigger manually |
461
467
  | Hash mismatch (different data) | Verify encoded events match templates in `tenx_dml` |
462
- | Search hook not active | Ensure `dashboard.js` is loaded for your app/view |
468
+ | Search ran without expansion | On a dashboard, ensure `dashboard.js` is in that app; in the search bar, wrap the search in `tenxsearch` |
463
469
 
464
470
  **Debug hash lookup:**
465
471
  ```spl
@@ -547,22 +553,21 @@ Use this checklist to diagnose issues at each stage of the pipeline.
547
553
 
548
554
  ## :material-code-tags: Expansion in Other Splunk Apps
549
555
 
550
- The 10x for Splunk app expands events automatically within its own views. To enable expansion in other Splunk apps, copy the search hook to each app that needs it.
551
-
552
- For the default **Search & Reporting** app, see [Step 5](#step-5-enable-expansion-in-search-reporting-optional) in the Quickstart.
553
-
554
- For custom or third-party apps:
556
+ `dashboard.js` loads on every classic dashboard in the app that carries it. The 10x for Splunk app ships it, so its own dashboards expand. To expand classic dashboards in another app, copy the file there:
555
557
 
556
558
  ``` { .console .copy }
557
559
  cp $SPLUNK_HOME/etc/apps/tenx-for-splunk/appserver/static/dashboard.js \
558
560
  $SPLUNK_HOME/etc/apps/YOUR_APP/appserver/static/
559
561
  ```
560
562
 
561
- Restart Splunk after copying to apply.
563
+ Restart Splunk to load it.
564
+
565
+ !!! info "What copying the hook does not cover"
566
+ The search bar and Dashboard Studio load no app JavaScript, so they are unaffected by the copy. Wrap the search in the `tenxsearch` command there, as in the Quickstart.
562
567
 
563
568
  ??? info "Programmatic Hook for Custom Views"
564
569
 
565
- For custom dashboards, you can include the hook in JavaScript:
570
+ For custom classic dashboards, include the hook in JavaScript:
566
571
 
567
572
  ``` { .javascript }
568
573
  require([
@@ -578,7 +583,8 @@ Restart Splunk after copying to apply.
578
583
 
579
584
  | Component | Description |
580
585
  |-----------|-------------|
581
- | [**Search Hook**](https://github.com/log-10x/splunk-app/blob/main/tenx-for-splunk/appserver/static/dashboard.js){target="\_blank"} | JavaScript module intercepting all search requests |
586
+ | [**Search Hook**](https://github.com/log-10x/splunk-app/blob/main/tenx-for-splunk/appserver/static/dashboard.js){target="\_blank"} | JavaScript module routing classic dashboard searches to the REST endpoint |
587
+ | [**tenxsearch Command**](https://github.com/log-10x/splunk-app/blob/main/tenx-for-splunk/bin/tenxsearch.py){target="\_blank"} | Generating command running the same rewrite from the search bar, saved searches and alerts |
582
588
  | [**Search Handler**](https://github.com/log-10x/splunk-app/blob/main/tenx-for-splunk/bin/tenx_search_handler.py){target="\_blank"} | REST endpoint transforming SPL queries |
583
589
  | [**KV Store**](https://github.com/log-10x/splunk-app/blob/main/tenx-for-splunk/default/collections.conf){target="\_blank"} | Template patterns for event expansion |
584
590
  | [**Inflate Macro**](https://github.com/log-10x/splunk-app/blob/main/tenx-for-splunk/default/macros.conf){target="\_blank"} | SPL macro joining events with templates |
@@ -22,7 +22,7 @@ The [Receiver](https://doc.log10x.com/apps/receiver/) is the execution arm of th
22
22
 
23
23
  - **pass**: forward unchanged.
24
24
  - **sample**: forward a rate-limited share against a per-pattern budget. Uses automatic [message enrichment](https://doc.log10x.com/run/initialize/message/){target="_blank"} to identify event types by their symbol identity and calculate ingestion cost per event (bytes × $/GB). When an event type exceeds its share of the budget, the Receiver samples it down, in real time at the source, before expensive data reaches your analyzer. A [severity floor](https://doc.log10x.com/run/receive/rate/){target="_blank"} keeps a minimum share of ERROR and WARN events flowing even when their pattern is over its cap.
25
- - **compact**: replace repeated lines with an encoded form the destination expands at query time, with no dashboard or query changes. Lossless only on Splunk and self-hosted Elasticsearch/OpenSearch with the expand plugin installed ([Splunk](compact/splunk.md), [Elasticsearch](compact/elasticsearch.md)). It is a no-op on managed/SaaS destinations (Datadog, CloudWatch, Azure, GCP, Sumo, managed Elasticsearch).
25
+ - **compact**: replace repeated lines with an encoded form the destination expands at query time, with no dashboard changes. Lossless only on Splunk and self-hosted Elasticsearch/OpenSearch with the expand plugin installed ([Splunk](compact/splunk.md), [Elasticsearch](compact/elasticsearch.md)). It is a no-op on managed/SaaS destinations (Datadog, CloudWatch, Azure, GCP, Sumo, managed Elasticsearch).
26
26
  - **tier_down**: tag the pattern for a cheaper storage tier the destination enforces (Datadog Flex, CloudWatch IA, Azure Monitor Basic/Auxiliary).
27
27
  - **offload**: route the pattern to customer-owned object storage (S3 or any S3-compatible bucket) instead of the destination.
28
28
  - **drop**: stop forwarding the pattern.
@@ -4970,8 +4970,10 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
4970
4970
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
4971
4971
  jarFiles: []
4972
4972
 
4973
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
4974
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
4973
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
4974
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
4975
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
4976
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
4975
4977
 
4976
4978
  # 'disabledArgs' specifies a list of launch arguments that are disallowed from either command line or user config files.
4977
4979
  disabledArgs: []
@@ -6030,14 +6032,21 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
6030
6032
  - "yyyy-MM-dd HH:mm:ss" # Widely used in Java applications, databases (e.g., MySQL, PostgreSQL), and application servers (e.g., Tomcat, JBoss).
6031
6033
  - "yyyy-MM-dd'T'HH:mm:ss.SSSZ" # Common in web services, APIs, Java (with DateTimeFormatter.ISO_OFFSET_DATE_TIME), Python (with datetime.isoformat()), and systems requiring precise timestamps with timezone information.
6032
6034
  - "MMM dd HH:mm:ss" # Frequently seen in syslog, Unix-based systems, network devices (e.g., Cisco routers), and web servers (e.g., Apache, Nginx).
6035
+ - "MMM d HH:mm:ss" # Classic syslog (RFC 3164) on days 1-9: the day is space-padded, e.g. "Jan 3 17:38:36".
6036
+ - "MMM d HH:mm:ss" # Same date without the padding (strftime %b %-d), e.g. "Nov 9 12:01:01" in Thunderbird-style system logs.
6033
6037
  - "dd/MMM/yyyy:HH:mm:ss Z" # Standard syslog format, used in firewalls (e.g., Cisco ASA, Palo Alto), network monitoring tools, and Unix-based systems.
6034
6038
  - "yyyy-MM-dd HH:mm:ss,SSS" # Common in Java logging frameworks like Log4j and Logback.
6035
6039
  - "yyyy-MM-dd'T'HH:mm:ss,SSS" # Common in Java logging with ISO 8601 date-time, comma-separated milliseconds.
6036
6040
  - "MM/dd/yyyy HH:mm:ss" # Used in Windows event logs, .NET applications, and U.S.-based systems.
6037
6041
  - "EEE MMM dd HH:mm:ss yyyy" # Human-readable format used in various logs, including some web servers and application logs.
6042
+ - "EEE MMM dd HH:mm:ss zzz yyyy" # java.util.Date.toString() and the Unix date command, e.g. "Thu Jan 15 10:00:01 UTC 2026". Common in Java application logs and shell-script output.
6038
6043
  - "yyyy-MM-dd'T'HH:mm:ss" # Simplified ISO 8601 format, used in many modern applications and frameworks.
6039
6044
  - "HH:mm:ss" # Time-only format, used when the date is implied or provided separately, common in embedded systems and some programming languages.
6040
6045
  - "yyyyMMdd HH:mm:ss" # Compact format used in some legacy systems and batch processing logs.
6046
+ - "yyyyMMdd-H:m:s:SSS" # Compact date, hyphen, unpadded time, colon before the milliseconds, e.g. "20171223-22:15:29:606" or "20171224-0:0:0:234". Android HealthApp and similar mobile logs.
6047
+ - "yyyyMMdd-H:m:s:SS" # Same with two fraction digits, e.g. "20171223-22:30:24:28".
6048
+ - "yyyyMMdd-H:m:s:S" # Same with one fraction digit.
6049
+ - "MM.dd HH:mm:ss" # Month.day without a year, e.g. "10.30 16:49:06". Proxifier and other Windows utility logs.
6041
6050
  - "MMM dd, yyyy h:mm:ss a" # Human-readable format with 12-hour clock, used in application logs and some U.S.-based systems.
6042
6051
  - "MMM dd, yyyy hh:mm:ss a" # Human-readable format with 12-hour clock (padded hour), used in application logs and some U.S.-based systems.
6043
6052
  # Common formats with slight variations
@@ -6630,7 +6639,7 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
6630
6639
 
6631
6640
  # Specifying '*' will emit information for all source code /binary files that have
6632
6641
  # been selected as the origin of any TenXTemplate objects within the pipeline.
6633
- symbols: [''
6642
+ symbols: [
6634
6643
  # '*'
6635
6644
  ]
6636
6645
  ```
@@ -3961,8 +3961,10 @@ To configure advanced options (optional) for the Reporter app, [:material-cog: E
3961
3961
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
3962
3962
  jarFiles: []
3963
3963
 
3964
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
3965
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
3964
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
3965
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
3966
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
3967
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
3966
3968
 
3967
3969
  # 'disabledArgs' specifies a list of launch arguments that are disallowed from either command line or user config files.
3968
3970
  disabledArgs: []
@@ -4974,14 +4976,21 @@ To configure advanced options (optional) for the Reporter app, [:material-cog: E
4974
4976
  - "yyyy-MM-dd HH:mm:ss" # Widely used in Java applications, databases (e.g., MySQL, PostgreSQL), and application servers (e.g., Tomcat, JBoss).
4975
4977
  - "yyyy-MM-dd'T'HH:mm:ss.SSSZ" # Common in web services, APIs, Java (with DateTimeFormatter.ISO_OFFSET_DATE_TIME), Python (with datetime.isoformat()), and systems requiring precise timestamps with timezone information.
4976
4978
  - "MMM dd HH:mm:ss" # Frequently seen in syslog, Unix-based systems, network devices (e.g., Cisco routers), and web servers (e.g., Apache, Nginx).
4979
+ - "MMM d HH:mm:ss" # Classic syslog (RFC 3164) on days 1-9: the day is space-padded, e.g. "Jan 3 17:38:36".
4980
+ - "MMM d HH:mm:ss" # Same date without the padding (strftime %b %-d), e.g. "Nov 9 12:01:01" in Thunderbird-style system logs.
4977
4981
  - "dd/MMM/yyyy:HH:mm:ss Z" # Standard syslog format, used in firewalls (e.g., Cisco ASA, Palo Alto), network monitoring tools, and Unix-based systems.
4978
4982
  - "yyyy-MM-dd HH:mm:ss,SSS" # Common in Java logging frameworks like Log4j and Logback.
4979
4983
  - "yyyy-MM-dd'T'HH:mm:ss,SSS" # Common in Java logging with ISO 8601 date-time, comma-separated milliseconds.
4980
4984
  - "MM/dd/yyyy HH:mm:ss" # Used in Windows event logs, .NET applications, and U.S.-based systems.
4981
4985
  - "EEE MMM dd HH:mm:ss yyyy" # Human-readable format used in various logs, including some web servers and application logs.
4986
+ - "EEE MMM dd HH:mm:ss zzz yyyy" # java.util.Date.toString() and the Unix date command, e.g. "Thu Jan 15 10:00:01 UTC 2026". Common in Java application logs and shell-script output.
4982
4987
  - "yyyy-MM-dd'T'HH:mm:ss" # Simplified ISO 8601 format, used in many modern applications and frameworks.
4983
4988
  - "HH:mm:ss" # Time-only format, used when the date is implied or provided separately, common in embedded systems and some programming languages.
4984
4989
  - "yyyyMMdd HH:mm:ss" # Compact format used in some legacy systems and batch processing logs.
4990
+ - "yyyyMMdd-H:m:s:SSS" # Compact date, hyphen, unpadded time, colon before the milliseconds, e.g. "20171223-22:15:29:606" or "20171224-0:0:0:234". Android HealthApp and similar mobile logs.
4991
+ - "yyyyMMdd-H:m:s:SS" # Same with two fraction digits, e.g. "20171223-22:30:24:28".
4992
+ - "yyyyMMdd-H:m:s:S" # Same with one fraction digit.
4993
+ - "MM.dd HH:mm:ss" # Month.day without a year, e.g. "10.30 16:49:06". Proxifier and other Windows utility logs.
4985
4994
  - "MMM dd, yyyy h:mm:ss a" # Human-readable format with 12-hour clock, used in application logs and some U.S.-based systems.
4986
4995
  - "MMM dd, yyyy hh:mm:ss a" # Human-readable format with 12-hour clock (padded hour), used in application logs and some U.S.-based systems.
4987
4996
  # Common formats with slight variations
@@ -5574,7 +5583,7 @@ To configure advanced options (optional) for the Reporter app, [:material-cog: E
5574
5583
 
5575
5584
  # Specifying '*' will emit information for all source code /binary files that have
5576
5585
  # been selected as the origin of any TenXTemplate objects within the pipeline.
5577
- symbols: [''
5586
+ symbols: [
5578
5587
  # '*'
5579
5588
  ]
5580
5589
  ```
@@ -5042,8 +5042,10 @@ To configure advanced options (optional) for the Retriever app, [:material-cog:
5042
5042
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
5043
5043
  jarFiles: []
5044
5044
 
5045
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
5046
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
5045
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
5046
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
5047
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
5048
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
5047
5049
 
5048
5050
  # 'disabledArgs' specifies a list of launch arguments that are disallowed from either command line or user config files.
5049
5051
  disabledArgs: []
@@ -6246,14 +6248,21 @@ To configure advanced options (optional) for the Retriever app, [:material-cog:
6246
6248
  - "yyyy-MM-dd HH:mm:ss" # Widely used in Java applications, databases (e.g., MySQL, PostgreSQL), and application servers (e.g., Tomcat, JBoss).
6247
6249
  - "yyyy-MM-dd'T'HH:mm:ss.SSSZ" # Common in web services, APIs, Java (with DateTimeFormatter.ISO_OFFSET_DATE_TIME), Python (with datetime.isoformat()), and systems requiring precise timestamps with timezone information.
6248
6250
  - "MMM dd HH:mm:ss" # Frequently seen in syslog, Unix-based systems, network devices (e.g., Cisco routers), and web servers (e.g., Apache, Nginx).
6251
+ - "MMM d HH:mm:ss" # Classic syslog (RFC 3164) on days 1-9: the day is space-padded, e.g. "Jan 3 17:38:36".
6252
+ - "MMM d HH:mm:ss" # Same date without the padding (strftime %b %-d), e.g. "Nov 9 12:01:01" in Thunderbird-style system logs.
6249
6253
  - "dd/MMM/yyyy:HH:mm:ss Z" # Standard syslog format, used in firewalls (e.g., Cisco ASA, Palo Alto), network monitoring tools, and Unix-based systems.
6250
6254
  - "yyyy-MM-dd HH:mm:ss,SSS" # Common in Java logging frameworks like Log4j and Logback.
6251
6255
  - "yyyy-MM-dd'T'HH:mm:ss,SSS" # Common in Java logging with ISO 8601 date-time, comma-separated milliseconds.
6252
6256
  - "MM/dd/yyyy HH:mm:ss" # Used in Windows event logs, .NET applications, and U.S.-based systems.
6253
6257
  - "EEE MMM dd HH:mm:ss yyyy" # Human-readable format used in various logs, including some web servers and application logs.
6258
+ - "EEE MMM dd HH:mm:ss zzz yyyy" # java.util.Date.toString() and the Unix date command, e.g. "Thu Jan 15 10:00:01 UTC 2026". Common in Java application logs and shell-script output.
6254
6259
  - "yyyy-MM-dd'T'HH:mm:ss" # Simplified ISO 8601 format, used in many modern applications and frameworks.
6255
6260
  - "HH:mm:ss" # Time-only format, used when the date is implied or provided separately, common in embedded systems and some programming languages.
6256
6261
  - "yyyyMMdd HH:mm:ss" # Compact format used in some legacy systems and batch processing logs.
6262
+ - "yyyyMMdd-H:m:s:SSS" # Compact date, hyphen, unpadded time, colon before the milliseconds, e.g. "20171223-22:15:29:606" or "20171224-0:0:0:234". Android HealthApp and similar mobile logs.
6263
+ - "yyyyMMdd-H:m:s:SS" # Same with two fraction digits, e.g. "20171223-22:30:24:28".
6264
+ - "yyyyMMdd-H:m:s:S" # Same with one fraction digit.
6265
+ - "MM.dd HH:mm:ss" # Month.day without a year, e.g. "10.30 16:49:06". Proxifier and other Windows utility logs.
6257
6266
  - "MMM dd, yyyy h:mm:ss a" # Human-readable format with 12-hour clock, used in application logs and some U.S.-based systems.
6258
6267
  - "MMM dd, yyyy hh:mm:ss a" # Human-readable format with 12-hour clock (padded hour), used in application logs and some U.S.-based systems.
6259
6268
  # Common formats with slight variations
@@ -6846,7 +6855,7 @@ To configure advanced options (optional) for the Retriever app, [:material-cog:
6846
6855
 
6847
6856
  # Specifying '*' will emit information for all source code /binary files that have
6848
6857
  # been selected as the origin of any TenXTemplate objects within the pipeline.
6849
- symbols: [''
6858
+ symbols: [
6850
6859
  # '*'
6851
6860
  ]
6852
6861
  ```
@@ -144,7 +144,7 @@ To configure the Pipeline Bootstrapper unit, [:material-cog: Edit](https://doc.l
144
144
  </div>
145
145
  </dialog>
146
146
 
147
- <template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTmFtZSBvZiBwaXBlbGluZSB0byBleGVjdXRlXG5cblRhcmdldCBbcGlwZWxpbmVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vZW5naW5lL3BpcGVsaW5lLykgdG8gZXhlY3V0ZS4gRm9yIGV4YW1wbGUsIHRvIHNwZWNpZnkgdGhlIFtydW5dKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuLykgcGlwZWxpbmUgYW5kIGEgW1lBTUxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnL3lhbWwvKSBjb25maWcgZmlsZSBjb250YWluaW5nIGxhdW5jaCBhcmd1bWVudHMsIHVzZTogIGBgYCBjb25zb2xlICQgdGVueCBydW4gQH4vbXkueWFtbCBgYGAgVGhlIFlBTUwgZmlsZSBtYXkgc3BlY2lmeSB0aGUgcGlwZWxpbmUgbmFtZSB2aWEgYSAndGVueCcgZW50cnksIGFsbG93aW5nIHRoZSAncGlwZWxpbmUnIGFyZ3VtZW50IHRvIGJlIG9taXR0ZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUgKG15LnlhbWwpOiAgYGBgIHlhbWwgdGVueDogcnVuICMgc2V0IHRoZSBwaXBlbGluZSB0byAncnVuJyBsaWNlbnNlS2V5OiA8bXktbGljZW5zZS1qd3Q+IC4uLiBgYGAgIEFsbG93cyBmb3IgbGF1bmNoaW5nIHRoZSBydW4gcGlwZWxpbmUgdmlhOiBgYGAgY29uc29sZSAkIHRlbnggQH4vbXkueWFtbCBgYGAiCiAgICB9LAogICAgImxpY2Vuc2UiIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgImZpbGUiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlBhdGggdG8gYSBmaWxlIGNvbnRhaW5pbmcgdGhlIDEweCBsaWNlbnNlIEpXVFxuXG5QYXRoIHRvIGEgZmlsZSBjb250YWluaW5nIHRoZSBzaWduZWQgMTB4IGxpY2Vuc2UgSldULiBQcmVmZXJyZWQgb3ZlciBgbGljZW5zZUtleWAgZm9yIHByb2R1Y3Rpb246IHRoZSB0b2tlbiBpcyBub3QgdmlzaWJsZSBpbiBgcHNgIG91dHB1dCBhbmQgaXMgZWFzeSB0byByb3RhdGUgYnkgcmVwbGFjaW5nIHRoZSBmaWxlLiAgRG93bmxvYWQgYSBsaWNlbnNlIGZyb20geW91ciBbYWNjb3VudF0oaHR0cHM6Ly9jb25zb2xlLmxvZzEweC5jb20pLiAgSWYgYm90aCBgbGljZW5zZUZpbGVgIGFuZCBgbGljZW5zZUtleWAgYXJlIHByb3ZpZGVkLCB0aGUgZmlsZSB3aW5zLiIKICAgICAgICB9LAogICAgICAgICJrZXkiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIjEweCBsaWNlbnNlIEpXVCAoaW5saW5lKVxuXG5UaGUgc2lnbmVkIDEweCBsaWNlbnNlIEpXVCwgcGFzc2VkIGlubGluZS4gRGlzY291cmFnZWQgb24gdGhlIGNvbW1hbmQgbGluZSBiZWNhdXNlIHRoZSB2YWx1ZSBpcyB2aXNpYmxlIGluIGBwc2Agb3V0cHV0OyBwcmVmZXIgYGxpY2Vuc2VGaWxlYCBpbiBwcm9kdWN0aW9uLiAgRG93bmxvYWQgYSBsaWNlbnNlIGZyb20geW91ciBbYWNjb3VudF0oaHR0cHM6Ly9jb25zb2xlLmxvZzEweC5jb20pLiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiYWlyZ2FwcGVkIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJib29sZWFuIiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlJ1biB3aXRob3V0IGNvbnRhY3RpbmcgdGhlIDEweCBzZXJ2aWNlXG5cbldoZW4gYHRydWVgLCB0aGUgbGljZW5zZSBpcyB2ZXJpZmllZCBsb2NhbGx5IChzaWduYXR1cmUgKyBjbGFpbXMpIGFuZCBubyBjYWxscyBhcmUgbWFkZSB0byB0aGUgMTB4IHNlcnZpY2U6IG5vIHN0YXJ0dXAgdmFsaWRhdGlvbiwgbm8gbWV0cmljcyByZXBvcnRpbmcsIG5vIHVzZXItYXR0cmlidXRlIGVucmljaG1lbnQuIFN1aXRhYmxlIGZvciBmdWxseSBhaXJnYXBwZWQgZGVwbG95bWVudHMgd2hlcmUgdGhlIGVuZ2luZSBoYXMgbm8gcGF0aCB0byB0aGUgdmVuZG9yIFNhYVMuICBXaGVuIGBmYWxzZWAgKGRlZmF1bHQpLCB0aGUgZW5naW5lIGFkZGl0aW9uYWxseSB2YWxpZGF0ZXMgdGhlIGxpY2Vuc2UgYWdhaW5zdCB0aGUgMTB4IHNlcnZpY2UgYXQgc3RhcnR1cDsgYSBub24tMnh4IHJlc3BvbnNlIHJlZnVzZXMgdG8gc3RhcnQuICBgZGVtb2AgYW5kIGBsaW1pdGVkYCBsaWNlbnNlIHR5cGVzIGNhbm5vdCBydW4gYWlyZ2FwcGVkLCBpZiBgYWlyZ2FwcGVkOiB0cnVlYCBpcyBzZXQgd2l0aCBvbmUgb2YgdGhlc2UgbGljZW5zZSB0eXBlcywgYSB3YXJuaW5nIGlzIGxvZ2dlZCBhbmQgdGhlIGVuZ2luZSBydW5zIGluIG9ubGluZSBtb2RlIGFueXdheS4gKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IGZhbHNlKSIsCiAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICB9LAogICAgIm1ldHJpY0VuZHBvaW50IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiMTB4IHNlcnZpY2UgUHJvbWV0aGV1cyBtZXRyaWNzIGVuZHBvaW50XG5cblNwZWNpZmllcyB0aGUgYWRkcmVzcyBvZiB0aGUgUHJvbWV0aGV1cyByZW1vdGUgd3JpdGUgZW5kcG9pbnQgdG8gd3JpdGUgcGlwZWxpbmUgdXNhZ2UgYW5kIGhlYWx0aCBtZXRyaWNzLiAgISEhIG5vdGUgXCJcIiAgICAgIFRoaXMgYXJndW1lbnQgaXMgb25seSBzZXR0YWJsZSBpbiB0aGUgMTB4ICdvbi1wcmVtaXNlcycgYnVpbGQuIChEZWZhdWx0OiBodHRwczovL3Byb21ldGhldXMubG9nMTB4LmNvbS9hcGkvdjEvd3JpdGUpIiwKICAgICAgImRlZmF1bHQiIDogImh0dHBzOi8vcHJvbWV0aGV1cy5sb2cxMHguY29tL2FwaS92MS93cml0ZSIKICAgIH0sCiAgICAicnVudGltZSIgOiB7CiAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAibmFtZSIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTmFtZSB0byByZXBvcnQgdG8gdGhlIDEweCBzZXJ2aWNlIGVuZHBvaW50IGZvciB0aGlzIHJ1bnRpbWUgaW5zdGFuY2VcblxuU3BlY2lmaWVzIGEgbG9naWNhbCBuYW1lIHVzZWQgYXMgYSBbdGFnIHZhbHVlXShodHRwczovL3d3dy5iYWVsZHVuZy5jb20vbWljcm9tZXRlciM0LW1ldGVycykgZm9yIHBpcGVsaW5lIG1ldHJpY3MuIFRoaXMgdmFsdWUgaWRlbnRpZmllcyBpbnN0YW5jZXMgb2YgdGhlIDEweCBydW4vY29tcGlsZSBwaXBlbGluZXMgd2hlbiByZXBvcnRpbmcgdG8gdGhlIDEweCBzZXJ2aWNlLiBGb3IgZXhhbXBsZSwgZm9yIGEgMTB4IFtSZWNlaXZlcl0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcHBzL3JlY2VpdmVyLykgd2l0aCBvcHRpbWl6YXRpb24gZW5hYmxlZCBmb3IgRmx1ZW50IEJpdCBmb3J3YXJkZXJzIGNvbGxlY3RpbmcgZXZlbnRzIGZyb20gYSBgYnJva2VyYCB1c2VyLWFwcCwgdGhpcyB2YWx1ZSBjYW4gYmUgc2V0IHRvOiBgcmVjZWl2ZV9mbHVlbnRiaXRfYnJva2VyYCIKICAgICAgICB9LAogICAgICAgICJhdHRyaWJ1dGVzIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGF0dHJpYnV0ZXMgdG8gYWRkIHRvIGFsbCBtZXRyaWNzIHJlcG9ydGluZ1xuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycyBpbiB0aGUgZm9ybWF0IGBrZXk6dmFsdWVgIHRvIGJlIGFkZGVkIGFzIHRhZ3MgdG8gcGlwZWxpbmUgbWV0cmljcyByZXBvcnRlZCB0byB0aGUgMTB4IHNlcnZpY2UuIFRoZXNlIHRhZ3MgZW5hYmxlIGZpbmVyLWdyYWluZWQgZmlsdGVyaW5nIGFuZCBhbmFseXNpcyBpbiBtb25pdG9yaW5nIHN5c3RlbXMgbGlrZSBQcm9tZXRoZXVzLiBNdWx0aXBsZSBhdHRyaWJ1dGVzIGNhbiBiZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIHN0cmluZyB1c2luZyBhIHNlbWljb2xvbiAoYDtgKSwgZS5nLiwgYGtleTE6dmFsMTtrZXkyOnZhbDJgLiAgSWYgYSBrZXkgZG9lcyBub3Qgc3RhcnQgd2l0aCB0ZW54XywgdGhlIHByZWZpeCB0ZW54XyBpcyBhdXRvbWF0aWNhbGx5IHByZXBlbmRlZCB0byBlbnN1cmUgY29uc2lzdGVuY3kgaW4gdGFnIG5hbWluZyBjb252ZW50aW9ucy4gRm9yIGV4YW1wbGUsIGEgcHJvdmlkZWQgYXR0cmlidXRlIGFwcDpteS1hcHAgd2lsbCBiZSByZXBvcnRlZCBhcyB0ZW54X2FwcDpteS1hcHAgIGBgYCB5YW1sICAgcnVudGltZUF0dHJpYnV0ZXM6ICAgICAtIGFwcDpyZXBvcnRlciAgICAgLSBlbnY6ZWRnZSBgYGAiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiaW5jbHVkZVBhdGhzIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJhcnJheSIsCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJQaXBlbGluZSBpbmNsdWRlIGZvbGRlcnNcblxuU3BlY2lmaWVzIGZvbGRlcnMgb24gZGlzayBmb3IgcmVzb2xpbmcgcmVsYXRpdmUgcmVmZXJlbmNlcyB3aXRoaW4gW2luY2x1ZGUgZGlyZWN0aXZlc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb25maWcveWFtbC8jaW5jbHVkZS1kaXJlY3RpdmVzKS4gKERlZmF1bHQ6IFtcIndvcmtpbmcgZGlyZWN0b3J5IG9mIGN1cnJlbnQgcHJvY2Vzc1wiXSkiLAogICAgICAiaXRlbXMiIDogewogICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgIH0sCiAgICAgICJkZWZhdWx0IiA6IFsKICAgICAgICAid29ya2luZyBkaXJlY3Rvcnkgb2YgY3VycmVudCBwcm9jZXNzIgogICAgICBdCiAgICB9LAogICAgImphckZpbGVzIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJhcnJheSIsCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJKYXIgZmlsZXMgdG8gbG9hZFxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIC5qYXIgZmlsZXMgdG8gbG9hZCBpbnRvIHRoZSBob3N0IEpWTSBmb3IgdXNlIGJ5IFtjb21waWxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9jb21waWxlLyksIFtpbnB1dF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvaW5wdXQvKSBhbmQgW291dHB1dF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvb3V0cHV0LykgQVBJIGV4dGVuc2lvbnMuICAhISEgbm90ZSBcIlwiICAgICAgVGhpcyBhcmd1bWVudCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBbUnVudGltZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9lbmdpbmUvZmxhdm9ycy8jcnVudGltZSkgZmxhdm9yLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJxdWlldCIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYm9vbGVhbiIsCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEaXNhYmxlIHByaW50aW5nIGJpbmFyeSB2ZXJzaW9uIGluZm9ybWF0aW9uIHRvIHRoZSBjb25zb2xlXG5cbkRpc2FibGUgcHJpbnRpbmcgYnVpbGQvdmVyc2lvbiBpbmZvcm1hdGlvbiB0byB0aGUgY29uc29sZSB1cG9uIGxhdW5jaCAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogZmFsc2UpIiwKICAgICAgImRlZmF1bHQiIDogZmFsc2UKICAgIH0sCiAgICAiZGlzYWJsZWRBcmdzIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJhcnJheSIsCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaW1pdCBhcmd1bWVudCB2YWx1ZXMgdGhhdCBjYW4gYmUgc2V0IGJ5IHVzZXJzXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgbGF1bmNoIGFyZ3VtZW50cyB0aGF0IGFyZSBkaXNhbGxvd2VkIGZyb20gZWl0aGVyIGNvbW1hbmQgbGluZSBvciB1c2VyIGNvbmZpZyBmaWxlcy4gVGhpcyBhcmd1bWVudCBwcm92aWRlcyBhIG1ldGhvZCBvZiBsaW1pdGluZyB0aGUgdGFyZ2V0IFtwaXBlbGluZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9zaGFyZWQvYm9vdHN0cmFwLyNwaXBlbGluZSksIFtzb3VyY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnLyNzb3VyY2VzKSBhbmQgYW5kIFtjb21tYW5kIGxpbmVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnL2NsaS8pIHNldHRhYmxlIGJ5IHRoZSB1c2VyLiAgVGhpcyBtZWNoYW5pc20gZW5hYmxlcyBwaXBlbGluZSBsYXVuY2hlcnMgc3VjaCBhcyB0aGUgW1F1YXJrdXMgbGF1bmNoZXJdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2xhdW5jaC8jcXVhcmt1cykgdG8gbGltaXQgdXNlciBpbnB1dCByZWNlaXZlZCB2aWEgUkVTVCByZXF1ZXN0cyB0byBhIHRhcmdldCBzdWJzZXQgb2YgJ3NhZmUnIGFyZ3VtZW50cy4gIEZvciBleGFtcGxlLCBhZGRpbmcgW3Byb2NPdXRDb21tYW5kXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9vdXRwdXQvZXZlbnQvcHJvY2Vzcy8jcHJvY291dGNvbW1hbmQpIHRvIHRoaXMgbGlzdCBlbnN1cmVzIHRoYXQgbm8gZXh0ZXJuYWwgcHJvY2VzcyBvdXRwdXRzIGNhbiBiZSBsYXVuY2hlZCBieSB0aGUgcnVudGltZS4gIEFuIG9wdGlvbmFsIHJlZ2V4IHBhdHRlcm4gY2FuIGxpbWl0IGFyZ3VtZW50cyB0byBhIGNlcnRhaW4gc3Vic2V0IG9mIHZhbHVlcyBpbiB0aGUgZm9ybSBvZjogYDxhcmctbmFtZT5bOnBhdHRlcm5dYCAoZS5nLiwgc3BlY2lmaWMgcHJvY2VzcyBuYW1lcykuIE11bHRpcGxlIHBhdHRlcm5zIGNhbiBiZSBzcGVjaWZpZWQgcGVyIGFyZ3VtZW50LiAgTWF0Y2hpbmcgdGhlIGBzb3VyY2VgIGFyZ3VtZW50IGRldGVybWluZXMgd2hpY2ggc291cmNlIGxvY2F0aW9ucyB0byBpbnNwZWN0IChlLmcuLCBmb2xkZXJzLCBmaWxlcywgR2l0SHViIHJlcG9zKS4gRm9yIGV4YW1wbGUsIGFuIGFkbWluIG1heSBwbGFjZSAueWFtbCBjb25maWcgZmlsZXMgY29udGFpbmluZyBwcmVzZXQgRmx1ZW50IEJpdCBvdXRwdXRzIGluIGAvZXRjL2xvZzEweC9gLCBleGNsdWRpbmcgdGhlaXIgZW5jbG9zZWQgYXJndW1lbnRzIGZyb20gbGltaXRzIHNldCBieSB0aGlzIGxpc3QsIHdoaWxlIGRpc2FsbG93aW5nIHVzZXJzIHRvIGRpcmVjdGx5IHNldCB0aGVtIHZpYSB0aGUgY29tbWFuZC1saW5lIG9yIGJ5IHNvdXJjaW5nIHRoZW0gZnJvbSB0aGVpciBsb2NhbC9HaXRIdWIgY29uZmlnIGZpbGVzIChzZWUgZXhhbXBsZSBiZWxvdykuICBUbyBsaW1pdDogIFRoZSB0YXJnZXQgcGlwZWxpbmUgKGUuZy4sIFtydW5dKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuLyksIFtjb21waWxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvKSk6ICBgYGAgeWFtbCAgIGRpc2FibGVkQXJnczogICAtIFwicGlwZWxpbmU6XnJ1blwiICMgZGlzYWxsb3cgY29tcGlsZSBgYGAgIFRhcmdldCBhcmd1bWVudHMgKGUuZy4sIFtwcm9jZXNzIG91dHB1dHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL291dHB1dC9ldmVudC9wcm9jZXNzLykpOiAgYGBgIHlhbWwgICAtIFwicHJvY091dENvbW1hbmQ6XmZsdWVudC1iaXQkXCIgICAjIGxpbWl0IHRvIEZsdWVudCBCaXQgb25seSAgICMgLSBwcm9jT3V0QXJnczogPHNwZWNpZnktcmVnZXg+ICAjIGZ1cnRoZXIgbGltaXQgYXJncyBmb3IgRmx1ZW50IEJpdCBgYGAgIENvbnRyb2wgd2hpY2ggYXJndW1lbnQgW3NvdXJjZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnLyNzb3VyY2VzKSB0byBpbnNwZWN0OiAgYGBgIHlhbWwgICAtIFwic291cmNlOl5naXRodWIuKlwiICAgICAgICAgICAgICMgaW5zcGVjdCBvZiBhbGwgYXJndW1lbnRzIHNvdXJjZWQgZnJvbSBHaXRIdWIgYWdhaW5zdCB0aGlzIGxpc3QgICAtIFwic291cmNlOl4oPyEvZXRjL2xvZzEweC8pLipcIiAgICMgaW5zcGVjdCBvZiBhbGwgYXJndW1lbnRzIHNvdXJjZWQgZnJvbSBjb25maWcgZmlsZXMgTk9UIGNvbnRhaW5lZCBpbjogL2V0Yy9sb2cxMHgvIGBgYCIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJkZWJ1Z0VudlZhcnMiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3QgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGRlYnVnXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgZW52IHZhciBuYW1lcyBmb3Igd2hpY2ggdG8gbG9nIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIGhvdyB0aGV5IGFyZSByZXNvbHZlZC4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY2FsbDogYEwxRW52LmdldChcIm15VmFyXCIsIFwibXlEZWZhdWx0XCIpYCBjYW4gYmUgcmVzb2x2ZWQgZnJvbSBhIG51bWJlciBvZiBbc291cmNlc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhFbnYuZ2V0KSByYW5naW5nIGZyb20gbGF1bmNoIGFyZ3VtZW50cywgdG8gT1MvSlZNIHByb3BlcnRpZXMgYW5kIGEgZGVmYXVsdCB2YWx1ZSAoZS5nLiwgbXlEZWZhdWx0KS4gIFNldHRpbmcgdGhpcyB2YWx1ZSB0byBgbXlWYXJgIHdpbGwgbG9nIElORk8gbGV2ZWwgaW5mb3JtYXRpb24gZGV0YWlsaW5nIGhvdyB0aGUgdmFsdWUgb2YgdGhlIGBteVZhcmAgd2FzIHJlc29sdmVkLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfQogIH0sCiAgInJlcXVpcmVkIiA6IFsKICAgICJ0ZW54IgogIF0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=</template>
147
+ <template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTmFtZSBvZiBwaXBlbGluZSB0byBleGVjdXRlXG5cblRhcmdldCBbcGlwZWxpbmVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vZW5naW5lL3BpcGVsaW5lLykgdG8gZXhlY3V0ZS4gRm9yIGV4YW1wbGUsIHRvIHNwZWNpZnkgdGhlIFtydW5dKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuLykgcGlwZWxpbmUgYW5kIGEgW1lBTUxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnL3lhbWwvKSBjb25maWcgZmlsZSBjb250YWluaW5nIGxhdW5jaCBhcmd1bWVudHMsIHVzZTogIGBgYCBjb25zb2xlICQgdGVueCBydW4gQH4vbXkueWFtbCBgYGAgVGhlIFlBTUwgZmlsZSBtYXkgc3BlY2lmeSB0aGUgcGlwZWxpbmUgbmFtZSB2aWEgYSAndGVueCcgZW50cnksIGFsbG93aW5nIHRoZSAncGlwZWxpbmUnIGFyZ3VtZW50IHRvIGJlIG9taXR0ZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUgKG15LnlhbWwpOiAgYGBgIHlhbWwgdGVueDogcnVuICMgc2V0IHRoZSBwaXBlbGluZSB0byAncnVuJyBsaWNlbnNlS2V5OiA8bXktbGljZW5zZS1qd3Q+IC4uLiBgYGAgIEFsbG93cyBmb3IgbGF1bmNoaW5nIHRoZSBydW4gcGlwZWxpbmUgdmlhOiBgYGAgY29uc29sZSAkIHRlbnggQH4vbXkueWFtbCBgYGAiCiAgICB9LAogICAgImxpY2Vuc2UiIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgImZpbGUiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlBhdGggdG8gYSBmaWxlIGNvbnRhaW5pbmcgdGhlIDEweCBsaWNlbnNlIEpXVFxuXG5QYXRoIHRvIGEgZmlsZSBjb250YWluaW5nIHRoZSBzaWduZWQgMTB4IGxpY2Vuc2UgSldULiBQcmVmZXJyZWQgb3ZlciBgbGljZW5zZUtleWAgZm9yIHByb2R1Y3Rpb246IHRoZSB0b2tlbiBpcyBub3QgdmlzaWJsZSBpbiBgcHNgIG91dHB1dCBhbmQgaXMgZWFzeSB0byByb3RhdGUgYnkgcmVwbGFjaW5nIHRoZSBmaWxlLiAgV2l0aG91dCBhIGxpY2Vuc2UgdGhlIGVuZ2luZSBydW5zIG9uIHRoZSBidWlsdC1pbiAzMC1kYXkgZXZhbHVhdGlvbiBsaWNlbnNlLiBTZWUgW2xpY2Vuc2luZ10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9tYW5hZ2UvbGljZW5zZS8pIGZvciBwcm9kdWN0aW9uIGxpY2Vuc2VzLiAgSWYgYm90aCBgbGljZW5zZUZpbGVgIGFuZCBgbGljZW5zZUtleWAgYXJlIHByb3ZpZGVkLCB0aGUgZmlsZSB3aW5zLiIKICAgICAgICB9LAogICAgICAgICJrZXkiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIjEweCBsaWNlbnNlIEpXVCAoaW5saW5lKVxuXG5UaGUgc2lnbmVkIDEweCBsaWNlbnNlIEpXVCwgcGFzc2VkIGlubGluZS4gRGlzY291cmFnZWQgb24gdGhlIGNvbW1hbmQgbGluZSBiZWNhdXNlIHRoZSB2YWx1ZSBpcyB2aXNpYmxlIGluIGBwc2Agb3V0cHV0OyBwcmVmZXIgYGxpY2Vuc2VGaWxlYCBpbiBwcm9kdWN0aW9uLiAgV2l0aG91dCBhIGxpY2Vuc2UgdGhlIGVuZ2luZSBydW5zIG9uIHRoZSBidWlsdC1pbiAzMC1kYXkgZXZhbHVhdGlvbiBsaWNlbnNlLiBTZWUgW2xpY2Vuc2luZ10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9tYW5hZ2UvbGljZW5zZS8pIGZvciBwcm9kdWN0aW9uIGxpY2Vuc2VzLiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiYWlyZ2FwcGVkIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJib29sZWFuIiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlJ1biB3aXRob3V0IGNvbnRhY3RpbmcgdGhlIDEweCBzZXJ2aWNlXG5cbldoZW4gYHRydWVgLCB0aGUgbGljZW5zZSBpcyB2ZXJpZmllZCBsb2NhbGx5IChzaWduYXR1cmUgKyBjbGFpbXMpIGFuZCBubyBjYWxscyBhcmUgbWFkZSB0byB0aGUgMTB4IHNlcnZpY2U6IG5vIHN0YXJ0dXAgdmFsaWRhdGlvbiwgbm8gbWV0cmljcyByZXBvcnRpbmcsIG5vIHVzZXItYXR0cmlidXRlIGVucmljaG1lbnQuIFN1aXRhYmxlIGZvciBmdWxseSBhaXJnYXBwZWQgZGVwbG95bWVudHMgd2hlcmUgdGhlIGVuZ2luZSBoYXMgbm8gcGF0aCB0byB0aGUgdmVuZG9yIFNhYVMuICBXaGVuIGBmYWxzZWAgKGRlZmF1bHQpLCB0aGUgZW5naW5lIGFkZGl0aW9uYWxseSBjYWxscyB0aGUgMTB4IHNlcnZpY2UgYXQgc3RhcnR1cCwgYW5kIG9ubHkgd2hlbiBhIHNlcnZpY2UgZW5kcG9pbnQgaXMgYWN0dWFsbHkgY29uZmlndXJlZDsgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBuYW1lcyBub25lLCBzbyBhbiB1bmNvbmZpZ3VyZWQgZW5naW5lIG1ha2VzIG5vIGNhbGwgZWl0aGVyIHdheS4gVGhlIGNhbGwgaXMgYmVzdC1lZmZvcnQgZW5yaWNobWVudDogdGhlIGxvY2FsIHZlcmlmaWNhdGlvbiBpcyB0aGUgZ2F0ZSwgYW5kIGEgc2VydmljZSB0aGF0IGNhbm5vdCBiZSByZWFjaGVkLCBvciB0aGF0IGFuc3dlcnMgd2l0aCBhbiBlcnJvciwgcHJvZHVjZXMgYSB3YXJuaW5nIGFuZCB0aGUgZW5naW5lIHJ1bnMuICBBaXJnYXBwZWQgbW9kZSBpcyBob25vcmVkIGZvciBldmVyeSBsaWNlbnNlIHR5cGUuIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiBmYWxzZSkiLAogICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgfSwKICAgICJtZXRyaWNFbmRwb2ludCIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIjEweCBzZXJ2aWNlIFByb21ldGhldXMgbWV0cmljcyBlbmRwb2ludFxuXG5TcGVjaWZpZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIFByb21ldGhldXMgcmVtb3RlIHdyaXRlIGVuZHBvaW50IHRvIHdyaXRlIHBpcGVsaW5lIHVzYWdlIGFuZCBoZWFsdGggbWV0cmljcy4gIFVuc2V0IGJ5IGRlZmF1bHQ6IGFuIGVuZ2luZSB3aXRoIG5vIG1ldHJpYyBlbmRwb2ludCBjb25maWd1cmVkIGNvbGxlY3RzIG1ldHJpY3MgbG9jYWxseSBhbmQgc2VuZHMgdGhlbSBub3doZXJlLiAgISEhIG5vdGUgXCJcIiAgICAgIFRoaXMgYXJndW1lbnQgaXMgb25seSBzZXR0YWJsZSBpbiB0aGUgMTB4ICdvbi1wcmVtaXNlcycgYnVpbGQuIgogICAgfSwKICAgICJydW50aW1lIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJOYW1lIHRvIHJlcG9ydCB0byB0aGUgMTB4IHNlcnZpY2UgZW5kcG9pbnQgZm9yIHRoaXMgcnVudGltZSBpbnN0YW5jZVxuXG5TcGVjaWZpZXMgYSBsb2dpY2FsIG5hbWUgdXNlZCBhcyBhIFt0YWcgdmFsdWVdKGh0dHBzOi8vd3d3LmJhZWxkdW5nLmNvbS9taWNyb21ldGVyIzQtbWV0ZXJzKSBmb3IgcGlwZWxpbmUgbWV0cmljcy4gVGhpcyB2YWx1ZSBpZGVudGlmaWVzIGluc3RhbmNlcyBvZiB0aGUgMTB4IHJ1bi9jb21waWxlIHBpcGVsaW5lcyB3aGVuIHJlcG9ydGluZyB0byB0aGUgMTB4IHNlcnZpY2UuIEZvciBleGFtcGxlLCBmb3IgYSAxMHggW1JlY2VpdmVyXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwcHMvcmVjZWl2ZXIvKSB3aXRoIG9wdGltaXphdGlvbiBlbmFibGVkIGZvciBGbHVlbnQgQml0IGZvcndhcmRlcnMgY29sbGVjdGluZyBldmVudHMgZnJvbSBhIGBicm9rZXJgIHVzZXItYXBwLCB0aGlzIHZhbHVlIGNhbiBiZSBzZXQgdG86IGByZWNlaXZlX2ZsdWVudGJpdF9icm9rZXJgIgogICAgICAgIH0sCiAgICAgICAgImF0dHJpYnV0ZXMiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgYXR0cmlidXRlcyB0byBhZGQgdG8gYWxsIG1ldHJpY3MgcmVwb3J0aW5nXG5cblNwZWNpZmllcyBhIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzIGluIHRoZSBmb3JtYXQgYGtleTp2YWx1ZWAgdG8gYmUgYWRkZWQgYXMgdGFncyB0byBwaXBlbGluZSBtZXRyaWNzIHJlcG9ydGVkIHRvIHRoZSAxMHggc2VydmljZS4gVGhlc2UgdGFncyBlbmFibGUgZmluZXItZ3JhaW5lZCBmaWx0ZXJpbmcgYW5kIGFuYWx5c2lzIGluIG1vbml0b3Jpbmcgc3lzdGVtcyBsaWtlIFByb21ldGhldXMuIE11bHRpcGxlIGF0dHJpYnV0ZXMgY2FuIGJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgc3RyaW5nIHVzaW5nIGEgc2VtaWNvbG9uIChgO2ApLCBlLmcuLCBga2V5MTp2YWwxO2tleTI6dmFsMmAuICBJZiBhIGtleSBkb2VzIG5vdCBzdGFydCB3aXRoIHRlbnhfLCB0aGUgcHJlZml4IHRlbnhfIGlzIGF1dG9tYXRpY2FsbHkgcHJlcGVuZGVkIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBpbiB0YWcgbmFtaW5nIGNvbnZlbnRpb25zLiBGb3IgZXhhbXBsZSwgYSBwcm92aWRlZCBhdHRyaWJ1dGUgYXBwOm15LWFwcCB3aWxsIGJlIHJlcG9ydGVkIGFzIHRlbnhfYXBwOm15LWFwcCAgYGBgIHlhbWwgICBydW50aW1lQXR0cmlidXRlczogICAgIC0gYXBwOnJlcG9ydGVyICAgICAtIGVudjplZGdlIGBgYCIsCiAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJpbmNsdWRlUGF0aHMiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlBpcGVsaW5lIGluY2x1ZGUgZm9sZGVyc1xuXG5TcGVjaWZpZXMgZm9sZGVycyBvbiBkaXNrIGZvciByZXNvbGluZyByZWxhdGl2ZSByZWZlcmVuY2VzIHdpdGhpbiBbaW5jbHVkZSBkaXJlY3RpdmVzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbmZpZy95YW1sLyNpbmNsdWRlLWRpcmVjdGl2ZXMpLiAoRGVmYXVsdDogW1wid29ya2luZyBkaXJlY3Rvcnkgb2YgY3VycmVudCBwcm9jZXNzXCJdKSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfSwKICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICJ3b3JraW5nIGRpcmVjdG9yeSBvZiBjdXJyZW50IHByb2Nlc3MiCiAgICAgIF0KICAgIH0sCiAgICAiamFyRmlsZXMiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkphciBmaWxlcyB0byBsb2FkXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgLmphciBmaWxlcyB0byBsb2FkIGludG8gdGhlIGhvc3QgSlZNIGZvciB1c2UgYnkgW2NvbXBpbGVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2NvbXBpbGUvKSwgW2lucHV0XShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9pbnB1dC8pIGFuZCBbb3V0cHV0XShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9vdXRwdXQvKSBBUEkgZXh0ZW5zaW9ucy4gICEhISBub3RlIFwiXCIgICAgICBUaGlzIGFyZ3VtZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIFtSdW50aW1lXShodHRwczovL2RvYy5sb2cxMHguY29tL2VuZ2luZS9mbGF2b3JzLyNydW50aW1lKSBmbGF2b3IuIiwKICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICB9CiAgICB9LAogICAgInF1aWV0IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJib29sZWFuIiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkRpc2FibGUgcHJpbnRpbmcgYmluYXJ5IHZlcnNpb24gaW5mb3JtYXRpb24gdG8gdGhlIGNvbnNvbGVcblxuRGlzYWJsZSBwcmludGluZyBidWlsZC92ZXJzaW9uIGluZm9ybWF0aW9uIHRvIHRoZSBjb25zb2xlIHVwb24gbGF1bmNoIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiBmYWxzZSkiLAogICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgfSwKICAgICJkaXNhYmxlZEFyZ3MiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpbWl0IGFyZ3VtZW50IHZhbHVlcyB0aGF0IGNhbiBiZSBzZXQgYnkgdXNlcnNcblxuU3BlY2lmaWVzIGEgbGlzdCBvZiBsYXVuY2ggYXJndW1lbnRzIHRoYXQgYXJlIGRpc2FsbG93ZWQgZnJvbSBlaXRoZXIgY29tbWFuZCBsaW5lIG9yIHVzZXIgY29uZmlnIGZpbGVzLiBUaGlzIGFyZ3VtZW50IHByb3ZpZGVzIGEgbWV0aG9kIG9mIGxpbWl0aW5nIHRoZSB0YXJnZXQgW3BpcGVsaW5lXShodHRwczovL2RvYy5sb2cxMHguY29tL3NoYXJlZC9ib290c3RyYXAvI3BpcGVsaW5lKSwgW3NvdXJjZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb25maWcvI3NvdXJjZXMpIGFuZCBhbmQgW2NvbW1hbmQgbGluZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb25maWcvY2xpLykgc2V0dGFibGUgYnkgdGhlIHVzZXIuICBUaGlzIG1lY2hhbmlzbSBlbmFibGVzIHBpcGVsaW5lIGxhdW5jaGVycyBzdWNoIGFzIHRoZSBbUXVhcmt1cyBsYXVuY2hlcl0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvbGF1bmNoLyNxdWFya3VzKSB0byBsaW1pdCB1c2VyIGlucHV0IHJlY2VpdmVkIHZpYSBSRVNUIHJlcXVlc3RzIHRvIGEgdGFyZ2V0IHN1YnNldCBvZiAnc2FmZScgYXJndW1lbnRzLiAgRm9yIGV4YW1wbGUsIGFkZGluZyBbcHJvY091dENvbW1hbmRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL291dHB1dC9ldmVudC9wcm9jZXNzLyNwcm9jb3V0Y29tbWFuZCkgdG8gdGhpcyBsaXN0IGVuc3VyZXMgdGhhdCBubyBleHRlcm5hbCBwcm9jZXNzIG91dHB1dHMgY2FuIGJlIGxhdW5jaGVkIGJ5IHRoZSBydW50aW1lLiAgQW4gb3B0aW9uYWwgcmVnZXggcGF0dGVybiBjYW4gbGltaXQgYXJndW1lbnRzIHRvIGEgY2VydGFpbiBzdWJzZXQgb2YgdmFsdWVzIGluIHRoZSBmb3JtIG9mOiBgPGFyZy1uYW1lPls6cGF0dGVybl1gIChlLmcuLCBzcGVjaWZpYyBwcm9jZXNzIG5hbWVzKS4gTXVsdGlwbGUgcGF0dGVybnMgY2FuIGJlIHNwZWNpZmllZCBwZXIgYXJndW1lbnQuICBNYXRjaGluZyB0aGUgYHNvdXJjZWAgYXJndW1lbnQgZGV0ZXJtaW5lcyB3aGljaCBzb3VyY2UgbG9jYXRpb25zIHRvIGluc3BlY3QgKGUuZy4sIGZvbGRlcnMsIGZpbGVzLCBHaXRIdWIgcmVwb3MpLiBGb3IgZXhhbXBsZSwgYW4gYWRtaW4gbWF5IHBsYWNlIC55YW1sIGNvbmZpZyBmaWxlcyBjb250YWluaW5nIHByZXNldCBGbHVlbnQgQml0IG91dHB1dHMgaW4gYC9ldGMvbG9nMTB4L2AsIGV4Y2x1ZGluZyB0aGVpciBlbmNsb3NlZCBhcmd1bWVudHMgZnJvbSBsaW1pdHMgc2V0IGJ5IHRoaXMgbGlzdCwgd2hpbGUgZGlzYWxsb3dpbmcgdXNlcnMgdG8gZGlyZWN0bHkgc2V0IHRoZW0gdmlhIHRoZSBjb21tYW5kLWxpbmUgb3IgYnkgc291cmNpbmcgdGhlbSBmcm9tIHRoZWlyIGxvY2FsL0dpdEh1YiBjb25maWcgZmlsZXMgKHNlZSBleGFtcGxlIGJlbG93KS4gIFRvIGxpbWl0OiAgVGhlIHRhcmdldCBwaXBlbGluZSAoZS5nLiwgW3J1bl0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vKSwgW2NvbXBpbGVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS8pKTogIGBgYCB5YW1sICAgZGlzYWJsZWRBcmdzOiAgIC0gXCJwaXBlbGluZTpecnVuXCIgIyBkaXNhbGxvdyBjb21waWxlIGBgYCAgVGFyZ2V0IGFyZ3VtZW50cyAoZS5nLiwgW3Byb2Nlc3Mgb3V0cHV0c10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vb3V0cHV0L2V2ZW50L3Byb2Nlc3MvKSk6ICBgYGAgeWFtbCAgIC0gXCJwcm9jT3V0Q29tbWFuZDpeZmx1ZW50LWJpdCRcIiAgICMgbGltaXQgdG8gRmx1ZW50IEJpdCBvbmx5ICAgIyAtIHByb2NPdXRBcmdzOiA8c3BlY2lmeS1yZWdleD4gICMgZnVydGhlciBsaW1pdCBhcmdzIGZvciBGbHVlbnQgQml0IGBgYCAgQ29udHJvbCB3aGljaCBhcmd1bWVudCBbc291cmNlc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb25maWcvI3NvdXJjZXMpIHRvIGluc3BlY3Q6ICBgYGAgeWFtbCAgIC0gXCJzb3VyY2U6XmdpdGh1Yi4qXCIgICAgICAgICAgICAgIyBpbnNwZWN0IG9mIGFsbCBhcmd1bWVudHMgc291cmNlZCBmcm9tIEdpdEh1YiBhZ2FpbnN0IHRoaXMgbGlzdCAgIC0gXCJzb3VyY2U6Xig/IS9ldGMvbG9nMTB4LykuKlwiICAgIyBpbnNwZWN0IG9mIGFsbCBhcmd1bWVudHMgc291cmNlZCBmcm9tIGNvbmZpZyBmaWxlcyBOT1QgY29udGFpbmVkIGluOiAvZXRjL2xvZzEweC8gYGBgIiwKICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICB9CiAgICB9LAogICAgImRlYnVnRW52VmFycyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiLAogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTGlzdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gZGVidWdcblxuU3BlY2lmaWVzIGEgbGlzdCBvZiBlbnYgdmFyIG5hbWVzIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gaG93IHRoZXkgYXJlIHJlc29sdmVkLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjYWxsOiBgTDFFbnYuZ2V0KFwibXlWYXJcIiwgXCJteURlZmF1bHRcIilgIGNhbiBiZSByZXNvbHZlZCBmcm9tIGEgbnVtYmVyIG9mIFtzb3VyY2VzXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWEVudi5nZXQpIHJhbmdpbmcgZnJvbSBsYXVuY2ggYXJndW1lbnRzLCB0byBPUy9KVk0gcHJvcGVydGllcyBhbmQgYSBkZWZhdWx0IHZhbHVlIChlLmcuLCBteURlZmF1bHQpLiAgU2V0dGluZyB0aGlzIHZhbHVlIHRvIGBteVZhcmAgd2lsbCBsb2cgSU5GTyBsZXZlbCBpbmZvcm1hdGlvbiBkZXRhaWxpbmcgaG93IHRoZSB2YWx1ZSBvZiB0aGUgYG15VmFyYCB3YXMgcmVzb2x2ZWQuIiwKICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICB9CiAgICB9CiAgfSwKICAicmVxdWlyZWQiIDogWwogICAgInRlbngiCiAgXSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==</template>
148
148
 
149
149
  ```yaml
150
150
  # 🔟❎ run bootstrap configuration
@@ -179,8 +179,10 @@ To configure the Pipeline Bootstrapper unit, [:material-cog: Edit](https://doc.l
179
179
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
180
180
  jarFiles: []
181
181
 
182
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
183
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
182
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
183
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
184
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
185
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
184
186
 
185
187
  # 'disabledArgs' specifies a list of launch arguments that are disallowed from either command line or user config files.
186
188
  disabledArgs: []
@@ -323,7 +325,7 @@ To configure the Pipeline Bootstrapper unit, [:material-cog: Edit](https://doc.l
323
325
  </div>
324
326
  </dialog>
325
327
 
326
- <template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTmFtZSBvZiBwaXBlbGluZSB0byBleGVjdXRlXG5cblRhcmdldCBbcGlwZWxpbmVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vZW5naW5lL3BpcGVsaW5lLykgdG8gZXhlY3V0ZS4gRm9yIGV4YW1wbGUsIHRvIHNwZWNpZnkgdGhlIFtydW5dKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuLykgcGlwZWxpbmUgYW5kIGEgW1lBTUxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnL3lhbWwvKSBjb25maWcgZmlsZSBjb250YWluaW5nIGxhdW5jaCBhcmd1bWVudHMsIHVzZTogIGBgYCBjb25zb2xlICQgdGVueCBydW4gQH4vbXkueWFtbCBgYGAgVGhlIFlBTUwgZmlsZSBtYXkgc3BlY2lmeSB0aGUgcGlwZWxpbmUgbmFtZSB2aWEgYSAndGVueCcgZW50cnksIGFsbG93aW5nIHRoZSAncGlwZWxpbmUnIGFyZ3VtZW50IHRvIGJlIG9taXR0ZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUgKG15LnlhbWwpOiAgYGBgIHlhbWwgdGVueDogcnVuICMgc2V0IHRoZSBwaXBlbGluZSB0byAncnVuJyBsaWNlbnNlS2V5OiA8bXktbGljZW5zZS1qd3Q+IC4uLiBgYGAgIEFsbG93cyBmb3IgbGF1bmNoaW5nIHRoZSBydW4gcGlwZWxpbmUgdmlhOiBgYGAgY29uc29sZSAkIHRlbnggQH4vbXkueWFtbCBgYGAiCiAgICB9LAogICAgImxpY2Vuc2UiIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgImZpbGUiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlBhdGggdG8gYSBmaWxlIGNvbnRhaW5pbmcgdGhlIDEweCBsaWNlbnNlIEpXVFxuXG5QYXRoIHRvIGEgZmlsZSBjb250YWluaW5nIHRoZSBzaWduZWQgMTB4IGxpY2Vuc2UgSldULiBQcmVmZXJyZWQgb3ZlciBgbGljZW5zZUtleWAgZm9yIHByb2R1Y3Rpb246IHRoZSB0b2tlbiBpcyBub3QgdmlzaWJsZSBpbiBgcHNgIG91dHB1dCBhbmQgaXMgZWFzeSB0byByb3RhdGUgYnkgcmVwbGFjaW5nIHRoZSBmaWxlLiAgRG93bmxvYWQgYSBsaWNlbnNlIGZyb20geW91ciBbYWNjb3VudF0oaHR0cHM6Ly9jb25zb2xlLmxvZzEweC5jb20pLiAgSWYgYm90aCBgbGljZW5zZUZpbGVgIGFuZCBgbGljZW5zZUtleWAgYXJlIHByb3ZpZGVkLCB0aGUgZmlsZSB3aW5zLiIKICAgICAgICB9LAogICAgICAgICJrZXkiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIjEweCBsaWNlbnNlIEpXVCAoaW5saW5lKVxuXG5UaGUgc2lnbmVkIDEweCBsaWNlbnNlIEpXVCwgcGFzc2VkIGlubGluZS4gRGlzY291cmFnZWQgb24gdGhlIGNvbW1hbmQgbGluZSBiZWNhdXNlIHRoZSB2YWx1ZSBpcyB2aXNpYmxlIGluIGBwc2Agb3V0cHV0OyBwcmVmZXIgYGxpY2Vuc2VGaWxlYCBpbiBwcm9kdWN0aW9uLiAgRG93bmxvYWQgYSBsaWNlbnNlIGZyb20geW91ciBbYWNjb3VudF0oaHR0cHM6Ly9jb25zb2xlLmxvZzEweC5jb20pLiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiYWlyZ2FwcGVkIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJib29sZWFuIiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlJ1biB3aXRob3V0IGNvbnRhY3RpbmcgdGhlIDEweCBzZXJ2aWNlXG5cbldoZW4gYHRydWVgLCB0aGUgbGljZW5zZSBpcyB2ZXJpZmllZCBsb2NhbGx5IChzaWduYXR1cmUgKyBjbGFpbXMpIGFuZCBubyBjYWxscyBhcmUgbWFkZSB0byB0aGUgMTB4IHNlcnZpY2U6IG5vIHN0YXJ0dXAgdmFsaWRhdGlvbiwgbm8gbWV0cmljcyByZXBvcnRpbmcsIG5vIHVzZXItYXR0cmlidXRlIGVucmljaG1lbnQuIFN1aXRhYmxlIGZvciBmdWxseSBhaXJnYXBwZWQgZGVwbG95bWVudHMgd2hlcmUgdGhlIGVuZ2luZSBoYXMgbm8gcGF0aCB0byB0aGUgdmVuZG9yIFNhYVMuICBXaGVuIGBmYWxzZWAgKGRlZmF1bHQpLCB0aGUgZW5naW5lIGFkZGl0aW9uYWxseSB2YWxpZGF0ZXMgdGhlIGxpY2Vuc2UgYWdhaW5zdCB0aGUgMTB4IHNlcnZpY2UgYXQgc3RhcnR1cDsgYSBub24tMnh4IHJlc3BvbnNlIHJlZnVzZXMgdG8gc3RhcnQuICBgZGVtb2AgYW5kIGBsaW1pdGVkYCBsaWNlbnNlIHR5cGVzIGNhbm5vdCBydW4gYWlyZ2FwcGVkLCBpZiBgYWlyZ2FwcGVkOiB0cnVlYCBpcyBzZXQgd2l0aCBvbmUgb2YgdGhlc2UgbGljZW5zZSB0eXBlcywgYSB3YXJuaW5nIGlzIGxvZ2dlZCBhbmQgdGhlIGVuZ2luZSBydW5zIGluIG9ubGluZSBtb2RlIGFueXdheS4gKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IGZhbHNlKSIsCiAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICB9LAogICAgIm1ldHJpY0VuZHBvaW50IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiMTB4IHNlcnZpY2UgUHJvbWV0aGV1cyBtZXRyaWNzIGVuZHBvaW50XG5cblNwZWNpZmllcyB0aGUgYWRkcmVzcyBvZiB0aGUgUHJvbWV0aGV1cyByZW1vdGUgd3JpdGUgZW5kcG9pbnQgdG8gd3JpdGUgcGlwZWxpbmUgdXNhZ2UgYW5kIGhlYWx0aCBtZXRyaWNzLiAgISEhIG5vdGUgXCJcIiAgICAgIFRoaXMgYXJndW1lbnQgaXMgb25seSBzZXR0YWJsZSBpbiB0aGUgMTB4ICdvbi1wcmVtaXNlcycgYnVpbGQuIChEZWZhdWx0OiBodHRwczovL3Byb21ldGhldXMubG9nMTB4LmNvbS9hcGkvdjEvd3JpdGUpIiwKICAgICAgImRlZmF1bHQiIDogImh0dHBzOi8vcHJvbWV0aGV1cy5sb2cxMHguY29tL2FwaS92MS93cml0ZSIKICAgIH0sCiAgICAicnVudGltZSIgOiB7CiAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAibmFtZSIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTmFtZSB0byByZXBvcnQgdG8gdGhlIDEweCBzZXJ2aWNlIGVuZHBvaW50IGZvciB0aGlzIHJ1bnRpbWUgaW5zdGFuY2VcblxuU3BlY2lmaWVzIGEgbG9naWNhbCBuYW1lIHVzZWQgYXMgYSBbdGFnIHZhbHVlXShodHRwczovL3d3dy5iYWVsZHVuZy5jb20vbWljcm9tZXRlciM0LW1ldGVycykgZm9yIHBpcGVsaW5lIG1ldHJpY3MuIFRoaXMgdmFsdWUgaWRlbnRpZmllcyBpbnN0YW5jZXMgb2YgdGhlIDEweCBydW4vY29tcGlsZSBwaXBlbGluZXMgd2hlbiByZXBvcnRpbmcgdG8gdGhlIDEweCBzZXJ2aWNlLiBGb3IgZXhhbXBsZSwgZm9yIGEgMTB4IFtSZWNlaXZlcl0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcHBzL3JlY2VpdmVyLykgd2l0aCBvcHRpbWl6YXRpb24gZW5hYmxlZCBmb3IgRmx1ZW50IEJpdCBmb3J3YXJkZXJzIGNvbGxlY3RpbmcgZXZlbnRzIGZyb20gYSBgYnJva2VyYCB1c2VyLWFwcCwgdGhpcyB2YWx1ZSBjYW4gYmUgc2V0IHRvOiBgcmVjZWl2ZV9mbHVlbnRiaXRfYnJva2VyYCIKICAgICAgICB9LAogICAgICAgICJhdHRyaWJ1dGVzIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGF0dHJpYnV0ZXMgdG8gYWRkIHRvIGFsbCBtZXRyaWNzIHJlcG9ydGluZ1xuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycyBpbiB0aGUgZm9ybWF0IGBrZXk6dmFsdWVgIHRvIGJlIGFkZGVkIGFzIHRhZ3MgdG8gcGlwZWxpbmUgbWV0cmljcyByZXBvcnRlZCB0byB0aGUgMTB4IHNlcnZpY2UuIFRoZXNlIHRhZ3MgZW5hYmxlIGZpbmVyLWdyYWluZWQgZmlsdGVyaW5nIGFuZCBhbmFseXNpcyBpbiBtb25pdG9yaW5nIHN5c3RlbXMgbGlrZSBQcm9tZXRoZXVzLiBNdWx0aXBsZSBhdHRyaWJ1dGVzIGNhbiBiZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIHN0cmluZyB1c2luZyBhIHNlbWljb2xvbiAoYDtgKSwgZS5nLiwgYGtleTE6dmFsMTtrZXkyOnZhbDJgLiAgSWYgYSBrZXkgZG9lcyBub3Qgc3RhcnQgd2l0aCB0ZW54XywgdGhlIHByZWZpeCB0ZW54XyBpcyBhdXRvbWF0aWNhbGx5IHByZXBlbmRlZCB0byBlbnN1cmUgY29uc2lzdGVuY3kgaW4gdGFnIG5hbWluZyBjb252ZW50aW9ucy4gRm9yIGV4YW1wbGUsIGEgcHJvdmlkZWQgYXR0cmlidXRlIGFwcDpteS1hcHAgd2lsbCBiZSByZXBvcnRlZCBhcyB0ZW54X2FwcDpteS1hcHAgIGBgYCB5YW1sICAgcnVudGltZUF0dHJpYnV0ZXM6ICAgICAtIGFwcDpyZXBvcnRlciAgICAgLSBlbnY6ZWRnZSBgYGAiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiaW5jbHVkZVBhdGhzIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJhcnJheSIsCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJQaXBlbGluZSBpbmNsdWRlIGZvbGRlcnNcblxuU3BlY2lmaWVzIGZvbGRlcnMgb24gZGlzayBmb3IgcmVzb2xpbmcgcmVsYXRpdmUgcmVmZXJlbmNlcyB3aXRoaW4gW2luY2x1ZGUgZGlyZWN0aXZlc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb25maWcveWFtbC8jaW5jbHVkZS1kaXJlY3RpdmVzKS4gKERlZmF1bHQ6IFtcIndvcmtpbmcgZGlyZWN0b3J5IG9mIGN1cnJlbnQgcHJvY2Vzc1wiXSkiLAogICAgICAiaXRlbXMiIDogewogICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgIH0sCiAgICAgICJkZWZhdWx0IiA6IFsKICAgICAgICAid29ya2luZyBkaXJlY3Rvcnkgb2YgY3VycmVudCBwcm9jZXNzIgogICAgICBdCiAgICB9LAogICAgImphckZpbGVzIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJhcnJheSIsCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJKYXIgZmlsZXMgdG8gbG9hZFxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIC5qYXIgZmlsZXMgdG8gbG9hZCBpbnRvIHRoZSBob3N0IEpWTSBmb3IgdXNlIGJ5IFtjb21waWxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9jb21waWxlLyksIFtpbnB1dF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvaW5wdXQvKSBhbmQgW291dHB1dF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvb3V0cHV0LykgQVBJIGV4dGVuc2lvbnMuICAhISEgbm90ZSBcIlwiICAgICAgVGhpcyBhcmd1bWVudCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBbUnVudGltZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9lbmdpbmUvZmxhdm9ycy8jcnVudGltZSkgZmxhdm9yLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJxdWlldCIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYm9vbGVhbiIsCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEaXNhYmxlIHByaW50aW5nIGJpbmFyeSB2ZXJzaW9uIGluZm9ybWF0aW9uIHRvIHRoZSBjb25zb2xlXG5cbkRpc2FibGUgcHJpbnRpbmcgYnVpbGQvdmVyc2lvbiBpbmZvcm1hdGlvbiB0byB0aGUgY29uc29sZSB1cG9uIGxhdW5jaCAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogZmFsc2UpIiwKICAgICAgImRlZmF1bHQiIDogZmFsc2UKICAgIH0sCiAgICAiZGlzYWJsZWRBcmdzIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJhcnJheSIsCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaW1pdCBhcmd1bWVudCB2YWx1ZXMgdGhhdCBjYW4gYmUgc2V0IGJ5IHVzZXJzXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgbGF1bmNoIGFyZ3VtZW50cyB0aGF0IGFyZSBkaXNhbGxvd2VkIGZyb20gZWl0aGVyIGNvbW1hbmQgbGluZSBvciB1c2VyIGNvbmZpZyBmaWxlcy4gVGhpcyBhcmd1bWVudCBwcm92aWRlcyBhIG1ldGhvZCBvZiBsaW1pdGluZyB0aGUgdGFyZ2V0IFtwaXBlbGluZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9zaGFyZWQvYm9vdHN0cmFwLyNwaXBlbGluZSksIFtzb3VyY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnLyNzb3VyY2VzKSBhbmQgYW5kIFtjb21tYW5kIGxpbmVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnL2NsaS8pIHNldHRhYmxlIGJ5IHRoZSB1c2VyLiAgVGhpcyBtZWNoYW5pc20gZW5hYmxlcyBwaXBlbGluZSBsYXVuY2hlcnMgc3VjaCBhcyB0aGUgW1F1YXJrdXMgbGF1bmNoZXJdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2xhdW5jaC8jcXVhcmt1cykgdG8gbGltaXQgdXNlciBpbnB1dCByZWNlaXZlZCB2aWEgUkVTVCByZXF1ZXN0cyB0byBhIHRhcmdldCBzdWJzZXQgb2YgJ3NhZmUnIGFyZ3VtZW50cy4gIEZvciBleGFtcGxlLCBhZGRpbmcgW3Byb2NPdXRDb21tYW5kXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9vdXRwdXQvZXZlbnQvcHJvY2Vzcy8jcHJvY291dGNvbW1hbmQpIHRvIHRoaXMgbGlzdCBlbnN1cmVzIHRoYXQgbm8gZXh0ZXJuYWwgcHJvY2VzcyBvdXRwdXRzIGNhbiBiZSBsYXVuY2hlZCBieSB0aGUgcnVudGltZS4gIEFuIG9wdGlvbmFsIHJlZ2V4IHBhdHRlcm4gY2FuIGxpbWl0IGFyZ3VtZW50cyB0byBhIGNlcnRhaW4gc3Vic2V0IG9mIHZhbHVlcyBpbiB0aGUgZm9ybSBvZjogYDxhcmctbmFtZT5bOnBhdHRlcm5dYCAoZS5nLiwgc3BlY2lmaWMgcHJvY2VzcyBuYW1lcykuIE11bHRpcGxlIHBhdHRlcm5zIGNhbiBiZSBzcGVjaWZpZWQgcGVyIGFyZ3VtZW50LiAgTWF0Y2hpbmcgdGhlIGBzb3VyY2VgIGFyZ3VtZW50IGRldGVybWluZXMgd2hpY2ggc291cmNlIGxvY2F0aW9ucyB0byBpbnNwZWN0IChlLmcuLCBmb2xkZXJzLCBmaWxlcywgR2l0SHViIHJlcG9zKS4gRm9yIGV4YW1wbGUsIGFuIGFkbWluIG1heSBwbGFjZSAueWFtbCBjb25maWcgZmlsZXMgY29udGFpbmluZyBwcmVzZXQgRmx1ZW50IEJpdCBvdXRwdXRzIGluIGAvZXRjL2xvZzEweC9gLCBleGNsdWRpbmcgdGhlaXIgZW5jbG9zZWQgYXJndW1lbnRzIGZyb20gbGltaXRzIHNldCBieSB0aGlzIGxpc3QsIHdoaWxlIGRpc2FsbG93aW5nIHVzZXJzIHRvIGRpcmVjdGx5IHNldCB0aGVtIHZpYSB0aGUgY29tbWFuZC1saW5lIG9yIGJ5IHNvdXJjaW5nIHRoZW0gZnJvbSB0aGVpciBsb2NhbC9HaXRIdWIgY29uZmlnIGZpbGVzIChzZWUgZXhhbXBsZSBiZWxvdykuICBUbyBsaW1pdDogIFRoZSB0YXJnZXQgcGlwZWxpbmUgKGUuZy4sIFtydW5dKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuLyksIFtjb21waWxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvKSk6ICBgYGAgeWFtbCAgIGRpc2FibGVkQXJnczogICAtIFwicGlwZWxpbmU6XnJ1blwiICMgZGlzYWxsb3cgY29tcGlsZSBgYGAgIFRhcmdldCBhcmd1bWVudHMgKGUuZy4sIFtwcm9jZXNzIG91dHB1dHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL291dHB1dC9ldmVudC9wcm9jZXNzLykpOiAgYGBgIHlhbWwgICAtIFwicHJvY091dENvbW1hbmQ6XmZsdWVudC1iaXQkXCIgICAjIGxpbWl0IHRvIEZsdWVudCBCaXQgb25seSAgICMgLSBwcm9jT3V0QXJnczogPHNwZWNpZnktcmVnZXg+ICAjIGZ1cnRoZXIgbGltaXQgYXJncyBmb3IgRmx1ZW50IEJpdCBgYGAgIENvbnRyb2wgd2hpY2ggYXJndW1lbnQgW3NvdXJjZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnLyNzb3VyY2VzKSB0byBpbnNwZWN0OiAgYGBgIHlhbWwgICAtIFwic291cmNlOl5naXRodWIuKlwiICAgICAgICAgICAgICMgaW5zcGVjdCBvZiBhbGwgYXJndW1lbnRzIHNvdXJjZWQgZnJvbSBHaXRIdWIgYWdhaW5zdCB0aGlzIGxpc3QgICAtIFwic291cmNlOl4oPyEvZXRjL2xvZzEweC8pLipcIiAgICMgaW5zcGVjdCBvZiBhbGwgYXJndW1lbnRzIHNvdXJjZWQgZnJvbSBjb25maWcgZmlsZXMgTk9UIGNvbnRhaW5lZCBpbjogL2V0Yy9sb2cxMHgvIGBgYCIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJkZWJ1Z0VudlZhcnMiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3QgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGRlYnVnXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgZW52IHZhciBuYW1lcyBmb3Igd2hpY2ggdG8gbG9nIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIGhvdyB0aGV5IGFyZSByZXNvbHZlZC4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY2FsbDogYEwxRW52LmdldChcIm15VmFyXCIsIFwibXlEZWZhdWx0XCIpYCBjYW4gYmUgcmVzb2x2ZWQgZnJvbSBhIG51bWJlciBvZiBbc291cmNlc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhFbnYuZ2V0KSByYW5naW5nIGZyb20gbGF1bmNoIGFyZ3VtZW50cywgdG8gT1MvSlZNIHByb3BlcnRpZXMgYW5kIGEgZGVmYXVsdCB2YWx1ZSAoZS5nLiwgbXlEZWZhdWx0KS4gIFNldHRpbmcgdGhpcyB2YWx1ZSB0byBgbXlWYXJgIHdpbGwgbG9nIElORk8gbGV2ZWwgaW5mb3JtYXRpb24gZGV0YWlsaW5nIGhvdyB0aGUgdmFsdWUgb2YgdGhlIGBteVZhcmAgd2FzIHJlc29sdmVkLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfQogIH0sCiAgInJlcXVpcmVkIiA6IFsKICAgICJ0ZW54IgogIF0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=</template>
328
+ <template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTmFtZSBvZiBwaXBlbGluZSB0byBleGVjdXRlXG5cblRhcmdldCBbcGlwZWxpbmVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vZW5naW5lL3BpcGVsaW5lLykgdG8gZXhlY3V0ZS4gRm9yIGV4YW1wbGUsIHRvIHNwZWNpZnkgdGhlIFtydW5dKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuLykgcGlwZWxpbmUgYW5kIGEgW1lBTUxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnL3lhbWwvKSBjb25maWcgZmlsZSBjb250YWluaW5nIGxhdW5jaCBhcmd1bWVudHMsIHVzZTogIGBgYCBjb25zb2xlICQgdGVueCBydW4gQH4vbXkueWFtbCBgYGAgVGhlIFlBTUwgZmlsZSBtYXkgc3BlY2lmeSB0aGUgcGlwZWxpbmUgbmFtZSB2aWEgYSAndGVueCcgZW50cnksIGFsbG93aW5nIHRoZSAncGlwZWxpbmUnIGFyZ3VtZW50IHRvIGJlIG9taXR0ZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUgKG15LnlhbWwpOiAgYGBgIHlhbWwgdGVueDogcnVuICMgc2V0IHRoZSBwaXBlbGluZSB0byAncnVuJyBsaWNlbnNlS2V5OiA8bXktbGljZW5zZS1qd3Q+IC4uLiBgYGAgIEFsbG93cyBmb3IgbGF1bmNoaW5nIHRoZSBydW4gcGlwZWxpbmUgdmlhOiBgYGAgY29uc29sZSAkIHRlbnggQH4vbXkueWFtbCBgYGAiCiAgICB9LAogICAgImxpY2Vuc2UiIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgImZpbGUiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlBhdGggdG8gYSBmaWxlIGNvbnRhaW5pbmcgdGhlIDEweCBsaWNlbnNlIEpXVFxuXG5QYXRoIHRvIGEgZmlsZSBjb250YWluaW5nIHRoZSBzaWduZWQgMTB4IGxpY2Vuc2UgSldULiBQcmVmZXJyZWQgb3ZlciBgbGljZW5zZUtleWAgZm9yIHByb2R1Y3Rpb246IHRoZSB0b2tlbiBpcyBub3QgdmlzaWJsZSBpbiBgcHNgIG91dHB1dCBhbmQgaXMgZWFzeSB0byByb3RhdGUgYnkgcmVwbGFjaW5nIHRoZSBmaWxlLiAgV2l0aG91dCBhIGxpY2Vuc2UgdGhlIGVuZ2luZSBydW5zIG9uIHRoZSBidWlsdC1pbiAzMC1kYXkgZXZhbHVhdGlvbiBsaWNlbnNlLiBTZWUgW2xpY2Vuc2luZ10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9tYW5hZ2UvbGljZW5zZS8pIGZvciBwcm9kdWN0aW9uIGxpY2Vuc2VzLiAgSWYgYm90aCBgbGljZW5zZUZpbGVgIGFuZCBgbGljZW5zZUtleWAgYXJlIHByb3ZpZGVkLCB0aGUgZmlsZSB3aW5zLiIKICAgICAgICB9LAogICAgICAgICJrZXkiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIjEweCBsaWNlbnNlIEpXVCAoaW5saW5lKVxuXG5UaGUgc2lnbmVkIDEweCBsaWNlbnNlIEpXVCwgcGFzc2VkIGlubGluZS4gRGlzY291cmFnZWQgb24gdGhlIGNvbW1hbmQgbGluZSBiZWNhdXNlIHRoZSB2YWx1ZSBpcyB2aXNpYmxlIGluIGBwc2Agb3V0cHV0OyBwcmVmZXIgYGxpY2Vuc2VGaWxlYCBpbiBwcm9kdWN0aW9uLiAgV2l0aG91dCBhIGxpY2Vuc2UgdGhlIGVuZ2luZSBydW5zIG9uIHRoZSBidWlsdC1pbiAzMC1kYXkgZXZhbHVhdGlvbiBsaWNlbnNlLiBTZWUgW2xpY2Vuc2luZ10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9tYW5hZ2UvbGljZW5zZS8pIGZvciBwcm9kdWN0aW9uIGxpY2Vuc2VzLiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiYWlyZ2FwcGVkIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJib29sZWFuIiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlJ1biB3aXRob3V0IGNvbnRhY3RpbmcgdGhlIDEweCBzZXJ2aWNlXG5cbldoZW4gYHRydWVgLCB0aGUgbGljZW5zZSBpcyB2ZXJpZmllZCBsb2NhbGx5IChzaWduYXR1cmUgKyBjbGFpbXMpIGFuZCBubyBjYWxscyBhcmUgbWFkZSB0byB0aGUgMTB4IHNlcnZpY2U6IG5vIHN0YXJ0dXAgdmFsaWRhdGlvbiwgbm8gbWV0cmljcyByZXBvcnRpbmcsIG5vIHVzZXItYXR0cmlidXRlIGVucmljaG1lbnQuIFN1aXRhYmxlIGZvciBmdWxseSBhaXJnYXBwZWQgZGVwbG95bWVudHMgd2hlcmUgdGhlIGVuZ2luZSBoYXMgbm8gcGF0aCB0byB0aGUgdmVuZG9yIFNhYVMuICBXaGVuIGBmYWxzZWAgKGRlZmF1bHQpLCB0aGUgZW5naW5lIGFkZGl0aW9uYWxseSBjYWxscyB0aGUgMTB4IHNlcnZpY2UgYXQgc3RhcnR1cCwgYW5kIG9ubHkgd2hlbiBhIHNlcnZpY2UgZW5kcG9pbnQgaXMgYWN0dWFsbHkgY29uZmlndXJlZDsgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBuYW1lcyBub25lLCBzbyBhbiB1bmNvbmZpZ3VyZWQgZW5naW5lIG1ha2VzIG5vIGNhbGwgZWl0aGVyIHdheS4gVGhlIGNhbGwgaXMgYmVzdC1lZmZvcnQgZW5yaWNobWVudDogdGhlIGxvY2FsIHZlcmlmaWNhdGlvbiBpcyB0aGUgZ2F0ZSwgYW5kIGEgc2VydmljZSB0aGF0IGNhbm5vdCBiZSByZWFjaGVkLCBvciB0aGF0IGFuc3dlcnMgd2l0aCBhbiBlcnJvciwgcHJvZHVjZXMgYSB3YXJuaW5nIGFuZCB0aGUgZW5naW5lIHJ1bnMuICBBaXJnYXBwZWQgbW9kZSBpcyBob25vcmVkIGZvciBldmVyeSBsaWNlbnNlIHR5cGUuIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiBmYWxzZSkiLAogICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgfSwKICAgICJtZXRyaWNFbmRwb2ludCIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIjEweCBzZXJ2aWNlIFByb21ldGhldXMgbWV0cmljcyBlbmRwb2ludFxuXG5TcGVjaWZpZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIFByb21ldGhldXMgcmVtb3RlIHdyaXRlIGVuZHBvaW50IHRvIHdyaXRlIHBpcGVsaW5lIHVzYWdlIGFuZCBoZWFsdGggbWV0cmljcy4gIFVuc2V0IGJ5IGRlZmF1bHQ6IGFuIGVuZ2luZSB3aXRoIG5vIG1ldHJpYyBlbmRwb2ludCBjb25maWd1cmVkIGNvbGxlY3RzIG1ldHJpY3MgbG9jYWxseSBhbmQgc2VuZHMgdGhlbSBub3doZXJlLiAgISEhIG5vdGUgXCJcIiAgICAgIFRoaXMgYXJndW1lbnQgaXMgb25seSBzZXR0YWJsZSBpbiB0aGUgMTB4ICdvbi1wcmVtaXNlcycgYnVpbGQuIgogICAgfSwKICAgICJydW50aW1lIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJOYW1lIHRvIHJlcG9ydCB0byB0aGUgMTB4IHNlcnZpY2UgZW5kcG9pbnQgZm9yIHRoaXMgcnVudGltZSBpbnN0YW5jZVxuXG5TcGVjaWZpZXMgYSBsb2dpY2FsIG5hbWUgdXNlZCBhcyBhIFt0YWcgdmFsdWVdKGh0dHBzOi8vd3d3LmJhZWxkdW5nLmNvbS9taWNyb21ldGVyIzQtbWV0ZXJzKSBmb3IgcGlwZWxpbmUgbWV0cmljcy4gVGhpcyB2YWx1ZSBpZGVudGlmaWVzIGluc3RhbmNlcyBvZiB0aGUgMTB4IHJ1bi9jb21waWxlIHBpcGVsaW5lcyB3aGVuIHJlcG9ydGluZyB0byB0aGUgMTB4IHNlcnZpY2UuIEZvciBleGFtcGxlLCBmb3IgYSAxMHggW1JlY2VpdmVyXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwcHMvcmVjZWl2ZXIvKSB3aXRoIG9wdGltaXphdGlvbiBlbmFibGVkIGZvciBGbHVlbnQgQml0IGZvcndhcmRlcnMgY29sbGVjdGluZyBldmVudHMgZnJvbSBhIGBicm9rZXJgIHVzZXItYXBwLCB0aGlzIHZhbHVlIGNhbiBiZSBzZXQgdG86IGByZWNlaXZlX2ZsdWVudGJpdF9icm9rZXJgIgogICAgICAgIH0sCiAgICAgICAgImF0dHJpYnV0ZXMiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgYXR0cmlidXRlcyB0byBhZGQgdG8gYWxsIG1ldHJpY3MgcmVwb3J0aW5nXG5cblNwZWNpZmllcyBhIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzIGluIHRoZSBmb3JtYXQgYGtleTp2YWx1ZWAgdG8gYmUgYWRkZWQgYXMgdGFncyB0byBwaXBlbGluZSBtZXRyaWNzIHJlcG9ydGVkIHRvIHRoZSAxMHggc2VydmljZS4gVGhlc2UgdGFncyBlbmFibGUgZmluZXItZ3JhaW5lZCBmaWx0ZXJpbmcgYW5kIGFuYWx5c2lzIGluIG1vbml0b3Jpbmcgc3lzdGVtcyBsaWtlIFByb21ldGhldXMuIE11bHRpcGxlIGF0dHJpYnV0ZXMgY2FuIGJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgc3RyaW5nIHVzaW5nIGEgc2VtaWNvbG9uIChgO2ApLCBlLmcuLCBga2V5MTp2YWwxO2tleTI6dmFsMmAuICBJZiBhIGtleSBkb2VzIG5vdCBzdGFydCB3aXRoIHRlbnhfLCB0aGUgcHJlZml4IHRlbnhfIGlzIGF1dG9tYXRpY2FsbHkgcHJlcGVuZGVkIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBpbiB0YWcgbmFtaW5nIGNvbnZlbnRpb25zLiBGb3IgZXhhbXBsZSwgYSBwcm92aWRlZCBhdHRyaWJ1dGUgYXBwOm15LWFwcCB3aWxsIGJlIHJlcG9ydGVkIGFzIHRlbnhfYXBwOm15LWFwcCAgYGBgIHlhbWwgICBydW50aW1lQXR0cmlidXRlczogICAgIC0gYXBwOnJlcG9ydGVyICAgICAtIGVudjplZGdlIGBgYCIsCiAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJpbmNsdWRlUGF0aHMiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlBpcGVsaW5lIGluY2x1ZGUgZm9sZGVyc1xuXG5TcGVjaWZpZXMgZm9sZGVycyBvbiBkaXNrIGZvciByZXNvbGluZyByZWxhdGl2ZSByZWZlcmVuY2VzIHdpdGhpbiBbaW5jbHVkZSBkaXJlY3RpdmVzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbmZpZy95YW1sLyNpbmNsdWRlLWRpcmVjdGl2ZXMpLiAoRGVmYXVsdDogW1wid29ya2luZyBkaXJlY3Rvcnkgb2YgY3VycmVudCBwcm9jZXNzXCJdKSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfSwKICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICJ3b3JraW5nIGRpcmVjdG9yeSBvZiBjdXJyZW50IHByb2Nlc3MiCiAgICAgIF0KICAgIH0sCiAgICAiamFyRmlsZXMiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkphciBmaWxlcyB0byBsb2FkXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgLmphciBmaWxlcyB0byBsb2FkIGludG8gdGhlIGhvc3QgSlZNIGZvciB1c2UgYnkgW2NvbXBpbGVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2NvbXBpbGUvKSwgW2lucHV0XShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9pbnB1dC8pIGFuZCBbb3V0cHV0XShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9vdXRwdXQvKSBBUEkgZXh0ZW5zaW9ucy4gICEhISBub3RlIFwiXCIgICAgICBUaGlzIGFyZ3VtZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIFtSdW50aW1lXShodHRwczovL2RvYy5sb2cxMHguY29tL2VuZ2luZS9mbGF2b3JzLyNydW50aW1lKSBmbGF2b3IuIiwKICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICB9CiAgICB9LAogICAgInF1aWV0IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJib29sZWFuIiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkRpc2FibGUgcHJpbnRpbmcgYmluYXJ5IHZlcnNpb24gaW5mb3JtYXRpb24gdG8gdGhlIGNvbnNvbGVcblxuRGlzYWJsZSBwcmludGluZyBidWlsZC92ZXJzaW9uIGluZm9ybWF0aW9uIHRvIHRoZSBjb25zb2xlIHVwb24gbGF1bmNoIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiBmYWxzZSkiLAogICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgfSwKICAgICJkaXNhYmxlZEFyZ3MiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpbWl0IGFyZ3VtZW50IHZhbHVlcyB0aGF0IGNhbiBiZSBzZXQgYnkgdXNlcnNcblxuU3BlY2lmaWVzIGEgbGlzdCBvZiBsYXVuY2ggYXJndW1lbnRzIHRoYXQgYXJlIGRpc2FsbG93ZWQgZnJvbSBlaXRoZXIgY29tbWFuZCBsaW5lIG9yIHVzZXIgY29uZmlnIGZpbGVzLiBUaGlzIGFyZ3VtZW50IHByb3ZpZGVzIGEgbWV0aG9kIG9mIGxpbWl0aW5nIHRoZSB0YXJnZXQgW3BpcGVsaW5lXShodHRwczovL2RvYy5sb2cxMHguY29tL3NoYXJlZC9ib290c3RyYXAvI3BpcGVsaW5lKSwgW3NvdXJjZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb25maWcvI3NvdXJjZXMpIGFuZCBhbmQgW2NvbW1hbmQgbGluZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb25maWcvY2xpLykgc2V0dGFibGUgYnkgdGhlIHVzZXIuICBUaGlzIG1lY2hhbmlzbSBlbmFibGVzIHBpcGVsaW5lIGxhdW5jaGVycyBzdWNoIGFzIHRoZSBbUXVhcmt1cyBsYXVuY2hlcl0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvbGF1bmNoLyNxdWFya3VzKSB0byBsaW1pdCB1c2VyIGlucHV0IHJlY2VpdmVkIHZpYSBSRVNUIHJlcXVlc3RzIHRvIGEgdGFyZ2V0IHN1YnNldCBvZiAnc2FmZScgYXJndW1lbnRzLiAgRm9yIGV4YW1wbGUsIGFkZGluZyBbcHJvY091dENvbW1hbmRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL291dHB1dC9ldmVudC9wcm9jZXNzLyNwcm9jb3V0Y29tbWFuZCkgdG8gdGhpcyBsaXN0IGVuc3VyZXMgdGhhdCBubyBleHRlcm5hbCBwcm9jZXNzIG91dHB1dHMgY2FuIGJlIGxhdW5jaGVkIGJ5IHRoZSBydW50aW1lLiAgQW4gb3B0aW9uYWwgcmVnZXggcGF0dGVybiBjYW4gbGltaXQgYXJndW1lbnRzIHRvIGEgY2VydGFpbiBzdWJzZXQgb2YgdmFsdWVzIGluIHRoZSBmb3JtIG9mOiBgPGFyZy1uYW1lPls6cGF0dGVybl1gIChlLmcuLCBzcGVjaWZpYyBwcm9jZXNzIG5hbWVzKS4gTXVsdGlwbGUgcGF0dGVybnMgY2FuIGJlIHNwZWNpZmllZCBwZXIgYXJndW1lbnQuICBNYXRjaGluZyB0aGUgYHNvdXJjZWAgYXJndW1lbnQgZGV0ZXJtaW5lcyB3aGljaCBzb3VyY2UgbG9jYXRpb25zIHRvIGluc3BlY3QgKGUuZy4sIGZvbGRlcnMsIGZpbGVzLCBHaXRIdWIgcmVwb3MpLiBGb3IgZXhhbXBsZSwgYW4gYWRtaW4gbWF5IHBsYWNlIC55YW1sIGNvbmZpZyBmaWxlcyBjb250YWluaW5nIHByZXNldCBGbHVlbnQgQml0IG91dHB1dHMgaW4gYC9ldGMvbG9nMTB4L2AsIGV4Y2x1ZGluZyB0aGVpciBlbmNsb3NlZCBhcmd1bWVudHMgZnJvbSBsaW1pdHMgc2V0IGJ5IHRoaXMgbGlzdCwgd2hpbGUgZGlzYWxsb3dpbmcgdXNlcnMgdG8gZGlyZWN0bHkgc2V0IHRoZW0gdmlhIHRoZSBjb21tYW5kLWxpbmUgb3IgYnkgc291cmNpbmcgdGhlbSBmcm9tIHRoZWlyIGxvY2FsL0dpdEh1YiBjb25maWcgZmlsZXMgKHNlZSBleGFtcGxlIGJlbG93KS4gIFRvIGxpbWl0OiAgVGhlIHRhcmdldCBwaXBlbGluZSAoZS5nLiwgW3J1bl0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vKSwgW2NvbXBpbGVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS8pKTogIGBgYCB5YW1sICAgZGlzYWJsZWRBcmdzOiAgIC0gXCJwaXBlbGluZTpecnVuXCIgIyBkaXNhbGxvdyBjb21waWxlIGBgYCAgVGFyZ2V0IGFyZ3VtZW50cyAoZS5nLiwgW3Byb2Nlc3Mgb3V0cHV0c10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vb3V0cHV0L2V2ZW50L3Byb2Nlc3MvKSk6ICBgYGAgeWFtbCAgIC0gXCJwcm9jT3V0Q29tbWFuZDpeZmx1ZW50LWJpdCRcIiAgICMgbGltaXQgdG8gRmx1ZW50IEJpdCBvbmx5ICAgIyAtIHByb2NPdXRBcmdzOiA8c3BlY2lmeS1yZWdleD4gICMgZnVydGhlciBsaW1pdCBhcmdzIGZvciBGbHVlbnQgQml0IGBgYCAgQ29udHJvbCB3aGljaCBhcmd1bWVudCBbc291cmNlc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb25maWcvI3NvdXJjZXMpIHRvIGluc3BlY3Q6ICBgYGAgeWFtbCAgIC0gXCJzb3VyY2U6XmdpdGh1Yi4qXCIgICAgICAgICAgICAgIyBpbnNwZWN0IG9mIGFsbCBhcmd1bWVudHMgc291cmNlZCBmcm9tIEdpdEh1YiBhZ2FpbnN0IHRoaXMgbGlzdCAgIC0gXCJzb3VyY2U6Xig/IS9ldGMvbG9nMTB4LykuKlwiICAgIyBpbnNwZWN0IG9mIGFsbCBhcmd1bWVudHMgc291cmNlZCBmcm9tIGNvbmZpZyBmaWxlcyBOT1QgY29udGFpbmVkIGluOiAvZXRjL2xvZzEweC8gYGBgIiwKICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICB9CiAgICB9LAogICAgImRlYnVnRW52VmFycyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiLAogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTGlzdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gZGVidWdcblxuU3BlY2lmaWVzIGEgbGlzdCBvZiBlbnYgdmFyIG5hbWVzIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gaG93IHRoZXkgYXJlIHJlc29sdmVkLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjYWxsOiBgTDFFbnYuZ2V0KFwibXlWYXJcIiwgXCJteURlZmF1bHRcIilgIGNhbiBiZSByZXNvbHZlZCBmcm9tIGEgbnVtYmVyIG9mIFtzb3VyY2VzXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWEVudi5nZXQpIHJhbmdpbmcgZnJvbSBsYXVuY2ggYXJndW1lbnRzLCB0byBPUy9KVk0gcHJvcGVydGllcyBhbmQgYSBkZWZhdWx0IHZhbHVlIChlLmcuLCBteURlZmF1bHQpLiAgU2V0dGluZyB0aGlzIHZhbHVlIHRvIGBteVZhcmAgd2lsbCBsb2cgSU5GTyBsZXZlbCBpbmZvcm1hdGlvbiBkZXRhaWxpbmcgaG93IHRoZSB2YWx1ZSBvZiB0aGUgYG15VmFyYCB3YXMgcmVzb2x2ZWQuIiwKICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICB9CiAgICB9CiAgfSwKICAicmVxdWlyZWQiIDogWwogICAgInRlbngiCiAgXSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==</template>
327
329
 
328
330
  ```yaml
329
331
  # 🔟❎ compile bootstrap configuration
@@ -357,8 +359,10 @@ To configure the Pipeline Bootstrapper unit, [:material-cog: Edit](https://doc.l
357
359
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
358
360
  jarFiles: []
359
361
 
360
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
361
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
362
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
363
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
364
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
365
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
362
366
 
363
367
  # specifies a list of launch arguments that are disallowed from either command line or user config files.
364
368
  disabledArgs: []
@@ -179,8 +179,10 @@ To configure the Pipeline Bootstrapper unit, [:material-cog: Edit](https://doc.l
179
179
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
180
180
  jarFiles: []
181
181
 
182
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
183
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
182
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
183
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
184
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
185
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
184
186
 
185
187
  # 'disabledArgs' specifies a list of launch arguments that are disallowed from either command line or user config files.
186
188
  disabledArgs: []
@@ -357,8 +359,10 @@ To configure the Pipeline Bootstrapper unit, [:material-cog: Edit](https://doc.l
357
359
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
358
360
  jarFiles: []
359
361
 
360
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
361
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
362
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
363
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
364
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
365
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
362
366
 
363
367
  # specifies a list of launch arguments that are disallowed from either command line or user config files.
364
368
  disabledArgs: []
@@ -798,8 +802,10 @@ To configure the Pipeline Bootstrapper unit, [:material-cog: Edit](https://doc.l
798
802
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
799
803
  jarFiles: []
800
804
 
801
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
802
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
805
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
806
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
807
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
808
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
803
809
 
804
810
  # 'disabledArgs' specifies a list of launch arguments that are disallowed from either command line or user config files.
805
811
  disabledArgs: []
@@ -976,8 +982,10 @@ To configure the Pipeline Bootstrapper unit, [:material-cog: Edit](https://doc.l
976
982
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
977
983
  jarFiles: []
978
984
 
979
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
980
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
985
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
986
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
987
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
988
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
981
989
 
982
990
  # specifies a list of launch arguments that are disallowed from either command line or user config files.
983
991
  disabledArgs: []
@@ -93,14 +93,14 @@ The [log10x MCP](https://doc.log10x.com/apps/mcp/) emits this entire plan from a
93
93
  The layer is published in every region below, for both architectures, and
94
94
  is readable by any AWS account. Nothing to build.
95
95
 
96
- **Engine 1.1.75, republished 2026-09-07.** Every layer below carries the
96
+ **Engine 1.1.79, republished 2026-09-17.** Every layer below carries the
97
97
  same build, so there is one digest per architecture rather than one per
98
98
  region:
99
99
 
100
100
  | Architecture | `CodeSha256` |
101
101
  |---|---|
102
- | x86_64 | `CrxpplzMzotOH8FUpGYV4bETI4OWAGfpWu0MddnSK/M=` |
103
- | arm64 | `2shOwbaBd2H1+yUl1J+aWjb+HAC7Ql/lXzrlc0OfVgo=` |
102
+ | x86_64 | `ACkSX/XS5nei+rAm6eiKyyxabq3lwcAqvAeFu437dDo=` |
103
+ | arm64 | `DbhgTftIcnzEi+SenwH+YMotPX11sIavGQb6o17IBkU=` |
104
104
 
105
105
  `aws lambda get-layer-version` returns that digest to any caller, so you can
106
106
  check what you are about to attach:
@@ -108,20 +108,20 @@ The [log10x MCP](https://doc.log10x.com/apps/mcp/) emits this entire plan from a
108
108
  ``` { .console .copy }
109
109
  aws lambda get-layer-version --region us-east-1 \
110
110
  --layer-name arn:aws:lambda:us-east-1:351939435334:layer:tenx-receive \
111
- --version-number 7 --query Content.CodeSha256 --output text
111
+ --version-number 8 --query Content.CodeSha256 --output text
112
112
  ```
113
113
 
114
114
 
115
115
  | Region | x86_64 | arm64 |
116
116
  |---|---|---|
117
- | `us-east-1` | `arn:aws:lambda:us-east-1:351939435334:layer:tenx-receive:7` | `arn:aws:lambda:us-east-1:351939435334:layer:tenx-receive-arm64:3` |
118
- | `us-east-2` | `arn:aws:lambda:us-east-2:351939435334:layer:tenx-receive:3` | `arn:aws:lambda:us-east-2:351939435334:layer:tenx-receive-arm64:3` |
119
- | `us-west-2` | `arn:aws:lambda:us-west-2:351939435334:layer:tenx-receive:3` | `arn:aws:lambda:us-west-2:351939435334:layer:tenx-receive-arm64:3` |
120
- | `eu-west-1` | `arn:aws:lambda:eu-west-1:351939435334:layer:tenx-receive:3` | `arn:aws:lambda:eu-west-1:351939435334:layer:tenx-receive-arm64:3` |
121
- | `eu-central-1` | `arn:aws:lambda:eu-central-1:351939435334:layer:tenx-receive:3` | `arn:aws:lambda:eu-central-1:351939435334:layer:tenx-receive-arm64:3` |
122
- | `ap-southeast-1` | `arn:aws:lambda:ap-southeast-1:351939435334:layer:tenx-receive:3` | `arn:aws:lambda:ap-southeast-1:351939435334:layer:tenx-receive-arm64:3` |
123
- | `ap-northeast-1` | `arn:aws:lambda:ap-northeast-1:351939435334:layer:tenx-receive:3` | `arn:aws:lambda:ap-northeast-1:351939435334:layer:tenx-receive-arm64:3` |
124
- | `ap-south-1` | `arn:aws:lambda:ap-south-1:351939435334:layer:tenx-receive:3` | `arn:aws:lambda:ap-south-1:351939435334:layer:tenx-receive-arm64:3` |
117
+ | `us-east-1` | `arn:aws:lambda:us-east-1:351939435334:layer:tenx-receive:8` | `arn:aws:lambda:us-east-1:351939435334:layer:tenx-receive-arm64:4` |
118
+ | `us-east-2` | `arn:aws:lambda:us-east-2:351939435334:layer:tenx-receive:4` | `arn:aws:lambda:us-east-2:351939435334:layer:tenx-receive-arm64:4` |
119
+ | `us-west-2` | `arn:aws:lambda:us-west-2:351939435334:layer:tenx-receive:4` | `arn:aws:lambda:us-west-2:351939435334:layer:tenx-receive-arm64:4` |
120
+ | `eu-west-1` | `arn:aws:lambda:eu-west-1:351939435334:layer:tenx-receive:4` | `arn:aws:lambda:eu-west-1:351939435334:layer:tenx-receive-arm64:4` |
121
+ | `eu-central-1` | `arn:aws:lambda:eu-central-1:351939435334:layer:tenx-receive:4` | `arn:aws:lambda:eu-central-1:351939435334:layer:tenx-receive-arm64:4` |
122
+ | `ap-southeast-1` | `arn:aws:lambda:ap-southeast-1:351939435334:layer:tenx-receive:4` | `arn:aws:lambda:ap-southeast-1:351939435334:layer:tenx-receive-arm64:4` |
123
+ | `ap-northeast-1` | `arn:aws:lambda:ap-northeast-1:351939435334:layer:tenx-receive:4` | `arn:aws:lambda:ap-northeast-1:351939435334:layer:tenx-receive-arm64:4` |
124
+ | `ap-south-1` | `arn:aws:lambda:ap-south-1:351939435334:layer:tenx-receive:4` | `arn:aws:lambda:ap-south-1:351939435334:layer:tenx-receive-arm64:4` |
125
125
 
126
126
  Match the architecture to the function's own: `arm64` for Graviton,
127
127
  `x86_64` otherwise. A mismatch fails at INIT rather than silently.
@@ -245,19 +245,19 @@ The [log10x MCP](https://doc.log10x.com/apps/mcp/) emits this entire plan from a
245
245
  The published layer suits every case except one: baking a static mute file into the image, which pins the policy to the layer version. Build it from the release artifacts:
246
246
 
247
247
  ``` { .console .copy }
248
- gh release download 1.1.69 -R log-10x/pipeline-releases \
249
- -p 'tenx-edge-1.1.69-amd64-native' -p 'tenx-modules-1.1.69.tar.gz' \
250
- -p 'tenx-config-1.1.69.tar.gz' -p 'tenx-symbols-1.1.69.10x.tar' \
248
+ gh release download 1.1.79 -R log-10x/pipeline-releases \
249
+ -p 'tenx-edge-1.1.79-amd64-native' -p 'tenx-modules-1.1.79.tar.gz' \
250
+ -p 'tenx-config-1.1.79.tar.gz' -p 'tenx-symbols-1.1.79.10x.tar' \
251
251
  -p 'build-receive-layer.sh'
252
252
 
253
253
  mkdir modules config symbols
254
- tar xzf tenx-modules-1.1.69.tar.gz -C modules
255
- tar xzf tenx-config-1.1.69.tar.gz -C config
256
- cp tenx-symbols-1.1.69.10x.tar symbols/
254
+ tar xzf tenx-modules-1.1.79.tar.gz -C modules
255
+ tar xzf tenx-config-1.1.79.tar.gz -C config
256
+ cp tenx-symbols-1.1.79.10x.tar symbols/
257
257
 
258
258
  chmod +x build-receive-layer.sh
259
259
  ./build-receive-layer.sh \
260
- ./tenx-edge-1.1.69-amd64-native ./modules ./config ./symbols \
260
+ ./tenx-edge-1.1.79-amd64-native ./modules ./config ./symbols \
261
261
  ./tenx-receive.zip \
262
262
  ./mutes.csv # the 6th argument is the policy file
263
263
 
@@ -268,4 +268,4 @@ The [log10x MCP](https://doc.log10x.com/apps/mcp/) emits this entire plan from a
268
268
  --content S3Bucket=<your-bucket>,S3Key=layers/tenx-receive.zip
269
269
  ```
270
270
 
271
- Swap the bootstrap for `tenx-edge-1.1.69-aarch64-native` and the architecture for `arm64` to build the Graviton variant. With a mute file present the build validates every entry and refuses a malformed one, rather than shipping a disposition that would be silently skipped.
271
+ Swap the bootstrap for `tenx-edge-1.1.79-aarch64-native` and the architecture for `arm64` to build the Graviton variant. With a mute file present the build validates every entry and refuses a malformed one, rather than shipping a disposition that would be silently skipped.
@@ -22,7 +22,7 @@ The [Receiver](https://doc.log10x.com/apps/receiver/) is the execution arm of th
22
22
 
23
23
  - **pass**: forward unchanged.
24
24
  - **sample**: forward a rate-limited share against a per-pattern budget. Uses automatic [message enrichment](https://doc.log10x.com/run/initialize/message/){target="_blank"} to identify event types by their symbol identity and calculate ingestion cost per event (bytes × $/GB). When an event type exceeds its share of the budget, the Receiver samples it down, in real time at the source, before expensive data reaches your analyzer. A [severity floor](https://doc.log10x.com/run/receive/rate/){target="_blank"} keeps a minimum share of ERROR and WARN events flowing even when their pattern is over its cap.
25
- - **compact**: replace repeated lines with an encoded form the destination expands at query time, with no dashboard or query changes. Lossless only on Splunk and self-hosted Elasticsearch/OpenSearch with the expand plugin installed ([Splunk](../../apps/receiver/compact/splunk.md), [Elasticsearch](../../apps/receiver/compact/elasticsearch.md)). It is a no-op on managed/SaaS destinations (Datadog, CloudWatch, Azure, GCP, Sumo, managed Elasticsearch).
25
+ - **compact**: replace repeated lines with an encoded form the destination expands at query time, with no dashboard changes. Lossless only on Splunk and self-hosted Elasticsearch/OpenSearch with the expand plugin installed ([Splunk](../../apps/receiver/compact/splunk.md), [Elasticsearch](../../apps/receiver/compact/elasticsearch.md)). It is a no-op on managed/SaaS destinations (Datadog, CloudWatch, Azure, GCP, Sumo, managed Elasticsearch).
26
26
  - **tier_down**: tag the pattern for a cheaper storage tier the destination enforces (Datadog Flex, CloudWatch IA, Azure Monitor Basic/Auxiliary).
27
27
  - **offload**: route the pattern to customer-owned object storage (S3 or any S3-compatible bucket) instead of the destination.
28
28
  - **drop**: stop forwarding the pattern.
@@ -30,13 +30,13 @@ How the 10x for Splunk app expands compact events at search time, search-time ov
30
30
  - Top templates by usage
31
31
  - Expansion success rate
32
32
 
33
- **User experience:** Interactive search and dashboards are completely transparent, on the original full-fidelity data. Scheduled alerts are compiled once at save time into a native saved search that then runs on the same expanded data.
33
+ **User experience:** Classic dashboards keep their panel SPL unchanged. From the search bar a query is wrapped in the app's `tenxsearch` command, since Splunk's search page loads no app JavaScript. Scheduled alerts are compiled once at save time into a native saved search. All three read the original full-fidelity data.
34
34
 
35
35
  **Open source:** Available on [GitHub](https://github.com/log-10x/splunk-app){target="_blank"}.
36
36
 
37
37
  ??? tenx-costopt "What is the search-time overhead in Splunk"
38
38
 
39
- A one-time template resolution matches search terms against the templates. Per-event expansion uses a KV Store primary-key lookup and native SPL functions, negligible overhead per event. Queries and dashboards work unchanged; scheduled alerts run unchanged after a one-time save-time compile.
39
+ A one-time template resolution matches search terms against the templates. Per-event expansion uses a KV Store primary-key lookup and native SPL functions, negligible overhead per event. Dashboard panels keep their SPL; a search-bar query carries the `tenxsearch` wrapper; scheduled alerts run unchanged after a one-time save-time compile.
40
40
 
41
41
  The 10x Engine processes events at sub-millisecond per event, 100+ GB/day on a single node (512 MB heap, 2 threads). For resource requirements and Kubernetes resource specs, see [Node counting](https://doc.log10x.com/faq/pricing/node-counting/).
42
42
 
@@ -179,8 +179,10 @@ To configure the Pipeline Bootstrapper unit, [:material-cog: Edit](https://doc.l
179
179
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
180
180
  jarFiles: []
181
181
 
182
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
183
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
182
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
183
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
184
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
185
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
184
186
 
185
187
  # 'disabledArgs' specifies a list of launch arguments that are disallowed from either command line or user config files.
186
188
  disabledArgs: []
@@ -357,8 +359,10 @@ To configure the Pipeline Bootstrapper unit, [:material-cog: Edit](https://doc.l
357
359
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
358
360
  jarFiles: []
359
361
 
360
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
361
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
362
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
363
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
364
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
365
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
362
366
 
363
367
  # specifies a list of launch arguments that are disallowed from either command line or user config files.
364
368
  disabledArgs: []
@@ -798,8 +802,10 @@ To configure the Pipeline Bootstrapper unit, [:material-cog: Edit](https://doc.l
798
802
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
799
803
  jarFiles: []
800
804
 
801
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
802
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
805
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
806
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
807
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
808
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
803
809
 
804
810
  # 'disabledArgs' specifies a list of launch arguments that are disallowed from either command line or user config files.
805
811
  disabledArgs: []
@@ -976,8 +982,10 @@ To configure the Pipeline Bootstrapper unit, [:material-cog: Edit](https://doc.l
976
982
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
977
983
  jarFiles: []
978
984
 
979
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
980
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
985
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
986
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
987
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
988
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
981
989
 
982
990
  # specifies a list of launch arguments that are disallowed from either command line or user config files.
983
991
  disabledArgs: []
@@ -1417,8 +1425,10 @@ To configure the Pipeline Bootstrapper unit, [:material-cog: Edit](https://doc.l
1417
1425
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
1418
1426
  jarFiles: []
1419
1427
 
1420
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
1421
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
1428
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
1429
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
1430
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
1431
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
1422
1432
 
1423
1433
  # 'disabledArgs' specifies a list of launch arguments that are disallowed from either command line or user config files.
1424
1434
  disabledArgs: []
@@ -1595,8 +1605,10 @@ To configure the Pipeline Bootstrapper unit, [:material-cog: Edit](https://doc.l
1595
1605
  # 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
1596
1606
  jarFiles: []
1597
1607
 
1598
- # 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
1599
- # metricEndpoint: https://prometheus.log10x.com/api/v1/write
1608
+ # 'metricEndpoint' specifies a Prometheus remote-write endpoint for pipeline usage and health metrics.
1609
+ # Unset by default. The endpoint is a self-hosted or vendor Prometheus-compatible store, never a 10x
1610
+ # service, and is where the MCP reads engine state back from to tune policy such as regulator rates.
1611
+ # metricEndpoint: https://prometheus.example.com/api/v1/write
1600
1612
 
1601
1613
  # specifies a list of launch arguments that are disallowed from either command line or user config files.
1602
1614
  disabledArgs: []
@@ -15,16 +15,33 @@ The message initializer uses symbol libraries to isolate stable [message pattern
15
15
 
16
16
  Every token the symbol library recognizes carries a set of candidate origins: the source unit, a file or a binary, that can emit the token, together with the enclosing scope the library recorded for it. A token emitted by many units resolves to many candidates, so ambiguity is the normal case and resolving it is the selector's job. Candidates are keyed by originating unit plus enclosing scope, so symbols sharing an origin and a scope coalesce into one candidate.
17
17
 
18
- The initializer identifies the core message pattern by ranking those candidates from a [TenXTemplate](https://doc.log10x.com/run/template/ "Import joint JSON schemas files to expand events into well-defined TenXObjects.") **by coverage**, on a four-key comparator, every key descending:
18
+ The initializer identifies the core message pattern by ranking those candidates from a [TenXTemplate](https://doc.log10x.com/run/template/ "Import joint JSON schemas files to expand events into well-defined TenXObjects."), on a five-key comparator, every key descending:
19
19
 
20
- 1. **Widest matched phrase**: a per-field maximum, rather than a sum, over library-matched, multi-character tokens that are not [reserved](https://doc.log10x.com/run/transform/symbol/#symbolsequencereserved "list of terms to ignore when scanning symbol tokens"). This is the widest single library-matched phrase the origin accounts for.
21
- 2. **Distinct known tokens**: the count of distinct library-known tokens anywhere on the line that the origin explains. This is the coverage term, and it decides most events.
22
- 3. **Character total**: the combined character length of those distinct tokens.
23
- 4. **Span length**: the run length of the selected span. This is the only run-length key, it sits last, and the comparator reaches it only when the first three keys all tie.
20
+ 1. **Prose evidence**: the width of the candidate's widest matched field that is **not inside a container**. Container depth is counted from the opens and closes preceding the field, so a JSON attribute value that quotes another component's message is excluded here even though it is prose-shaped. This key decides first.
21
+ 2. **Widest matched phrase**: a per-field maximum, rather than a sum, over library-matched, multi-character tokens that are not [reserved](https://doc.log10x.com/run/transform/symbol/#symbolsequencereserved "list of terms to ignore when scanning symbol tokens"). This is the widest single library-matched phrase the origin accounts for.
22
+ 3. **Distinct known tokens**: the count of distinct library-known tokens anywhere on the line that the origin explains. This is the coverage term.
23
+ 4. **Character total**: the combined character length of those distinct tokens.
24
+ 5. **Span length**: the run length of the selected span. This is the only run-length key, it sits last, and the comparator reaches it only when the first four keys all tie.
25
+
26
+ Prose ranks ahead of bulk because text inside a container is citation, not authorship. A twenty-token error value carried as an attribute does not outrank the two-token statement it is attached to.
24
27
 
25
28
  Coverage ranks ahead of length because the more places a word appears across a code base, the less that word says about where a line came from. A word appearing in one file identifies that file; a word appearing in hundreds identifies nothing. Ranking by how many distinct known words an origin explains picks the origin that best accounts for the line.
26
29
 
27
- Contiguity is a property of the emitted value rather than of the selection. Once a candidate wins, the output spans from the candidate's first field start to its last field end, then pads forward and backward while the [`symbolMaxLen`](#symbolmaxlen "max number of output chars") budget allows. A candidate whose tokens sit in three separate phrases scattered across the line can beat a candidate holding one longer contiguous run.
30
+ One tie-break runs after the ranking rather than as a sixth key. Where the winner ties its nearest rival on all five, the tied group yields to a candidate whose unit the line's own authorship region names.
31
+
32
+ ### Evidence gate
33
+
34
+ A typed selection ([`symbolContexts`](#symbolcontexts "types of symbols to search") of `log,exec`) claims an origin: this source statement wrote this line. That claim stands on prose evidence exclusively, and a candidate whose prose score is below two is rejected rather than crowned. **A line with no prose evidence gets no typed origin and keeps its raw fallback identity.** The lone `any` context asserts nothing about provenance and gates at one token instead, so thin fragments still receive an identity.
35
+
36
+ ### Emission
37
+
38
+ Selection picks the origin. Emission then builds the value in three stages.
39
+
40
+ - **Anchor**: the winner's widest matched prose field, emitted verbatim. The message region runs forward from the anchor's own start and stops at the first container open, newline, or second timestamp; where that boundary falls inside the anchor field the region collapses back to the field. The anchor is **exempt from reserved filtering**: applying it here renames the statement, turning `no baggage found in context` into `no_found`. Timestamps, variables and repeats are still dropped.
41
+ - **Suffix**: distinct non-reserved tokens from the winner's other matched fields, each token counted once however often it repeats, up to a budget of sixteen.
42
+ - **Padding**: forward and backward from the emitted region while the [`symbolMaxLen`](#symbolmaxlen "max number of output chars") budget allows. Reserved filtering governs here and in the suffix, which is where a generic word is genuinely noise. The backward walk stops where the statement starts: at the nearest preceding timestamp, or at a token that closes a container or ends a line. Everything before that point is preamble, the node ids, request ids, thread and logger names a format prints ahead of the message, and it stays out of the pattern.
43
+
44
+ Every stage, and the `any` fallback below, skips an **identifier fragment**: a library word whose neighbour carries a digit, directly or across a single `-`, `_` or `.`. The `C` in the node id `R21-M0-N4-C:J05-U11` and the `req` in `req-b3e2...` are library words, and skipping them keeps one statement on one identity however its ids are spelled. Detection reads only the line, so the identity stays a function of the line and the library.
28
45
 
29
46
  The [`symbolContexts`](#symbolcontexts "types of symbols to search") list filters which symbol contexts participate. Contexts are evaluated in a single pass, so list order acts as a filter rather than a precedence chain.
30
47
 
@@ -34,9 +51,9 @@ The `inputField` parameter limits searches to specific JSON fields. Setting `inp
34
51
 
35
52
  The comparator is deterministic: every key is a content-derived integer. Three details bound that behavior.
36
53
 
37
- - A full four-key tie falls back to candidate insertion order, which holds stable for a given engine build and is not a documented ordering.
54
+ - A full five-key tie that the authorship pass also leaves undecided falls back to candidate insertion order, which holds stable for a given engine build and is not a documented ordering.
38
55
  - Two truncation caps can hide a true origin: [`symbolMaxOrigins`](https://doc.log10x.com/run/transform/symbol/#symbolmaxorigins "max number of source/binary origins to list per symbol") (default 64, the cap that binds at runtime) and [`maxSymbolUnitsPerToken`](https://doc.log10x.com/run/symbol/#maxsymbolunitspertoken "number of symbol units to retrieve when searching for the origin of an TenXTemplate symbol sequence") (default 128, approximate, stopping in the low 130s).
39
- - When the selected sequence comes back as a single token, the module re-runs the selection under the `any` context, which concatenates all symbol tokens in range and bypasses the comparator.
56
+ - When the selected sequence comes back as a single token, the module re-runs the selection under the `any` context, which concatenates all symbol tokens in range, minus identifier fragments, and bypasses the comparator.
40
57
 
41
58
  The claim the engine supports is scoped: the same engine version, the same symbol library, the same configuration and the same event yield the same pattern.
42
59
 
@@ -548,7 +548,7 @@ symbol:
548
548
 
549
549
  # Specifying '*' will emit information for all source code /binary files that have
550
550
  # been selected as the origin of any TenXTemplate objects within the pipeline.
551
- symbols: [''
551
+ symbols: [
552
552
  # '*'
553
553
  ]
554
554
  ```
@@ -246,14 +246,21 @@ timestamp:
246
246
  - "yyyy-MM-dd HH:mm:ss" # Widely used in Java applications, databases (e.g., MySQL, PostgreSQL), and application servers (e.g., Tomcat, JBoss).
247
247
  - "yyyy-MM-dd'T'HH:mm:ss.SSSZ" # Common in web services, APIs, Java (with DateTimeFormatter.ISO_OFFSET_DATE_TIME), Python (with datetime.isoformat()), and systems requiring precise timestamps with timezone information.
248
248
  - "MMM dd HH:mm:ss" # Frequently seen in syslog, Unix-based systems, network devices (e.g., Cisco routers), and web servers (e.g., Apache, Nginx).
249
+ - "MMM d HH:mm:ss" # Classic syslog (RFC 3164) on days 1-9: the day is space-padded, e.g. "Jan 3 17:38:36".
250
+ - "MMM d HH:mm:ss" # Same date without the padding (strftime %b %-d), e.g. "Nov 9 12:01:01" in Thunderbird-style system logs.
249
251
  - "dd/MMM/yyyy:HH:mm:ss Z" # Standard syslog format, used in firewalls (e.g., Cisco ASA, Palo Alto), network monitoring tools, and Unix-based systems.
250
252
  - "yyyy-MM-dd HH:mm:ss,SSS" # Common in Java logging frameworks like Log4j and Logback.
251
253
  - "yyyy-MM-dd'T'HH:mm:ss,SSS" # Common in Java logging with ISO 8601 date-time, comma-separated milliseconds.
252
254
  - "MM/dd/yyyy HH:mm:ss" # Used in Windows event logs, .NET applications, and U.S.-based systems.
253
255
  - "EEE MMM dd HH:mm:ss yyyy" # Human-readable format used in various logs, including some web servers and application logs.
256
+ - "EEE MMM dd HH:mm:ss zzz yyyy" # java.util.Date.toString() and the Unix date command, e.g. "Thu Jan 15 10:00:01 UTC 2026". Common in Java application logs and shell-script output.
254
257
  - "yyyy-MM-dd'T'HH:mm:ss" # Simplified ISO 8601 format, used in many modern applications and frameworks.
255
258
  - "HH:mm:ss" # Time-only format, used when the date is implied or provided separately, common in embedded systems and some programming languages.
256
259
  - "yyyyMMdd HH:mm:ss" # Compact format used in some legacy systems and batch processing logs.
260
+ - "yyyyMMdd-H:m:s:SSS" # Compact date, hyphen, unpadded time, colon before the milliseconds, e.g. "20171223-22:15:29:606" or "20171224-0:0:0:234". Android HealthApp and similar mobile logs.
261
+ - "yyyyMMdd-H:m:s:SS" # Same with two fraction digits, e.g. "20171223-22:30:24:28".
262
+ - "yyyyMMdd-H:m:s:S" # Same with one fraction digit.
263
+ - "MM.dd HH:mm:ss" # Month.day without a year, e.g. "10.30 16:49:06". Proxifier and other Windows utility logs.
257
264
  - "MMM dd, yyyy h:mm:ss a" # Human-readable format with 12-hour clock, used in application logs and some U.S.-based systems.
258
265
  - "MMM dd, yyyy hh:mm:ss a" # Human-readable format with 12-hour clock (padded hour), used in application logs and some U.S.-based systems.
259
266
  # Common formats with slight variations
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "log10x-mcp",
3
- "version": "1.30.20",
3
+ "version": "1.30.21",
4
4
  "description": "Rank log patterns by cost, then compact, tier down or offload them. No log data reaches log10x.",
5
5
  "mcpName": "io.github.log-10x/log10x-mcp",
6
6
  "type": "module",