feat(skills): audit scan results and block unroutable skills
This commit is contained in:
@@ -10,6 +10,7 @@ import type {
|
||||
ToolApprovalEvent,
|
||||
SkillsInstallerExecutionBlockedEvent,
|
||||
SkillsInstallerCommandResultEvent,
|
||||
SkillsScanEvent,
|
||||
SessionCreateEvent,
|
||||
SessionMessageEvent,
|
||||
SessionDeleteEvent,
|
||||
@@ -113,6 +114,16 @@ export class AuditLogger {
|
||||
});
|
||||
}
|
||||
|
||||
skillsScan(event: SkillsScanEvent): void {
|
||||
const level = event.ok ? 'debug' : 'warn';
|
||||
if (!this.shouldLog('tools', level)) {return;}
|
||||
this.write({
|
||||
level,
|
||||
event_type: event.ok ? 'skills.scan.pass' : 'skills.scan.fail',
|
||||
event: event as unknown as Record<string, unknown>,
|
||||
});
|
||||
}
|
||||
|
||||
// ── Session Events ───────────────────────────────────────────
|
||||
|
||||
sessionCreate(event: SessionCreateEvent): void {
|
||||
|
||||
@@ -3,6 +3,8 @@ export type AuditLevel = 'debug' | 'info' | 'warn' | 'error';
|
||||
export type AuditEventType =
|
||||
// Tool execution
|
||||
| 'tool.start' | 'tool.success' | 'tool.error' | 'tool.denied' | 'tool.approval'
|
||||
// Skills scan
|
||||
| 'skills.scan.pass' | 'skills.scan.fail'
|
||||
// Skills installer
|
||||
| 'skills.installer.execution_blocked' | 'skills.installer.command_result'
|
||||
// Session lifecycle
|
||||
@@ -122,6 +124,16 @@ export interface SkillsInstallerCommandResultEvent {
|
||||
reason: string;
|
||||
}
|
||||
|
||||
export interface SkillsScanEvent {
|
||||
skill_name: string;
|
||||
tier: 'bundled' | 'managed' | 'workspace' | 'unknown';
|
||||
phase: 'load' | 'install';
|
||||
ok: boolean;
|
||||
error_count: number;
|
||||
warn_count: number;
|
||||
issue_codes: string[];
|
||||
}
|
||||
|
||||
export interface SessionCreateEvent {
|
||||
session_id: string;
|
||||
frontend: string;
|
||||
|
||||
Reference in New Issue
Block a user