log10x-mcp 1.30.19 → 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.
@@ -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.
@@ -51,7 +51,9 @@ Cut [CloudWatch](https://www.log10x.com/aws-cloudwatch.html){target="_blank"} co
51
51
 
52
52
  **CloudWatch charges $0.50/GB for log ingestion** (us-east-1), the single biggest line item for most teams. A 10TB/month environment pays $5,000/month just to ingest.
53
53
 
54
- **Down-tier to a cheaper log group:** route the low-value slice to a [CloudWatch Logs Infrequent Access](https://aws.amazon.com/cloudwatch/pricing/){target="_blank"} log group at $0.25/GB ingest (50% off the $0.50 standard) and $0.0075/GB-month storage, still queryable in Logs Insights. Down-tiering half of a 10TB/month volume saves ~$1,250/month on ingest alone (5TB x $0.25 saved).
54
+ **Down-tier to a cheaper log group:** route the low-value slice to a [CloudWatch Logs Infrequent Access](https://aws.amazon.com/cloudwatch/pricing/){target="_blank"} log group at $0.25/GB ingest, 50% off the $0.50 standard, still queryable in Logs Insights. The saving is ingest-side only: AWS bills storage and Logs Insights queries at the same rate in both log classes. Down-tiering half of a 10TB/month volume saves ~$1,250/month (5TB x $0.25 saved).
55
+
56
+ Before down-tiering a log group, check what reads it. An Infrequent Access group serves Logs Insights, but not subscription filters, metric filters, Live Tail, field indexing, or the `GetLogEvents` and `FilterLogEvents` APIs. A consumer on any of those stops returning events with no error. The log class is fixed when the group is created, so the slice moves to a new IA group rather than converting the one already in place.
55
57
 
56
58
  **Offload to your own S3:** route the bulk slice to customer-owned S3 at $0.023/GB-month and fetch it back with [Retriever](https://log10x.com/retriever.html){target="_blank"} only when you query. For compliance and archival profiles where most volume is offloaded, total savings reach an estimated 80%+.
57
59
 
@@ -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.19",
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",