@shield-agent/kya 0.21.0 → 0.23.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/.mcp.json +1 -1
- package/LIMITATIONS.md +1 -0
- package/README.md +90 -31
- package/amp/settings.example.json +1 -1
- 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/attest.js +5 -5
- package/dist/certify/catalog.d.ts +1 -1
- package/dist/certify/catalog.js +3 -3
- package/dist/certify/context.js +1 -1
- package/dist/certify/evaluate.d.ts +2 -2
- package/dist/certify/evaluate.js +12 -12
- package/dist/certify/live.js +2 -2
- package/dist/certify/render.d.ts +1 -1
- package/dist/certify/render.js +10 -10
- package/dist/cli.d.ts +4 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +110 -37
- package/dist/cli.js.map +1 -1
- package/dist/commands/certify.d.ts +1 -1
- package/dist/commands/certify.js +3 -3
- package/dist/commands/connect.d.ts +2 -2
- package/dist/commands/connect.js +22 -22
- package/dist/commands/dash.js +4 -4
- package/dist/commands/gate-serve.d.ts.map +1 -1
- package/dist/commands/gate-serve.js +19 -5
- package/dist/commands/gate-serve.js.map +1 -1
- package/dist/commands/gate.d.ts +1 -1
- package/dist/commands/gate.js +16 -16
- package/dist/commands/hook.d.ts +1 -1
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +55 -18
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/import-traces.d.ts +16 -0
- package/dist/commands/import-traces.d.ts.map +1 -0
- package/dist/commands/import-traces.js +18 -0
- package/dist/commands/import-traces.js.map +1 -0
- package/dist/commands/init.js +1 -1
- package/dist/commands/investigate.d.ts +13 -0
- package/dist/commands/investigate.d.ts.map +1 -0
- package/dist/commands/investigate.js +22 -0
- package/dist/commands/investigate.js.map +1 -0
- package/dist/commands/notify-flush.d.ts +2 -0
- package/dist/commands/notify-flush.d.ts.map +1 -0
- package/dist/commands/notify-flush.js +47 -0
- package/dist/commands/notify-flush.js.map +1 -0
- package/dist/commands/orr.d.ts +3 -3
- package/dist/commands/orr.js +5 -5
- package/dist/commands/receipt-serve.d.ts +1 -1
- package/dist/commands/receipt-serve.js +1 -1
- package/dist/commands/receipt.d.ts +5 -2
- package/dist/commands/receipt.d.ts.map +1 -1
- package/dist/commands/receipt.js +7 -4
- package/dist/commands/receipt.js.map +1 -1
- package/dist/commands/serve-mcp.js +1 -1
- package/dist/commands/start.d.ts +2 -2
- package/dist/commands/start.js +20 -20
- package/dist/commands/stop.d.ts +1 -1
- package/dist/commands/stop.js +6 -6
- package/dist/commands/update.d.ts +19 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +96 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/wire-hooks.d.ts +1 -1
- package/dist/commands/wire-hooks.js +14 -14
- package/dist/commands/wrap.d.ts.map +1 -1
- package/dist/commands/wrap.js +12 -7
- package/dist/commands/wrap.js.map +1 -1
- package/dist/config.d.ts +4 -4
- package/dist/config.js +5 -5
- package/dist/dash/dash.d.ts +1 -1
- package/dist/dash/dash.js +3 -3
- package/dist/dash/entitlement.d.ts +1 -1
- package/dist/dash/entitlement.js +1 -1
- package/dist/dash/render.js +2 -2
- package/dist/dash/screens/enterprise.js +9 -9
- package/dist/dash/screens/free.js +5 -5
- package/dist/diff-preview.d.ts +1 -1
- package/dist/diff-preview.js +2 -2
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js +1 -1
- package/dist/fs-atomic.d.ts +1 -1
- package/dist/fs-atomic.js +2 -2
- package/dist/gate/binary.js +4 -4
- package/dist/gate/config-gen.d.ts +1 -1
- package/dist/gate/config-gen.js +7 -7
- package/dist/gate/config.d.ts +2 -2
- package/dist/gate/config.js +6 -6
- package/dist/gate/daemon.js +1 -1
- package/dist/gate/discover.d.ts +2 -2
- package/dist/gate/discover.js +7 -7
- package/dist/gate/hosted-sync.js +1 -1
- package/dist/gate/otlp-decode.d.ts +2 -2
- package/dist/gate/otlp-decode.js +2 -2
- package/dist/gate/otlp-receiver.d.ts +1 -1
- package/dist/gate/otlp-receiver.js +3 -3
- package/dist/host-reload.js +11 -11
- package/dist/host-tools.d.ts +1 -1
- package/dist/host-tools.js +1 -1
- package/dist/importers/formats.d.ts +26 -0
- package/dist/importers/formats.d.ts.map +1 -0
- package/dist/importers/formats.js +281 -0
- package/dist/importers/formats.js.map +1 -0
- package/dist/importers/index.d.ts +26 -0
- package/dist/importers/index.d.ts.map +1 -0
- package/dist/importers/index.js +122 -0
- package/dist/importers/index.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/investigate/detectors.d.ts +35 -0
- package/dist/investigate/detectors.d.ts.map +1 -0
- package/dist/investigate/detectors.js +277 -0
- package/dist/investigate/detectors.js.map +1 -0
- package/dist/investigate/fix-brief.d.ts +3 -0
- package/dist/investigate/fix-brief.d.ts.map +1 -0
- package/dist/investigate/fix-brief.js +88 -0
- package/dist/investigate/fix-brief.js.map +1 -0
- package/dist/investigate/incidents.d.ts +19 -0
- package/dist/investigate/incidents.d.ts.map +1 -0
- package/dist/investigate/incidents.js +84 -0
- package/dist/investigate/incidents.js.map +1 -0
- package/dist/investigate/index.d.ts +25 -0
- package/dist/investigate/index.d.ts.map +1 -0
- package/dist/investigate/index.js +46 -0
- package/dist/investigate/index.js.map +1 -0
- package/dist/mcp/protocol.d.ts +2 -2
- package/dist/mcp/protocol.d.ts.map +1 -1
- package/dist/mcp/protocol.js +39 -8
- package/dist/mcp/protocol.js.map +1 -1
- package/dist/mcp/stdio.d.ts +1 -1
- package/dist/mcp/stdio.js +2 -2
- package/dist/mcp-servers.d.ts +2 -2
- package/dist/mcp-servers.js +2 -2
- package/dist/node-upgrade.d.ts +2 -2
- package/dist/node-upgrade.js +9 -9
- package/dist/notify/dispatch.d.ts +20 -0
- package/dist/notify/dispatch.d.ts.map +1 -0
- package/dist/notify/dispatch.js +52 -0
- package/dist/notify/dispatch.js.map +1 -0
- package/dist/notify/index.d.ts +39 -0
- package/dist/notify/index.d.ts.map +1 -0
- package/dist/notify/index.js +119 -0
- package/dist/notify/index.js.map +1 -0
- package/dist/notify/sender.d.ts +56 -0
- package/dist/notify/sender.d.ts.map +1 -0
- package/dist/notify/sender.js +139 -0
- package/dist/notify/sender.js.map +1 -0
- package/dist/notify/templates.d.ts +33 -0
- package/dist/notify/templates.d.ts.map +1 -0
- package/dist/notify/templates.js +119 -0
- package/dist/notify/templates.js.map +1 -0
- package/dist/offline-evaluate.d.ts +2 -2
- package/dist/offline-evaluate.js +3 -3
- package/dist/orr/agentshield.d.ts +2 -2
- package/dist/orr/agentshield.js +4 -4
- package/dist/orr/scorecard.d.ts +1 -1
- package/dist/orr/scorecard.js +3 -3
- package/dist/otel/exporter.d.ts +64 -0
- package/dist/otel/exporter.d.ts.map +1 -0
- package/dist/otel/exporter.js +243 -0
- package/dist/otel/exporter.js.map +1 -0
- package/dist/parse-args.d.ts +1 -1
- package/dist/parse-args.js +1 -1
- package/dist/receipt/auto-open.d.ts +1 -1
- package/dist/receipt/auto-open.js +1 -1
- package/dist/receipt/daemon.d.ts +6 -6
- package/dist/receipt/daemon.js +15 -15
- package/dist/receipt/dashboard.d.ts +1 -1
- package/dist/receipt/dashboard.js +2 -2
- package/dist/receipt/embeddings.d.ts +15 -4
- package/dist/receipt/embeddings.d.ts.map +1 -1
- package/dist/receipt/embeddings.js +116 -35
- package/dist/receipt/embeddings.js.map +1 -1
- package/dist/receipt/enrich.d.ts +2 -2
- package/dist/receipt/enrich.js +5 -5
- package/dist/receipt/gate-card.d.ts +2 -2
- package/dist/receipt/gate-card.d.ts.map +1 -1
- package/dist/receipt/gate-card.js +3 -3
- package/dist/receipt/live-server.d.ts.map +1 -1
- package/dist/receipt/live-server.js +22 -8
- package/dist/receipt/live-server.js.map +1 -1
- package/dist/receipt/receipt-css.d.ts +1 -1
- package/dist/receipt/receipt-css.d.ts.map +1 -1
- package/dist/receipt/receipt-css.js +72 -11
- package/dist/receipt/receipt-css.js.map +1 -1
- package/dist/receipt/render-receipt.d.ts +1 -1
- package/dist/receipt/render-receipt.d.ts.map +1 -1
- package/dist/receipt/render-receipt.js +138 -87
- package/dist/receipt/render-receipt.js.map +1 -1
- package/dist/receipt/share.d.ts +21 -2
- package/dist/receipt/share.d.ts.map +1 -1
- package/dist/receipt/share.js +68 -5
- package/dist/receipt/share.js.map +1 -1
- package/dist/sample-tools.d.ts +1 -1
- package/dist/sample-tools.js +1 -1
- package/dist/sandbox/mock-driver.d.ts +1 -1
- package/dist/sandbox/mock-driver.js +1 -1
- package/dist/sdk/a2a.d.ts +2 -2
- package/dist/sdk/a2a.js +1 -1
- package/dist/sdk/adapters/claude-agent.d.ts +1 -1
- package/dist/sdk/adapters/claude-agent.js +1 -1
- package/dist/sdk/adapters/langgraph.d.ts +1 -1
- package/dist/sdk/adapters/langgraph.js +1 -1
- package/dist/sdk/adapters/mastra.d.ts +1 -1
- package/dist/sdk/adapters/mastra.js +1 -1
- package/dist/sdk/adapters/openai-agents.d.ts +1 -1
- package/dist/sdk/adapters/openai-agents.js +1 -1
- package/dist/sdk/adapters/vercel-ai.d.ts +2 -2
- package/dist/sdk/adapters/vercel-ai.js +1 -1
- package/dist/sdk/govern.d.ts +2 -2
- package/dist/sdk/govern.js +3 -3
- package/dist/sdk/index.d.ts +1 -1
- package/dist/sdk/index.js +1 -1
- package/dist/showback/trail-usage.d.ts +30 -0
- package/dist/showback/trail-usage.d.ts.map +1 -0
- package/dist/showback/trail-usage.js +50 -0
- package/dist/showback/trail-usage.js.map +1 -0
- package/dist/sign/evidence-bundle.d.ts +6 -6
- package/dist/sign/evidence-bundle.js +5 -5
- package/dist/star-cta.d.ts +1 -1
- package/dist/star-cta.d.ts.map +1 -1
- package/dist/star-cta.js +3 -3
- package/dist/telemetry.d.ts +135 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +427 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/trail-summary.d.ts +1 -1
- package/dist/trail-summary.js +3 -3
- package/dist/trail.d.ts +8 -2
- package/dist/trail.d.ts.map +1 -1
- package/dist/trail.js +18 -5
- package/dist/trail.js.map +1 -1
- package/dist/update-check.d.ts +17 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +134 -0
- package/dist/update-check.js.map +1 -0
- 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 +4 -3
- package/qwen/settings.example.json +1 -1
- package/server.json +2 -2
package/dist/mcp/protocol.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MCP tool surface for local gate
|
|
2
|
+
* MCP tool surface for local gate - proxies to Shield KYA (sole PEP).
|
|
3
3
|
* Does not execute irreversible side effects; only evaluate / ingest / request approval.
|
|
4
4
|
* Host-agnostic: stdio or HTTP transport.
|
|
5
5
|
*/
|
|
@@ -11,7 +11,11 @@ import { AuthRequiredError, clientSafeError, HttpError } from "../errors.js";
|
|
|
11
11
|
import { CLI_VERSION } from "../version.js";
|
|
12
12
|
import { parseUsageRecords } from "../showback/cost-per-task.js";
|
|
13
13
|
import { appendTrail, defaultSessionId } from "../trail.js";
|
|
14
|
+
import { kyaHome, readFileConfig } from "../config.js";
|
|
14
15
|
import { deriveTargetPath } from "../trail-summary.js";
|
|
16
|
+
import { deriveWireChangeFields } from "../diff-preview.js";
|
|
17
|
+
import { notifyOnTrailEvent } from "../notify/index.js";
|
|
18
|
+
import { exportVerdictSpan, resolveOtlpExportConfig } from "../otel/exporter.js";
|
|
15
19
|
export const MCP_SERVER_INFO = {
|
|
16
20
|
name: "shield-kya",
|
|
17
21
|
version: CLI_VERSION,
|
|
@@ -94,18 +98,32 @@ function recordMcpTrail(ctx, event) {
|
|
|
94
98
|
if (!trail)
|
|
95
99
|
return;
|
|
96
100
|
try {
|
|
97
|
-
|
|
101
|
+
const trailEvent = {
|
|
98
102
|
ts: new Date().toISOString(),
|
|
99
103
|
sessionId: defaultSessionId(),
|
|
100
104
|
host: ctx.host,
|
|
101
105
|
toolId: event.toolId,
|
|
102
106
|
verdict: event.verdict,
|
|
103
107
|
reasonCode: event.reasonCode,
|
|
104
|
-
mode: trail.offline ? "offline" : trail.holdEnabled ? "hold" : "observe",
|
|
108
|
+
mode: (trail.offline ? "offline" : trail.holdEnabled ? "hold" : "observe"),
|
|
105
109
|
neverEvent: event.reasonCode === "NEVER_EVENT",
|
|
106
110
|
...(event.argsHash ? { argsHash: event.argsHash } : {}),
|
|
107
111
|
...(event.targetPath ? { targetPath: event.targetPath } : {}),
|
|
108
|
-
|
|
112
|
+
...(event.summary ? { summary: event.summary } : {}),
|
|
113
|
+
...(event.diffPreview ? { diffPreview: event.diffPreview } : {}),
|
|
114
|
+
...(event.latencyMs !== undefined ? { latencyMs: event.latencyMs } : {}),
|
|
115
|
+
};
|
|
116
|
+
appendTrail(trail.cwd, trailEvent);
|
|
117
|
+
// Long-lived process: notify + OTLP export fire in-process (never awaited),
|
|
118
|
+
// so the module-level rate limiter / circuit breaker actually work here.
|
|
119
|
+
const fileConfig = {
|
|
120
|
+
...readFileConfig(kyaHome()),
|
|
121
|
+
...readFileConfig(trail.cwd),
|
|
122
|
+
};
|
|
123
|
+
void notifyOnTrailEvent(trailEvent, fileConfig).catch(() => undefined);
|
|
124
|
+
const otlp = resolveOtlpExportConfig(process.env, fileConfig);
|
|
125
|
+
if (otlp)
|
|
126
|
+
void exportVerdictSpan(trailEvent, otlp).catch(() => undefined);
|
|
109
127
|
}
|
|
110
128
|
catch {
|
|
111
129
|
/* observe path is never allowed to break the gate */
|
|
@@ -135,13 +153,16 @@ async function callPolicyEvaluate(a, ctx) {
|
|
|
135
153
|
return textResult({ error: "action or toolId required" }, true);
|
|
136
154
|
}
|
|
137
155
|
const sample = findSampleTool(toolId);
|
|
138
|
-
// Dual-plane host is operator config
|
|
156
|
+
// Dual-plane host is operator config - never tool-attacker-controlled.
|
|
139
157
|
const host = ctx.host;
|
|
140
158
|
const argsObj = a.args && typeof a.args === "object" && !Array.isArray(a.args)
|
|
141
159
|
? a.args
|
|
142
160
|
: {};
|
|
143
161
|
const argsHash = str(a.argsHash) ?? computeArgsHash(argsObj);
|
|
144
162
|
const targetPath = deriveTargetPath(argsObj);
|
|
163
|
+
// Change fields (summary, diffPreview) make MCP-evaluated calls visible on
|
|
164
|
+
// the receipt's Changes tab; redaction + opt-out live in the deriver.
|
|
165
|
+
const changeFields = deriveWireChangeFields(toolId, argsObj);
|
|
145
166
|
const irreversible = sample?.irreversible ?? true;
|
|
146
167
|
const request = {
|
|
147
168
|
toolId,
|
|
@@ -158,9 +179,13 @@ async function callPolicyEvaluate(a, ctx) {
|
|
|
158
179
|
agentId: str(a.agentId) ?? ctx.agentId,
|
|
159
180
|
},
|
|
160
181
|
};
|
|
182
|
+
// Wall latency of the evaluate call (offline evaluator included). Floored
|
|
183
|
+
// at 1ms so sub-millisecond local evaluates still record a positive cost.
|
|
184
|
+
// Observe-only: never an input to the verdict.
|
|
185
|
+
const startedAt = Date.now();
|
|
161
186
|
let response;
|
|
162
187
|
if (ctx.offline) {
|
|
163
|
-
// Same local evaluator as `kya eval-tool --offline`
|
|
188
|
+
// Same local evaluator as `kya eval-tool --offline` - a verdict, never a
|
|
164
189
|
// network error, so the wired (keyless) path still lands on the trail.
|
|
165
190
|
response = evaluateOffline(request, host);
|
|
166
191
|
}
|
|
@@ -177,6 +202,9 @@ async function callPolicyEvaluate(a, ctx) {
|
|
|
177
202
|
reasonCode: planeFailureReason(err),
|
|
178
203
|
argsHash,
|
|
179
204
|
targetPath,
|
|
205
|
+
latencyMs: Math.max(1, Date.now() - startedAt),
|
|
206
|
+
...(changeFields?.summary ? { summary: changeFields.summary } : {}),
|
|
207
|
+
...(changeFields?.diffPreview ? { diffPreview: changeFields.diffPreview } : {}),
|
|
180
208
|
});
|
|
181
209
|
throw err;
|
|
182
210
|
}
|
|
@@ -187,6 +215,9 @@ async function callPolicyEvaluate(a, ctx) {
|
|
|
187
215
|
reasonCode: response.reasonCode,
|
|
188
216
|
argsHash,
|
|
189
217
|
targetPath,
|
|
218
|
+
latencyMs: Math.max(1, Date.now() - startedAt),
|
|
219
|
+
...(changeFields?.summary ? { summary: changeFields.summary } : {}),
|
|
220
|
+
...(changeFields?.diffPreview ? { diffPreview: changeFields.diffPreview } : {}),
|
|
190
221
|
});
|
|
191
222
|
return textResult(response);
|
|
192
223
|
}
|
|
@@ -260,7 +291,7 @@ async function callRequestApproval(a, ctx) {
|
|
|
260
291
|
});
|
|
261
292
|
return textResult({
|
|
262
293
|
...response,
|
|
263
|
-
note: "Approval opened only
|
|
294
|
+
note: "Approval opened only - no side effect executed (fail closed until APPROVED)",
|
|
264
295
|
summary: str(a.summary),
|
|
265
296
|
});
|
|
266
297
|
}
|
|
@@ -293,7 +324,7 @@ function isUuid(s) {
|
|
|
293
324
|
}
|
|
294
325
|
export async function handleJsonRpc(msg, ctx) {
|
|
295
326
|
const id = msg.id ?? null;
|
|
296
|
-
// notifications (no id)
|
|
327
|
+
// notifications (no id) - process but no response for some
|
|
297
328
|
try {
|
|
298
329
|
switch (msg.method) {
|
|
299
330
|
case "initialize":
|
package/dist/mcp/protocol.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/mcp/protocol.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/mcp/protocol.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/stdio.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export interface StdioMcpHandle {
|
|
|
18
18
|
close(): void;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* MCP over stdio
|
|
21
|
+
* MCP over stdio - newline-delimited JSON-RPC 2.0 (common host shape).
|
|
22
22
|
* Also accepts Content-Length framed messages (LSP-style) when headers present.
|
|
23
23
|
*/
|
|
24
24
|
export declare function startStdioMcp(options: StdioMcpOptions): StdioMcpHandle;
|
package/dist/mcp/stdio.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as readline from "node:readline";
|
|
2
2
|
import { handleJsonRpc, } from "./protocol.js";
|
|
3
3
|
/**
|
|
4
|
-
* MCP over stdio
|
|
4
|
+
* MCP over stdio - newline-delimited JSON-RPC 2.0 (common host shape).
|
|
5
5
|
* Also accepts Content-Length framed messages (LSP-style) when headers present.
|
|
6
6
|
*/
|
|
7
7
|
export function startStdioMcp(options) {
|
|
@@ -35,7 +35,7 @@ export function startStdioMcp(options) {
|
|
|
35
35
|
}
|
|
36
36
|
async function onLine(line, ctx, output) {
|
|
37
37
|
if (!line || line.startsWith("Content-Length:")) {
|
|
38
|
-
// Content-Length framing without body on same line
|
|
38
|
+
// Content-Length framing without body on same line - skip header-only lines
|
|
39
39
|
return;
|
|
40
40
|
}
|
|
41
41
|
let msg;
|
package/dist/mcp-servers.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Registry of well-known third-party MCP servers for the offline evaluator
|
|
3
3
|
* and the report's server facet. Advisory only: production authorization
|
|
4
|
-
* stays with the control plane. Unknown server ids stay unknown
|
|
4
|
+
* stays with the control plane. Unknown server ids stay unknown - the
|
|
5
5
|
* registry never guesses.
|
|
6
6
|
*/
|
|
7
7
|
export type McpToolTier = "READ" | "WRITE" | "ADMIN";
|
|
@@ -25,7 +25,7 @@ export declare function mcpServerLabel(serverId: string): string;
|
|
|
25
25
|
export declare function mcpToolTier(serverId: string, toolName: string): McpToolTier | undefined;
|
|
26
26
|
/**
|
|
27
27
|
* ADMIN-tier rule patterns (regex sources) for a known server, in registry
|
|
28
|
-
* order. Undefined for unknown servers
|
|
28
|
+
* order. Undefined for unknown servers - the gate's CEL generation treats
|
|
29
29
|
* those as "no server-specific deny rules" (destructive-name deny only).
|
|
30
30
|
*/
|
|
31
31
|
export declare function mcpServerAdminPatterns(serverId: string): readonly string[] | undefined;
|
package/dist/mcp-servers.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Registry of well-known third-party MCP servers for the offline evaluator
|
|
3
3
|
* and the report's server facet. Advisory only: production authorization
|
|
4
|
-
* stays with the control plane. Unknown server ids stay unknown
|
|
4
|
+
* stays with the control plane. Unknown server ids stay unknown - the
|
|
5
5
|
* registry never guesses.
|
|
6
6
|
*/
|
|
7
7
|
const r = (pattern, tier) => ({ pattern, tier });
|
|
@@ -256,7 +256,7 @@ export function mcpToolTier(serverId, toolName) {
|
|
|
256
256
|
}
|
|
257
257
|
/**
|
|
258
258
|
* ADMIN-tier rule patterns (regex sources) for a known server, in registry
|
|
259
|
-
* order. Undefined for unknown servers
|
|
259
|
+
* order. Undefined for unknown servers - the gate's CEL generation treats
|
|
260
260
|
* those as "no server-specific deny rules" (destructive-name deny only).
|
|
261
261
|
*/
|
|
262
262
|
export function mcpServerAdminPatterns(serverId) {
|
package/dist/node-upgrade.d.ts
CHANGED
|
@@ -17,14 +17,14 @@ export declare function detectNodeManager(env: NodeJS.ProcessEnv, deps?: NodeGat
|
|
|
17
17
|
/**
|
|
18
18
|
* Newest already-installed Node that satisfies the requirement, per the
|
|
19
19
|
* manager's own versions dir. The gate uses this to never re-offer an install
|
|
20
|
-
* that already succeeded
|
|
20
|
+
* that already succeeded - a repeat prompt means the shell is shadowing the
|
|
21
21
|
* manager's node, not that the upgrade is missing.
|
|
22
22
|
*/
|
|
23
23
|
export declare function findInstalledNode(manager: NodeManager, env: NodeJS.ProcessEnv, deps?: NodeGateDeps): string | undefined;
|
|
24
24
|
/**
|
|
25
25
|
* Absolute path to the node binary for an installed version, per manager
|
|
26
26
|
* layout. Lets the gate re-exec the current command under the compliant
|
|
27
|
-
* runtime directly
|
|
27
|
+
* runtime directly - no shell sourcing, immune to the user's PATH order.
|
|
28
28
|
*/
|
|
29
29
|
export declare function installedNodeBin(manager: NodeManager, installed: string, env: NodeJS.ProcessEnv, platform?: NodeJS.Platform): string | undefined;
|
|
30
30
|
/** Shell script that installs Node 24, reinstalls the CLI, and re-runs argv. */
|
package/dist/node-upgrade.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* `engines.node: >=24`; on an older runtime the CLI warns, and on a TTY it
|
|
4
4
|
* offers to install Node 24 via the detected version manager, reinstall the
|
|
5
5
|
* global package under it, and re-run the original command. Declining (or a
|
|
6
|
-
* non-TTY run) continues with a warning
|
|
6
|
+
* non-TTY run) continues with a warning - the gate never blocks outright.
|
|
7
7
|
*
|
|
8
8
|
* Escape hatches: KYA_SKIP_NODE_CHECK=1 skips entirely; KYA_NODE_CHECKED=1 is
|
|
9
9
|
* set by the upgrade re-exec and by the receipt daemon child so the check
|
|
@@ -100,7 +100,7 @@ function managerVersionsDir(manager, env) {
|
|
|
100
100
|
/**
|
|
101
101
|
* Newest already-installed Node that satisfies the requirement, per the
|
|
102
102
|
* manager's own versions dir. The gate uses this to never re-offer an install
|
|
103
|
-
* that already succeeded
|
|
103
|
+
* that already succeeded - a repeat prompt means the shell is shadowing the
|
|
104
104
|
* manager's node, not that the upgrade is missing.
|
|
105
105
|
*/
|
|
106
106
|
export function findInstalledNode(manager, env, deps = {}) {
|
|
@@ -146,7 +146,7 @@ function switchHint(manager, installed) {
|
|
|
146
146
|
/**
|
|
147
147
|
* Absolute path to the node binary for an installed version, per manager
|
|
148
148
|
* layout. Lets the gate re-exec the current command under the compliant
|
|
149
|
-
* runtime directly
|
|
149
|
+
* runtime directly - no shell sourcing, immune to the user's PATH order.
|
|
150
150
|
*/
|
|
151
151
|
export function installedNodeBin(manager, installed, env, platform = process.platform) {
|
|
152
152
|
const dir = managerVersionsDir(manager, env);
|
|
@@ -230,7 +230,7 @@ export async function ensureSupportedNode(io, env, argv, command, deps = {}) {
|
|
|
230
230
|
return undefined;
|
|
231
231
|
const warn = `KYA needs Node.js ${REQUIRED_NODE_MAJOR}+ (you have ${version}).`;
|
|
232
232
|
const manager = detectNodeManager(env, deps);
|
|
233
|
-
// Upgrade already done once? Don't re-offer the install
|
|
233
|
+
// Upgrade already done once? Don't re-offer the install - re-exec this
|
|
234
234
|
// command under the installed runtime directly (immune to PATH order).
|
|
235
235
|
// Only the shadow case (binary missing on disk) falls back to a message.
|
|
236
236
|
const installed = manager ? findInstalledNode(manager, env, deps) : undefined;
|
|
@@ -242,7 +242,7 @@ export async function ensureSupportedNode(io, env, argv, command, deps = {}) {
|
|
|
242
242
|
if (bin && hasFile(bin) && env.KYA_NODE_REEXEC !== "1") {
|
|
243
243
|
const cliJs = deps.cliJs ?? defaultCliJs();
|
|
244
244
|
const run = deps.run ?? defaultRun;
|
|
245
|
-
io.error(`Running under Node ${installed} (already installed via ${manager}; this shell defaults to ${version}
|
|
245
|
+
io.error(`Running under Node ${installed} (already installed via ${manager}; this shell defaults to ${version} - ${switchHint(manager, installed)} makes it permanent).`);
|
|
246
246
|
return run(bin, [cliJs, ...argv], {
|
|
247
247
|
...env,
|
|
248
248
|
KYA_NODE_CHECKED: "1",
|
|
@@ -255,14 +255,14 @@ export async function ensureSupportedNode(io, env, argv, command, deps = {}) {
|
|
|
255
255
|
? ` from ${firstNode}`
|
|
256
256
|
: "";
|
|
257
257
|
io.error(`Node ${installed} is already installed via ${manager}, but this shell runs ${version}${shadow}. ` +
|
|
258
|
-
`Run \`${switchHint(manager, installed)}\` or open a new terminal
|
|
258
|
+
`Run \`${switchHint(manager, installed)}\` or open a new terminal - then this warning stops. ` +
|
|
259
259
|
`Continuing on ${version}.`);
|
|
260
260
|
return undefined;
|
|
261
261
|
}
|
|
262
262
|
const isTty = io.isTty ?? Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
263
263
|
const confirm = io.confirm ?? defaultConfirm;
|
|
264
264
|
if (!isTty) {
|
|
265
|
-
io.error(`${warn} Continuing anyway
|
|
265
|
+
io.error(`${warn} Continuing anyway - some features may break.`);
|
|
266
266
|
return undefined;
|
|
267
267
|
}
|
|
268
268
|
const question = manager
|
|
@@ -270,7 +270,7 @@ export async function ensureSupportedNode(io, env, argv, command, deps = {}) {
|
|
|
270
270
|
: `${warn} No version manager found (nodejs.org/en/download). Continue anyway? [Y/n]`;
|
|
271
271
|
const ok = await confirm(question);
|
|
272
272
|
if (!ok) {
|
|
273
|
-
io.error("Continuing on an unsupported Node
|
|
273
|
+
io.error("Continuing on an unsupported Node - some features may break.");
|
|
274
274
|
return undefined;
|
|
275
275
|
}
|
|
276
276
|
if (!manager)
|
|
@@ -279,7 +279,7 @@ export async function ensureSupportedNode(io, env, argv, command, deps = {}) {
|
|
|
279
279
|
const run = deps.run ?? defaultRun;
|
|
280
280
|
const code = await run(script.shell, script.args, env);
|
|
281
281
|
if (code === 0) {
|
|
282
|
-
io.error(`Node 24 installed and set as default. This terminal still runs ${version}
|
|
282
|
+
io.error(`Node 24 installed and set as default. This terminal still runs ${version} - ` +
|
|
283
283
|
"open a new terminal next time (your command above already finished on Node 24).");
|
|
284
284
|
}
|
|
285
285
|
return code;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detached dispatch for verdict notifications + OTLP export from short-lived
|
|
3
|
+
* CLI spawns (hook, wrap): the parent never waits on the network, the child
|
|
4
|
+
* (`kya notify-flush`) does the delivery. Mirrors the telemetry hook-ping
|
|
5
|
+
* pattern (detached, stdio ignored, unref'd). Long-lived processes (MCP gate,
|
|
6
|
+
* gateway) call notifyOnTrailEvent/exportVerdictSpan directly instead, so the
|
|
7
|
+
* in-process rate limiter and circuit breaker keep working there.
|
|
8
|
+
*/
|
|
9
|
+
import { spawn } from "node:child_process";
|
|
10
|
+
import type { TrailEvent } from "../trail.js";
|
|
11
|
+
/** Cheap pre-spawn check: is any sink configured at all? */
|
|
12
|
+
export declare function notifyDispatchEnabled(env: NodeJS.ProcessEnv, cwd: string): boolean;
|
|
13
|
+
export declare function maybeSpawnNotifyFlush(deps: {
|
|
14
|
+
readonly env: NodeJS.ProcessEnv;
|
|
15
|
+
readonly cwd: string;
|
|
16
|
+
readonly event: TrailEvent;
|
|
17
|
+
readonly entry?: string;
|
|
18
|
+
readonly spawnImpl?: typeof spawn;
|
|
19
|
+
}): boolean;
|
|
20
|
+
//# sourceMappingURL=dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/notify/dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,4DAA4D;AAC5D,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAclF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC,GAAG,OAAO,CAuBV"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detached dispatch for verdict notifications + OTLP export from short-lived
|
|
3
|
+
* CLI spawns (hook, wrap): the parent never waits on the network, the child
|
|
4
|
+
* (`kya notify-flush`) does the delivery. Mirrors the telemetry hook-ping
|
|
5
|
+
* pattern (detached, stdio ignored, unref'd). Long-lived processes (MCP gate,
|
|
6
|
+
* gateway) call notifyOnTrailEvent/exportVerdictSpan directly instead, so the
|
|
7
|
+
* in-process rate limiter and circuit breaker keep working there.
|
|
8
|
+
*/
|
|
9
|
+
import { spawn } from "node:child_process";
|
|
10
|
+
import { kyaHome, readFileConfig } from "../config.js";
|
|
11
|
+
import { NOTIFYABLE_VERDICTS, ENV_WEBHOOK_VAR } from "./index.js";
|
|
12
|
+
/** Cheap pre-spawn check: is any sink configured at all? */
|
|
13
|
+
export function notifyDispatchEnabled(env, cwd) {
|
|
14
|
+
try {
|
|
15
|
+
if (env[ENV_WEBHOOK_VAR]?.trim() || env.KYA_OTLP_EXPORT_ENDPOINT?.trim())
|
|
16
|
+
return true;
|
|
17
|
+
const merged = { ...readFileConfig(kyaHome(env)), ...readFileConfig(cwd) };
|
|
18
|
+
const notify = merged.notify;
|
|
19
|
+
if (Array.isArray(notify?.webhooks) && notify.webhooks.length > 0)
|
|
20
|
+
return true;
|
|
21
|
+
const otlp = merged.otlpExport;
|
|
22
|
+
return typeof otlp?.endpoint === "string" && otlp.endpoint.trim() !== "";
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function maybeSpawnNotifyFlush(deps) {
|
|
29
|
+
try {
|
|
30
|
+
if (!NOTIFYABLE_VERDICTS.includes(deps.event.verdict))
|
|
31
|
+
return false;
|
|
32
|
+
if (!notifyDispatchEnabled(deps.env, deps.cwd))
|
|
33
|
+
return false;
|
|
34
|
+
const entry = deps.entry ?? process.argv[1];
|
|
35
|
+
if (entry === undefined)
|
|
36
|
+
return false;
|
|
37
|
+
const child = (deps.spawnImpl ?? spawn)(process.execPath, [entry, "notify-flush"], {
|
|
38
|
+
detached: true,
|
|
39
|
+
stdio: "ignore",
|
|
40
|
+
env: { ...deps.env, KYA_NOTIFY_EVENT: JSON.stringify(deps.event) },
|
|
41
|
+
cwd: deps.cwd,
|
|
42
|
+
windowsHide: true,
|
|
43
|
+
});
|
|
44
|
+
child.on("error", () => undefined);
|
|
45
|
+
child.unref();
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/notify/dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlE,4DAA4D;AAC5D,MAAM,UAAU,qBAAqB,CAAC,GAAsB,EAAE,GAAW;IACvE,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QACtF,MAAM,MAAM,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,EAGvE,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,MAA4C,CAAC;QACnE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,UAAgD,CAAC;QACrE,OAAO,OAAO,IAAI,EAAE,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAMrC;IACC,IAAI,CAAC;QACH,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACpE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACtC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CACrC,OAAO,CAAC,QAAQ,EAChB,CAAC,KAAK,EAAE,cAAc,CAAC,EACvB;YACE,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;YACf,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAClE,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,WAAW,EAAE,IAAI;SAClB,CACF,CAAC;QACF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACnC,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { TrailEvent } from "../trail.js";
|
|
2
|
+
import { type NotifyTemplate } from "./templates.js";
|
|
3
|
+
import { type NotifyDeps } from "./sender.js";
|
|
4
|
+
export { CIRCUIT_FAILURES_TO_OPEN, CIRCUIT_OPEN_MS, DEFAULT_TIMEOUT_MS, RATE_LIMIT_MAX_SENDS, RATE_LIMIT_WINDOW_MS, RETRY_DELAYS_MS, notifyStats, postWebhook, resetNotifyState, sendWithRetry, type NotifyDeps, } from "./sender.js";
|
|
5
|
+
export { NOTIFY_KIND, NOTIFY_TEMPLATES, allowedEventFields, buildGenericPayload, buildJiraPayload, buildLinearPayload, buildMinimizedPayload, buildPayload, buildSlackPayload, headline, type NotifyTemplate, } from "./templates.js";
|
|
6
|
+
export interface NotifyWebhookConfig {
|
|
7
|
+
readonly url: string;
|
|
8
|
+
readonly events?: readonly string[];
|
|
9
|
+
readonly template?: NotifyTemplate;
|
|
10
|
+
readonly headers?: Record<string, string>;
|
|
11
|
+
readonly timeoutMs?: number;
|
|
12
|
+
}
|
|
13
|
+
/** The slice of the parsed `.kya/config.json` this module reads. */
|
|
14
|
+
export interface NotifyFileConfig {
|
|
15
|
+
readonly notify?: {
|
|
16
|
+
readonly webhooks?: readonly unknown[];
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/** A hand-editable config entry, defensively parsed. Invalid entries drop, never throw. */
|
|
20
|
+
export interface ResolvedWebhook {
|
|
21
|
+
readonly url: string;
|
|
22
|
+
readonly events: readonly string[];
|
|
23
|
+
readonly template: NotifyTemplate;
|
|
24
|
+
readonly headers?: Record<string, string>;
|
|
25
|
+
readonly timeoutMs?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare const NOTIFYABLE_VERDICTS: readonly string[];
|
|
28
|
+
export declare const ENV_WEBHOOK_VAR = "KYA_NOTIFY_WEBHOOK";
|
|
29
|
+
/** Config webhooks plus the KYA_NOTIFY_WEBHOOK env override (generic template), both validated. */
|
|
30
|
+
export declare function resolveWebhooks(config: NotifyFileConfig | undefined, env?: NodeJS.ProcessEnv): ResolvedWebhook[];
|
|
31
|
+
/** Serialized body for one receiver, downgraded to the minimized shape if the secret scan trips. */
|
|
32
|
+
export declare function serializePayload(template: NotifyTemplate, event: TrailEvent): string;
|
|
33
|
+
/**
|
|
34
|
+
* Fire every matching webhook for one trail event. Filters to DENY / REQUIRE_APPROVE first
|
|
35
|
+
* (per-webhook `events` can narrow further). Delivers to all receivers concurrently; delivery
|
|
36
|
+
* reliability (retry, timeout, rate limit, circuit breaker) lives in sender.ts. Never throws.
|
|
37
|
+
*/
|
|
38
|
+
export declare function notifyOnTrailEvent(event: TrailEvent, config: NotifyFileConfig | undefined, env?: NodeJS.ProcessEnv, deps?: NotifyDeps): Promise<void>;
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notify/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,QAAQ,EACR,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;KACxC,CAAC;CACH;AAED,2FAA2F;AAC3F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAgC,CAAC;AAClF,eAAO,MAAM,eAAe,uBAAuB,CAAC;AAgDpD,mGAAmG;AACnG,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,eAAe,EAAE,CAenB;AAED,oGAAoG;AACpG,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAQpF;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,IAAI,GAAE,UAAe,GACpB,OAAO,CAAC,IAAI,CAAC,CAwBf"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Alert routing for trail verdicts: fire webhooks when a trail event is DENY or REQUIRE_APPROVE.
|
|
3
|
+
* Wired into the trail writers by the caller; this module is passive (nothing polls the trail).
|
|
4
|
+
*
|
|
5
|
+
* Config comes from the `notify` key of the parsed `.kya/config.json` object (the module receives
|
|
6
|
+
* the parsed object, it does not read files):
|
|
7
|
+
*
|
|
8
|
+
* notify: { webhooks: [ { url, events?: ["DENY","REQUIRE_APPROVE"],
|
|
9
|
+
* template?: "slack"|"linear"|"jira"|"generic",
|
|
10
|
+
* headers?: Record<string,string>, timeoutMs? } ] }
|
|
11
|
+
*
|
|
12
|
+
* `KYA_NOTIFY_WEBHOOK` adds one quick generic webhook on top of the config list.
|
|
13
|
+
*
|
|
14
|
+
* Secrets hygiene: payloads are built from the allow-listed, already-redacted trail fields only
|
|
15
|
+
* (see templates.ts) and the serialized body is checked with assertNoSecrets before sending; a
|
|
16
|
+
* rejected body degrades to a four-field minimized payload instead of being dropped silently.
|
|
17
|
+
*/
|
|
18
|
+
import { assertNoSecrets } from "../dash/render.js";
|
|
19
|
+
import { NOTIFY_TEMPLATES, buildMinimizedPayload, buildPayload, } from "./templates.js";
|
|
20
|
+
import { sendWithRetry } from "./sender.js";
|
|
21
|
+
export { CIRCUIT_FAILURES_TO_OPEN, CIRCUIT_OPEN_MS, DEFAULT_TIMEOUT_MS, RATE_LIMIT_MAX_SENDS, RATE_LIMIT_WINDOW_MS, RETRY_DELAYS_MS, notifyStats, postWebhook, resetNotifyState, sendWithRetry, } from "./sender.js";
|
|
22
|
+
export { NOTIFY_KIND, NOTIFY_TEMPLATES, allowedEventFields, buildGenericPayload, buildJiraPayload, buildLinearPayload, buildMinimizedPayload, buildPayload, buildSlackPayload, headline, } from "./templates.js";
|
|
23
|
+
export const NOTIFYABLE_VERDICTS = ["DENY", "REQUIRE_APPROVE"];
|
|
24
|
+
export const ENV_WEBHOOK_VAR = "KYA_NOTIFY_WEBHOOK";
|
|
25
|
+
function isHttpUrl(raw) {
|
|
26
|
+
try {
|
|
27
|
+
const url = new URL(raw);
|
|
28
|
+
return url.protocol === "https:" || url.protocol === "http:";
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function parseWebhook(raw) {
|
|
35
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
36
|
+
return undefined;
|
|
37
|
+
const w = raw;
|
|
38
|
+
if (typeof w["url"] !== "string" || !isHttpUrl(w["url"].trim()))
|
|
39
|
+
return undefined;
|
|
40
|
+
let events = NOTIFYABLE_VERDICTS;
|
|
41
|
+
if (Array.isArray(w["events"])) {
|
|
42
|
+
const filtered = w["events"].filter((e) => typeof e === "string" && NOTIFYABLE_VERDICTS.includes(e));
|
|
43
|
+
if (filtered.length > 0)
|
|
44
|
+
events = filtered;
|
|
45
|
+
}
|
|
46
|
+
const template = typeof w["template"] === "string" &&
|
|
47
|
+
NOTIFY_TEMPLATES.includes(w["template"])
|
|
48
|
+
? w["template"]
|
|
49
|
+
: "generic";
|
|
50
|
+
let headers;
|
|
51
|
+
if (w["headers"] && typeof w["headers"] === "object" && !Array.isArray(w["headers"])) {
|
|
52
|
+
const parsed = Object.fromEntries(Object.entries(w["headers"]).filter((e) => typeof e[1] === "string"));
|
|
53
|
+
if (Object.keys(parsed).length > 0)
|
|
54
|
+
headers = parsed;
|
|
55
|
+
}
|
|
56
|
+
const timeoutMs = typeof w["timeoutMs"] === "number" && Number.isFinite(w["timeoutMs"]) && w["timeoutMs"] > 0
|
|
57
|
+
? w["timeoutMs"]
|
|
58
|
+
: undefined;
|
|
59
|
+
return { url: w["url"].trim(), events, template, ...(headers ? { headers } : {}), ...(timeoutMs ? { timeoutMs } : {}) };
|
|
60
|
+
}
|
|
61
|
+
/** Config webhooks plus the KYA_NOTIFY_WEBHOOK env override (generic template), both validated. */
|
|
62
|
+
export function resolveWebhooks(config, env = process.env) {
|
|
63
|
+
const out = [];
|
|
64
|
+
try {
|
|
65
|
+
for (const raw of config?.notify?.webhooks ?? []) {
|
|
66
|
+
const parsed = parseWebhook(raw);
|
|
67
|
+
if (parsed !== undefined)
|
|
68
|
+
out.push(parsed);
|
|
69
|
+
}
|
|
70
|
+
const envUrl = env[ENV_WEBHOOK_VAR]?.trim();
|
|
71
|
+
if (envUrl !== undefined && envUrl !== "" && isHttpUrl(envUrl)) {
|
|
72
|
+
out.push({ url: envUrl, events: NOTIFYABLE_VERDICTS, template: "generic" });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
/* a malformed config must never break the gate path */
|
|
77
|
+
}
|
|
78
|
+
return out;
|
|
79
|
+
}
|
|
80
|
+
/** Serialized body for one receiver, downgraded to the minimized shape if the secret scan trips. */
|
|
81
|
+
export function serializePayload(template, event) {
|
|
82
|
+
const body = JSON.stringify(buildPayload(template, event));
|
|
83
|
+
try {
|
|
84
|
+
assertNoSecrets(body);
|
|
85
|
+
return body;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return JSON.stringify(buildMinimizedPayload(event));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Fire every matching webhook for one trail event. Filters to DENY / REQUIRE_APPROVE first
|
|
93
|
+
* (per-webhook `events` can narrow further). Delivers to all receivers concurrently; delivery
|
|
94
|
+
* reliability (retry, timeout, rate limit, circuit breaker) lives in sender.ts. Never throws.
|
|
95
|
+
*/
|
|
96
|
+
export async function notifyOnTrailEvent(event, config, env = process.env, deps = {}) {
|
|
97
|
+
try {
|
|
98
|
+
if (!NOTIFYABLE_VERDICTS.includes(event.verdict))
|
|
99
|
+
return;
|
|
100
|
+
const targets = resolveWebhooks(config, env).filter((w) => w.events.includes(event.verdict));
|
|
101
|
+
await Promise.all(targets.map(async (w) => {
|
|
102
|
+
try {
|
|
103
|
+
await sendWithRetry({
|
|
104
|
+
url: w.url,
|
|
105
|
+
body: serializePayload(w.template, event),
|
|
106
|
+
...(w.headers ? { headers: w.headers } : {}),
|
|
107
|
+
...(w.timeoutMs !== undefined ? { timeoutMs: w.timeoutMs } : {}),
|
|
108
|
+
}, deps);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
/* one receiver must not affect the others */
|
|
112
|
+
}
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
/* notify must never change the gate path */
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notify/index.ts"],"names":[],"mappings":"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"}
|