@phosphor-dom/sentinel-ai 0.1.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.
Files changed (62) hide show
  1. package/README.md +111 -0
  2. package/dist/core/context-compression.d.ts +21 -0
  3. package/dist/core/context-compression.d.ts.map +1 -0
  4. package/dist/core/context-compression.js +62 -0
  5. package/dist/core/context-compression.js.map +1 -0
  6. package/dist/core/correlation-engine.d.ts +30 -0
  7. package/dist/core/correlation-engine.d.ts.map +1 -0
  8. package/dist/core/correlation-engine.js +43 -0
  9. package/dist/core/correlation-engine.js.map +1 -0
  10. package/dist/core/event-bus.d.ts +16 -0
  11. package/dist/core/event-bus.d.ts.map +1 -0
  12. package/dist/core/event-bus.js +81 -0
  13. package/dist/core/event-bus.js.map +1 -0
  14. package/dist/core/evidence-manager.d.ts +27 -0
  15. package/dist/core/evidence-manager.d.ts.map +1 -0
  16. package/dist/core/evidence-manager.js +38 -0
  17. package/dist/core/evidence-manager.js.map +1 -0
  18. package/dist/core/inter-agent-communication.d.ts +41 -0
  19. package/dist/core/inter-agent-communication.d.ts.map +1 -0
  20. package/dist/core/inter-agent-communication.js +68 -0
  21. package/dist/core/inter-agent-communication.js.map +1 -0
  22. package/dist/core/knowledge-base.d.ts +26 -0
  23. package/dist/core/knowledge-base.d.ts.map +1 -0
  24. package/dist/core/knowledge-base.js +87 -0
  25. package/dist/core/knowledge-base.js.map +1 -0
  26. package/dist/core/memory-manager.d.ts +25 -0
  27. package/dist/core/memory-manager.d.ts.map +1 -0
  28. package/dist/core/memory-manager.js +80 -0
  29. package/dist/core/memory-manager.js.map +1 -0
  30. package/dist/core/orchestrator.d.ts +43 -0
  31. package/dist/core/orchestrator.d.ts.map +1 -0
  32. package/dist/core/orchestrator.js +125 -0
  33. package/dist/core/orchestrator.js.map +1 -0
  34. package/dist/core/plugin-manager.d.ts +26 -0
  35. package/dist/core/plugin-manager.d.ts.map +1 -0
  36. package/dist/core/plugin-manager.js +57 -0
  37. package/dist/core/plugin-manager.js.map +1 -0
  38. package/dist/core/provider-abstraction.d.ts +41 -0
  39. package/dist/core/provider-abstraction.d.ts.map +1 -0
  40. package/dist/core/provider-abstraction.js +68 -0
  41. package/dist/core/provider-abstraction.js.map +1 -0
  42. package/dist/core/report-generator.d.ts +30 -0
  43. package/dist/core/report-generator.d.ts.map +1 -0
  44. package/dist/core/report-generator.js +104 -0
  45. package/dist/core/report-generator.js.map +1 -0
  46. package/dist/core/risk-analysis.d.ts +31 -0
  47. package/dist/core/risk-analysis.d.ts.map +1 -0
  48. package/dist/core/risk-analysis.js +40 -0
  49. package/dist/core/risk-analysis.js.map +1 -0
  50. package/dist/index.d.ts +23 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +38 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/types/agent.d.ts +24 -0
  55. package/dist/types/agent.d.ts.map +1 -0
  56. package/dist/types/agent.js +2 -0
  57. package/dist/types/agent.js.map +1 -0
  58. package/dist/types/event.d.ts +14 -0
  59. package/dist/types/event.d.ts.map +1 -0
  60. package/dist/types/event.js +9 -0
  61. package/dist/types/event.js.map +1 -0
  62. package/package.json +42 -0
@@ -0,0 +1,87 @@
1
+ export class KnowledgeBase {
2
+ entries = new Map();
3
+ constructor() {
4
+ this.seed();
5
+ }
6
+ seed() {
7
+ this.add({
8
+ id: "owasp-sqli",
9
+ framework: "OWASP",
10
+ title: "SQL Injection",
11
+ content: "SQL injection occurs when untrusted data is sent to an interpreter as part of a command or query.",
12
+ references: ["https://owasp.org/www-community/attacks/SQL_Injection"],
13
+ tags: ["owasp-top10", "injection", "database"],
14
+ });
15
+ this.add({
16
+ id: "owasp-xss",
17
+ framework: "OWASP",
18
+ title: "Cross-Site Scripting (XSS)",
19
+ content: "XSS allows attackers to inject client-side scripts into web pages viewed by other users.",
20
+ references: ["https://owasp.org/www-community/attacks/xss/"],
21
+ tags: ["owasp-top10", "xss", "client-side"],
22
+ });
23
+ this.add({
24
+ id: "cwe-79",
25
+ framework: "CWE",
26
+ title: "CWE-79: Improper Neutralization of Input During Web Page Generation",
27
+ content: "The software does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output.",
28
+ references: ["https://cwe.mitre.org/data/definitions/79.html"],
29
+ tags: ["cwe", "xss", "injection"],
30
+ });
31
+ this.add({
32
+ id: "cwe-89",
33
+ framework: "CWE",
34
+ title: "CWE-89: Improper Neutralization of Special Elements used in an SQL Command",
35
+ content: "The software constructs all or part of an SQL command using externally-influenced input.",
36
+ references: ["https://cwe.mitre.org/data/definitions/89.html"],
37
+ tags: ["cwe", "sqli", "injection"],
38
+ });
39
+ this.add({
40
+ id: "mitre-t1190",
41
+ framework: "MITRE-ATTACK",
42
+ title: "Exploit Public-Facing Application",
43
+ content: "Adversaries may exploit a weakness in an Internet-facing computer or program.",
44
+ references: ["https://attack.mitre.org/techniques/T1190/"],
45
+ tags: ["mitre-attack", "initial-access", "exploit"],
46
+ });
47
+ }
48
+ add(entry) {
49
+ this.entries.set(entry.id, entry);
50
+ }
51
+ search(query, framework) {
52
+ const q = query.toLowerCase();
53
+ return Array.from(this.entries.values()).filter((e) => {
54
+ if (framework && e.framework !== framework)
55
+ return false;
56
+ return (e.title.toLowerCase().includes(q) ||
57
+ e.content.toLowerCase().includes(q) ||
58
+ e.tags.some((t) => t.includes(q)));
59
+ });
60
+ }
61
+ enrich(findingType) {
62
+ const entry = Array.from(this.entries.values()).find((e) => e.tags.some((t) => findingType.toLowerCase().includes(t)) ||
63
+ findingType.toLowerCase().includes(e.id));
64
+ if (!entry)
65
+ return undefined;
66
+ return {
67
+ entryId: entry.id,
68
+ findingType,
69
+ description: entry.content,
70
+ mitigations: this.getMitigations(entry),
71
+ references: entry.references,
72
+ };
73
+ }
74
+ getMitigations(entry) {
75
+ const mitigations = {
76
+ "owasp-sqli": ["Use parameterized queries", "Implement input validation", "Use ORM frameworks"],
77
+ "owasp-xss": ["Implement Content Security Policy", "Escape all user input", "Use HTTP-only cookies"],
78
+ "cwe-79": ["Validate and sanitize all input", "Use output encoding", "Implement CSP headers"],
79
+ "cwe-89": ["Use prepared statements", "Apply least privilege to DB accounts", "Implement input validation"],
80
+ };
81
+ return mitigations[entry.id] || ["Review security best practices for this vulnerability type"];
82
+ }
83
+ getAll() {
84
+ return Array.from(this.entries.values());
85
+ }
86
+ }
87
+ //# sourceMappingURL=knowledge-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-base.js","sourceRoot":"","sources":["../../src/core/knowledge-base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export type MemoryTier = "working" | "session" | "long-term" | "semantic";
2
+ export interface MemoryEntry<T = unknown> {
3
+ id: string;
4
+ tier: MemoryTier;
5
+ agent: string;
6
+ key: string;
7
+ data: T;
8
+ timestamp: number;
9
+ ttl?: number;
10
+ }
11
+ export declare class MemoryManager {
12
+ private stores;
13
+ private expiryTimers;
14
+ constructor();
15
+ write<T>(tier: MemoryTier, agent: string, key: string, data: T, ttlMs?: number): void;
16
+ read<T>(tier: MemoryTier, agent: string, key: string): T | undefined;
17
+ search<T>(tier: MemoryTier, query: Partial<{
18
+ agent: string;
19
+ key: string;
20
+ }>): MemoryEntry<T>[];
21
+ delete(tier: MemoryTier, agent: string, key: string): void;
22
+ clearTier(tier: MemoryTier): void;
23
+ clearAgent(agent: string): void;
24
+ }
25
+ //# sourceMappingURL=memory-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-manager.d.ts","sourceRoot":"","sources":["../../src/core/memory-manager.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAA;AAEzE,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,CAAC,CAAA;IACP,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAuD;IACrE,OAAO,CAAC,YAAY,CAAwD;;IAQ5E,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAoBrF,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAKpE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE;IAY7F,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAU1D,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIjC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAmBhC"}
@@ -0,0 +1,80 @@
1
+ export class MemoryManager {
2
+ stores = new Map();
3
+ expiryTimers = new Map();
4
+ constructor() {
5
+ for (const tier of ["working", "session", "long-term", "semantic"]) {
6
+ this.stores.set(tier, new Map());
7
+ }
8
+ }
9
+ write(tier, agent, key, data, ttlMs) {
10
+ const entry = {
11
+ id: `${agent}:${key}`,
12
+ tier,
13
+ agent,
14
+ key,
15
+ data,
16
+ timestamp: Date.now(),
17
+ ttl: ttlMs,
18
+ };
19
+ const store = this.stores.get(tier);
20
+ store.set(entry.id, entry);
21
+ if (ttlMs) {
22
+ const existing = this.expiryTimers.get(entry.id);
23
+ if (existing)
24
+ clearTimeout(existing);
25
+ this.expiryTimers.set(entry.id, setTimeout(() => store.delete(entry.id), ttlMs));
26
+ }
27
+ }
28
+ read(tier, agent, key) {
29
+ const entry = this.stores.get(tier)?.get(`${agent}:${key}`);
30
+ return entry?.data;
31
+ }
32
+ search(tier, query) {
33
+ const store = this.stores.get(tier);
34
+ if (!store)
35
+ return [];
36
+ const results = [];
37
+ for (const entry of Array.from(store.values())) {
38
+ if (query.agent && entry.agent !== query.agent)
39
+ continue;
40
+ if (query.key && !entry.key.includes(query.key))
41
+ continue;
42
+ results.push(entry);
43
+ }
44
+ return results;
45
+ }
46
+ delete(tier, agent, key) {
47
+ const id = `${agent}:${key}`;
48
+ this.stores.get(tier)?.delete(id);
49
+ const timer = this.expiryTimers.get(id);
50
+ if (timer) {
51
+ clearTimeout(timer);
52
+ this.expiryTimers.delete(id);
53
+ }
54
+ }
55
+ clearTier(tier) {
56
+ this.stores.get(tier)?.clear();
57
+ }
58
+ clearAgent(agent) {
59
+ const tiers = ["working", "session", "long-term", "semantic"];
60
+ for (const tier of tiers) {
61
+ const store = this.stores.get(tier);
62
+ if (!store)
63
+ continue;
64
+ const toDelete = [];
65
+ store.forEach((entry, id) => {
66
+ if (entry.agent === agent)
67
+ toDelete.push(id);
68
+ });
69
+ for (const id of toDelete) {
70
+ store.delete(id);
71
+ const timer = this.expiryTimers.get(id);
72
+ if (timer) {
73
+ clearTimeout(timer);
74
+ this.expiryTimers.delete(id);
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
80
+ //# sourceMappingURL=memory-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-manager.js","sourceRoot":"","sources":["../../src/core/memory-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { EventBus } from "./event-bus";
2
+ import { ProviderAbstraction } from "./provider-abstraction";
3
+ import { MemoryManager } from "./memory-manager";
4
+ import { InterAgentCommunication } from "./inter-agent-communication";
5
+ import type { Finding } from "../types/agent";
6
+ export interface AuditScope {
7
+ target: string;
8
+ targetType: "domain" | "ip" | "url" | "repository";
9
+ description?: string;
10
+ agents?: string[];
11
+ }
12
+ export interface AuditPlan {
13
+ id: string;
14
+ scope: AuditScope;
15
+ phases: AuditPhase[];
16
+ status: "planning" | "in_progress" | "completed" | "failed";
17
+ findings: Finding[];
18
+ createdAt: string;
19
+ }
20
+ export interface AuditPhase {
21
+ name: string;
22
+ agent: string;
23
+ status: "pending" | "active" | "completed" | "failed";
24
+ dependsOn: string[];
25
+ }
26
+ export declare class SentinelOrchestrator {
27
+ bus: EventBus;
28
+ providers: ProviderAbstraction;
29
+ memory: MemoryManager;
30
+ comms: InterAgentCommunication;
31
+ private currentPlan;
32
+ private phaseResults;
33
+ constructor();
34
+ runAudit(scope: AuditScope): Promise<AuditPlan>;
35
+ private createPlan;
36
+ private executePhase;
37
+ private getPhaseResults;
38
+ private registerEventHandlers;
39
+ private emitPlanUpdated;
40
+ getPlan(): AuditPlan | null;
41
+ getFindings(): Finding[];
42
+ }
43
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAGrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,QAAQ,GAAG,IAAI,GAAG,KAAK,GAAG,YAAY,CAAA;IAClD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,UAAU,CAAA;IACjB,MAAM,EAAE,UAAU,EAAE,CAAA;IACpB,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,CAAA;IAC3D,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAA;IACrD,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,qBAAa,oBAAoB;IAC/B,GAAG,EAAE,QAAQ,CAAA;IACb,SAAS,EAAE,mBAAmB,CAAA;IAC9B,MAAM,EAAE,aAAa,CAAA;IACrB,KAAK,EAAE,uBAAuB,CAAA;IAE9B,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,YAAY,CAAkC;;IAUhD,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IA4BrD,OAAO,CAAC,UAAU;YAiCJ,YAAY;IAW1B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,eAAe;IAYvB,OAAO,IAAI,SAAS,GAAG,IAAI;IAI3B,WAAW,IAAI,OAAO,EAAE;CAGzB"}
@@ -0,0 +1,125 @@
1
+ import { EventBus } from "./event-bus";
2
+ import { ProviderAbstraction } from "./provider-abstraction";
3
+ import { MemoryManager } from "./memory-manager";
4
+ import { InterAgentCommunication } from "./inter-agent-communication";
5
+ import { uuid } from "../types/event";
6
+ export class SentinelOrchestrator {
7
+ bus;
8
+ providers;
9
+ memory;
10
+ comms;
11
+ currentPlan = null;
12
+ phaseResults = new Map();
13
+ constructor() {
14
+ this.bus = new EventBus();
15
+ this.providers = new ProviderAbstraction();
16
+ this.memory = new MemoryManager();
17
+ this.comms = new InterAgentCommunication(this.bus);
18
+ this.registerEventHandlers();
19
+ }
20
+ async runAudit(scope) {
21
+ const plan = this.createPlan(scope);
22
+ this.currentPlan = plan;
23
+ this.memory.write("session", "orchestrator", "current-plan", plan);
24
+ this.emitPlanUpdated(plan);
25
+ for (const phase of plan.phases) {
26
+ if (phase.status !== "pending")
27
+ continue;
28
+ phase.status = "active";
29
+ this.emitPlanUpdated(plan);
30
+ try {
31
+ const result = await this.executePhase(phase, scope);
32
+ this.phaseResults.set(phase.name, result);
33
+ phase.status = "completed";
34
+ }
35
+ catch (err) {
36
+ phase.status = "failed";
37
+ console.error(`Phase ${phase.name} failed:`, err);
38
+ }
39
+ this.emitPlanUpdated(plan);
40
+ }
41
+ plan.status = plan.phases.every((p) => p.status === "completed") ? "completed" : "failed";
42
+ this.currentPlan = plan;
43
+ return plan;
44
+ }
45
+ createPlan(scope) {
46
+ const phases = [
47
+ { name: "reconnaissance", agent: "sentinel-recon", status: "pending", dependsOn: [] },
48
+ { name: "infrastructure", agent: "sentinel-infrastructure", status: "pending", dependsOn: ["reconnaissance"] },
49
+ { name: "web-security", agent: "sentinel-web-security", status: "pending", dependsOn: ["reconnaissance"] },
50
+ { name: "code-audit", agent: "sentinel-code-audit", status: "pending", dependsOn: [] },
51
+ { name: "cve-intelligence", agent: "sentinel-cve-intelligence", status: "pending", dependsOn: ["infrastructure", "web-security", "code-audit"] },
52
+ { name: "threat-modeling", agent: "sentinel-threat-modeling", status: "pending", dependsOn: ["cve-intelligence"] },
53
+ { name: "reporting", agent: "sentinel-report", status: "pending", dependsOn: ["threat-modeling"] },
54
+ ];
55
+ if (scope.agents) {
56
+ const filtered = phases.filter((p) => scope.agents.includes(p.agent) || scope.agents.includes(p.name));
57
+ return {
58
+ id: uuid(),
59
+ scope,
60
+ phases: filtered,
61
+ status: "planning",
62
+ findings: [],
63
+ createdAt: new Date().toISOString(),
64
+ };
65
+ }
66
+ return {
67
+ id: uuid(),
68
+ scope,
69
+ phases,
70
+ status: "planning",
71
+ findings: [],
72
+ createdAt: new Date().toISOString(),
73
+ };
74
+ }
75
+ async executePhase(phase, scope) {
76
+ // In a full implementation, this delegates to the agent via opencode
77
+ // For now, it stores the task in working memory and returns a stub
78
+ this.memory.write("working", phase.agent, "current-task", {
79
+ phase: phase.name,
80
+ scope,
81
+ dependencies: this.getPhaseResults(phase.dependsOn),
82
+ });
83
+ return { phase: phase.name, status: "delegated" };
84
+ }
85
+ getPhaseResults(names) {
86
+ const results = {};
87
+ for (const name of names) {
88
+ const result = this.phaseResults.get(name);
89
+ if (result)
90
+ results[name] = result;
91
+ }
92
+ return results;
93
+ }
94
+ registerEventHandlers() {
95
+ this.bus.subscribe("VulnerabilityDetected", (event) => {
96
+ const payload = event.payload;
97
+ if (this.currentPlan) {
98
+ this.currentPlan.findings.push(payload);
99
+ this.memory.write("session", "orchestrator", "findings", this.currentPlan.findings);
100
+ }
101
+ });
102
+ this.bus.subscribe("AgentStatusChanged", (event) => {
103
+ const payload = event.payload;
104
+ this.memory.write("working", payload.agent, "status", payload);
105
+ });
106
+ }
107
+ emitPlanUpdated(plan) {
108
+ this.bus.publish({
109
+ id: uuid(),
110
+ timestamp: new Date().toISOString(),
111
+ type: "PlanUpdated",
112
+ source: "orchestrator",
113
+ target: "*",
114
+ priority: "normal",
115
+ payload: { planId: plan.id, status: plan.status, phases: plan.phases },
116
+ });
117
+ }
118
+ getPlan() {
119
+ return this.currentPlan;
120
+ }
121
+ getFindings() {
122
+ return this.currentPlan?.findings || [];
123
+ }
124
+ }
125
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface PluginManifest {
2
+ name: string;
3
+ version: string;
4
+ capabilities: string[];
5
+ inputs: string[];
6
+ outputs: string[];
7
+ permissions: Record<string, string[]>;
8
+ }
9
+ export interface PluginResult {
10
+ plugin: string;
11
+ status: "completed" | "failed" | "timeout";
12
+ output: Record<string, unknown>;
13
+ duration: number;
14
+ }
15
+ export declare class PluginManager {
16
+ private plugins;
17
+ private results;
18
+ register(manifest: PluginManifest): void;
19
+ get(name: string): PluginManifest | undefined;
20
+ list(): PluginManifest[];
21
+ execute(name: string, params: Record<string, unknown>): Promise<PluginResult>;
22
+ private runWithTimeout;
23
+ private runPlugin;
24
+ getHistory(): PluginResult[];
25
+ }
26
+ //# sourceMappingURL=plugin-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-manager.d.ts","sourceRoot":"","sources":["../../src/core/plugin-manager.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAA;IAC1C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,OAAO,CAAuC;IAEtD,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAIxC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C,IAAI,IAAI,cAAc,EAAE;IAIlB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;YA2BrE,cAAc;YAMd,SAAS;IASvB,UAAU,IAAI,YAAY,EAAE;CAG7B"}
@@ -0,0 +1,57 @@
1
+ export class PluginManager {
2
+ plugins = new Map();
3
+ results = new Map();
4
+ register(manifest) {
5
+ this.plugins.set(manifest.name, manifest);
6
+ }
7
+ get(name) {
8
+ return this.plugins.get(name);
9
+ }
10
+ list() {
11
+ return Array.from(this.plugins.values());
12
+ }
13
+ async execute(name, params) {
14
+ const plugin = this.plugins.get(name);
15
+ if (!plugin)
16
+ throw new Error(`Plugin "${name}" not registered`);
17
+ const start = Date.now();
18
+ try {
19
+ const output = await this.runWithTimeout(plugin, params, 30000);
20
+ const result = {
21
+ plugin: name,
22
+ status: "completed",
23
+ output,
24
+ duration: Date.now() - start,
25
+ };
26
+ this.results.set(`${name}_${Date.now()}`, result);
27
+ return result;
28
+ }
29
+ catch (err) {
30
+ const result = {
31
+ plugin: name,
32
+ status: err instanceof Error && err.message === "timeout" ? "timeout" : "failed",
33
+ output: { error: String(err) },
34
+ duration: Date.now() - start,
35
+ };
36
+ this.results.set(`${name}_${Date.now()}`, result);
37
+ return result;
38
+ }
39
+ }
40
+ async runWithTimeout(plugin, params, ms) {
41
+ const timeout = new Promise((_, reject) => setTimeout(() => reject(new Error("timeout")), ms));
42
+ const execution = this.runPlugin(plugin, params);
43
+ return Promise.race([execution, timeout]);
44
+ }
45
+ async runPlugin(plugin, params) {
46
+ // Plugin execution stub - actual tool execution delegated to opencode tool system
47
+ return {
48
+ plugin: plugin.name,
49
+ params,
50
+ message: `Plugin ${plugin.name} execution delegated to sandbox`,
51
+ };
52
+ }
53
+ getHistory() {
54
+ return Array.from(this.results.values());
55
+ }
56
+ }
57
+ //# sourceMappingURL=plugin-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-manager.js","sourceRoot":"","sources":["../../src/core/plugin-manager.ts"],"names":[],"mappings":"AAgBA,MAAM,OAAO,aAAa;IAChB,OAAO,GAAgC,IAAI,GAAG,EAAE,CAAA;IAChD,OAAO,GAA8B,IAAI,GAAG,EAAE,CAAA;IAEtD,QAAQ,CAAC,QAAwB;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC3C,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,MAA+B;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,kBAAkB,CAAC,CAAA;QAE/D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACxB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;YAC/D,MAAM,MAAM,GAAiB;gBAC3B,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,WAAW;gBACnB,MAAM;gBACN,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC7B,CAAA;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;YACjD,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAiB;gBAC3B,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;gBAChF,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;gBAC9B,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC7B,CAAA;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;YACjD,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,MAAsB,EAAE,MAA+B,EAAE,EAAU;QAC9F,MAAM,OAAO,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACrG,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;IAC3C,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,MAAsB,EAAE,MAA+B;QAC7E,kFAAkF;QAClF,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,MAAM;YACN,OAAO,EAAE,UAAU,MAAM,CAAC,IAAI,iCAAiC;SAChE,CAAA;IACH,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC1C,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ export type ModelRole = "fast" | "balanced" | "precision" | "reasoning" | "writing";
2
+ export interface ProviderRequest {
3
+ messages: {
4
+ role: "system" | "user" | "assistant";
5
+ content: string;
6
+ }[];
7
+ model?: string;
8
+ temperature?: number;
9
+ maxTokens?: number;
10
+ stream?: boolean;
11
+ }
12
+ export interface ProviderResponse {
13
+ content: string;
14
+ model: string;
15
+ provider: string;
16
+ tokens: {
17
+ input: number;
18
+ output: number;
19
+ };
20
+ }
21
+ export interface ProviderConfig {
22
+ name: string;
23
+ apiKey?: string;
24
+ baseUrl?: string;
25
+ models: string[];
26
+ roles: Partial<Record<ModelRole, string>>;
27
+ priority: number;
28
+ }
29
+ export declare class ProviderAbstraction {
30
+ private providers;
31
+ private fallbackChain;
32
+ register(config: ProviderConfig): void;
33
+ complete(role: ModelRole, request: ProviderRequest): Promise<ProviderResponse>;
34
+ stream(role: ModelRole, request: ProviderRequest): AsyncGenerator<string>;
35
+ private resolveProvider;
36
+ private callProvider;
37
+ }
38
+ export declare class NoProviderAvailable extends Error {
39
+ constructor(role: ModelRole);
40
+ }
41
+ //# sourceMappingURL=provider-abstraction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-abstraction.d.ts","sourceRoot":"","sources":["../../src/core/provider-abstraction.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAA;AAEnF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACtE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;IACzC,QAAQ,EAAE,MAAM,CAAA;CACjB;AAUD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,aAAa,CAA8C;IAEnE,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAKhC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQ7E,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC;IAShF,OAAO,CAAC,eAAe;YAsBT,YAAY;CAU3B;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,IAAI,EAAE,SAAS;CAI5B"}
@@ -0,0 +1,68 @@
1
+ const ROLE_MODEL_MAP = {
2
+ fast: ["gpt-4o-mini", "claude-haiku-4-5", "gemini-2.5-flash"],
3
+ balanced: ["gpt-4o", "claude-sonnet-4", "gemini-2.5-pro"],
4
+ precision: ["claude-sonnet-4", "gpt-4o", "deepseek-r1"],
5
+ reasoning: ["o4-mini", "deepseek-r1", "claude-sonnet-4"],
6
+ writing: ["claude-sonnet-4", "gpt-4o", "gemini-2.5-pro"],
7
+ };
8
+ export class ProviderAbstraction {
9
+ providers = [];
10
+ fallbackChain = ["precision", "balanced", "fast"];
11
+ register(config) {
12
+ this.providers.push(config);
13
+ this.providers.sort((a, b) => b.priority - a.priority);
14
+ }
15
+ async complete(role, request) {
16
+ const modelName = request.model || ROLE_MODEL_MAP[role][0];
17
+ const provider = this.resolveProvider(modelName, role);
18
+ if (!provider)
19
+ throw new NoProviderAvailable(role);
20
+ return this.callProvider(provider, modelName, request);
21
+ }
22
+ async *stream(role, request) {
23
+ const modelName = request.model || ROLE_MODEL_MAP[role][0];
24
+ const provider = this.resolveProvider(modelName, role);
25
+ if (!provider)
26
+ throw new NoProviderAvailable(role);
27
+ const response = await this.callProvider(provider, modelName, { ...request, stream: true });
28
+ yield response.content;
29
+ }
30
+ resolveProvider(modelName, role) {
31
+ const exact = this.providers.find((p) => p.models.includes(modelName));
32
+ if (exact)
33
+ return exact;
34
+ const roleModels = ROLE_MODEL_MAP[role];
35
+ for (const model of roleModels) {
36
+ const found = this.providers.find((p) => p.models.includes(model));
37
+ if (found)
38
+ return found;
39
+ }
40
+ const fallbackRoles = this.fallbackChain.slice(this.fallbackChain.indexOf(role) + 1);
41
+ for (const fallbackRole of fallbackRoles) {
42
+ const fallbackModels = ROLE_MODEL_MAP[fallbackRole] || [];
43
+ for (const model of fallbackModels) {
44
+ const found = this.providers.find((p) => p.models.includes(model));
45
+ if (found)
46
+ return found;
47
+ }
48
+ }
49
+ return this.providers[0];
50
+ }
51
+ async callProvider(provider, model, request) {
52
+ // In production, this routes to the actual provider API
53
+ // For now, returns a stub that works with opencode's built-in provider resolution
54
+ return {
55
+ content: "",
56
+ model,
57
+ provider: provider.name,
58
+ tokens: { input: 0, output: 0 },
59
+ };
60
+ }
61
+ }
62
+ export class NoProviderAvailable extends Error {
63
+ constructor(role) {
64
+ super(`No provider available for role: ${role}`);
65
+ this.name = "NoProviderAvailable";
66
+ }
67
+ }
68
+ //# sourceMappingURL=provider-abstraction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-abstraction.js","sourceRoot":"","sources":["../../src/core/provider-abstraction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface ReportSection {
2
+ title: string;
3
+ content: string;
4
+ subsections?: ReportSection[];
5
+ }
6
+ export interface ReportConfig {
7
+ companyName: string;
8
+ author: string;
9
+ includeRemediationTimeline: boolean;
10
+ includeEvidenceSnippets: boolean;
11
+ formats: ("md" | "docx" | "pdf")[];
12
+ }
13
+ export declare class ReportGenerator {
14
+ private config;
15
+ configure(config: Partial<ReportConfig>): void;
16
+ generate(sections: ReportSection[]): Record<string, string>;
17
+ standardSections(params: {
18
+ scope: string;
19
+ findings: unknown[];
20
+ riskMatrix: Record<string, number>;
21
+ evidence: unknown[];
22
+ cves: string[];
23
+ }): ReportSection[];
24
+ private generateMarkdown;
25
+ private executiveSummary;
26
+ private remediationPlan;
27
+ exportDocx(markdown: string): Promise<Uint8Array>;
28
+ exportPdf(markdown: string): Promise<Uint8Array>;
29
+ }
30
+ //# sourceMappingURL=report-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-generator.d.ts","sourceRoot":"","sources":["../../src/core/report-generator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,0BAA0B,EAAE,OAAO,CAAA;IACnC,uBAAuB,EAAE,OAAO,CAAA;IAChC,OAAO,EAAE,CAAC,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC,EAAE,CAAA;CACnC;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAMb;IAED,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAI9C,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAU3D,gBAAgB,CAAC,MAAM,EAAE;QACvB,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,OAAO,EAAE,CAAA;QACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAClC,QAAQ,EAAE,OAAO,EAAE,CAAA;QACnB,IAAI,EAAE,MAAM,EAAE,CAAA;KACf,GAAG,aAAa,EAAE;IAkCnB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,eAAe;IAkBjB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMjD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAKvD"}