@shield-agent/kya 0.23.1 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor-plugin/plugin.json +2 -2
- package/.mcp.json +1 -1
- package/README.md +42 -10
- package/amp/settings.example.json +1 -1
- package/assets/report-activity.png +0 -0
- package/assets/report-certify.png +0 -0
- package/assets/report-changes.png +0 -0
- package/assets/report-gateway-backends.png +0 -0
- package/assets/report-gateway-listeners.png +0 -0
- package/assets/report-gateway-playground.png +0 -0
- package/assets/report-gateway-policies.png +0 -0
- package/assets/report-gateway-routes.png +0 -0
- package/assets/report-gateway.png +0 -0
- package/assets/report-overview.png +0 -0
- package/claude/claude_desktop_config.example.json +1 -1
- package/cline/cline_mcp_settings.example.json +1 -1
- package/copilot/mcp-config.example.json +1 -1
- package/dist/certify/context.d.ts +7 -0
- package/dist/certify/context.d.ts.map +1 -1
- package/dist/certify/context.js +9 -1
- package/dist/certify/context.js.map +1 -1
- package/dist/certify/evaluate.d.ts.map +1 -1
- package/dist/certify/evaluate.js +13 -1
- package/dist/certify/evaluate.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +18 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/hook.d.ts +6 -0
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +203 -46
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/import-traces.d.ts +1 -1
- package/dist/commands/import-traces.d.ts.map +1 -1
- package/dist/commands/import-traces.js +10 -6
- package/dist/commands/import-traces.js.map +1 -1
- package/dist/commands/investigate.d.ts.map +1 -1
- package/dist/commands/investigate.js +4 -0
- package/dist/commands/investigate.js.map +1 -1
- package/dist/commands/notify-flush.d.ts.map +1 -1
- package/dist/commands/notify-flush.js +1 -1
- package/dist/commands/notify-flush.js.map +1 -1
- package/dist/importers/agt.d.ts +24 -0
- package/dist/importers/agt.d.ts.map +1 -0
- package/dist/importers/agt.js +242 -0
- package/dist/importers/agt.js.map +1 -0
- package/dist/importers/formats.d.ts +8 -5
- package/dist/importers/formats.d.ts.map +1 -1
- package/dist/importers/formats.js +16 -10
- package/dist/importers/formats.js.map +1 -1
- package/dist/importers/index.d.ts +17 -0
- package/dist/importers/index.d.ts.map +1 -1
- package/dist/importers/index.js +67 -18
- package/dist/importers/index.js.map +1 -1
- package/dist/investigate/incidents.d.ts +3 -1
- package/dist/investigate/incidents.d.ts.map +1 -1
- package/dist/investigate/incidents.js +4 -0
- package/dist/investigate/incidents.js.map +1 -1
- package/dist/investigate/index.d.ts +2 -0
- package/dist/investigate/index.d.ts.map +1 -1
- package/dist/investigate/index.js +2 -0
- package/dist/investigate/index.js.map +1 -1
- package/dist/investigate/last-run.d.ts +33 -0
- package/dist/investigate/last-run.d.ts.map +1 -0
- package/dist/investigate/last-run.js +157 -0
- package/dist/investigate/last-run.js.map +1 -0
- package/dist/node-upgrade.js +1 -1
- package/dist/node-upgrade.js.map +1 -1
- package/dist/notify/index.d.ts +1 -0
- package/dist/notify/index.d.ts.map +1 -1
- package/dist/notify/index.js +6 -0
- package/dist/notify/index.js.map +1 -1
- package/dist/notify/log.d.ts +45 -0
- package/dist/notify/log.d.ts.map +1 -0
- package/dist/notify/log.js +163 -0
- package/dist/notify/log.js.map +1 -0
- package/dist/notify/sender.d.ts +14 -0
- package/dist/notify/sender.d.ts.map +1 -1
- package/dist/notify/sender.js +32 -8
- package/dist/notify/sender.js.map +1 -1
- package/dist/offline-evaluate.d.ts +8 -0
- package/dist/offline-evaluate.d.ts.map +1 -1
- package/dist/offline-evaluate.js +19 -8
- package/dist/offline-evaluate.js.map +1 -1
- package/dist/otel/exporter.d.ts +5 -2
- package/dist/otel/exporter.d.ts.map +1 -1
- package/dist/otel/exporter.js +8 -2
- package/dist/otel/exporter.js.map +1 -1
- package/dist/otel/stats.d.ts +21 -0
- package/dist/otel/stats.d.ts.map +1 -0
- package/dist/otel/stats.js +80 -0
- package/dist/otel/stats.js.map +1 -0
- package/dist/receipt/render-receipt.d.ts +31 -0
- package/dist/receipt/render-receipt.d.ts.map +1 -1
- package/dist/receipt/render-receipt.js +204 -2
- package/dist/receipt/render-receipt.js.map +1 -1
- package/dist/trail.d.ts +10 -0
- package/dist/trail.d.ts.map +1 -1
- package/dist/trail.js +7 -0
- package/dist/trail.js.map +1 -1
- package/droid/README.md +1 -1
- package/droid/mcp.example.json +1 -1
- package/gemini/settings.example.json +1 -1
- package/grok/README.md +1 -1
- package/kilo/kilo.example.json +1 -1
- package/kimi/mcp.example.json +1 -1
- package/kiro/mcp.example.json +1 -1
- package/manifest.json +1 -1
- package/mastracode/mcp.example.json +1 -1
- package/mcp.json +1 -1
- package/openai/codex.config.example.toml +1 -1
- package/opencode/opencode.example.json +1 -1
- package/package.json +2 -2
- package/qwen/settings.example.json +1 -1
- package/server.json +2 -2
package/dist/notify/sender.d.ts
CHANGED
|
@@ -19,6 +19,11 @@ export interface NotifyDeps {
|
|
|
19
19
|
/** Test seam: clock for the rate window and circuit breaker. */
|
|
20
20
|
readonly nowMs?: () => number;
|
|
21
21
|
}
|
|
22
|
+
/** When set on SendOptions, every delivery attempt is appended to notify-log.jsonl. */
|
|
23
|
+
export interface SendLedgerContext {
|
|
24
|
+
readonly env: NodeJS.ProcessEnv;
|
|
25
|
+
readonly verdict: string;
|
|
26
|
+
}
|
|
22
27
|
export interface SendOptions {
|
|
23
28
|
readonly url: string;
|
|
24
29
|
readonly body: string;
|
|
@@ -26,6 +31,8 @@ export interface SendOptions {
|
|
|
26
31
|
readonly timeoutMs?: number;
|
|
27
32
|
/** Test seam: replaces RETRY_DELAYS_MS. */
|
|
28
33
|
readonly retryDelaysMs?: readonly number[];
|
|
34
|
+
/** Ledger sink for per-attempt delivery records (see notify/log.ts). */
|
|
35
|
+
readonly ledger?: SendLedgerContext;
|
|
29
36
|
}
|
|
30
37
|
export declare const DEFAULT_TIMEOUT_MS = 3000;
|
|
31
38
|
/** Wait before retry attempts 1..3 (the first send is immediate, so 4 sends worst case). */
|
|
@@ -42,6 +49,13 @@ export declare function notifyStats(): {
|
|
|
42
49
|
};
|
|
43
50
|
/** Test helper: clears the rate window, the drop counters and every circuit. */
|
|
44
51
|
export declare function resetNotifyState(): void;
|
|
52
|
+
/** Outcome detail of one POST, for the delivery ledger. */
|
|
53
|
+
export interface AttemptResult {
|
|
54
|
+
readonly ok: boolean;
|
|
55
|
+
readonly httpStatus?: number;
|
|
56
|
+
/** Error class when no usable response arrived: timeout / network. */
|
|
57
|
+
readonly error?: string;
|
|
58
|
+
}
|
|
45
59
|
/** Single attempt. ok only on a 2xx; timeout, abort, redirect and network errors are all false. */
|
|
46
60
|
export declare function postWebhook(url: string, body: string, opts?: {
|
|
47
61
|
headers?: Record<string, string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../src/notify/sender.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../src/notify/sender.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,MAAM,eAAe,GAAG,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC;IACrC,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,yDAAyD;IACzD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IAC/B,gEAAgE;IAChE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;CAC/B;AAED,uFAAuF;AACvF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,wEAAwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;CACrC;AAED,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AACxC,4FAA4F;AAC5F,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAAwB,CAAC;AACtE,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAE3C,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,eAAe,QAAa,CAAC;AAe1C,kEAAkE;AAClE,wBAAgB,WAAW,IAAI;IAAE,kBAAkB,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAA;CAAE,CAE1F;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,IAAI,IAAI,CAKvC;AA4CD,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAsCD,mGAAmG;AACnG,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,EACnE,SAAS,GAAE,eAAuB,GACjC,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAqD9F"}
|
package/dist/notify/sender.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* while open the URL gets nothing (drops counted separately);
|
|
10
10
|
* - nothing in this module throws.
|
|
11
11
|
*/
|
|
12
|
+
import { appendNotifyLog, notifyTargetLabel } from "./log.js";
|
|
12
13
|
export const DEFAULT_TIMEOUT_MS = 3_000;
|
|
13
14
|
/** Wait before retry attempts 1..3 (the first send is immediate, so 4 sends worst case). */
|
|
14
15
|
export const RETRY_DELAYS_MS = [250, 1_000, 4_000];
|
|
@@ -73,8 +74,8 @@ function recordDeliveryFailure(url, nowMs) {
|
|
|
73
74
|
function backoffWithJitter(baseMs, random) {
|
|
74
75
|
return baseMs + Math.floor(baseMs * JITTER_RATIO * random());
|
|
75
76
|
}
|
|
76
|
-
/** Single attempt
|
|
77
|
-
|
|
77
|
+
/** Single attempt with outcome detail; same contract as postWebhook. */
|
|
78
|
+
async function postWebhookDetailed(url, body, opts = {}, fetchImpl = fetch) {
|
|
78
79
|
const controller = new AbortController();
|
|
79
80
|
const timeoutMs = opts.timeoutMs !== undefined && Number.isFinite(opts.timeoutMs) && opts.timeoutMs > 0
|
|
80
81
|
? opts.timeoutMs
|
|
@@ -92,15 +93,22 @@ export async function postWebhook(url, body, opts = {}, fetchImpl = fetch) {
|
|
|
92
93
|
redirect: "error",
|
|
93
94
|
signal: controller.signal,
|
|
94
95
|
});
|
|
95
|
-
return res.ok;
|
|
96
|
+
return { ok: res.ok, httpStatus: res.status };
|
|
96
97
|
}
|
|
97
|
-
catch {
|
|
98
|
-
return
|
|
98
|
+
catch (e) {
|
|
99
|
+
return {
|
|
100
|
+
ok: false,
|
|
101
|
+
error: e instanceof Error && e.name === "AbortError" ? "timeout" : "network",
|
|
102
|
+
};
|
|
99
103
|
}
|
|
100
104
|
finally {
|
|
101
105
|
clearTimeout(timer);
|
|
102
106
|
}
|
|
103
107
|
}
|
|
108
|
+
/** Single attempt. ok only on a 2xx; timeout, abort, redirect and network errors are all false. */
|
|
109
|
+
export async function postWebhook(url, body, opts = {}, fetchImpl = fetch) {
|
|
110
|
+
return (await postWebhookDetailed(url, body, opts, fetchImpl)).ok;
|
|
111
|
+
}
|
|
104
112
|
/**
|
|
105
113
|
* Deliver one serialized payload with retries. Returns whether it was delivered (or at least
|
|
106
114
|
* accepted by the receiver). Rate-limited attempts drop the whole delivery without counting as a
|
|
@@ -113,18 +121,34 @@ export async function sendWithRetry(opts, deps = {}) {
|
|
|
113
121
|
const random = deps.random ?? Math.random;
|
|
114
122
|
const fetchImpl = deps.fetchImpl ?? fetch;
|
|
115
123
|
const delays = opts.retryDelaysMs ?? RETRY_DELAYS_MS;
|
|
124
|
+
// Ledger append is best-effort and never influences the delivery outcome.
|
|
125
|
+
const ledger = opts.ledger;
|
|
126
|
+
const logAttempt = (rec) => {
|
|
127
|
+
if (!ledger)
|
|
128
|
+
return;
|
|
129
|
+
appendNotifyLog(ledger.env, {
|
|
130
|
+
ts: new Date().toISOString(),
|
|
131
|
+
target: notifyTargetLabel(opts.url),
|
|
132
|
+
verdict: ledger.verdict,
|
|
133
|
+
...rec,
|
|
134
|
+
});
|
|
135
|
+
};
|
|
116
136
|
if (circuitOpen(opts.url, nowMs())) {
|
|
117
137
|
droppedByCircuitOpen += 1;
|
|
138
|
+
logAttempt({ ok: false, error: "circuit-open", attempt: 0 });
|
|
118
139
|
return false;
|
|
119
140
|
}
|
|
120
141
|
for (let attempt = 0; attempt <= delays.length; attempt++) {
|
|
121
142
|
if (attempt > 0) {
|
|
122
143
|
await sleep(backoffWithJitter(delays[attempt - 1] ?? 0, random));
|
|
123
144
|
}
|
|
124
|
-
if (!consumeSendQuota(nowMs()))
|
|
145
|
+
if (!consumeSendQuota(nowMs())) {
|
|
146
|
+
logAttempt({ ok: false, error: "rate-limit", attempt: attempt + 1 });
|
|
125
147
|
return false;
|
|
126
|
-
|
|
127
|
-
|
|
148
|
+
}
|
|
149
|
+
const res = await postWebhookDetailed(opts.url, opts.body, { headers: opts.headers, timeoutMs: opts.timeoutMs }, fetchImpl);
|
|
150
|
+
logAttempt({ ok: res.ok, ...(res.httpStatus !== undefined ? { httpStatus: res.httpStatus } : {}), ...(res.error !== undefined ? { error: res.error } : {}), attempt: attempt + 1 });
|
|
151
|
+
if (res.ok) {
|
|
128
152
|
recordDeliverySuccess(opts.url);
|
|
129
153
|
return true;
|
|
130
154
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sender.js","sourceRoot":"","sources":["../../src/notify/sender.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"sender.js","sourceRoot":"","sources":["../../src/notify/sender.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,14 @@ import type { Host } from "./config.js";
|
|
|
8
8
|
import type { PolicyEvaluateRequest, PolicyEvaluateResponse } from "./client.js";
|
|
9
9
|
import { type PolicyVerdict } from "./sample-tools.js";
|
|
10
10
|
export type SessionRisk = "LOW" | "MEDIUM" | "HIGH";
|
|
11
|
+
/**
|
|
12
|
+
* THE never-list rule, on the tool name ALONE: a known sample tool answers by its
|
|
13
|
+
* policyTier; otherwise destructive admin names on a known MCP server match.
|
|
14
|
+
* `baseTier` (normal path) and the hook's error fallback both call this one
|
|
15
|
+
* function, so they cannot drift. No config, args or hashing, so the hook can
|
|
16
|
+
* enforce it even when config parsing or arg handling throws.
|
|
17
|
+
*/
|
|
18
|
+
export declare function matchesNeverList(toolId: string): boolean;
|
|
11
19
|
/** Raise-only: risk may bump ALLOW → REQUIRE_APPROVE; never lowers DENY/REQUIRE_APPROVE. */
|
|
12
20
|
export declare function applySessionRisk(base: {
|
|
13
21
|
verdict: PolicyVerdict;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offline-evaluate.d.ts","sourceRoot":"","sources":["../src/offline-evaluate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGjF,OAAO,EAAoC,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEzF,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"offline-evaluate.d.ts","sourceRoot":"","sources":["../src/offline-evaluate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGjF,OAAO,EAAoC,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEzF,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAKxD;AAoED,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EACpD,IAAI,EAAE,WAAW,GAAG,SAAS,GAC5B;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAWhD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,qBAAqB,EAC1B,IAAI,GAAE,IAAY,GACjB,sBAAsB,CAiCxB"}
|
package/dist/offline-evaluate.js
CHANGED
|
@@ -7,26 +7,37 @@
|
|
|
7
7
|
import { findHostToolTier } from "./host-tools.js";
|
|
8
8
|
import { mcpToolTier, parseMcpToolId } from "./mcp-servers.js";
|
|
9
9
|
import { findSampleTool } from "./sample-tools.js";
|
|
10
|
+
/**
|
|
11
|
+
* THE never-list rule, on the tool name ALONE: a known sample tool answers by its
|
|
12
|
+
* policyTier; otherwise destructive admin names on a known MCP server match.
|
|
13
|
+
* `baseTier` (normal path) and the hook's error fallback both call this one
|
|
14
|
+
* function, so they cannot drift. No config, args or hashing, so the hook can
|
|
15
|
+
* enforce it even when config parsing or arg handling throws.
|
|
16
|
+
*/
|
|
17
|
+
export function matchesNeverList(toolId) {
|
|
18
|
+
const known = findSampleTool(toolId);
|
|
19
|
+
if (known?.policyTier)
|
|
20
|
+
return known.policyTier === "DENY";
|
|
21
|
+
const mcp = parseMcpToolId(toolId);
|
|
22
|
+
return Boolean(mcp && /drop|truncate|purge|transfer/.test(mcp.tool));
|
|
23
|
+
}
|
|
10
24
|
function baseTier(toolId, irreversible, actionClass) {
|
|
11
25
|
if (!toolId || toolId.trim() === "") {
|
|
12
26
|
return { verdict: "DENY", reasonCode: "EMPTY_TOOL" };
|
|
13
27
|
}
|
|
28
|
+
// Never-list first (clearly destructive admin names on a KNOWN MCP server deny
|
|
29
|
+
// outright, even with risk signals declared; sample DENY tools too).
|
|
30
|
+
if (matchesNeverList(toolId)) {
|
|
31
|
+
return { verdict: "DENY", reasonCode: "NEVER_EVENT" };
|
|
32
|
+
}
|
|
14
33
|
const known = findSampleTool(toolId);
|
|
15
34
|
if (known?.policyTier) {
|
|
16
|
-
if (known.policyTier === "DENY") {
|
|
17
|
-
return { verdict: "DENY", reasonCode: "NEVER_EVENT" };
|
|
18
|
-
}
|
|
19
35
|
if (known.policyTier === "REQUIRE_APPROVE") {
|
|
20
36
|
return { verdict: "REQUIRE_APPROVE", reasonCode: "HIGH_STAKES_WRITE" };
|
|
21
37
|
}
|
|
22
38
|
return { verdict: "ALLOW", reasonCode: "ALLOW" };
|
|
23
39
|
}
|
|
24
|
-
// Clearly destructive admin names on a KNOWN MCP server deny outright, even
|
|
25
|
-
// when the caller declared risk signals - mirroring sample-tool NEVER.
|
|
26
40
|
const mcp = parseMcpToolId(toolId);
|
|
27
|
-
if (mcp && /drop|truncate|purge|transfer/.test(mcp.tool)) {
|
|
28
|
-
return { verdict: "DENY", reasonCode: "NEVER_EVENT" };
|
|
29
|
-
}
|
|
30
41
|
// Advisory vocabulary only applies when the caller declared no risk signals;
|
|
31
42
|
// explicit irreversible/actionClass keep their stricter paths below.
|
|
32
43
|
if (!irreversible && (actionClass ?? "").trim() === "") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offline-evaluate.js","sourceRoot":"","sources":["../src/offline-evaluate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAwC,MAAM,mBAAmB,CAAC;AAIzF,SAAS,QAAQ,CACf,MAAc,EACd,YAAqB,EACrB,WAAoB;IAEpB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IACvD,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"offline-evaluate.js","sourceRoot":"","sources":["../src/offline-evaluate.ts"],"names":[],"mappings":"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"}
|
package/dist/otel/exporter.d.ts
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* disabled unless an endpoint is configured (env KYA_OTLP_EXPORT_ENDPOINT or
|
|
4
4
|
* "otlpExport" in .kya/config.json). Fire-and-forget: export NEVER blocks,
|
|
5
5
|
* delays, or changes a verdict. Every failure is swallowed and counted
|
|
6
|
-
* in-memory
|
|
6
|
+
* in-memory (otlpExportStats) plus persisted to .kya/otel-stats.json
|
|
7
|
+
* (stats.ts) so the report can show export health across processes.
|
|
7
8
|
*
|
|
8
9
|
* Privacy: only verdict metadata ships (tool id, verdict, reason code, mode,
|
|
9
10
|
* host, session id, token counts when known). Tool args, prompts, approval
|
|
@@ -49,8 +50,10 @@ export declare function buildVerdictTracePayload(event: VerdictEvent): unknown;
|
|
|
49
50
|
* Export one verdict span. Never throws, never blocks the caller beyond the
|
|
50
51
|
* 2s timeout budget, and never touches the verdict itself. No-op when the
|
|
51
52
|
* config is undefined (unconfigured) or the endpoint fails the scheme check.
|
|
53
|
+
* Flush outcomes are accumulated in .kya/otel-stats.json (see stats.ts) so the
|
|
54
|
+
* report can show sent/failed counts across processes.
|
|
52
55
|
*/
|
|
53
|
-
export declare function exportVerdictSpan(event: VerdictEvent, config: OtlpExportConfig | undefined): Promise<void>;
|
|
56
|
+
export declare function exportVerdictSpan(event: VerdictEvent, config: OtlpExportConfig | undefined, env?: NodeJS.ProcessEnv): Promise<void>;
|
|
54
57
|
export interface OtlpExportSelfTestResult {
|
|
55
58
|
readonly ok: boolean;
|
|
56
59
|
readonly detail: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../src/otel/exporter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../src/otel/exporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAUH,MAAM,WAAW,gBAAgB;IAC/B,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAUD,0EAA0E;AAC1E,wBAAgB,eAAe,IAAI;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAEzF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,UAAU,CAAC,EAAE,OAAO,GACnB,gBAAgB,GAAG,SAAS,CAS9B;AA6ED,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CA8CrE;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,OAAO,CAAC,wBAAwB,CAAC,CAwCnC"}
|
package/dist/otel/exporter.js
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* disabled unless an endpoint is configured (env KYA_OTLP_EXPORT_ENDPOINT or
|
|
4
4
|
* "otlpExport" in .kya/config.json). Fire-and-forget: export NEVER blocks,
|
|
5
5
|
* delays, or changes a verdict. Every failure is swallowed and counted
|
|
6
|
-
* in-memory
|
|
6
|
+
* in-memory (otlpExportStats) plus persisted to .kya/otel-stats.json
|
|
7
|
+
* (stats.ts) so the report can show export health across processes.
|
|
7
8
|
*
|
|
8
9
|
* Privacy: only verdict metadata ships (tool id, verdict, reason code, mode,
|
|
9
10
|
* host, session id, token counts when known). Tool args, prompts, approval
|
|
@@ -13,6 +14,7 @@
|
|
|
13
14
|
*/
|
|
14
15
|
import { randomBytes } from "node:crypto";
|
|
15
16
|
import { CLI_VERSION } from "../version.js";
|
|
17
|
+
import { recordOtlpExport } from "./stats.js";
|
|
16
18
|
const EXPORT_TIMEOUT_MS = 2_000;
|
|
17
19
|
const SERVICE_NAME = "shield-kya-cli";
|
|
18
20
|
const SCOPE_NAME = "shield-kya-cli";
|
|
@@ -164,8 +166,10 @@ export function buildVerdictTracePayload(event) {
|
|
|
164
166
|
* Export one verdict span. Never throws, never blocks the caller beyond the
|
|
165
167
|
* 2s timeout budget, and never touches the verdict itself. No-op when the
|
|
166
168
|
* config is undefined (unconfigured) or the endpoint fails the scheme check.
|
|
169
|
+
* Flush outcomes are accumulated in .kya/otel-stats.json (see stats.ts) so the
|
|
170
|
+
* report can show sent/failed counts across processes.
|
|
167
171
|
*/
|
|
168
|
-
export async function exportVerdictSpan(event, config) {
|
|
172
|
+
export async function exportVerdictSpan(event, config, env = process.env) {
|
|
169
173
|
if (!config || !endpointAllowed(config))
|
|
170
174
|
return;
|
|
171
175
|
stats.attempted += 1;
|
|
@@ -187,9 +191,11 @@ export async function exportVerdictSpan(event, config) {
|
|
|
187
191
|
stats.exported += 1;
|
|
188
192
|
else
|
|
189
193
|
stats.failed += 1;
|
|
194
|
+
recordOtlpExport(env, config.endpoint, res.ok);
|
|
190
195
|
}
|
|
191
196
|
catch {
|
|
192
197
|
stats.failed += 1;
|
|
198
|
+
recordOtlpExport(env, config.endpoint, false);
|
|
193
199
|
}
|
|
194
200
|
finally {
|
|
195
201
|
clearTimeout(timer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../src/otel/exporter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../src/otel/exporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const OTEL_STATS_FILE = "otel-stats.json";
|
|
2
|
+
export interface OtelStats {
|
|
3
|
+
/** Endpoint host[:port] label only - never the full URL (may embed auth). */
|
|
4
|
+
readonly endpoint: string;
|
|
5
|
+
readonly spansSent: number;
|
|
6
|
+
readonly spansFailed: number;
|
|
7
|
+
/** ISO timestamp of the last export attempt (success or failure). */
|
|
8
|
+
readonly lastExportAt: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function otelStatsPath(env?: NodeJS.ProcessEnv): string;
|
|
11
|
+
/** host[:port] label for an endpoint URL, safe to persist; "" when unparseable. */
|
|
12
|
+
export declare function otelEndpointLabel(endpoint: string): string;
|
|
13
|
+
/** Read the persisted counters; missing/oversize/corrupt state yields undefined. */
|
|
14
|
+
export declare function readOtelStats(env?: NodeJS.ProcessEnv): OtelStats | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Accumulate one flush outcome. The previous file (possibly written by another
|
|
17
|
+
* process) is the base, so detached notify-flush children add onto the same
|
|
18
|
+
* counters. Never throws.
|
|
19
|
+
*/
|
|
20
|
+
export declare function recordOtlpExport(env: NodeJS.ProcessEnv, endpoint: string, ok: boolean, now?: string): void;
|
|
21
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/otel/stats.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAKjD,MAAM,WAAW,SAAS;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE1E;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,SAAS,GAAG,SAAS,CAqBzF;AAMD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,OAAO,EACX,GAAG,GAAE,MAAiC,GACrC,IAAI,CAeN"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent OTLP export counters at <kya-home>/.kya/otel-stats.json. The
|
|
3
|
+
* exporter's in-memory counters (exporter.ts) vanish with each process - and
|
|
4
|
+
* the notify-flush path is a fresh process per event - so flush outcomes are
|
|
5
|
+
* accumulated here for the report's OTel section. Read-modify-write on every
|
|
6
|
+
* export, best-effort: nothing here ever throws or blocks a flush.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
import { globalConfigDir } from "../config.js";
|
|
11
|
+
export const OTEL_STATS_FILE = "otel-stats.json";
|
|
12
|
+
const MAX_STATS_BYTES = 16 * 1024;
|
|
13
|
+
const MAX_ENDPOINT_LEN = 120;
|
|
14
|
+
export function otelStatsPath(env = process.env) {
|
|
15
|
+
return join(globalConfigDir(env), OTEL_STATS_FILE);
|
|
16
|
+
}
|
|
17
|
+
/** host[:port] label for an endpoint URL, safe to persist; "" when unparseable. */
|
|
18
|
+
export function otelEndpointLabel(endpoint) {
|
|
19
|
+
try {
|
|
20
|
+
return new URL(endpoint).host.slice(0, MAX_ENDPOINT_LEN);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return "";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Read the persisted counters; missing/oversize/corrupt state yields undefined. */
|
|
27
|
+
export function readOtelStats(env = process.env) {
|
|
28
|
+
try {
|
|
29
|
+
const path = otelStatsPath(env);
|
|
30
|
+
if (!existsSync(path))
|
|
31
|
+
return undefined;
|
|
32
|
+
if (statSync(path).size > MAX_STATS_BYTES)
|
|
33
|
+
return undefined;
|
|
34
|
+
const raw = JSON.parse(readFileSync(path, "utf8"));
|
|
35
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
36
|
+
return undefined;
|
|
37
|
+
const o = raw;
|
|
38
|
+
const spansSent = nonNeg(o.spansSent);
|
|
39
|
+
const spansFailed = nonNeg(o.spansFailed);
|
|
40
|
+
if (spansSent === undefined || spansFailed === undefined)
|
|
41
|
+
return undefined;
|
|
42
|
+
if (spansSent + spansFailed === 0)
|
|
43
|
+
return undefined;
|
|
44
|
+
return {
|
|
45
|
+
endpoint: typeof o.endpoint === "string" ? o.endpoint.slice(0, MAX_ENDPOINT_LEN) : "",
|
|
46
|
+
spansSent,
|
|
47
|
+
spansFailed,
|
|
48
|
+
lastExportAt: typeof o.lastExportAt === "string" ? o.lastExportAt : "",
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function nonNeg(v) {
|
|
56
|
+
return typeof v === "number" && Number.isFinite(v) && v >= 0 ? Math.floor(v) : undefined;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Accumulate one flush outcome. The previous file (possibly written by another
|
|
60
|
+
* process) is the base, so detached notify-flush children add onto the same
|
|
61
|
+
* counters. Never throws.
|
|
62
|
+
*/
|
|
63
|
+
export function recordOtlpExport(env, endpoint, ok, now = new Date().toISOString()) {
|
|
64
|
+
try {
|
|
65
|
+
const prev = readOtelStats(env);
|
|
66
|
+
const label = otelEndpointLabel(endpoint);
|
|
67
|
+
const next = {
|
|
68
|
+
endpoint: label || prev?.endpoint || "",
|
|
69
|
+
spansSent: (prev?.spansSent ?? 0) + (ok ? 1 : 0),
|
|
70
|
+
spansFailed: (prev?.spansFailed ?? 0) + (ok ? 0 : 1),
|
|
71
|
+
lastExportAt: now,
|
|
72
|
+
};
|
|
73
|
+
mkdirSync(globalConfigDir(env), { recursive: true });
|
|
74
|
+
writeFileSync(otelStatsPath(env), `${JSON.stringify(next, null, 2)}\n`, "utf8");
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
/* stats must never affect the export path */
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/otel/stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { type TrailEvent } from "../trail.js";
|
|
2
2
|
import type { KyaFileConfig } from "../config.js";
|
|
3
|
+
import { type InvestigateLastRun } from "../investigate/last-run.js";
|
|
4
|
+
import { type NotifyLogSummary } from "../notify/log.js";
|
|
5
|
+
import { type OtelStats } from "../otel/stats.js";
|
|
3
6
|
import { type CertifyCard, type OrrCard, type SandboxCard, type WiredHostRow } from "./enrich.js";
|
|
4
7
|
import { type ShowbackReport } from "../showback/cost-per-task.js";
|
|
5
8
|
import { type GatePage } from "./gate-page.js";
|
|
@@ -40,6 +43,14 @@ export interface ReceiptModel {
|
|
|
40
43
|
readonly certify?: CertifyCard;
|
|
41
44
|
/** Observe-only showback from .kya/usage.json. */
|
|
42
45
|
readonly showback?: ShowbackReport;
|
|
46
|
+
/** Trace imports (host "import" events), aggregated over the full trail. */
|
|
47
|
+
readonly imports?: ImportCard;
|
|
48
|
+
/** Last `kya investigate` run summary from .kya/investigate-last.json. */
|
|
49
|
+
readonly investigate?: InvestigateLastRun;
|
|
50
|
+
/** Per-target alert delivery rollup from .kya/notify-log.jsonl. */
|
|
51
|
+
readonly alerts?: NotifyLogSummary;
|
|
52
|
+
/** Persisted OTLP export counters from .kya/otel-stats.json. */
|
|
53
|
+
readonly otel?: OtelStats;
|
|
43
54
|
}
|
|
44
55
|
export type WorstVerdict = "never" | "deny" | "hold" | "allow";
|
|
45
56
|
export interface SessionAggregate {
|
|
@@ -81,6 +92,25 @@ export interface EventAggregates {
|
|
|
81
92
|
}
|
|
82
93
|
/** Pure rollup of trail events for the report's stat chips and sections. */
|
|
83
94
|
export declare function aggregateEvents(events: readonly TrailEvent[]): EventAggregates;
|
|
95
|
+
export interface ImportFormatRow {
|
|
96
|
+
readonly format: string;
|
|
97
|
+
readonly imported: number;
|
|
98
|
+
readonly errors: number;
|
|
99
|
+
}
|
|
100
|
+
/** Rollup of imported trace events for the Import hero card. */
|
|
101
|
+
export interface ImportCard {
|
|
102
|
+
readonly total: number;
|
|
103
|
+
readonly errors: number;
|
|
104
|
+
readonly formats: readonly ImportFormatRow[];
|
|
105
|
+
/** ts of the newest imported event ("" when none parse). */
|
|
106
|
+
readonly lastTs: string;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Aggregate host "import" trail events (written by kya import; reasonCode
|
|
110
|
+
* IMPORTED / IMPORTED_ERROR) per source format. Undefined when the trail has
|
|
111
|
+
* no imported events - the report section stays hidden on fresh installs.
|
|
112
|
+
*/
|
|
113
|
+
export declare function aggregateImports(events: readonly TrailEvent[]): ImportCard | undefined;
|
|
84
114
|
export declare function buildReceiptModel(sessionId: string, events: readonly TrailEvent[], extras?: Partial<Omit<ReceiptModel, "title" | "events" | "generatedAt" | "rangeLabel">>): ReceiptModel;
|
|
85
115
|
export declare function buildWindowReceiptModel(events: readonly TrailEvent[], days: number, extras?: Partial<Omit<ReceiptModel, "title" | "events" | "generatedAt" | "rangeLabel">>): ReceiptModel;
|
|
86
116
|
/** Shared loader for static artifacts and the live loopback server. */
|
|
@@ -92,6 +122,7 @@ export declare function loadReceiptModel(input: {
|
|
|
92
122
|
readonly liveToken?: string;
|
|
93
123
|
readonly page?: number;
|
|
94
124
|
readonly searchQuery?: string;
|
|
125
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
95
126
|
}): ReceiptModel;
|
|
96
127
|
export declare function gatewayHeroCard(page: GatePage | undefined, _nowMs: number): string;
|
|
97
128
|
export interface FeedFilters {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-receipt.d.ts","sourceRoot":"","sources":["../../src/receipt/render-receipt.ts"],"names":[],"mappings":"AAUA,OAAO,EAA2C,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"render-receipt.d.ts","sourceRoot":"","sources":["../../src/receipt/render-receipt.ts"],"names":[],"mappings":"AAUA,OAAO,EAA2C,KAAK,UAAU,EAA6C,MAAM,aAAa,CAAC;AAElI,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAOL,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,8BAA8B,CAAC;AAItC,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,gBAAgB,CAAC;AAIxB,eAAO,MAAM,SAAS,KAAK,CAAC;AAE5B,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACf,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpF,gEAAgE;IAChE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,iFAAiF;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC9C,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IACzB,iDAAiD;IACjD,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAC/B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACnC,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAC1C,mEAAmE;IACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IACnC,gEAAgE;IAChE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;CAC3B;AAsGD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9F,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,mCAAmC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IACtC,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,SAAS,QAAQ,EAAE,CAAC;IACvC,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,EAAE,SAAS,QAAQ,EAAE,CAAC;IACvC,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;CACvC;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,GAAG,eAAe,CA6E9E;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,gEAAgE;AAChE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAWD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,GAAG,SAAS,CAsBtF;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,QAAQ,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC,GACtF,YAAY,CAyBd;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,QAAQ,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC,GACtF,YAAY,CAyBd;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC,GAAG,YAAY,CAqCf;AAynCD,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAqClF;AA0ID,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,EACb,KAAK,CAAC,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC1C,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,cAAc,CA+BhB;AA6BD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CA2qB7D;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAuUjE"}
|