@tikoci/centrs 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/GLOSSARY.txt +213 -0
  3. package/LICENSE +21 -0
  4. package/README.md +36 -8
  5. package/commands/AGENTS.md +7 -1
  6. package/commands/api/README.md +19 -18
  7. package/commands/api/examples.md +15 -0
  8. package/commands/btest/README.md +21 -32
  9. package/commands/check/README.md +6 -1
  10. package/commands/discover/README.md +5 -11
  11. package/commands/execute/README.md +41 -29
  12. package/commands/execute/examples.md +41 -3
  13. package/commands/explain/README.md +1716 -0
  14. package/commands/explain/examples.md +606 -0
  15. package/commands/retrieve/README.md +25 -27
  16. package/commands/retrieve/examples.md +16 -0
  17. package/commands/transfer/README.md +28 -20
  18. package/commands/transfer/examples.md +29 -0
  19. package/docs/CLI.md +353 -0
  20. package/docs/CONSTITUTION.md +66 -15
  21. package/docs/MATRIX.md +38 -1
  22. package/docs/errors/README.md +3 -0
  23. package/docs/errors/quickchr/machine-not-found.md +22 -0
  24. package/docs/errors/quickchr/machine-stopped.md +20 -0
  25. package/docs/errors/quickchr/package-unavailable.md +27 -0
  26. package/docs/errors/quickchr/unsupported-via.md +35 -0
  27. package/docs/errors/quickchr/unsupported.md +35 -0
  28. package/docs/errors/routeros/version-unsupported.md +26 -0
  29. package/docs/errors/transport/provider-trust.md +29 -0
  30. package/docs/errors/usage/stdin-ignored.md +28 -0
  31. package/docs/errors/validation/unknown-attribute.md +37 -4
  32. package/package.json +45 -10
  33. package/src/api-fanout.ts +29 -14
  34. package/src/api.ts +97 -54
  35. package/src/cli/api.ts +25 -6
  36. package/src/cli/btest.ts +18 -2
  37. package/src/cli/execute.ts +25 -6
  38. package/src/cli/explain.ts +503 -0
  39. package/src/cli/retrieve.ts +33 -1
  40. package/src/cli/selection.ts +71 -11
  41. package/src/cli/settings.ts +2 -2
  42. package/src/cli/transfer.ts +23 -6
  43. package/src/cli.ts +15 -2
  44. package/src/core/envelope.ts +5 -2
  45. package/src/core/error-catalog.ts +40 -0
  46. package/src/core/preflight.ts +306 -0
  47. package/src/core/routeros-string.ts +24 -0
  48. package/src/errors.ts +1 -0
  49. package/src/execute-fanout.ts +29 -14
  50. package/src/execute.ts +114 -63
  51. package/src/explain/arg-tokens.ts +114 -0
  52. package/src/explain/args.ts +1403 -0
  53. package/src/explain/blocks.ts +132 -0
  54. package/src/explain/brace-slots.ts +143 -0
  55. package/src/explain/brace-tokens.ts +38 -0
  56. package/src/explain/catalog.ts +1345 -0
  57. package/src/explain/coordinates.ts +329 -0
  58. package/src/explain/defects.ts +217 -0
  59. package/src/explain/is-known-menu.ts +17 -0
  60. package/src/explain/menus.ts +664 -0
  61. package/src/explain/operator-tokens.ts +310 -0
  62. package/src/explain/operators.ts +458 -0
  63. package/src/explain/path-tokens.ts +150 -0
  64. package/src/explain/pathresolve.ts +1324 -0
  65. package/src/explain/quoted-string.ts +241 -0
  66. package/src/explain/scope-brace.ts +308 -0
  67. package/src/explain/segment.ts +757 -0
  68. package/src/explain/string-tokens.ts +67 -0
  69. package/src/explain/symbol-values.ts +520 -0
  70. package/src/explain/symbols.ts +1597 -0
  71. package/src/explain/token-ranges.ts +72 -0
  72. package/src/explain/transport.ts +497 -0
  73. package/src/explain/value-tokens.ts +80 -0
  74. package/src/explain/values.ts +357 -0
  75. package/src/explain/verbs.ts +64 -0
  76. package/src/explain/verbsplit.ts +813 -0
  77. package/src/explain/write.ts +815 -0
  78. package/src/explain.ts +2152 -0
  79. package/src/index.ts +206 -4
  80. package/src/protocols/mac-telnet-console.ts +61 -17
  81. package/src/resolver/facts.ts +1 -1
  82. package/src/resolver/index.ts +23 -4
  83. package/src/resolver/quickchr-provider.ts +597 -0
  84. package/src/resolver/selection.ts +99 -12
  85. package/src/resolver/service-endpoint.ts +155 -0
  86. package/src/resolver/target.ts +1 -1
  87. package/src/retrieve-fanout.ts +26 -12
  88. package/src/retrieve.ts +81 -18
  89. package/src/transfer-fanout.ts +42 -25
  90. package/src/transfer.ts +87 -44
@@ -0,0 +1,1345 @@
1
+ /**
2
+ * RouterOS path catalog — GENERATED, do not hand-edit.
3
+ *
4
+ * Regenerate with `bun run explain:catalog`; `bun run explain:catalog --check`
5
+ * is the drift gate. The generator (`scripts/gen-explain-catalog.ts`) carries
6
+ * the full rationale, the vendored-ETL provenance, and the alias allowlist with
7
+ * its two safety assertions.
8
+ *
9
+ * Union of two first-order sources (#228):
10
+ *
11
+ * 1. MikroTik's published CLI Reference (`https://manual.mikrotik.com/docs/cli-reference/`),
12
+ * 1,070 pages, 1,077 entries — first-order about the definition
13
+ * structs and their build-time gates. Since #285 every page is a leaf whose
14
+ * slug is the CLI path, so no spelling has to be rewritten to be looked up.
15
+ * 2. Four pinned restraml `/console/inspect` trees
16
+ * (`https://tikoci.github.io/restraml/`) — first-order about the CLI surface:
17
+ *
18
+ * | Tree | Arch | RouterOS | Nodes |
19
+ * | ---- | ---- | -------- | ----- |
20
+ * | `7.10.2/extra/inspect.json` | x86 | 7.10.2 | 29,086 |
21
+ * | `7.16/extra/inspect.json` | x86 | 7.16 | 34,876 |
22
+ * | `7.23.2/extra/deep-inspect.x86.json` | x86 | 7.23.2 | 40,595 |
23
+ * | `7.24rc2/extra/deep-inspect.arm64.json` | arm64 | 7.24rc2 | 42,690 |
24
+ *
25
+ * | Kind | Total | `both` | `inspect` | `published` |
26
+ * | ---- | ----- | ------ | --------- | ----------- |
27
+ * | `menu` | 558 | 454 | 54 | 50 |
28
+ * | `command` | 450 | 407 | 0 | 43 |
29
+ * | `settings` | 116 | 107 | 0 | 9 |
30
+ *
31
+ * Zero navigation-vs-command contradictions between the two sources. Generation
32
+ * aborts if that ever stops holding, rather than picking a winner. Where a path
33
+ * is published twice as a container under different hardware gates — the seven
34
+ * `/interface/ethernet/switch` and `/system/health` variants — the row records
35
+ * what the occurrences agree on.
36
+ *
37
+ * **This table is not a schema.** It says what a path IS — navigation, an
38
+ * executable command, or a settings menu — and never what a command accepts.
39
+ * Arguments, types, enums and `.proplist` stay live-only evidence.
40
+ *
41
+ * **Absence never rejects.** A path in neither source is simply absent, and a
42
+ * caller that does not find one must abstain. A gate never decides anything
43
+ * offline either: it explains why a published path may be missing from a given
44
+ * router ("PoE hardware only"), and no router was consulted to build this.
45
+ *
46
+ * **Gates conjoin down a path, so read them with {@link effectiveGates}, not
47
+ * row by row.** A row states only what the publication stated at that entry.
48
+ * Read row-wise, 2 published-only paths look ungated; read with
49
+ * ancestry, the residue carrying no published explanation for its absence at
50
+ * all is 1.
51
+ *
52
+ * Tree COMMANDS are not enumerated — those are the generic CRUD leaves
53
+ * `verbs.ts` already owns. The command rows here are the published,
54
+ * overwhelmingly non-generic ones.
55
+ */
56
+
57
+ /** What a path IS. `settings` is a menu whose contents are a single record. */
58
+ export type PathKind = "menu" | "command" | "settings";
59
+
60
+ /**
61
+ * Which source carried an entry.
62
+ *
63
+ * `inspect` and `both` are device-confirmed: the path was observed on at least
64
+ * one real `/console/inspect` tree. `published` is documentation evidence only
65
+ * — usually a path gated to hardware no CHR has.
66
+ */
67
+ export type PathProvenance = "inspect" | "published" | "both";
68
+
69
+ /**
70
+ * One catalog row. The gate fields are MikroTik's published build-time
71
+ * applicability markers, verbatim; they are provenance for an explanation, never
72
+ * a claim about any particular router.
73
+ */
74
+ export interface CatalogEntry {
75
+ kind: PathKind;
76
+ provenance: PathProvenance;
77
+ /** Required RouterOS package, e.g. `wireless-qca`. */
78
+ package?: string;
79
+ /** Build conditions, e.g. `!i386, !smips`. */
80
+ conditions?: string;
81
+ /** Required system capability, e.g. `poe`, `lcd`, `multiswitch`. */
82
+ syscap?: string;
83
+ }
84
+
85
+ /**
86
+ * The catalog as text: one line per path, columns separated by `|` —
87
+ * `path|kind|provenance|package|conditions|syscap` — with trailing empty
88
+ * columns trimmed. Lower-cased, slash-led and sorted by path.
89
+ *
90
+ * Text rather than ~1,124 object literals so that one path is one line in a
91
+ * review diff, and so the formatter has nothing to re-wrap.
92
+ */
93
+ const ROWS = `
94
+ /app|menu|both|container||app
95
+ /app/cleanup|command|both|container||app
96
+ /app/network|menu|both|container||app
97
+ /app/remove|command|both|container||app
98
+ /app/restart|command|both|container||app
99
+ /app/settings|settings|both|container||app
100
+ /app/setup|command|both|container||app
101
+ /app/update|command|both|container||app
102
+ /beep|command|both
103
+ /blink|command|both||!i386
104
+ /caps-man|menu|inspect
105
+ /caps-man/aaa|settings|both|wireless-rep
106
+ /caps-man/access-list|menu|both|wireless-rep
107
+ /caps-man/actual-interface-configuration|menu|both|wireless-rep
108
+ /caps-man/channel|menu|both|wireless-rep
109
+ /caps-man/configuration|menu|both|wireless-rep
110
+ /caps-man/datapath|menu|both|wireless-rep
111
+ /caps-man/interface|menu|both|wireless-rep
112
+ /caps-man/interface/hw-info|command|both|wireless-rep
113
+ /caps-man/interface/possible-channels|command|both|wireless-rep
114
+ /caps-man/interface/reselect-channel|command|both|wireless-rep
115
+ /caps-man/interface/scan|command|both|wireless-rep
116
+ /caps-man/manager|settings|both|wireless-rep
117
+ /caps-man/manager/interface|menu|both|wireless-rep
118
+ /caps-man/provisioning|menu|both|wireless-rep
119
+ /caps-man/radio|menu|both|wireless-rep
120
+ /caps-man/radio/hw-info|command|both|wireless-rep
121
+ /caps-man/radio/provision|command|both|wireless-rep
122
+ /caps-man/rates|menu|both|wireless-rep
123
+ /caps-man/registration-table|menu|both|wireless-rep
124
+ /caps-man/remote-cap|menu|both|wireless-rep
125
+ /caps-man/remote-cap/provision|command|both|wireless-rep
126
+ /caps-man/remote-cap/set-identity|command|both|wireless-rep
127
+ /caps-man/remote-cap/upgrade|command|both|wireless-rep
128
+ /caps-man/security|menu|both|wireless-rep
129
+ /certificate|menu|both
130
+ /certificate/acme-renew|command|both
131
+ /certificate/add-acme|command|both
132
+ /certificate/add-scep|command|both
133
+ /certificate/builtin|menu|both
134
+ /certificate/card-reinstall|command|both
135
+ /certificate/card-verify|command|both
136
+ /certificate/create-certificate-request|command|both
137
+ /certificate/crl|menu|both
138
+ /certificate/crl/download|command|both
139
+ /certificate/crl/flush|command|both
140
+ /certificate/enable-ssl-certificate|command|both
141
+ /certificate/export-certificate|command|both
142
+ /certificate/import|command|both
143
+ /certificate/issued-revoke|command|both
144
+ /certificate/scep-renew|command|both
145
+ /certificate/scep-server|menu|both
146
+ /certificate/scep-server/otp|menu|both
147
+ /certificate/scep-server/otp/generate|command|both
148
+ /certificate/scep-server/ra|menu|both
149
+ /certificate/scep-server/ra/renew|command|both
150
+ /certificate/scep-server/requests|menu|both
151
+ /certificate/scep-server/requests/grant|command|both
152
+ /certificate/settings|settings|both
153
+ /certificate/sign|command|both
154
+ /certificate/sign-certificate-request|command|both
155
+ /console|menu|both
156
+ /console/inspect|command|both
157
+ /console/settings|settings|both
158
+ /container|menu|both|container
159
+ /container/config|settings|both|container
160
+ /container/envs|menu|both|container
161
+ /container/kill|command|both|container
162
+ /container/layers|menu|both|container
163
+ /container/log|menu|both|container
164
+ /container/mounts|menu|both|container
165
+ /container/repull|command|both|container
166
+ /container/restart|command|both|container
167
+ /container/save|command|both|container
168
+ /container/start|command|both|container
169
+ /container/stop|command|both|container
170
+ /container/update|command|both|container
171
+ /disk|menu|both||!smips
172
+ /disk/blink|command|both||!smips
173
+ /disk/btrfs|menu|both||!smips|storage
174
+ /disk/btrfs/filesystem|menu|both||!smips|storage
175
+ /disk/btrfs/filesystem/add-device|command|both||!smips|storage
176
+ /disk/btrfs/filesystem/balance-cancel|command|both||!smips|storage
177
+ /disk/btrfs/filesystem/balance-start|command|both||!smips|storage
178
+ /disk/btrfs/filesystem/remove-device|command|both||!smips|storage
179
+ /disk/btrfs/filesystem/replace-cancel|command|both||!smips|storage
180
+ /disk/btrfs/filesystem/replace-device|command|both||!smips|storage
181
+ /disk/btrfs/filesystem/reset-counters|command|both||!smips|storage
182
+ /disk/btrfs/filesystem/scrub-cancel|command|both||!smips|storage
183
+ /disk/btrfs/filesystem/scrub-start|command|both||!smips|storage
184
+ /disk/btrfs/subvolume|menu|both||!smips|storage
185
+ /disk/btrfs/transfer|menu|both||!smips|storage
186
+ /disk/check|command|both||!smips|storage
187
+ /disk/copy|command|both||!smips
188
+ /disk/eject|command|both||!smips
189
+ /disk/format|command|both||!smips
190
+ /disk/monitor-traffic|command|both||!smips
191
+ /disk/nvme-discover|command|both||!smips|storage
192
+ /disk/raid-scrub|command|both||!smips|storage
193
+ /disk/raid-scrub-cancel|command|both||!smips|storage
194
+ /disk/repair|command|both||!smips|storage
195
+ /disk/reset-counters|command|both||!smips
196
+ /disk/scan|command|both||!smips
197
+ /disk/settings|settings|both||!smips
198
+ /disk/smart-info|command|both||!smips|storage
199
+ /disk/smb-share|menu|inspect
200
+ /disk/smb-user|menu|inspect
201
+ /disk/test|command|both||!smips
202
+ /disk/trim|command|both||!smips
203
+ /dude|settings|both|dude
204
+ /dude/agent|menu|both|dude
205
+ /dude/device|menu|both|dude
206
+ /dude/device-type|menu|both|dude
207
+ /dude/export-db|command|both|dude
208
+ /dude/import-db|command|both|dude
209
+ /dude/notification|menu|both|dude
210
+ /dude/probe|menu|both|dude
211
+ /dude/ros|menu|both|dude
212
+ /dude/ros/address|menu|both|dude
213
+ /dude/ros/arp|menu|both|dude
214
+ /dude/ros/health|menu|both|dude
215
+ /dude/ros/interface|menu|both|dude
216
+ /dude/ros/lease|menu|both|dude
217
+ /dude/ros/neighbor|menu|both|dude
218
+ /dude/ros/queue|menu|both|dude
219
+ /dude/ros/registration-table|menu|both|dude
220
+ /dude/ros/resource|menu|both|dude
221
+ /dude/ros/route|menu|both|dude
222
+ /dude/ros/routerboard|menu|both|dude
223
+ /dude/service|menu|both|dude
224
+ /dude/settings|settings|both|dude
225
+ /dude/vacuum-db|command|both|dude
226
+ /environment|menu|both
227
+ /file|menu|both
228
+ /file/copy|command|both
229
+ /file/head|command|both
230
+ /file/read|command|both
231
+ /file/rsync-daemon|settings|both|rose-storage
232
+ /file/sync|menu|both|rose-storage
233
+ /file/sync/monitor|command|both|rose-storage
234
+ /file/tail|command|both
235
+ /import|command|both
236
+ /interface|menu|both
237
+ /interface/6to4|menu|both
238
+ /interface/blink|command|both
239
+ /interface/bonding|menu|both
240
+ /interface/bonding/monitor|command|both
241
+ /interface/bonding/monitor-slaves|command|both
242
+ /interface/bridge|menu|both||MSRP_ENABLE
243
+ /interface/bridge/calea|menu|both
244
+ /interface/bridge/calea/reset-counters|command|both
245
+ /interface/bridge/calea/reset-counters-all|command|both
246
+ /interface/bridge/filter|menu|both
247
+ /interface/bridge/filter/reset-counters|command|both
248
+ /interface/bridge/filter/reset-counters-all|command|both
249
+ /interface/bridge/host|menu|both
250
+ /interface/bridge/mdb|menu|both
251
+ /interface/bridge/monitor|command|both
252
+ /interface/bridge/msrp|menu|published||MSRP_ENABLE
253
+ /interface/bridge/msrp/attributes|menu|published||MSRP_ENABLE
254
+ /interface/bridge/msrp/domain|menu|published||MSRP_ENABLE
255
+ /interface/bridge/msrp/domain/attributes|menu|published||MSRP_ENABLE
256
+ /interface/bridge/msrp/domain/monitor|command|published||MSRP_ENABLE
257
+ /interface/bridge/msti|menu|both
258
+ /interface/bridge/msti/monitor|command|both
259
+ /interface/bridge/nat|menu|both
260
+ /interface/bridge/nat/reset-counters|command|both
261
+ /interface/bridge/nat/reset-counters-all|command|both
262
+ /interface/bridge/port|menu|both
263
+ /interface/bridge/port-controller|menu|inspect
264
+ /interface/bridge/port-controller/device|menu|inspect
265
+ /interface/bridge/port-controller/port|menu|inspect
266
+ /interface/bridge/port-controller/port/poe|menu|inspect
267
+ /interface/bridge/port-extender|menu|inspect
268
+ /interface/bridge/port/monitor|command|both
269
+ /interface/bridge/port/mst-override|menu|both
270
+ /interface/bridge/port/mst-override/monitor|command|both
271
+ /interface/bridge/settings|settings|both
272
+ /interface/bridge/vlan|menu|both
273
+ /interface/bridge/vlan/mvrp|menu|both
274
+ /interface/detect-internet|settings|both
275
+ /interface/detect-internet/state|menu|both
276
+ /interface/dot1x|menu|both||!smips
277
+ /interface/dot1x/client|menu|both||!smips
278
+ /interface/dot1x/server|menu|both||!smips
279
+ /interface/dot1x/server/active|menu|both||!smips
280
+ /interface/dot1x/server/state|menu|both||!smips
281
+ /interface/eoip|menu|both
282
+ /interface/eoipv6|menu|both
283
+ /interface/ethernet|menu|both||i386
284
+ /interface/ethernet/blink|command|both
285
+ /interface/ethernet/cable-test|command|both
286
+ /interface/ethernet/monitor|command|both||i386
287
+ /interface/ethernet/poe|menu|published|||(poe or poe-in)
288
+ /interface/ethernet/poe/monitor|command|published|||(poe or poe-in)
289
+ /interface/ethernet/poe/power-cycle|command|published|||(poe or poe-in)
290
+ /interface/ethernet/poe/settings|settings|published|||(poe or poe-in) and poesettings
291
+ /interface/ethernet/reset-counters|command|both
292
+ /interface/ethernet/reset-mac-address|command|both
293
+ /interface/ethernet/switch|menu|both
294
+ /interface/ethernet/switch/acl|menu|published|||musicswitch
295
+ /interface/ethernet/switch/acl/policer|menu|published|||musicswitch
296
+ /interface/ethernet/switch/dscp-qos-map|menu|published|||musicswitch
297
+ /interface/ethernet/switch/dscp-to-dscp|menu|published|||musicswitch
298
+ /interface/ethernet/switch/egress-vlan-tag|menu|published|||musicswitch
299
+ /interface/ethernet/switch/egress-vlan-translation|menu|published|||musicswitch
300
+ /interface/ethernet/switch/host|menu|both|||rbswitch and oldswitch
301
+ /interface/ethernet/switch/ingress-port-policer|menu|published|||musicswitch
302
+ /interface/ethernet/switch/ingress-vlan-translation|menu|published|||musicswitch
303
+ /interface/ethernet/switch/l3hw-settings|settings|published|||rbswitch and crs_prestera
304
+ /interface/ethernet/switch/l3hw-settings/advanced|settings|published|||rbswitch and crs_prestera
305
+ /interface/ethernet/switch/l3hw-settings/advanced/monitor|command|published|||rbswitch and crs_prestera
306
+ /interface/ethernet/switch/l3hw-settings/monitor|command|published|||rbswitch and crs_prestera
307
+ /interface/ethernet/switch/mac-based-vlan|menu|published|||musicswitch
308
+ /interface/ethernet/switch/multicast-fdb|menu|published|||musicswitch
309
+ /interface/ethernet/switch/one2one-vlan-switching|menu|published|||musicswitch
310
+ /interface/ethernet/switch/policer-qos-map|menu|published|||musicswitch
311
+ /interface/ethernet/switch/port|menu|both
312
+ /interface/ethernet/switch/port-isolation|menu|both
313
+ /interface/ethernet/switch/port-leakage|menu|published|||musicswitch
314
+ /interface/ethernet/switch/port/reset-counters|command|both
315
+ /interface/ethernet/switch/protocol-based-vlan|menu|published|||musicswitch
316
+ /interface/ethernet/switch/qos|menu|published|||rbswitch and crs_prestera
317
+ /interface/ethernet/switch/qos-group|menu|published|||musicswitch
318
+ /interface/ethernet/switch/qos/map|menu|published|||rbswitch and crs_prestera
319
+ /interface/ethernet/switch/qos/map/ip|menu|published|||rbswitch and crs_prestera
320
+ /interface/ethernet/switch/qos/map/vlan|menu|published|||rbswitch and crs_prestera
321
+ /interface/ethernet/switch/qos/monitor|command|published|||rbswitch and crs_prestera
322
+ /interface/ethernet/switch/qos/port|menu|published|||rbswitch and crs_prestera
323
+ /interface/ethernet/switch/qos/port/reset-counters|command|published|||rbswitch and crs_prestera
324
+ /interface/ethernet/switch/qos/priority-flow-control|menu|published|||rbswitch and crs_prestera and !prestera-ac3
325
+ /interface/ethernet/switch/qos/profile|menu|published|||rbswitch and crs_prestera
326
+ /interface/ethernet/switch/qos/settings|settings|published|||rbswitch and crs_prestera
327
+ /interface/ethernet/switch/qos/tx-manager|menu|published|||rbswitch and crs_prestera
328
+ /interface/ethernet/switch/qos/tx-manager/queue|menu|published|||rbswitch and crs_prestera
329
+ /interface/ethernet/switch/reserved-fdb|menu|published|||musicswitch
330
+ /interface/ethernet/switch/reset-counters|command|both
331
+ /interface/ethernet/switch/rule|menu|both|||rbswitch
332
+ /interface/ethernet/switch/shaper|menu|published|||musicswitch
333
+ /interface/ethernet/switch/stats|settings|published||!smips|musicswitch
334
+ /interface/ethernet/switch/trunk|menu|published|||musicswitch
335
+ /interface/ethernet/switch/unicast-fdb|menu|published|||musicswitch
336
+ /interface/ethernet/switch/unicast-fdb/flush|command|published|||musicswitch
337
+ /interface/ethernet/switch/vlan|menu|both
338
+ /interface/gre|menu|both
339
+ /interface/gre6|menu|both
340
+ /interface/ipip|menu|both
341
+ /interface/ipipv6|menu|both
342
+ /interface/l2tp-client|menu|both
343
+ /interface/l2tp-client/monitor|command|both
344
+ /interface/l2tp-ether|menu|both
345
+ /interface/l2tp-ether/monitor|command|both
346
+ /interface/l2tp-server|menu|both
347
+ /interface/l2tp-server/monitor|command|both
348
+ /interface/l2tp-server/server|settings|both
349
+ /interface/list|menu|both
350
+ /interface/list/member|menu|both
351
+ /interface/lte|menu|both||!smips
352
+ /interface/lte/apn|menu|both||!smips
353
+ /interface/lte/at-chat|command|both||!smips
354
+ /interface/lte/cell-monitor|command|both||!smips
355
+ /interface/lte/esim|menu|both||!smips
356
+ /interface/lte/esim/activate|command|both||!smips
357
+ /interface/lte/esim/deactivate|command|both||!smips
358
+ /interface/lte/esim/delete|command|both||!smips
359
+ /interface/lte/esim/esim-id|command|both||!smips
360
+ /interface/lte/esim/provision|command|both||!smips
361
+ /interface/lte/esim/refresh-profile-list|command|both||!smips
362
+ /interface/lte/esim/send-notifications|command|both||!smips
363
+ /interface/lte/esim/set-nickname|command|both||!smips
364
+ /interface/lte/firmware-upgrade|command|both||!smips
365
+ /interface/lte/monitor|command|both||!smips
366
+ /interface/lte/run-modem-update|command|published||!smips
367
+ /interface/lte/scan|command|both||!smips
368
+ /interface/lte/settings|settings|both||!smips, !i386, !mips, !powerpc
369
+ /interface/lte/show-capabilities|command|both||!smips
370
+ /interface/macsec|menu|both||!smips
371
+ /interface/macsec/monitor|command|both||!smips
372
+ /interface/macsec/profile|menu|both||!smips
373
+ /interface/macvlan|menu|both
374
+ /interface/mesh|menu|both
375
+ /interface/mesh/fdb|menu|both
376
+ /interface/mesh/port|menu|both
377
+ /interface/mesh/traceroute|command|both
378
+ /interface/monitor-traffic|command|both
379
+ /interface/ovpn-client|menu|both
380
+ /interface/ovpn-client/import-ovpn-configuration|command|both
381
+ /interface/ovpn-client/monitor|command|both
382
+ /interface/ovpn-server|menu|both
383
+ /interface/ovpn-server/monitor|command|both
384
+ /interface/ovpn-server/server|menu|both
385
+ /interface/ovpn-server/server/export-client-configuration|command|both
386
+ /interface/ppp-client|menu|both
387
+ /interface/ppp-client/at-chat|command|both
388
+ /interface/ppp-client/firmware-upgrade|command|both
389
+ /interface/ppp-client/info|command|both
390
+ /interface/ppp-client/monitor|command|both
391
+ /interface/ppp-client/scan|command|both
392
+ /interface/ppp-server|menu|both
393
+ /interface/ppp-server/monitor|command|both
394
+ /interface/pppoe-client|menu|both
395
+ /interface/pppoe-client/monitor|command|both
396
+ /interface/pppoe-client/scan|command|both
397
+ /interface/pppoe-server|menu|both
398
+ /interface/pppoe-server/monitor|command|both
399
+ /interface/pppoe-server/server|menu|both
400
+ /interface/pptp-client|menu|both
401
+ /interface/pptp-client/monitor|command|both
402
+ /interface/pptp-server|menu|both
403
+ /interface/pptp-server/monitor|command|both
404
+ /interface/pptp-server/server|settings|both
405
+ /interface/pwr-line|menu|published|||pwrlink
406
+ /interface/pwr-line/blink|command|published|||pwrlink
407
+ /interface/pwr-line/configure|command|published|||pwrlink
408
+ /interface/pwr-line/join|command|published|||pwrlink
409
+ /interface/pwr-line/leave|command|published|||pwrlink
410
+ /interface/pwr-line/monitor|command|published|||pwrlink
411
+ /interface/pwr-line/reset-counters|command|published|||pwrlink
412
+ /interface/pwr-line/reset-mac-address|command|published|||pwrlink
413
+ /interface/pwr-line/upgrade-firmware|command|published|||pwrlink
414
+ /interface/reset-counters|command|both
415
+ /interface/sstp-client|menu|both
416
+ /interface/sstp-client/monitor|command|both
417
+ /interface/sstp-server|menu|both
418
+ /interface/sstp-server/monitor|command|both
419
+ /interface/sstp-server/server|settings|both
420
+ /interface/veth|menu|both||!smips|container
421
+ /interface/vlan|menu|both||!smips
422
+ /interface/vpls|menu|both||!smips
423
+ /interface/vpls/monitor|command|both||!smips
424
+ /interface/vrrp|menu|both
425
+ /interface/vxlan|menu|both
426
+ /interface/vxlan/fdb|menu|both
427
+ /interface/vxlan/vteps|menu|both
428
+ /interface/w60g|menu|published|wireless-rep||60ghz
429
+ /interface/w60g/align|command|published|wireless-rep||60ghz
430
+ /interface/w60g/monitor|command|published|wireless-rep||60ghz
431
+ /interface/w60g/reset-configuration|command|published|wireless-rep||60ghz
432
+ /interface/w60g/scan|command|published|wireless-rep||60ghz
433
+ /interface/w60g/station|menu|published|wireless-rep||60ghz
434
+ /interface/w60g/station/monitor|command|published|wireless-rep||60ghz
435
+ /interface/wifi|menu|both
436
+ /interface/wifi/aaa|menu|both
437
+ /interface/wifi/access-list|menu|both
438
+ /interface/wifi/cap|settings|both
439
+ /interface/wifi/capsman|settings|both
440
+ /interface/wifi/capsman/remote-cap|menu|both
441
+ /interface/wifi/capsman/remote-cap/provision|command|both
442
+ /interface/wifi/capsman/remote-cap/set-identity|command|both
443
+ /interface/wifi/capsman/remote-cap/upgrade|command|both
444
+ /interface/wifi/channel|menu|both
445
+ /interface/wifi/configuration|menu|both
446
+ /interface/wifi/datapath|menu|both
447
+ /interface/wifi/devel|command|both
448
+ /interface/wifi/flat-snoop|command|both
449
+ /interface/wifi/frequency-scan|command|both
450
+ /interface/wifi/interworking|menu|both
451
+ /interface/wifi/liberate|command|both
452
+ /interface/wifi/monitor|command|both
453
+ /interface/wifi/network|menu|both
454
+ /interface/wifi/network/radio|menu|both
455
+ /interface/wifi/provisioning|menu|both
456
+ /interface/wifi/radio|menu|both
457
+ /interface/wifi/radio/provision|command|both
458
+ /interface/wifi/radio/reg-info|command|both
459
+ /interface/wifi/radio/settings|settings|both
460
+ /interface/wifi/registration-table|menu|both
461
+ /interface/wifi/reset-mac-address|command|both
462
+ /interface/wifi/roam|command|both
463
+ /interface/wifi/scan|command|both
464
+ /interface/wifi/security|menu|both
465
+ /interface/wifi/security/multi-passphrase|menu|both
466
+ /interface/wifi/sniffer|command|both
467
+ /interface/wifi/spectral-scan|command|both
468
+ /interface/wifi/steering|menu|both
469
+ /interface/wifi/steering/neighbor-group|menu|both
470
+ /interface/wifi/trigger-radar|command|published|||dfstest
471
+ /interface/wifi/wps-client|command|both
472
+ /interface/wifi/wps-push-button|command|both
473
+ /interface/wifiwave2|menu|inspect
474
+ /interface/wifiwave2/aaa|menu|inspect
475
+ /interface/wifiwave2/access-list|menu|inspect
476
+ /interface/wifiwave2/actual-configuration|menu|inspect
477
+ /interface/wifiwave2/cap|menu|inspect
478
+ /interface/wifiwave2/capsman|menu|inspect
479
+ /interface/wifiwave2/capsman/remote-cap|menu|inspect
480
+ /interface/wifiwave2/channel|menu|inspect
481
+ /interface/wifiwave2/configuration|menu|inspect
482
+ /interface/wifiwave2/datapath|menu|inspect
483
+ /interface/wifiwave2/interworking|menu|inspect
484
+ /interface/wifiwave2/provisioning|menu|inspect
485
+ /interface/wifiwave2/radio|menu|inspect
486
+ /interface/wifiwave2/registration-table|menu|inspect
487
+ /interface/wifiwave2/security|menu|inspect
488
+ /interface/wireguard|menu|both
489
+ /interface/wireguard/peers|menu|both
490
+ /interface/wireguard/peers/show-client-config|command|both
491
+ /interface/wireguard/wg-export|command|both
492
+ /interface/wireguard/wg-import|command|both
493
+ /interface/wireless|menu|both|wireless-rep
494
+ /interface/wireless/access-list|menu|both|wireless-rep
495
+ /interface/wireless/align|settings|both|wireless-rep
496
+ /interface/wireless/align/monitor|command|both|wireless-rep
497
+ /interface/wireless/align/test-audio|command|both|wireless-rep
498
+ /interface/wireless/cap|settings|both|wireless-rep
499
+ /interface/wireless/channels|menu|both|wireless-rep
500
+ /interface/wireless/connect-list|menu|both|wireless-rep
501
+ /interface/wireless/frequency-monitor|command|both|wireless-rep
502
+ /interface/wireless/info|menu|both|wireless-rep
503
+ /interface/wireless/info/allowed-channels|command|both|wireless-rep
504
+ /interface/wireless/info/country-info|command|both|wireless-rep
505
+ /interface/wireless/info/country-list|command|both|wireless-rep
506
+ /interface/wireless/info/default-scan-list|command|both|wireless-rep
507
+ /interface/wireless/info/hw-info|command|both|wireless-rep
508
+ /interface/wireless/info/scan-list|command|both|wireless-rep
509
+ /interface/wireless/interworking-profiles|menu|both|wireless-rep
510
+ /interface/wireless/manual-tx-power-table|menu|both|wireless-rep
511
+ /interface/wireless/monitor|command|both|wireless-rep
512
+ /interface/wireless/nstreme|menu|both|wireless-rep
513
+ /interface/wireless/nstreme-dual|menu|both|wireless-rep
514
+ /interface/wireless/nstreme-dual/monitor|command|both|wireless-rep
515
+ /interface/wireless/nstreme-dual/reset-counters|command|both|wireless-rep
516
+ /interface/wireless/registration-table|menu|both|wireless-rep
517
+ /interface/wireless/registration-table/reset-counters|command|both|wireless-rep
518
+ /interface/wireless/reset-configuration|command|both|wireless-rep
519
+ /interface/wireless/reset-mac-address|command|both|wireless-rep
520
+ /interface/wireless/scan|command|both|wireless-rep
521
+ /interface/wireless/security-profiles|menu|both|wireless-rep
522
+ /interface/wireless/setup-repeater|command|both|wireless-rep
523
+ /interface/wireless/sniffer|settings|both|wireless-rep
524
+ /interface/wireless/sniffer/packet|menu|both|wireless-rep
525
+ /interface/wireless/sniffer/save|command|both|wireless-rep
526
+ /interface/wireless/sniffer/sniff|command|both|wireless-rep
527
+ /interface/wireless/snooper|settings|both|wireless-rep
528
+ /interface/wireless/snooper/flat-snoop|command|both|wireless-rep
529
+ /interface/wireless/spectral-scan|command|both|wireless-rep
530
+ /interface/wireless/wds|menu|both|wireless-rep
531
+ /interface/wireless/wds/monitor|command|both|wireless-rep
532
+ /interface/wireless/wps-client|command|both|wireless-rep
533
+ /interface/wireless/wps-push-button|command|both|wireless-rep
534
+ /interface/xfrm|menu|published
535
+ /iot|menu|inspect
536
+ /iot/bluetooth|menu|both|iot
537
+ /iot/bluetooth/advertisers|menu|both|iot
538
+ /iot/bluetooth/advertisers/ad-structures|menu|both|iot
539
+ /iot/bluetooth/connections|menu|both|iot
540
+ /iot/bluetooth/connections/async-data|menu|both|iot
541
+ /iot/bluetooth/connections/async-data/clear|command|both|iot
542
+ /iot/bluetooth/connections/characteristics|menu|both|iot
543
+ /iot/bluetooth/connections/connect|command|both|iot
544
+ /iot/bluetooth/connections/disconnect|command|both|iot
545
+ /iot/bluetooth/connections/read|command|both|iot
546
+ /iot/bluetooth/connections/subscribe|command|both|iot
547
+ /iot/bluetooth/connections/unsubscribe|command|both|iot
548
+ /iot/bluetooth/connections/write|command|both|iot
549
+ /iot/bluetooth/connections/write-no-resp|command|both|iot
550
+ /iot/bluetooth/decode-ad|command|both|iot
551
+ /iot/bluetooth/peripheral-devices|menu|both|iot
552
+ /iot/bluetooth/reset-counters|command|both|iot
553
+ /iot/bluetooth/scanners|menu|both|iot
554
+ /iot/bluetooth/scanners/advertisements|menu|both|iot
555
+ /iot/bluetooth/scanners/advertisements/clear|command|both|iot
556
+ /iot/bluetooth/whitelist|menu|both|iot
557
+ /iot/gpio|menu|published|iot||gpio
558
+ /iot/gpio/analog|menu|published|iot||gpio
559
+ /iot/gpio/digital|menu|published|iot||gpio
560
+ /iot/lora|menu|both|iot
561
+ /iot/lora/channels|menu|both|iot
562
+ /iot/lora/joineui|menu|both|iot
563
+ /iot/lora/netid|menu|both|iot
564
+ /iot/lora/radios|menu|both|iot
565
+ /iot/lora/reset-devices|command|both|iot
566
+ /iot/lora/send|command|both|iot
567
+ /iot/lora/servers|menu|both|iot
568
+ /iot/lora/servers/reset-servers|command|both|iot
569
+ /iot/lora/traffic|menu|both|iot
570
+ /iot/lora/traffic/clear|command|both|iot
571
+ /iot/lora/traffic/options|settings|both|iot
572
+ /iot/modbus|settings|both|iot
573
+ /iot/modbus/read-holding-registers|command|both|iot
574
+ /iot/modbus/security-rules|menu|both|iot
575
+ /iot/modbus/transceive|command|both|iot
576
+ /iot/mqtt|settings|both|iot
577
+ /iot/mqtt/brokers|menu|both|iot
578
+ /iot/mqtt/connect|command|both|iot
579
+ /iot/mqtt/disconnect|command|both|iot
580
+ /iot/mqtt/publish|command|both|iot
581
+ /iot/mqtt/subscribe|command|both|iot
582
+ /iot/mqtt/subscriptions|menu|both|iot
583
+ /iot/mqtt/subscriptions/monitor-data|command|both|iot
584
+ /iot/mqtt/subscriptions/recv|menu|both|iot
585
+ /iot/mqtt/subscriptions/recv/clear|command|both|iot
586
+ /iot/mqtt/unsubscribe|command|both|iot
587
+ /iot/wiliot|settings|both|iot
588
+ /iot/wiliot/bluetooth-traffic|menu|both|iot
589
+ /iot/wiliot/bluetooth-traffic/clear|command|both|iot
590
+ /iot/wiliot/clear|command|both|iot
591
+ /iot/wiliot/disable|command|both|iot
592
+ /iot/wiliot/enable|command|both|iot
593
+ /iot/wiliot/mqtt-traffic|menu|both|iot
594
+ /iot/wiliot/mqtt-traffic/clear|command|both|iot
595
+ /iot/wiliot/options|settings|both|iot
596
+ /iot/wiliot/servers|menu|both|iot
597
+ /iot/wiliot/servers/defaults|command|both|iot
598
+ /ip|menu|inspect
599
+ /ip/address|menu|both
600
+ /ip/arp|menu|both
601
+ /ip/cloud|settings|both
602
+ /ip/cloud/advanced|settings|both
603
+ /ip/cloud/back-to-home-file|menu|both|||cloud-vpn
604
+ /ip/cloud/back-to-home-file/settings|settings|both|||cloud-vpn
605
+ /ip/cloud/back-to-home-file/settings/remove-certificate|command|published|||cloud-vpn
606
+ /ip/cloud/back-to-home-user|menu|both|||cloud-vpn
607
+ /ip/cloud/back-to-home-user/show-client-config|command|both|||cloud-vpn
608
+ /ip/cloud/force-update|command|both
609
+ /ip/dhcp-client|menu|both
610
+ /ip/dhcp-client/option|menu|both
611
+ /ip/dhcp-client/release|command|both
612
+ /ip/dhcp-client/renew|command|both
613
+ /ip/dhcp-relay|menu|both
614
+ /ip/dhcp-relay/monitor|command|both
615
+ /ip/dhcp-relay/reset-counters|command|both
616
+ /ip/dhcp-server|menu|both
617
+ /ip/dhcp-server/alert|menu|both
618
+ /ip/dhcp-server/alert/reset-alert|command|both
619
+ /ip/dhcp-server/config|settings|both
620
+ /ip/dhcp-server/lease|menu|both
621
+ /ip/dhcp-server/lease/check-status|command|both
622
+ /ip/dhcp-server/lease/make-static|command|both
623
+ /ip/dhcp-server/lease/send-reconfigure|command|both
624
+ /ip/dhcp-server/matcher|menu|both
625
+ /ip/dhcp-server/network|menu|both
626
+ /ip/dhcp-server/option|menu|both
627
+ /ip/dhcp-server/option/sets|menu|both
628
+ /ip/dhcp-server/setup|command|both
629
+ /ip/dns|settings|both
630
+ /ip/dns/adlist|menu|both
631
+ /ip/dns/adlist/pause|command|both
632
+ /ip/dns/adlist/reload|command|both
633
+ /ip/dns/cache|menu|both
634
+ /ip/dns/cache/all|menu|both
635
+ /ip/dns/cache/flush|command|both
636
+ /ip/dns/forwarders|menu|both
637
+ /ip/dns/static|menu|both
638
+ /ip/firewall|menu|inspect
639
+ /ip/firewall/address-list|menu|both
640
+ /ip/firewall/calea|menu|both
641
+ /ip/firewall/calea/reset-counters|command|both
642
+ /ip/firewall/calea/reset-counters-all|command|both
643
+ /ip/firewall/connection|menu|both
644
+ /ip/firewall/connection/tracking|settings|both
645
+ /ip/firewall/filter|menu|both
646
+ /ip/firewall/filter/reset-counters|command|both
647
+ /ip/firewall/filter/reset-counters-all|command|both
648
+ /ip/firewall/layer7-protocol|menu|both
649
+ /ip/firewall/mangle|menu|both
650
+ /ip/firewall/mangle/reset-counters|command|both
651
+ /ip/firewall/mangle/reset-counters-all|command|both
652
+ /ip/firewall/nat|menu|both
653
+ /ip/firewall/nat/reset-counters|command|both
654
+ /ip/firewall/nat/reset-counters-all|command|both
655
+ /ip/firewall/raw|menu|both
656
+ /ip/firewall/raw/reset-counters|command|both
657
+ /ip/firewall/raw/reset-counters-all|command|both
658
+ /ip/firewall/service-port|menu|both
659
+ /ip/hotspot|menu|both
660
+ /ip/hotspot/active|menu|both
661
+ /ip/hotspot/active/login|command|both
662
+ /ip/hotspot/cookie|menu|both
663
+ /ip/hotspot/host|menu|both
664
+ /ip/hotspot/host/make-binding|command|both
665
+ /ip/hotspot/ip-binding|menu|both
666
+ /ip/hotspot/profile|menu|both
667
+ /ip/hotspot/reset-html|command|both
668
+ /ip/hotspot/service-port|menu|both
669
+ /ip/hotspot/setup|command|both
670
+ /ip/hotspot/user|menu|both
671
+ /ip/hotspot/user/profile|menu|both
672
+ /ip/hotspot/user/reset-counters|command|both
673
+ /ip/hotspot/walled-garden|menu|both
674
+ /ip/hotspot/walled-garden/ip|menu|both
675
+ /ip/hotspot/walled-garden/reset-counters|command|both
676
+ /ip/hotspot/walled-garden/reset-counters-all|command|both
677
+ /ip/ipsec|menu|both
678
+ /ip/ipsec/active-peers|menu|both
679
+ /ip/ipsec/active-peers/kill-connections|command|both
680
+ /ip/ipsec/identity|menu|both
681
+ /ip/ipsec/installed-sa|menu|both
682
+ /ip/ipsec/installed-sa/flush|command|both
683
+ /ip/ipsec/key|menu|both
684
+ /ip/ipsec/key/psk|menu|both
685
+ /ip/ipsec/key/psk/generate|command|both
686
+ /ip/ipsec/key/qkd|menu|inspect
687
+ /ip/ipsec/key/rsa|menu|both
688
+ /ip/ipsec/key/rsa/export-pub-key|command|both
689
+ /ip/ipsec/key/rsa/generate-key|command|both
690
+ /ip/ipsec/key/rsa/import|command|both
691
+ /ip/ipsec/mode-config|menu|both
692
+ /ip/ipsec/peer|menu|both
693
+ /ip/ipsec/policy|menu|both
694
+ /ip/ipsec/policy/group|menu|both
695
+ /ip/ipsec/profile|menu|both
696
+ /ip/ipsec/proposal|menu|both
697
+ /ip/ipsec/settings|settings|both
698
+ /ip/ipsec/statistics|settings|both
699
+ /ip/kid-control|menu|both
700
+ /ip/kid-control/device|menu|both
701
+ /ip/kid-control/device/reset-counters|command|both
702
+ /ip/kid-control/pause|command|both
703
+ /ip/kid-control/resume|command|both
704
+ /ip/media|menu|both||!smips
705
+ /ip/media/settings|settings|both||!smips
706
+ /ip/nat-pmp|settings|both
707
+ /ip/nat-pmp/interfaces|menu|both
708
+ /ip/neighbor|menu|both
709
+ /ip/neighbor/discovery-settings|settings|both
710
+ /ip/neighbor/lldp|menu|both
711
+ /ip/packing|menu|both
712
+ /ip/pool|menu|both
713
+ /ip/pool/used|menu|both
714
+ /ip/proxy|settings|both
715
+ /ip/proxy/access|menu|both
716
+ /ip/proxy/access/reset-counters|command|both
717
+ /ip/proxy/access/reset-counters-all|command|both
718
+ /ip/proxy/cache|menu|both
719
+ /ip/proxy/cache-contents|menu|both
720
+ /ip/proxy/cache/reset-counters|command|both
721
+ /ip/proxy/cache/reset-counters-all|command|both
722
+ /ip/proxy/clear-cache|command|both
723
+ /ip/proxy/connections|menu|both
724
+ /ip/proxy/direct|menu|both
725
+ /ip/proxy/direct/reset-counters|command|both
726
+ /ip/proxy/direct/reset-counters-all|command|both
727
+ /ip/proxy/inserts|settings|both
728
+ /ip/proxy/lookups|settings|both
729
+ /ip/proxy/monitor|command|both
730
+ /ip/proxy/refreshes|settings|both
731
+ /ip/proxy/reset-html|command|both
732
+ /ip/reverse-proxy|menu|both||!smips
733
+ /ip/route|menu|both
734
+ /ip/route/check|command|both
735
+ /ip/service|menu|both
736
+ /ip/service/webserver|settings|both
737
+ /ip/settings|settings|both
738
+ /ip/smb|settings|both||!smips
739
+ /ip/smb/shares|menu|both||!smips
740
+ /ip/smb/users|menu|both||!smips
741
+ /ip/socks|settings|both
742
+ /ip/socks/access|menu|both
743
+ /ip/socks/connections|menu|both
744
+ /ip/socks/users|menu|both
745
+ /ip/socksify|menu|both
746
+ /ip/ssh|settings|both
747
+ /ip/ssh/export-host-key|command|both
748
+ /ip/ssh/import-host-key|command|both
749
+ /ip/ssh/regenerate-host-key|command|both
750
+ /ip/tftp|menu|both
751
+ /ip/tftp/settings|settings|both
752
+ /ip/traffic-flow|settings|both
753
+ /ip/traffic-flow/ipfix|settings|both
754
+ /ip/traffic-flow/monitor|command|both
755
+ /ip/traffic-flow/target|menu|both
756
+ /ip/upnp|settings|both
757
+ /ip/upnp/interfaces|menu|both
758
+ /ip/vrf|menu|both
759
+ /ipv6|menu|inspect
760
+ /ipv6/address|menu|both
761
+ /ipv6/dhcp-client|menu|both
762
+ /ipv6/dhcp-client/option|menu|both
763
+ /ipv6/dhcp-client/release|command|both
764
+ /ipv6/dhcp-client/renew|command|both
765
+ /ipv6/dhcp-relay|menu|both
766
+ /ipv6/dhcp-relay/monitor|command|both
767
+ /ipv6/dhcp-relay/option|menu|both
768
+ /ipv6/dhcp-relay/reset-counters|command|both
769
+ /ipv6/dhcp-relay/routes|menu|both
770
+ /ipv6/dhcp-server|menu|both
771
+ /ipv6/dhcp-server/binding|menu|both
772
+ /ipv6/dhcp-server/binding/make-static|command|both
773
+ /ipv6/dhcp-server/binding/send-reconfigure|command|both
774
+ /ipv6/dhcp-server/option|menu|both
775
+ /ipv6/dhcp-server/option/sets|menu|both
776
+ /ipv6/firewall|menu|inspect
777
+ /ipv6/firewall/address-list|menu|both
778
+ /ipv6/firewall/connection|menu|both
779
+ /ipv6/firewall/filter|menu|both
780
+ /ipv6/firewall/filter/reset-counters|command|both
781
+ /ipv6/firewall/filter/reset-counters-all|command|both
782
+ /ipv6/firewall/mangle|menu|both
783
+ /ipv6/firewall/mangle/reset-counters|command|both
784
+ /ipv6/firewall/mangle/reset-counters-all|command|both
785
+ /ipv6/firewall/nat|menu|both
786
+ /ipv6/firewall/nat/reset-counters|command|both
787
+ /ipv6/firewall/nat/reset-counters-all|command|both
788
+ /ipv6/firewall/raw|menu|both
789
+ /ipv6/firewall/raw/reset-counters|command|both
790
+ /ipv6/firewall/raw/reset-counters-all|command|both
791
+ /ipv6/nd|menu|both
792
+ /ipv6/nd/prefix|menu|both
793
+ /ipv6/nd/prefix/default|settings|both
794
+ /ipv6/nd/proxy|menu|both
795
+ /ipv6/nd/settings|settings|both
796
+ /ipv6/neighbor|menu|both
797
+ /ipv6/pool|menu|both
798
+ /ipv6/pool/used|menu|both
799
+ /ipv6/route|menu|both
800
+ /ipv6/settings|settings|both
801
+ /lcd|settings|published||!smips|lcd
802
+ /lcd/backlight|command|published||!smips|lcd
803
+ /lcd/interface|menu|published||!smips|lcd
804
+ /lcd/interface/default-wireless|command|published||!smips|lcd
805
+ /lcd/interface/display|command|published||!smips|lcd
806
+ /lcd/interface/pages|menu|published||!smips|lcd
807
+ /lcd/pin|settings|published||!smips|lcd
808
+ /lcd/recalibrate|command|published||!smips|lcd
809
+ /lcd/screen|menu|published||!smips|lcd
810
+ /lcd/show|command|published||!smips|lcd
811
+ /lcd/take-screenshot|command|published||!smips|lcd
812
+ /log|menu|both
813
+ /lora|menu|inspect
814
+ /lora/channels|menu|inspect
815
+ /lora/joineui|menu|inspect
816
+ /lora/netid|menu|inspect
817
+ /lora/radios|menu|inspect
818
+ /lora/servers|menu|inspect
819
+ /mpls|menu|inspect
820
+ /mpls/forwarding-table|menu|both||!smips
821
+ /mpls/interface|menu|both||!smips
822
+ /mpls/ldp|menu|both||!smips
823
+ /mpls/ldp/accept-filter|menu|both||!smips
824
+ /mpls/ldp/advertise-filter|menu|both||!smips
825
+ /mpls/ldp/interface|menu|both||!smips
826
+ /mpls/ldp/local-mapping|menu|both||!smips
827
+ /mpls/ldp/neighbor|menu|both||!smips
828
+ /mpls/ldp/remote-mapping|menu|both||!smips
829
+ /mpls/mangle|menu|both
830
+ /mpls/mangle/reset-counters|command|both
831
+ /mpls/mangle/reset-counters-all|command|both
832
+ /mpls/settings|settings|both||!smips
833
+ /mpls/traffic-eng|menu|both||!smips
834
+ /mpls/traffic-eng/flow|menu|both||!smips
835
+ /mpls/traffic-eng/interface|menu|both||!smips
836
+ /mpls/traffic-eng/path|menu|both||!smips
837
+ /mpls/traffic-eng/tunnel|menu|both||!smips
838
+ /mpls/traffic-eng/tunnel/reoptimize|command|both||!smips
839
+ /openflow|menu|both|openflow
840
+ /openflow/flow|menu|both|openflow
841
+ /openflow/group|menu|both|openflow
842
+ /openflow/meter|menu|both|openflow
843
+ /openflow/port|menu|both|openflow
844
+ /partitions|menu|published||!i386, !smips, !mmips|partitions
845
+ /partitions/activate|command|published||!i386, !smips, !mmips|partitions
846
+ /partitions/copy-to|command|published||!i386, !smips, !mmips|partitions
847
+ /partitions/repartition|command|published||!i386, !smips, !mmips|partitions
848
+ /partitions/restore-config-from|command|published||!i386, !smips, !mmips|partitions
849
+ /partitions/save-config-to|command|published||!i386, !smips, !mmips|partitions
850
+ /password|command|both
851
+ /port|menu|both
852
+ /port/remote-access|menu|both
853
+ /ppp|menu|both
854
+ /ppp/aaa|settings|both
855
+ /ppp/active|menu|both
856
+ /ppp/l2tp-secret|menu|both
857
+ /ppp/profile|menu|both
858
+ /ppp/secret|menu|both
859
+ /queue|menu|inspect
860
+ /queue/interface|menu|both
861
+ /queue/monitor|command|both
862
+ /queue/simple|menu|both
863
+ /queue/simple/reset-counters|command|both
864
+ /queue/simple/reset-counters-all|command|both
865
+ /queue/tree|menu|both
866
+ /queue/tree/reset-counters|command|both
867
+ /queue/tree/reset-counters-all|command|both
868
+ /queue/type|menu|both
869
+ /quit|command|both
870
+ /radius|menu|both
871
+ /radius/incoming|settings|both
872
+ /radius/incoming/monitor|command|both
873
+ /radius/incoming/reset-counters|command|both
874
+ /radius/monitor|command|both
875
+ /radius/reset-counters|command|both
876
+ /redo|command|both
877
+ /root|menu|published||CONSOLE_DEBUG
878
+ /root/terminal|menu|published
879
+ /routing|menu|inspect
880
+ /routing/bfd|menu|both||BFD_AUTHENTICATION
881
+ /routing/bfd/authentication|menu|published||BFD_AUTHENTICATION
882
+ /routing/bfd/configuration|menu|both||BFD_AUTHENTICATION
883
+ /routing/bfd/session|menu|both
884
+ /routing/bgp|menu|both||!smips
885
+ /routing/bgp/advertisements|menu|both||!smips
886
+ /routing/bgp/connection|menu|both||!smips
887
+ /routing/bgp/evpn|menu|both||!smips
888
+ /routing/bgp/instance|menu|both||!smips
889
+ /routing/bgp/session|menu|both||!smips
890
+ /routing/bgp/session/clear|command|both||!smips
891
+ /routing/bgp/session/dump-saved-advertisements|command|both||!smips
892
+ /routing/bgp/session/refresh|command|both||!smips
893
+ /routing/bgp/session/resend|command|both||!smips
894
+ /routing/bgp/session/stop|command|both||!smips
895
+ /routing/bgp/template|menu|both||!smips
896
+ /routing/bgp/vpls|menu|both||!smips
897
+ /routing/bgp/vpn|menu|both||!smips
898
+ /routing/discourse|command|both
899
+ /routing/fantasy|menu|both
900
+ /routing/filter|menu|both
901
+ /routing/filter/chain|menu|both
902
+ /routing/filter/community-ext-list|menu|both
903
+ /routing/filter/community-large-list|menu|both
904
+ /routing/filter/community-list|menu|both
905
+ /routing/filter/filter-wizard|command|both
906
+ /routing/filter/num-list|menu|both
907
+ /routing/filter/rule|menu|both
908
+ /routing/filter/select-rule|menu|both
909
+ /routing/filter/sync|command|both
910
+ /routing/filter/test-as-path-regexp|command|both
911
+ /routing/gmp|menu|both
912
+ /routing/id|menu|both
913
+ /routing/igmp-proxy|settings|both
914
+ /routing/igmp-proxy/interface|menu|both
915
+ /routing/igmp-proxy/mfc|menu|both
916
+ /routing/isis|menu|both
917
+ /routing/isis/instance|menu|both
918
+ /routing/isis/interface|menu|both
919
+ /routing/isis/interface-template|menu|both
920
+ /routing/isis/lsp|menu|both
921
+ /routing/isis/neighbor|menu|both
922
+ /routing/nexthop|menu|both
923
+ /routing/nexthop/dump-dot|command|both
924
+ /routing/ospf|menu|both
925
+ /routing/ospf/area|menu|both
926
+ /routing/ospf/area/range|menu|both
927
+ /routing/ospf/instance|menu|both
928
+ /routing/ospf/interface|menu|both
929
+ /routing/ospf/interface-template|menu|both
930
+ /routing/ospf/lsa|menu|both
931
+ /routing/ospf/neighbor|menu|both
932
+ /routing/ospf/static-neighbor|menu|both
933
+ /routing/pimsm|menu|both||!smips
934
+ /routing/pimsm/bsr|menu|both||!smips
935
+ /routing/pimsm/bsr/candidate|menu|both||!smips
936
+ /routing/pimsm/bsr/rp-candidate|menu|both||!smips
937
+ /routing/pimsm/bsr/rp-set|menu|both||!smips
938
+ /routing/pimsm/igmp-interface-template|menu|both||!smips
939
+ /routing/pimsm/instance|menu|both||!smips
940
+ /routing/pimsm/interface|menu|both||!smips
941
+ /routing/pimsm/interface-template|menu|both||!smips
942
+ /routing/pimsm/neighbor|menu|both||!smips
943
+ /routing/pimsm/static-rp|menu|both||!smips
944
+ /routing/pimsm/uib-g|menu|both||!smips
945
+ /routing/pimsm/uib-sg|menu|both||!smips
946
+ /routing/rip|menu|both
947
+ /routing/rip/instance|menu|both
948
+ /routing/rip/interface|menu|both
949
+ /routing/rip/interface-template|menu|both
950
+ /routing/rip/keys|menu|both
951
+ /routing/rip/neighbor|menu|both
952
+ /routing/rip/static-neighbor|menu|both
953
+ /routing/route|menu|both
954
+ /routing/route/rule|menu|inspect
955
+ /routing/rpki|menu|both
956
+ /routing/rpki/rpki-check|command|both
957
+ /routing/rpki/rpki-query|command|both
958
+ /routing/rpki/session|menu|both
959
+ /routing/rule|menu|both
960
+ /routing/settings|settings|both
961
+ /routing/stats|menu|both||!smips
962
+ /routing/stats/memory|menu|both
963
+ /routing/stats/origin|menu|both
964
+ /routing/stats/pcap|menu|both||!smips
965
+ /routing/stats/process|menu|both
966
+ /routing/stats/process/kill|command|both
967
+ /routing/stats/step|menu|both
968
+ /routing/table|menu|both
969
+ /rsync-daemon|menu|inspect
970
+ /safe-mode|settings|both
971
+ /snmp|settings|both
972
+ /snmp/community|menu|both
973
+ /snmp/send-trap|command|both
974
+ /special-login|menu|both
975
+ /system|menu|inspect
976
+ /system/backup|menu|both
977
+ /system/backup/cloud|menu|both
978
+ /system/backup/cloud/download-file|command|both
979
+ /system/backup/cloud/remove-file|command|both
980
+ /system/backup/cloud/upload-file|command|both
981
+ /system/backup/load|command|both
982
+ /system/backup/save|command|both
983
+ /system/check-disk|command|both||i386
984
+ /system/check-installation|command|both
985
+ /system/clock|settings|both
986
+ /system/clock/manual|settings|both
987
+ /system/console|menu|both
988
+ /system/console/screen|settings|both||i386
989
+ /system/default-configuration|settings|both
990
+ /system/default-configuration/caps-mode-script|settings|both
991
+ /system/default-configuration/custom-script|settings|both
992
+ /system/default-configuration/script|settings|both
993
+ /system/default-configuration/wps-sync-mode-script|settings|published|||wpssync
994
+ /system/device-mode|settings|both
995
+ /system/device-mode/update|command|both
996
+ /system/gps|settings|both|gps|mmips
997
+ /system/gps/monitor|command|both|gps
998
+ /system/hardware|menu|inspect
999
+ /system/health|menu|both||!i386
1000
+ /system/health/settings|settings|both||!i386, tile|health and health-settings
1001
+ /system/health/settings/detect-fans|command|both||!i386|health and health-settings
1002
+ /system/history|menu|both
1003
+ /system/identity|settings|both
1004
+ /system/keymat-provider|menu|both
1005
+ /system/keymat-provider/qkd-get-key|command|both
1006
+ /system/keymat-provider/qkd-get-key-with-ids|command|both
1007
+ /system/keymat-provider/qkd-get-status|command|both
1008
+ /system/leds|menu|both
1009
+ /system/leds/settings|settings|both
1010
+ /system/license|settings|both
1011
+ /system/license/generate-new-id|command|both|||chr
1012
+ /system/license/output|command|published|||nochr
1013
+ /system/license/renew|command|both|||chr
1014
+ /system/logging|menu|both
1015
+ /system/logging/action|menu|both
1016
+ /system/logging/action/clear|command|both
1017
+ /system/note|settings|both
1018
+ /system/ntp|menu|both
1019
+ /system/ntp/client|settings|both
1020
+ /system/ntp/client/reset-freq-drift|command|both
1021
+ /system/ntp/client/servers|menu|both
1022
+ /system/ntp/key|menu|both
1023
+ /system/ntp/monitor-peers|command|both
1024
+ /system/ntp/server|settings|both
1025
+ /system/package|menu|both
1026
+ /system/package/apply-changes|command|both
1027
+ /system/package/disable|command|both
1028
+ /system/package/downgrade|command|both
1029
+ /system/package/enable|command|both
1030
+ /system/package/local-update|menu|both
1031
+ /system/package/local-update/download|command|both
1032
+ /system/package/local-update/download-all|command|both
1033
+ /system/package/local-update/mirror|settings|both
1034
+ /system/package/local-update/mirror/force-check|command|both
1035
+ /system/package/local-update/refresh|command|both
1036
+ /system/package/local-update/update-package-source|menu|both
1037
+ /system/package/uninstall|command|both
1038
+ /system/package/unschedule|command|both
1039
+ /system/package/update|settings|both
1040
+ /system/package/update/cancel|command|both
1041
+ /system/package/update/check-for-updates|command|both
1042
+ /system/package/update/download|command|both
1043
+ /system/package/update/install|command|both
1044
+ /system/ptp|menu|published||!smips|ptp
1045
+ /system/ptp/monitor|command|published||!smips|ptp
1046
+ /system/ptp/port|menu|published||!smips|ptp
1047
+ /system/ptp/status|menu|published||!smips|ptp
1048
+ /system/reboot|command|both
1049
+ /system/regulatory|settings|both
1050
+ /system/reset-configuration|command|both
1051
+ /system/resource|settings|both||!powerpc, !smips
1052
+ /system/resource/cpu|menu|both
1053
+ /system/resource/hardware|menu|both||!powerpc, !smips, i386
1054
+ /system/resource/hardware/authorize|command|both||!powerpc, !smips
1055
+ /system/resource/hardware/usb-power-reset|command|both||!powerpc, !smips, i386
1056
+ /system/resource/hardware/usb-settings|settings|both||!powerpc, !smips
1057
+ /system/resource/irq|menu|both
1058
+ /system/resource/irq/rps|menu|both|||rps
1059
+ /system/resource/monitor|command|both
1060
+ /system/resource/pci|menu|inspect
1061
+ /system/resource/usb|menu|inspect
1062
+ /system/resource/usb/settings|menu|inspect
1063
+ /system/routerboard|settings|both||!i386, !i386, !mipsel, !powerpc
1064
+ /system/routerboard/mode-button|settings|both||!i386
1065
+ /system/routerboard/reset-button|settings|both||!i386
1066
+ /system/routerboard/settings|settings|both||!i386, !i386
1067
+ /system/routerboard/settings/keep-frequency|command|published||!i386, mipsel
1068
+ /system/routerboard/upgrade|command|both||!i386
1069
+ /system/routerboard/usb|settings|both||!i386, !i386, !mipsel, !powerpc
1070
+ /system/routerboard/usb/power-reset|command|both||!i386, !i386, !mipsel, !powerpc
1071
+ /system/routerboard/wps-button|settings|both||!i386
1072
+ /system/rtrace|settings|both
1073
+ /system/rtrace/start|command|both
1074
+ /system/rtrace/stop|command|both
1075
+ /system/scheduler|menu|both
1076
+ /system/script|menu|both
1077
+ /system/script/environment|menu|both
1078
+ /system/script/job|menu|both
1079
+ /system/serial-terminal|command|both
1080
+ /system/shutdown|command|both
1081
+ /system/ssh|command|both
1082
+ /system/ssh-exec|command|both
1083
+ /system/sup-output|command|both
1084
+ /system/swos|settings|published||!i386, !mmips, !powerpc, !tile, !smips|swos
1085
+ /system/swos/load-config|command|published||!i386, !mmips, !powerpc, !tile, !smips|swos
1086
+ /system/swos/password|command|published||!i386, !mmips, !powerpc, !tile, !smips|swos
1087
+ /system/swos/reset-config|command|published||!i386, !mmips, !powerpc, !tile, !smips|swos
1088
+ /system/swos/save-config|command|published||!i386, !mmips, !powerpc, !tile, !smips|swos
1089
+ /system/swos/upgrade|command|published||!i386, !mmips, !powerpc, !tile, !smips|swos
1090
+ /system/telnet|command|both
1091
+ /system/upgrade|menu|inspect
1092
+ /system/upgrade/mirror|menu|inspect
1093
+ /system/upgrade/upgrade-package-source|menu|inspect
1094
+ /system/ups|menu|both|ups
1095
+ /system/ups/beep|command|both|ups
1096
+ /system/ups/monitor|command|both|ups
1097
+ /system/ups/rtc|command|both|ups
1098
+ /system/ups/self-test|command|both|ups
1099
+ /system/watchdog|settings|both
1100
+ /task|menu|both
1101
+ /task/add|command|both
1102
+ /task/next|command|both
1103
+ /task/terminate|command|both
1104
+ /terminal|menu|inspect
1105
+ /tool|menu|inspect
1106
+ /tool/bandwidth-server|settings|both
1107
+ /tool/bandwidth-server/session|menu|both
1108
+ /tool/bandwidth-test|command|both
1109
+ /tool/calea|menu|both|calea
1110
+ /tool/dns-update|command|both
1111
+ /tool/e-mail|settings|both
1112
+ /tool/e-mail/send|command|both
1113
+ /tool/fetch|command|both||arm64
1114
+ /tool/flood-ping|command|both||!smips
1115
+ /tool/graphing|settings|both
1116
+ /tool/graphing/interface|menu|both
1117
+ /tool/graphing/queue|menu|both
1118
+ /tool/graphing/resource|menu|both
1119
+ /tool/ip-scan|command|both||!smips
1120
+ /tool/mac-scan|command|both||!smips
1121
+ /tool/mac-server|settings|both
1122
+ /tool/mac-server/mac-winbox|settings|both
1123
+ /tool/mac-server/ping|settings|both
1124
+ /tool/mac-server/sessions|menu|both
1125
+ /tool/mac-telnet|command|both
1126
+ /tool/netinstall|menu|inspect
1127
+ /tool/netinstall/cache|menu|inspect
1128
+ /tool/netinstall/devices|menu|inspect
1129
+ /tool/netinstall/settings|menu|inspect
1130
+ /tool/netwatch|menu|both
1131
+ /tool/ping|command|both
1132
+ /tool/ping-speed|command|both||!smips
1133
+ /tool/profile|command|both
1134
+ /tool/romon|settings|both
1135
+ /tool/romon/discover|command|both
1136
+ /tool/romon/ping|command|both
1137
+ /tool/romon/port|menu|both
1138
+ /tool/romon/ssh|command|both|||security
1139
+ /tool/sms|settings|both||!smips
1140
+ /tool/sms/inbox|menu|both||!smips
1141
+ /tool/sms/send|command|both||!smips
1142
+ /tool/sniffer|settings|both
1143
+ /tool/sniffer/connection|menu|both
1144
+ /tool/sniffer/host|menu|both
1145
+ /tool/sniffer/packet|menu|both
1146
+ /tool/sniffer/protocol|menu|both
1147
+ /tool/sniffer/quick|command|both
1148
+ /tool/sniffer/save|command|both
1149
+ /tool/sniffer/start|command|both
1150
+ /tool/sniffer/stop|command|both
1151
+ /tool/snmp-get|command|both
1152
+ /tool/snmp-walk|command|both
1153
+ /tool/speed-test|command|both
1154
+ /tool/torch|command|both
1155
+ /tool/traceroute|command|both
1156
+ /tool/traffic-generator|settings|both
1157
+ /tool/traffic-generator/inject|command|both
1158
+ /tool/traffic-generator/inject-pcap|command|both
1159
+ /tool/traffic-generator/packet-template|menu|both
1160
+ /tool/traffic-generator/port|menu|both
1161
+ /tool/traffic-generator/quick|command|both
1162
+ /tool/traffic-generator/raw-packet-template|menu|both
1163
+ /tool/traffic-generator/start|command|both
1164
+ /tool/traffic-generator/stats|menu|both
1165
+ /tool/traffic-generator/stats/latency-distribution|menu|both
1166
+ /tool/traffic-generator/stats/port|menu|both
1167
+ /tool/traffic-generator/stats/raw|menu|both
1168
+ /tool/traffic-generator/stats/stream|menu|both
1169
+ /tool/traffic-generator/stop|command|both
1170
+ /tool/traffic-generator/stream|menu|both
1171
+ /tool/traffic-monitor|menu|both
1172
+ /tool/wol|command|both
1173
+ /tr069-client|settings|both|tr069-client
1174
+ /tr069-client/reset-tr069-config|command|both|tr069-client
1175
+ /undo|command|both
1176
+ /user|menu|both
1177
+ /user-manager|settings|both|userman-5
1178
+ /user-manager/advanced|settings|both|userman-5
1179
+ /user-manager/attribute|menu|both|userman-5
1180
+ /user-manager/database|settings|both|userman-5
1181
+ /user-manager/database/load|command|both|userman-5
1182
+ /user-manager/database/migrate-legacy-db|command|both|userman-5
1183
+ /user-manager/database/optimize-db|command|both|userman-5
1184
+ /user-manager/database/save|command|both|userman-5
1185
+ /user-manager/generate-report|command|both|userman-5
1186
+ /user-manager/limitation|menu|both|userman-5
1187
+ /user-manager/monitor|command|both|userman-5
1188
+ /user-manager/payment|menu|both|userman-5
1189
+ /user-manager/profile|menu|both|userman-5
1190
+ /user-manager/profile-limitation|menu|both|userman-5
1191
+ /user-manager/router|menu|both|userman-5
1192
+ /user-manager/router/monitor|command|both|userman-5
1193
+ /user-manager/router/reset-counters|command|both|userman-5
1194
+ /user-manager/session|menu|both|userman-5
1195
+ /user-manager/session/close-session|command|both|userman-5
1196
+ /user-manager/user|menu|both|userman-5
1197
+ /user-manager/user-profile|menu|both|userman-5
1198
+ /user-manager/user-profile/activate-user-profile|command|both|userman-5
1199
+ /user-manager/user/add-batch-users|command|both|userman-5
1200
+ /user-manager/user/generate-voucher|command|both|userman-5
1201
+ /user-manager/user/group|menu|both|userman-5
1202
+ /user-manager/user/monitor|command|both|userman-5
1203
+ /user/aaa|settings|both
1204
+ /user/active|menu|both
1205
+ /user/expire-password|command|both
1206
+ /user/group|menu|both
1207
+ /user/settings|settings|both
1208
+ /user/ssh-keys|menu|both
1209
+ /user/ssh-keys/import|command|both
1210
+ /user/ssh-keys/private|menu|both
1211
+ /user/ssh-keys/private/import|command|both
1212
+ /zerotier|menu|both|zerotier
1213
+ /zerotier/controller|menu|both|zerotier
1214
+ /zerotier/controller/member|menu|both|zerotier
1215
+ /zerotier/interface|menu|both|zerotier
1216
+ /zerotier/peer|menu|both|zerotier
1217
+ /zerotier/peer/hint|menu|both|zerotier
1218
+ `;
1219
+
1220
+ const KINDS = new Set<string>(["menu", "command", "settings"]);
1221
+ const PROVENANCES = new Set<string>(["inspect", "published", "both"]);
1222
+
1223
+ /**
1224
+ * Decode {@link ROWS} once, at module load.
1225
+ *
1226
+ * Throws rather than skipping a malformed row: this file is generated, so a row
1227
+ * that does not decode means the generator and this loader disagree, and a
1228
+ * silently shorter catalog would look exactly like a correct one.
1229
+ */
1230
+ function decodeRows(text: string): Map<string, CatalogEntry> {
1231
+ const catalog = new Map<string, CatalogEntry>();
1232
+ for (const line of text.split("\n")) {
1233
+ if (line === "") continue;
1234
+ const [path, kind, provenance, ...gates] = line.split("|");
1235
+ if (
1236
+ path === undefined ||
1237
+ kind === undefined ||
1238
+ provenance === undefined ||
1239
+ !KINDS.has(kind) ||
1240
+ !PROVENANCES.has(provenance)
1241
+ )
1242
+ throw new Error(`catalog row is malformed: ${JSON.stringify(line)}`);
1243
+ const [packageName, conditions, syscap] = gates;
1244
+ const entry: CatalogEntry = {
1245
+ kind: kind as PathKind,
1246
+ provenance: provenance as PathProvenance,
1247
+ };
1248
+ if (packageName) entry.package = packageName;
1249
+ if (conditions) entry.conditions = conditions;
1250
+ if (syscap) entry.syscap = syscap;
1251
+ catalog.set(path, entry);
1252
+ }
1253
+ return catalog;
1254
+ }
1255
+
1256
+ /** Every catalog path, lower-cased and slash-led. */
1257
+ export const PATH_CATALOG: ReadonlyMap<string, CatalogEntry> = decodeRows(ROWS);
1258
+
1259
+ /**
1260
+ * Look a path up by its SEGMENTS, so callers pass what they already parsed
1261
+ * rather than re-splitting a statement and re-deriving which spelling
1262
+ * (`/ip/address` or `/ip address`) it used. Both reduce to the same segments.
1263
+ *
1264
+ * Empty input is never a catalog entry: the bare `/` and `..` forms are decided
1265
+ * by their own rule.
1266
+ */
1267
+ export function lookupPath(
1268
+ segments: readonly string[],
1269
+ ): CatalogEntry | undefined {
1270
+ if (segments.length === 0) return undefined;
1271
+ return PATH_CATALOG.get(`/${segments.join("/").toLowerCase()}`);
1272
+ }
1273
+
1274
+ /**
1275
+ * Where a published COMMAND ends inside a path run: the index of the run
1276
+ * segment that is the VERB, or `null` when no prefix of `segments` is one.
1277
+ *
1278
+ * This is the command half of V4. `menus.ts` answers "is this bare path a
1279
+ * menu?"; nothing answered "is it a command?", so `/system/reboot` and
1280
+ * `/system/gps/monitor once` were read by punctuation — which puts the verb on
1281
+ * `once`, not on `monitor`. A published command names its own boundary, so the
1282
+ * segments before it are the menu and everything after it is an argument.
1283
+ *
1284
+ * At most ONE prefix can match: no command row has a descendant (R3, asserted at
1285
+ * generation), so the walk direction cannot change the answer.
1286
+ *
1287
+ * Presence is load-bearing in one direction only, exactly as in `menus.ts`.
1288
+ * A hit is decisive — both catalog sources are first-order, and the 439 command
1289
+ * rows are `both` or `published`, never inspect-only. A MISS says nothing:
1290
+ * generic CRUD leaves are deliberately not enumerated here, so absence must
1291
+ * fall through to the schema-free rule rather than deny that a command exists.
1292
+ *
1293
+ * A gate is not consulted. Whether this router HAS the hardware is a live
1294
+ * question; what the segment IS is not.
1295
+ */
1296
+ export function commandVerbIndex(segments: readonly string[]): number | null {
1297
+ for (let depth = 1; depth <= segments.length; depth++)
1298
+ if (
1299
+ PATH_CATALOG.get(`/${segments.slice(0, depth).join("/").toLowerCase()}`)
1300
+ ?.kind === "command"
1301
+ )
1302
+ return depth - 1;
1303
+ return null;
1304
+ }
1305
+
1306
+ /** One published gate, and the path that published it. */
1307
+ export interface CatalogGate {
1308
+ path: string;
1309
+ package?: string;
1310
+ conditions?: string;
1311
+ syscap?: string;
1312
+ }
1313
+
1314
+ /**
1315
+ * Every gate that applies to a path, root-first — its own and its ancestors'.
1316
+ *
1317
+ * A row carries only what the publication stated AT that entry, which is the
1318
+ * honest thing for a row to carry but the wrong thing to read alone. Reaching
1319
+ * `/interface/ethernet/poe/monitor` requires `/interface/ethernet/poe`, so the
1320
+ * parent's `syscap` applies even though the child entry states none: the gates
1321
+ * up a path CONJOIN, they do not override.
1322
+ *
1323
+ * Read row-wise, 2 published-only paths look ungated; read with
1324
+ * ancestry the residue is 1. The gap between the two is the
1325
+ * conjunction, and it is what a caller has to reproduce: a child's silence about
1326
+ * a gate is not the absence of one. #228's finding — that a published-only path
1327
+ * almost always explains its own absence — is about the ancestry-aware number.
1328
+ *
1329
+ * Still not a claim about any router. This says what MikroTik published about
1330
+ * applicability; only a live device knows what it has.
1331
+ */
1332
+ export function effectiveGates(segments: readonly string[]): CatalogGate[] {
1333
+ const gates: CatalogGate[] = [];
1334
+ for (let depth = 1; depth <= segments.length; depth++) {
1335
+ const path = `/${segments.slice(0, depth).join("/").toLowerCase()}`;
1336
+ const entry = PATH_CATALOG.get(path);
1337
+ if (entry === undefined) continue;
1338
+ const gate: CatalogGate = { path };
1339
+ if (entry.package !== undefined) gate.package = entry.package;
1340
+ if (entry.conditions !== undefined) gate.conditions = entry.conditions;
1341
+ if (entry.syscap !== undefined) gate.syscap = entry.syscap;
1342
+ if (Object.keys(gate).length > 1) gates.push(gate);
1343
+ }
1344
+ return gates;
1345
+ }