@tikoci/centrs 0.1.4 → 0.1.7
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.
- package/CHANGELOG.md +417 -1
- package/GLOSSARY.txt +40 -1
- package/README.md +16 -8
- package/commands/AGENTS.md +7 -4
- package/commands/api/AGENTS.md +13 -1
- package/commands/api/README.md +50 -10
- package/commands/api/examples.md +100 -2
- package/commands/devices/README.md +10 -1
- package/commands/devices/examples.md +33 -2
- package/commands/execute/README.md +68 -25
- package/commands/execute/examples.md +168 -7
- package/commands/explain/README.md +1206 -155
- package/commands/explain/examples.md +99 -3
- package/commands/mcp/README.md +9 -5
- package/commands/mcp/examples.md +2 -2
- package/commands/retrieve/examples.md +20 -0
- package/commands/terminal/examples.md +7 -1
- package/docs/CLI.md +3 -3
- package/docs/CONSTITUTION.md +83 -21
- package/docs/MATRIX.md +89 -52
- package/docs/errors/cdb/create-failed.md +20 -0
- package/docs/errors/cdb/file-exists.md +23 -0
- package/docs/errors/input/invalid-target.md +25 -3
- package/docs/errors/routeros/invalid-value.md +3 -2
- package/docs/errors/transport/cancel-unacknowledged.md +24 -0
- package/docs/errors/validation/syntax.md +29 -4
- package/package.json +13 -2
- package/src/api-fanout.ts +17 -4
- package/src/api.ts +346 -75
- package/src/cli/api.ts +1 -1
- package/src/cli/btest.ts +1 -1
- package/src/cli/devices.ts +16 -3
- package/src/cli/explain.ts +1 -1
- package/src/cli/terminal.ts +1 -1
- package/src/core/envelope.ts +53 -0
- package/src/core/error-catalog.ts +16 -1
- package/src/core/execute-command.ts +455 -0
- package/src/core/inspect.ts +58 -26
- package/src/core/routeros-errors.ts +66 -0
- package/src/core/version.ts +4 -0
- package/src/core/yaml.ts +86 -0
- package/src/data/winbox-cdb-write.ts +22 -8
- package/src/devices.ts +142 -28
- package/src/execute-fanout.ts +19 -5
- package/src/execute.ts +247 -295
- package/src/explain/arg-tokens.ts +62 -25
- package/src/explain/args.ts +398 -52
- package/src/explain/blocks.ts +54 -11
- package/src/explain/brace-tokens.ts +4 -3
- package/src/explain/catalog.ts +42 -44
- package/src/explain/coordinates.ts +159 -0
- package/src/explain/defects.ts +2 -1
- package/src/explain/escape-tokens.ts +77 -0
- package/src/explain/highlight-projection.ts +308 -0
- package/src/explain/menus.ts +9 -5
- package/src/explain/operator-tokens.ts +13 -7
- package/src/explain/operators.ts +27 -20
- package/src/explain/path-tokens.ts +1 -1
- package/src/explain/pathresolve.ts +358 -113
- package/src/explain/quoted-string.ts +110 -20
- package/src/explain/scope-brace.ts +175 -22
- package/src/explain/segment.ts +429 -21
- package/src/explain/separator.ts +187 -0
- package/src/explain/split-owner.ts +194 -0
- package/src/explain/string-tokens.ts +14 -4
- package/src/explain/symbol-values.ts +209 -173
- package/src/explain/symbols.ts +21 -1
- package/src/explain/transport.ts +17 -0
- package/src/explain/value-tokens.ts +15 -12
- package/src/explain/verbsplit.ts +165 -23
- package/src/explain/write.ts +47 -6
- package/src/explain.ts +522 -72
- package/src/index.ts +21 -2
- package/src/mcp/server.ts +2 -1
- package/src/mcp/tools.ts +1 -1
- package/src/offline-gate.ts +148 -0
- package/src/protocols/adapter.ts +12 -1
- package/src/protocols/mac-telnet-console.ts +6 -4
- package/src/protocols/native-api.ts +29 -3
- package/src/resolver/target.ts +32 -12
- package/src/retrieve-fanout.ts +1 -1
- package/src/retrieve.ts +18 -63
- package/src/settings.ts +2 -1
- package/src/transfer-fanout.ts +1 -1
- package/src/transfer.ts +1 -1
package/src/execute-fanout.ts
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* - A `--default` / `__default__` member is guarded from being dialed as the
|
|
16
16
|
* literal hostname `"__default__"` — it fails that one target deterministically
|
|
17
17
|
* with `target/unresolved`.
|
|
18
|
-
* - A **write-shaped** command
|
|
18
|
+
* - A **write-shaped** command is confirmed ONCE up front
|
|
19
19
|
* (`--yes`), never per target; without `--yes` the error names the blast radius
|
|
20
20
|
* (how many routers). Write-ness is target-independent (`canonicalizeExecuteCommand`).
|
|
21
21
|
*/
|
|
@@ -26,6 +26,7 @@ import type {
|
|
|
26
26
|
CommonSettingsMeta,
|
|
27
27
|
FanoutData,
|
|
28
28
|
FanoutSummary,
|
|
29
|
+
ValidationTrace,
|
|
29
30
|
} from "./core/envelope.ts";
|
|
30
31
|
import {
|
|
31
32
|
buildFanoutEnvelope,
|
|
@@ -36,6 +37,7 @@ import {
|
|
|
36
37
|
runFanout,
|
|
37
38
|
summarizeFanout,
|
|
38
39
|
} from "./core/fanout.ts";
|
|
40
|
+
import { toYaml } from "./core/yaml.ts";
|
|
39
41
|
import { CentrsError, serializeCentrsError } from "./errors.ts";
|
|
40
42
|
import {
|
|
41
43
|
buildExecuteErrorEnvelopeFromResolved,
|
|
@@ -60,7 +62,6 @@ import {
|
|
|
60
62
|
type SelectionResolveInput,
|
|
61
63
|
type TargetSelection,
|
|
62
64
|
} from "./resolver/index.ts";
|
|
63
|
-
import { toYaml } from "./retrieve.ts";
|
|
64
65
|
|
|
65
66
|
/** Compact description of the selector that produced the fan-out. */
|
|
66
67
|
export interface ExecuteSelectionSummary {
|
|
@@ -233,6 +234,11 @@ export async function executeFanout(
|
|
|
233
234
|
await assertFanoutWriteConfirmed(request, global.summary, expansion);
|
|
234
235
|
|
|
235
236
|
const execute = internals.execute ?? runResolvedExecute;
|
|
237
|
+
// Per-target validation trace. `execute` and `onExecuteError` are separate
|
|
238
|
+
// callbacks that share only the resolved request, so the request object is
|
|
239
|
+
// the key: without it a per-target error envelope would reconstruct
|
|
240
|
+
// `meta.validation` instead of reporting the gate that actually ran (GH#354).
|
|
241
|
+
const traces = new WeakMap<ResolvedExecuteRequest, ValidationTrace>();
|
|
236
242
|
const sleep = internals.sleep ?? defaultFanoutSleep;
|
|
237
243
|
|
|
238
244
|
const targets = await runFanout<
|
|
@@ -282,11 +288,19 @@ export async function executeFanout(
|
|
|
282
288
|
warnings: member.kind === "cdb" ? [...member.resolution.warnings] : [],
|
|
283
289
|
summary: "Failed to resolve a fanout target.",
|
|
284
290
|
}),
|
|
285
|
-
execute: async (resolved, member) =>
|
|
286
|
-
|
|
291
|
+
execute: async (resolved, member) => {
|
|
292
|
+
const trace: ValidationTrace = {};
|
|
293
|
+
traces.set(resolved, trace);
|
|
294
|
+
return relabelAdhocMember(await execute(resolved, trace), member);
|
|
295
|
+
},
|
|
287
296
|
onExecuteError: (resolved, member, error) =>
|
|
288
297
|
relabelAdhocMember(
|
|
289
|
-
buildExecuteErrorEnvelopeFromResolved(
|
|
298
|
+
buildExecuteErrorEnvelopeFromResolved(
|
|
299
|
+
resolved,
|
|
300
|
+
error,
|
|
301
|
+
undefined,
|
|
302
|
+
traces.get(resolved),
|
|
303
|
+
),
|
|
290
304
|
member,
|
|
291
305
|
),
|
|
292
306
|
sleep,
|