@orgloop/core 0.6.1 → 0.7.1

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.
@@ -0,0 +1,100 @@
1
+ /**
2
+ * AuditTrail — tracks every SOP execution with full provenance.
3
+ *
4
+ * Records input events, matched routes, agent sessions, outputs,
5
+ * and content hashes for security observability.
6
+ */
7
+ /** A single output/side-effect produced by an SOP execution. */
8
+ export interface AuditOutput {
9
+ /** What kind of output (e.g., "message.sent", "issue.created", "pr.commented") */
10
+ type: string;
11
+ /** Target system or resource */
12
+ target: string;
13
+ /** SHA-256 hash of the output content */
14
+ content_hash: string;
15
+ /** Timestamp of the output */
16
+ timestamp: string;
17
+ /** Validation flags raised for this output */
18
+ flags: AuditFlag[];
19
+ }
20
+ /** A flag raised during output validation. */
21
+ export interface AuditFlag {
22
+ /** Flag type */
23
+ type: 'instruction_content' | 'input_echo' | 'scope_violation' | 'chain_depth';
24
+ /** Severity */
25
+ severity: 'info' | 'warning' | 'critical';
26
+ /** Human-readable description */
27
+ message: string;
28
+ }
29
+ /** Complete audit record for one SOP execution. */
30
+ export interface AuditRecord {
31
+ /** Unique audit record ID */
32
+ id: string;
33
+ /** ISO 8601 timestamp */
34
+ timestamp: string;
35
+ /** Trace ID linking the full event chain */
36
+ trace_id: string;
37
+ /** Input event ID */
38
+ input_event_id: string;
39
+ /** Input event source */
40
+ input_source: string;
41
+ /** Input event type */
42
+ input_type: string;
43
+ /** SHA-256 hash of the input event payload */
44
+ input_content_hash: string;
45
+ /** Matched route name */
46
+ route: string;
47
+ /** SOP file path (if any) */
48
+ sop_file: string | null;
49
+ /** Module that processed the event */
50
+ module: string;
51
+ /** Actor that handled the event */
52
+ actor: string;
53
+ /** Delivery status */
54
+ delivery_status: 'delivered' | 'rejected' | 'error' | 'held';
55
+ /** Processing duration in ms */
56
+ duration_ms: number;
57
+ /** All outputs/side-effects produced */
58
+ outputs: AuditOutput[];
59
+ /** Depth of this event in its chain (1 = root) */
60
+ chain_depth: number;
61
+ /** Parent event ID (if this event was triggered by another SOP execution) */
62
+ parent_event_id: string | null;
63
+ /** Whether any outputs were held for review */
64
+ held_for_review: boolean;
65
+ /** All flags raised during validation */
66
+ flags: AuditFlag[];
67
+ }
68
+ export interface AuditTrailOptions {
69
+ /** Maximum number of audit records to retain (default: 5000) */
70
+ maxSize?: number;
71
+ }
72
+ /** Generate a unique audit record ID. */
73
+ export declare function generateAuditId(): string;
74
+ /** Compute SHA-256 hash of a JSON-serializable value. */
75
+ export declare function contentHash(value: unknown): string;
76
+ export declare class AuditTrail {
77
+ private readonly buffer;
78
+ private readonly maxSize;
79
+ private head;
80
+ private count;
81
+ constructor(options?: AuditTrailOptions);
82
+ /** Record an audit entry. */
83
+ record(entry: AuditRecord): void;
84
+ /** Get the number of stored records. */
85
+ size(): number;
86
+ /** Query audit records, newest first. */
87
+ query(filter?: {
88
+ trace_id?: string;
89
+ route?: string;
90
+ actor?: string;
91
+ held_only?: boolean;
92
+ flagged_only?: boolean;
93
+ limit?: number;
94
+ }): AuditRecord[];
95
+ /** Get all records for a trace (the full event chain). */
96
+ getChain(traceId: string): AuditRecord[];
97
+ /** Return all records as an array, newest first. */
98
+ private toArray;
99
+ }
100
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
package/dist/audit.js ADDED
@@ -0,0 +1,81 @@
1
+ /**
2
+ * AuditTrail — tracks every SOP execution with full provenance.
3
+ *
4
+ * Records input events, matched routes, agent sessions, outputs,
5
+ * and content hashes for security observability.
6
+ */
7
+ import { createHash } from 'node:crypto';
8
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
9
+ let auditCounter = 0;
10
+ /** Generate a unique audit record ID. */
11
+ export function generateAuditId() {
12
+ return `aud_${Date.now().toString(36)}_${(auditCounter++).toString(36)}`;
13
+ }
14
+ /** Compute SHA-256 hash of a JSON-serializable value. */
15
+ export function contentHash(value) {
16
+ const json = JSON.stringify(value, null, 0);
17
+ return createHash('sha256').update(json).digest('hex');
18
+ }
19
+ // ─── AuditTrail Class ────────────────────────────────────────────────────────
20
+ export class AuditTrail {
21
+ buffer;
22
+ maxSize;
23
+ head = 0;
24
+ count = 0;
25
+ constructor(options) {
26
+ this.maxSize = options?.maxSize ?? 5000;
27
+ this.buffer = new Array(this.maxSize);
28
+ }
29
+ /** Record an audit entry. */
30
+ record(entry) {
31
+ this.buffer[this.head] = entry;
32
+ this.head = (this.head + 1) % this.maxSize;
33
+ if (this.count < this.maxSize) {
34
+ this.count++;
35
+ }
36
+ }
37
+ /** Get the number of stored records. */
38
+ size() {
39
+ return this.count;
40
+ }
41
+ /** Query audit records, newest first. */
42
+ query(filter) {
43
+ let records = this.toArray();
44
+ if (filter?.trace_id) {
45
+ records = records.filter((r) => r.trace_id === filter.trace_id);
46
+ }
47
+ if (filter?.route) {
48
+ records = records.filter((r) => r.route === filter.route);
49
+ }
50
+ if (filter?.actor) {
51
+ records = records.filter((r) => r.actor === filter.actor);
52
+ }
53
+ if (filter?.held_only) {
54
+ records = records.filter((r) => r.held_for_review);
55
+ }
56
+ if (filter?.flagged_only) {
57
+ records = records.filter((r) => r.flags.length > 0);
58
+ }
59
+ if (filter?.limit && filter.limit > 0) {
60
+ records = records.slice(0, filter.limit);
61
+ }
62
+ return records;
63
+ }
64
+ /** Get all records for a trace (the full event chain). */
65
+ getChain(traceId) {
66
+ return this.toArray().filter((r) => r.trace_id === traceId);
67
+ }
68
+ /** Return all records as an array, newest first. */
69
+ toArray() {
70
+ if (this.count === 0)
71
+ return [];
72
+ const result = [];
73
+ const start = (this.head - this.count + this.maxSize) % this.maxSize;
74
+ for (let i = this.count - 1; i >= 0; i--) {
75
+ const idx = (start + i) % this.maxSize;
76
+ result.push(this.buffer[idx]);
77
+ }
78
+ return result;
79
+ }
80
+ }
81
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,6 +3,8 @@
3
3
  *
4
4
  * Public API exports for library mode.
5
5
  */
6
+ export type { AuditFlag, AuditOutput, AuditRecord, AuditTrailOptions } from './audit.js';
7
+ export { AuditTrail, contentHash, generateAuditId } from './audit.js';
6
8
  export type { BusHandler, EventBus } from './bus.js';
7
9
  export { FileWalBus, InMemoryBus } from './bus.js';
8
10
  export type { EngineStatus, OrgLoopOptions, SourceCircuitBreakerOptions } from './engine.js';
@@ -13,10 +15,14 @@ export { EventHistory } from './event-history.js';
13
15
  export type { ApiHandler, RuntimeControl } from './http.js';
14
16
  export { DEFAULT_HTTP_PORT, WebhookServer } from './http.js';
15
17
  export { LoggerManager } from './logger.js';
18
+ export type { ChainNode, LoopCheckResult, LoopDetectorOptions } from './loop-detector.js';
19
+ export { LoopDetector } from './loop-detector.js';
16
20
  export type { MetricsServerOptions } from './metrics.js';
17
21
  export { MetricsServer } from './metrics.js';
18
22
  export type { ModuleConfig, ModuleContext } from './module-instance.js';
19
23
  export { ModuleInstance } from './module-instance.js';
24
+ export type { OutputValidationResult, OutputValidatorOptions } from './output-validator.js';
25
+ export { OutputValidator } from './output-validator.js';
20
26
  export type { StripFrontMatterResult } from './prompt.js';
21
27
  export { stripFrontMatter } from './prompt.js';
22
28
  export { ModuleRegistry } from './registry.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE7F,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,OAAO,EACN,WAAW,EACX,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE9F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAElF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAExE,OAAO,EACN,mBAAmB,EACnB,cAAc,EACd,uBAAuB,EACvB,kBAAkB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAExF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEzF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE7F,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,OAAO,EACN,WAAW,EACX,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE9F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE1F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE5F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAElF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAExE,OAAO,EACN,mBAAmB,EACnB,cAAc,EACd,uBAAuB,EACvB,kBAAkB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAExF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -3,6 +3,8 @@
3
3
  *
4
4
  * Public API exports for library mode.
5
5
  */
6
+ // Audit trail
7
+ export { AuditTrail, contentHash, generateAuditId } from './audit.js';
6
8
  // Event bus
7
9
  export { FileWalBus, InMemoryBus } from './bus.js';
8
10
  // Main engine
@@ -15,10 +17,14 @@ export { EventHistory } from './event-history.js';
15
17
  export { DEFAULT_HTTP_PORT, WebhookServer } from './http.js';
16
18
  // Logger manager
17
19
  export { LoggerManager } from './logger.js';
20
+ // Loop detector
21
+ export { LoopDetector } from './loop-detector.js';
18
22
  // Prometheus metrics
19
23
  export { MetricsServer } from './metrics.js';
20
24
  // Module system
21
25
  export { ModuleInstance } from './module-instance.js';
26
+ // Output validator
27
+ export { OutputValidator } from './output-validator.js';
22
28
  // Prompt utilities
23
29
  export { stripFrontMatter } from './prompt.js';
24
30
  export { ModuleRegistry } from './registry.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY;AACZ,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEnD,cAAc;AACd,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,SAAS;AACT,OAAO,EACN,WAAW,EACX,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,GACd,MAAM,aAAa,CAAC;AAErB,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,sBAAsB;AACtB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC7D,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,qBAAqB;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,gBAAgB;AAChB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,mBAAmB;AACnB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,SAAS;AACT,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,6BAA6B;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY;AACZ,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtD,SAAS;AACT,OAAO,EACN,mBAAmB,EACnB,cAAc,EACd,uBAAuB,EACvB,kBAAkB,GAClB,MAAM,YAAY,CAAC;AAEpB,aAAa;AACb,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,qBAAqB;AACrB,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEtE,YAAY;AACZ,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEnD,cAAc;AACd,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,SAAS;AACT,OAAO,EACN,WAAW,EACX,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,GACd,MAAM,aAAa,CAAC;AAErB,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,sBAAsB;AACtB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC7D,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qBAAqB;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,gBAAgB;AAChB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,mBAAmB;AACnB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,SAAS;AACT,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,6BAA6B;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY;AACZ,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtD,SAAS;AACT,OAAO,EACN,mBAAmB,EACnB,cAAc,EACd,uBAAuB,EACvB,kBAAkB,GAClB,MAAM,YAAY,CAAC;AAEpB,aAAa;AACb,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,qBAAqB;AACrB,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * LoopDetector — event chain tracking and circuit breaker.
3
+ *
4
+ * Tracks event chains: if Event A → SOP → Output B → Event C → SOP → Output D,
5
+ * flags chain length and triggers circuit breaker when loops are detected.
6
+ *
7
+ * Defense against the Viral Agent Loop (arXiv:2602.19555).
8
+ */
9
+ import type { AuditFlag } from './audit.js';
10
+ /** A node in the event chain. */
11
+ export interface ChainNode {
12
+ /** Event ID */
13
+ event_id: string;
14
+ /** Source that emitted this event */
15
+ source: string;
16
+ /** Event type */
17
+ type: string;
18
+ /** Route that matched (if any) */
19
+ route: string | null;
20
+ /** Actor that handled (if any) */
21
+ actor: string | null;
22
+ /** Depth in the chain (1 = root event) */
23
+ depth: number;
24
+ /** ISO 8601 timestamp */
25
+ timestamp: string;
26
+ }
27
+ /** Result of a loop detection check. */
28
+ export interface LoopCheckResult {
29
+ /** Whether a loop was detected */
30
+ loop_detected: boolean;
31
+ /** Whether the circuit breaker tripped */
32
+ circuit_broken: boolean;
33
+ /** Current chain depth */
34
+ chain_depth: number;
35
+ /** The full chain for this trace */
36
+ chain: ChainNode[];
37
+ /** Flags raised */
38
+ flags: AuditFlag[];
39
+ }
40
+ export interface LoopDetectorOptions {
41
+ /** Maximum chain depth before alerting (default: 3) */
42
+ maxChainDepth?: number;
43
+ /** Maximum chain depth before circuit breaking (default: 5) */
44
+ circuitBreakerDepth?: number;
45
+ /** Time window in ms for chain tracking (default: 300000 = 5 minutes) */
46
+ windowMs?: number;
47
+ /** Maximum number of traces to track simultaneously (default: 10000) */
48
+ maxTraces?: number;
49
+ }
50
+ export declare class LoopDetector {
51
+ private readonly chains;
52
+ private readonly maxChainDepth;
53
+ private readonly circuitBreakerDepth;
54
+ private readonly windowMs;
55
+ private readonly maxTraces;
56
+ /** Traces that have been circuit-broken (trace_id → timestamp). */
57
+ private readonly brokenCircuits;
58
+ constructor(options?: LoopDetectorOptions);
59
+ /**
60
+ * Record an event in its chain and check for loops.
61
+ *
62
+ * Call this before processing each event. If the result has
63
+ * circuit_broken=true, the event should NOT be processed.
64
+ */
65
+ check(traceId: string, eventId: string, source: string, type: string, route: string | null, actor: string | null): LoopCheckResult;
66
+ /** Get the current chain depth for a trace. */
67
+ getChainDepth(traceId: string): number;
68
+ /** Get the full chain for a trace. */
69
+ getChain(traceId: string): ChainNode[];
70
+ /** Check if a trace has been circuit-broken. */
71
+ isCircuitBroken(traceId: string): boolean;
72
+ /** Reset a circuit breaker for a trace (manual override). */
73
+ resetCircuit(traceId: string): void;
74
+ /** Number of active traces being tracked. */
75
+ activeTraces(): number;
76
+ /** Number of broken circuits. */
77
+ brokenCircuitCount(): number;
78
+ /** Clean up expired traces and evict oldest if over limit. */
79
+ private cleanup;
80
+ }
81
+ //# sourceMappingURL=loop-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-detector.d.ts","sourceRoot":"","sources":["../src/loop-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,iCAAiC;AACjC,MAAM,WAAW,SAAS;IACzB,eAAe;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,kCAAkC;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,wCAAwC;AACxC,MAAM,WAAW,eAAe;IAC/B,kCAAkC;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,0CAA0C;IAC1C,cAAc,EAAE,OAAO,CAAC;IACxB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,mBAAmB;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IACnC,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,qBAAa,YAAY;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;gBAEhD,OAAO,CAAC,EAAE,mBAAmB;IAOzC;;;;;OAKG;IACH,KAAK,CACJ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,KAAK,EAAE,MAAM,GAAG,IAAI,GAClB,eAAe;IAgFlB,+CAA+C;IAC/C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAItC,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE;IAItC,gDAAgD;IAChD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzC,6DAA6D;IAC7D,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAInC,6CAA6C;IAC7C,YAAY,IAAI,MAAM;IAItB,iCAAiC;IACjC,kBAAkB,IAAI,MAAM;IAI5B,8DAA8D;IAC9D,OAAO,CAAC,OAAO;CAqCf"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * LoopDetector — event chain tracking and circuit breaker.
3
+ *
4
+ * Tracks event chains: if Event A → SOP → Output B → Event C → SOP → Output D,
5
+ * flags chain length and triggers circuit breaker when loops are detected.
6
+ *
7
+ * Defense against the Viral Agent Loop (arXiv:2602.19555).
8
+ */
9
+ // ─── LoopDetector Class ──────────────────────────────────────────────────────
10
+ export class LoopDetector {
11
+ chains = new Map();
12
+ maxChainDepth;
13
+ circuitBreakerDepth;
14
+ windowMs;
15
+ maxTraces;
16
+ /** Traces that have been circuit-broken (trace_id → timestamp). */
17
+ brokenCircuits = new Map();
18
+ constructor(options) {
19
+ this.maxChainDepth = options?.maxChainDepth ?? 3;
20
+ this.circuitBreakerDepth = options?.circuitBreakerDepth ?? 5;
21
+ this.windowMs = options?.windowMs ?? 300_000;
22
+ this.maxTraces = options?.maxTraces ?? 10_000;
23
+ }
24
+ /**
25
+ * Record an event in its chain and check for loops.
26
+ *
27
+ * Call this before processing each event. If the result has
28
+ * circuit_broken=true, the event should NOT be processed.
29
+ */
30
+ check(traceId, eventId, source, type, route, actor) {
31
+ this.cleanup();
32
+ // Check if this trace is already circuit-broken
33
+ if (this.brokenCircuits.has(traceId)) {
34
+ return {
35
+ loop_detected: true,
36
+ circuit_broken: true,
37
+ chain_depth: this.getChainDepth(traceId) + 1,
38
+ chain: this.chains.get(traceId) ?? [],
39
+ flags: [
40
+ {
41
+ type: 'chain_depth',
42
+ severity: 'critical',
43
+ message: `Circuit broken for trace ${traceId} — event chain exceeded maximum depth`,
44
+ },
45
+ ],
46
+ };
47
+ }
48
+ // Get or create chain
49
+ let chain = this.chains.get(traceId);
50
+ if (!chain) {
51
+ chain = [];
52
+ this.chains.set(traceId, chain);
53
+ }
54
+ const depth = chain.length + 1;
55
+ // Add node
56
+ const node = {
57
+ event_id: eventId,
58
+ source,
59
+ type,
60
+ route,
61
+ actor,
62
+ depth,
63
+ timestamp: new Date().toISOString(),
64
+ };
65
+ chain.push(node);
66
+ // Check for pattern loops (same source+type appearing multiple times)
67
+ const patternKey = `${source}:${type}`;
68
+ const patternCount = chain.filter((n) => `${n.source}:${n.type}` === patternKey).length;
69
+ const patternLoop = patternCount >= 2;
70
+ // Build flags
71
+ const flags = [];
72
+ if (depth > this.maxChainDepth) {
73
+ flags.push({
74
+ type: 'chain_depth',
75
+ severity: depth >= this.circuitBreakerDepth ? 'critical' : 'warning',
76
+ message: `Event chain depth ${depth} exceeds threshold ${this.maxChainDepth} (trace: ${traceId})`,
77
+ });
78
+ }
79
+ if (patternLoop) {
80
+ flags.push({
81
+ type: 'chain_depth',
82
+ severity: 'warning',
83
+ message: `Repeated event pattern "${patternKey}" detected ${patternCount} times in chain (trace: ${traceId})`,
84
+ });
85
+ }
86
+ // Circuit breaker
87
+ const shouldBreak = depth >= this.circuitBreakerDepth;
88
+ if (shouldBreak) {
89
+ this.brokenCircuits.set(traceId, Date.now());
90
+ }
91
+ return {
92
+ loop_detected: patternLoop || depth > this.maxChainDepth,
93
+ circuit_broken: shouldBreak,
94
+ chain_depth: depth,
95
+ chain: [...chain],
96
+ flags,
97
+ };
98
+ }
99
+ /** Get the current chain depth for a trace. */
100
+ getChainDepth(traceId) {
101
+ return this.chains.get(traceId)?.length ?? 0;
102
+ }
103
+ /** Get the full chain for a trace. */
104
+ getChain(traceId) {
105
+ return [...(this.chains.get(traceId) ?? [])];
106
+ }
107
+ /** Check if a trace has been circuit-broken. */
108
+ isCircuitBroken(traceId) {
109
+ return this.brokenCircuits.has(traceId);
110
+ }
111
+ /** Reset a circuit breaker for a trace (manual override). */
112
+ resetCircuit(traceId) {
113
+ this.brokenCircuits.delete(traceId);
114
+ }
115
+ /** Number of active traces being tracked. */
116
+ activeTraces() {
117
+ return this.chains.size;
118
+ }
119
+ /** Number of broken circuits. */
120
+ brokenCircuitCount() {
121
+ return this.brokenCircuits.size;
122
+ }
123
+ /** Clean up expired traces and evict oldest if over limit. */
124
+ cleanup() {
125
+ const now = Date.now();
126
+ const cutoff = now - this.windowMs;
127
+ // Remove expired chains
128
+ for (const [traceId, chain] of this.chains) {
129
+ if (chain.length === 0) {
130
+ this.chains.delete(traceId);
131
+ continue;
132
+ }
133
+ const lastTimestamp = new Date(chain[chain.length - 1].timestamp).getTime();
134
+ if (lastTimestamp < cutoff) {
135
+ this.chains.delete(traceId);
136
+ }
137
+ }
138
+ // Remove expired broken circuits
139
+ for (const [traceId, timestamp] of this.brokenCircuits) {
140
+ if (timestamp < cutoff) {
141
+ this.brokenCircuits.delete(traceId);
142
+ }
143
+ }
144
+ // Evict oldest traces if over limit
145
+ if (this.chains.size > this.maxTraces) {
146
+ const entries = [...this.chains.entries()].sort((a, b) => {
147
+ const aTime = a[1].length > 0 ? new Date(a[1][a[1].length - 1].timestamp).getTime() : 0;
148
+ const bTime = b[1].length > 0 ? new Date(b[1][b[1].length - 1].timestamp).getTime() : 0;
149
+ return aTime - bTime;
150
+ });
151
+ const toRemove = entries.slice(0, entries.length - this.maxTraces);
152
+ for (const [traceId] of toRemove) {
153
+ this.chains.delete(traceId);
154
+ }
155
+ }
156
+ }
157
+ }
158
+ //# sourceMappingURL=loop-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-detector.js","sourceRoot":"","sources":["../src/loop-detector.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,10 @@ export interface ModuleConfig {
24
24
  /** Defaults */
25
25
  defaults?: {
26
26
  poll_interval?: string;
27
+ checkpoint?: {
28
+ store?: 'file' | 'memory';
29
+ dir?: string;
30
+ };
27
31
  };
28
32
  /** Filesystem path to the module */
29
33
  modulePath?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"module-instance.d.ts","sourceRoot":"","sources":["../src/module-instance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module-instance.d.ts","sourceRoot":"","sources":["../src/module-instance.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"module-instance.js","sourceRoot":"","sources":["../src/module-instance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module-instance.js","sourceRoot":"","sources":["../src/module-instance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * OutputValidator — pre-delivery validation of SOP outputs.
3
+ *
4
+ * Checks for potential payload propagation (viral agent loop defense):
5
+ * - Instruction-like content in outputs (potential injection)
6
+ * - Content similarity to input (echo/amplification)
7
+ * - References to tools, URLs, or actions outside expected SOP scope
8
+ */
9
+ import type { OrgLoopEvent } from '@orgloop/sdk';
10
+ import type { AuditFlag } from './audit.js';
11
+ export interface OutputValidationResult {
12
+ /** Whether the output passed validation */
13
+ passed: boolean;
14
+ /** Whether the output should be held for human review */
15
+ hold_for_review: boolean;
16
+ /** Flags raised during validation */
17
+ flags: AuditFlag[];
18
+ }
19
+ export interface OutputValidatorOptions {
20
+ /** Enable instruction content detection (default: true) */
21
+ detectInstructions?: boolean;
22
+ /** Enable input echo detection (default: true) */
23
+ detectEcho?: boolean;
24
+ /** Enable scope violation detection (default: true) */
25
+ detectScopeViolations?: boolean;
26
+ /** Similarity threshold for echo detection (0-1, default: 0.7) */
27
+ echoThreshold?: number;
28
+ /** Hold outputs with critical flags for human review (default: false) */
29
+ holdOnCritical?: boolean;
30
+ /** Custom instruction patterns to detect */
31
+ instructionPatterns?: RegExp[];
32
+ /** Allowed URL domains for scope checking */
33
+ allowedDomains?: string[];
34
+ }
35
+ export declare class OutputValidator {
36
+ private readonly options;
37
+ constructor(options?: OutputValidatorOptions);
38
+ /**
39
+ * Validate an output payload before it's committed to an external system.
40
+ */
41
+ validate(outputContent: string, inputEvent: OrgLoopEvent, sopScope?: {
42
+ allowedActions?: string[];
43
+ allowedDomains?: string[];
44
+ }): OutputValidationResult;
45
+ /** Check for instruction-like content that could be prompt injection. */
46
+ private checkInstructionContent;
47
+ /** Check if the output is suspiciously similar to the input (echo/amplification). */
48
+ private checkInputEcho;
49
+ /** Check for references to tools, URLs, or actions outside SOP's expected scope. */
50
+ private checkScopeViolations;
51
+ /**
52
+ * Compute bigram-based Jaccard similarity between two strings.
53
+ * Returns 0-1 where 1 is identical.
54
+ */
55
+ private computeSimilarity;
56
+ /** Extract character bigrams from a string. */
57
+ private toBigrams;
58
+ }
59
+ //# sourceMappingURL=output-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-validator.d.ts","sourceRoot":"","sources":["../src/output-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,MAAM,WAAW,sBAAsB;IACtC,2CAA2C;IAC3C,MAAM,EAAE,OAAO,CAAC;IAChB,yDAAyD;IACzD,eAAe,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,KAAK,EAAE,SAAS,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACtC,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kDAAkD;IAClD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAwBD,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAKtB;gBAEU,OAAO,CAAC,EAAE,sBAAsB;IAe5C;;OAEG;IACH,QAAQ,CACP,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,YAAY,EACxB,QAAQ,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACjE,sBAAsB;IAyBzB,yEAAyE;IACzE,OAAO,CAAC,uBAAuB;IAiB/B,qFAAqF;IACrF,OAAO,CAAC,cAAc;IAoBtB,oFAAoF;IACpF,OAAO,CAAC,oBAAoB;IA4D5B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAsBzB,+CAA+C;IAC/C,OAAO,CAAC,SAAS;CAQjB"}