@framers/agentos 0.1.56 → 0.1.58

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 (82) hide show
  1. package/README.md +67 -16
  2. package/dist/api/types/AgentOSResponse.d.ts +7 -0
  3. package/dist/api/types/AgentOSResponse.d.ts.map +1 -1
  4. package/dist/core/guardrails/IGuardrailService.d.ts +39 -0
  5. package/dist/core/guardrails/IGuardrailService.d.ts.map +1 -1
  6. package/dist/core/guardrails/ParallelGuardrailDispatcher.d.ts +92 -0
  7. package/dist/core/guardrails/ParallelGuardrailDispatcher.d.ts.map +1 -0
  8. package/dist/core/guardrails/ParallelGuardrailDispatcher.js +463 -0
  9. package/dist/core/guardrails/ParallelGuardrailDispatcher.js.map +1 -0
  10. package/dist/core/guardrails/guardrailDispatcher.d.ts +59 -1
  11. package/dist/core/guardrails/guardrailDispatcher.d.ts.map +1 -1
  12. package/dist/core/guardrails/guardrailDispatcher.js +49 -154
  13. package/dist/core/guardrails/guardrailDispatcher.js.map +1 -1
  14. package/dist/core/guardrails/index.d.ts +1 -0
  15. package/dist/core/guardrails/index.d.ts.map +1 -1
  16. package/dist/core/guardrails/index.js +2 -0
  17. package/dist/core/guardrails/index.js.map +1 -1
  18. package/dist/core/utils/index.d.ts +13 -0
  19. package/dist/core/utils/index.d.ts.map +1 -0
  20. package/dist/core/utils/index.js +13 -0
  21. package/dist/core/utils/index.js.map +1 -0
  22. package/dist/core/utils/text-utils.d.ts +164 -0
  23. package/dist/core/utils/text-utils.d.ts.map +1 -0
  24. package/dist/core/utils/text-utils.js +254 -0
  25. package/dist/core/utils/text-utils.js.map +1 -0
  26. package/dist/extensions/index.d.ts +0 -1
  27. package/dist/extensions/index.d.ts.map +1 -1
  28. package/dist/extensions/index.js +0 -2
  29. package/dist/extensions/index.js.map +1 -1
  30. package/package.json +1 -6
  31. package/dist/extensions/packs/pii-redaction/EntityMerger.d.ts +0 -127
  32. package/dist/extensions/packs/pii-redaction/EntityMerger.d.ts.map +0 -1
  33. package/dist/extensions/packs/pii-redaction/EntityMerger.js +0 -263
  34. package/dist/extensions/packs/pii-redaction/EntityMerger.js.map +0 -1
  35. package/dist/extensions/packs/pii-redaction/PiiDetectionPipeline.d.ts +0 -199
  36. package/dist/extensions/packs/pii-redaction/PiiDetectionPipeline.d.ts.map +0 -1
  37. package/dist/extensions/packs/pii-redaction/PiiDetectionPipeline.js +0 -456
  38. package/dist/extensions/packs/pii-redaction/PiiDetectionPipeline.js.map +0 -1
  39. package/dist/extensions/packs/pii-redaction/PiiRedactionGuardrail.d.ts +0 -121
  40. package/dist/extensions/packs/pii-redaction/PiiRedactionGuardrail.d.ts.map +0 -1
  41. package/dist/extensions/packs/pii-redaction/PiiRedactionGuardrail.js +0 -271
  42. package/dist/extensions/packs/pii-redaction/PiiRedactionGuardrail.js.map +0 -1
  43. package/dist/extensions/packs/pii-redaction/RedactionEngine.d.ts +0 -61
  44. package/dist/extensions/packs/pii-redaction/RedactionEngine.d.ts.map +0 -1
  45. package/dist/extensions/packs/pii-redaction/RedactionEngine.js +0 -207
  46. package/dist/extensions/packs/pii-redaction/RedactionEngine.js.map +0 -1
  47. package/dist/extensions/packs/pii-redaction/index.d.ts +0 -90
  48. package/dist/extensions/packs/pii-redaction/index.d.ts.map +0 -1
  49. package/dist/extensions/packs/pii-redaction/index.js +0 -195
  50. package/dist/extensions/packs/pii-redaction/index.js.map +0 -1
  51. package/dist/extensions/packs/pii-redaction/recognizers/IEntityRecognizer.d.ts +0 -151
  52. package/dist/extensions/packs/pii-redaction/recognizers/IEntityRecognizer.d.ts.map +0 -1
  53. package/dist/extensions/packs/pii-redaction/recognizers/IEntityRecognizer.js +0 -14
  54. package/dist/extensions/packs/pii-redaction/recognizers/IEntityRecognizer.js.map +0 -1
  55. package/dist/extensions/packs/pii-redaction/recognizers/LlmJudgeRecognizer.d.ts +0 -177
  56. package/dist/extensions/packs/pii-redaction/recognizers/LlmJudgeRecognizer.d.ts.map +0 -1
  57. package/dist/extensions/packs/pii-redaction/recognizers/LlmJudgeRecognizer.js +0 -420
  58. package/dist/extensions/packs/pii-redaction/recognizers/LlmJudgeRecognizer.js.map +0 -1
  59. package/dist/extensions/packs/pii-redaction/recognizers/NerModelRecognizer.d.ts +0 -145
  60. package/dist/extensions/packs/pii-redaction/recognizers/NerModelRecognizer.d.ts.map +0 -1
  61. package/dist/extensions/packs/pii-redaction/recognizers/NerModelRecognizer.js +0 -299
  62. package/dist/extensions/packs/pii-redaction/recognizers/NerModelRecognizer.js.map +0 -1
  63. package/dist/extensions/packs/pii-redaction/recognizers/NlpPrefilterRecognizer.d.ts +0 -102
  64. package/dist/extensions/packs/pii-redaction/recognizers/NlpPrefilterRecognizer.d.ts.map +0 -1
  65. package/dist/extensions/packs/pii-redaction/recognizers/NlpPrefilterRecognizer.js +0 -228
  66. package/dist/extensions/packs/pii-redaction/recognizers/NlpPrefilterRecognizer.js.map +0 -1
  67. package/dist/extensions/packs/pii-redaction/recognizers/RegexRecognizer.d.ts +0 -103
  68. package/dist/extensions/packs/pii-redaction/recognizers/RegexRecognizer.d.ts.map +0 -1
  69. package/dist/extensions/packs/pii-redaction/recognizers/RegexRecognizer.js +0 -275
  70. package/dist/extensions/packs/pii-redaction/recognizers/RegexRecognizer.js.map +0 -1
  71. package/dist/extensions/packs/pii-redaction/tools/PiiRedactTool.d.ts +0 -118
  72. package/dist/extensions/packs/pii-redaction/tools/PiiRedactTool.d.ts.map +0 -1
  73. package/dist/extensions/packs/pii-redaction/tools/PiiRedactTool.js +0 -152
  74. package/dist/extensions/packs/pii-redaction/tools/PiiRedactTool.js.map +0 -1
  75. package/dist/extensions/packs/pii-redaction/tools/PiiScanTool.d.ts +0 -98
  76. package/dist/extensions/packs/pii-redaction/tools/PiiScanTool.d.ts.map +0 -1
  77. package/dist/extensions/packs/pii-redaction/tools/PiiScanTool.js +0 -153
  78. package/dist/extensions/packs/pii-redaction/tools/PiiScanTool.js.map +0 -1
  79. package/dist/extensions/packs/pii-redaction/types.d.ts +0 -332
  80. package/dist/extensions/packs/pii-redaction/types.d.ts.map +0 -1
  81. package/dist/extensions/packs/pii-redaction/types.js +0 -83
  82. package/dist/extensions/packs/pii-redaction/types.js.map +0 -1
package/README.md CHANGED
@@ -548,6 +548,22 @@ type ExtensionPackResolver =
548
548
  3. `ExtensionManager` provides runtime access: `getTools()`, `getGuardrails()`, `getWorkflows()`, etc.
549
549
  4. `MultiRegistryLoader` supports loading from multiple remote registries
550
550
 
551
+ **Lifecycle context and shared services:**
552
+
553
+ - `ExtensionLifecycleContext.getSecret(secretId)` gives packs host-resolved secrets at activation time
554
+ - `ExtensionLifecycleContext.services` provides a shared `ISharedServiceRegistry` for lazy singleton reuse across packs
555
+ - heavyweight dependencies such as NLP pipelines, ONNX models, embedding functions, and NLI models should be loaded through the shared registry rather than per-descriptor globals
556
+
557
+ **Built-in guardrail packs exported by `@framers/agentos`:**
558
+
559
+ | Pack | Import Path | Guardrail ID | Tool IDs | Purpose |
560
+ |------|-------------|--------------|----------|---------|
561
+ | PII Redaction | `@framers/agentos-ext-pii-redaction` | `pii-redaction-guardrail` | `pii_scan`, `pii_redact` | Four-tier PII detection and redaction |
562
+ | ML Classifiers | `@framers/agentos-ext-ml-classifiers` | `ml-classifier-guardrail` | `classify_content` | Toxicity, prompt-injection, and jailbreak detection |
563
+ | Topicality | `@framers/agentos-ext-topicality` | `topicality-guardrail` | `check_topic` | On-topic enforcement and session drift detection |
564
+ | Code Safety | `@framers/agentos-ext-code-safety` | `code-safety-guardrail` | `scan_code` | Regex-based code risk scanning across fenced code and tool args |
565
+ | Grounding Guard | `@framers/agentos-ext-grounding-guard` | `grounding-guardrail` | `check_grounding` | RAG-source claim verification and hallucination detection |
566
+
551
567
  ---
552
568
 
553
569
  ### Planning Engine
@@ -692,24 +708,32 @@ See [`docs/SAFETY_PRIMITIVES.md`](docs/SAFETY_PRIMITIVES.md) for the full safety
692
708
  Content-level input/output filtering:
693
709
 
694
710
  ```typescript
695
- enum GuardrailAction {
696
- ALLOW = 'allow', // Pass through unchanged
697
- FLAG = 'flag', // Pass through but log for review
698
- SANITIZE = 'sanitize', // Replace with modified content (e.g., PII redaction)
699
- BLOCK = 'block', // Reject entirely, terminate stream
700
- }
701
-
702
711
  interface IGuardrailService {
703
- evaluateInput?(input: AgentOSInput, context: GuardrailContext): Promise<GuardrailEvaluationResult>;
704
- evaluateOutput?(output: string, context: GuardrailContext): Promise<GuardrailEvaluationResult>;
712
+ config?: {
713
+ evaluateStreamingChunks?: boolean;
714
+ maxStreamingEvaluations?: number;
715
+ canSanitize?: boolean;
716
+ timeoutMs?: number;
717
+ };
718
+
719
+ evaluateInput?(payload: GuardrailInputPayload): Promise<GuardrailEvaluationResult | null>;
720
+ evaluateOutput?(payload: GuardrailOutputPayload): Promise<GuardrailEvaluationResult | null>;
705
721
  }
706
722
  ```
707
723
 
724
+ `GuardrailOutputPayload` also carries `ragSources?: RagRetrievedChunk[]`, which enables grounding-aware output checks against retrieved context.
725
+
708
726
  Guardrails run at two points in the request lifecycle:
709
- 1. **Pre-processing** -- `evaluateInput()` inspects user input before it reaches the LLM
710
- 2. **Post-processing** -- `evaluateOutput()` inspects the LLM response before streaming to the client
727
+ 1. **Pre-processing** -- `evaluateInput()` inspects user input before orchestration
728
+ 2. **Post-processing** -- `evaluateOutput()` inspects streaming chunks and/or the final response before emission
711
729
 
712
- Multiple guardrails can be composed via the extension system, and each receives full context (user ID, session ID, persona ID, custom metadata) for context-aware policy decisions.
730
+ When multiple guardrails are registered, AgentOS uses a **two-phase dispatcher**:
731
+ 1. **Phase 1 (sequential sanitizers)** -- guardrails with `config.canSanitize === true` run in registration order so each sanitizer sees the cumulative sanitized text
732
+ 2. **Phase 2 (parallel classifiers)** -- all remaining guardrails run concurrently with worst-action aggregation (`BLOCK > FLAG > ALLOW`)
733
+
734
+ `ParallelGuardrailDispatcher` powers both input evaluation and output stream wrapping, with per-guardrail `timeoutMs` fail-open behavior for slow or degraded classifiers.
735
+
736
+ Multiple guardrails can be composed via the extension system, and each receives full context (user ID, session ID, persona ID, conversation ID, metadata) for context-aware policy decisions.
713
737
 
714
738
  See [`docs/GUARDRAILS_USAGE.md`](docs/GUARDRAILS_USAGE.md) for implementation patterns.
715
739
 
@@ -1435,13 +1459,19 @@ await agent.initialize({
1435
1459
  import {
1436
1460
  AgentOS,
1437
1461
  type IGuardrailService,
1438
- type GuardrailContext,
1439
1462
  GuardrailAction,
1463
+ type GuardrailInputPayload,
1464
+ type GuardrailOutputPayload,
1440
1465
  } from '@framers/agentos';
1441
1466
  import { createTestAgentOSConfig } from '@framers/agentos/config/AgentOSConfig';
1442
1467
 
1443
1468
  const piiGuardrail: IGuardrailService = {
1444
- async evaluateInput(input, context) {
1469
+ config: {
1470
+ evaluateStreamingChunks: true,
1471
+ canSanitize: true,
1472
+ },
1473
+
1474
+ async evaluateInput({ input }: GuardrailInputPayload) {
1445
1475
  // Check for SSN patterns in user input
1446
1476
  const ssnPattern = /\b\d{3}-\d{2}-\d{4}\b/g;
1447
1477
  if (input.textInput && ssnPattern.test(input.textInput)) {
@@ -1455,8 +1485,15 @@ const piiGuardrail: IGuardrailService = {
1455
1485
  return { action: GuardrailAction.ALLOW };
1456
1486
  },
1457
1487
 
1458
- async evaluateOutput(output, context) {
1459
- if (output.toLowerCase().includes('password')) {
1488
+ async evaluateOutput({ chunk }: GuardrailOutputPayload) {
1489
+ const text =
1490
+ chunk.type === 'TEXT_DELTA'
1491
+ ? chunk.textDelta ?? ''
1492
+ : chunk.type === 'FINAL_RESPONSE'
1493
+ ? chunk.finalResponseText ?? ''
1494
+ : '';
1495
+
1496
+ if (text.toLowerCase().includes('password')) {
1460
1497
  return {
1461
1498
  action: GuardrailAction.BLOCK,
1462
1499
  reason: 'Output contains potentially sensitive credential information',
@@ -1472,6 +1509,11 @@ const config = await createTestAgentOSConfig();
1472
1509
  await agent.initialize({ ...config, guardrailService: piiGuardrail });
1473
1510
  ```
1474
1511
 
1512
+ > **For production PII redaction**, use the built-in `createPiiRedactionPack()` extension
1513
+ > instead of hand-rolled regex. It provides four-tier detection (regex + NLP + BERT NER +
1514
+ > LLM-as-judge), streaming support, and configurable redaction styles. See
1515
+ > [GUARDRAILS_USAGE.md](docs/GUARDRAILS_USAGE.md) for full examples.
1516
+
1475
1517
  ### Channel Adapters
1476
1518
 
1477
1519
  ```typescript
@@ -1557,6 +1599,7 @@ import { CircuitBreaker, CostGuard, StuckDetector } from '@framers/agentos/core/
1557
1599
 
1558
1600
  // Guardrails
1559
1601
  import { GuardrailAction } from '@framers/agentos/core/guardrails';
1602
+ import { ParallelGuardrailDispatcher } from '@framers/agentos/core/guardrails';
1560
1603
 
1561
1604
  // Tools
1562
1605
  import type { ITool, ToolExecutionResult } from '@framers/agentos/core/tools';
@@ -1571,6 +1614,14 @@ import { GraphRAGEngine } from '@framers/agentos/rag/graphrag';
1571
1614
  // Skills
1572
1615
  import { SkillRegistry, SkillLoader } from '@framers/agentos/skills';
1573
1616
 
1617
+ // Extension runtime helpers and built-in guardrail packs
1618
+ import { SharedServiceRegistry } from '@framers/agentos';
1619
+ import { createPiiRedactionPack } from '@framers/agentos-ext-pii-redaction';
1620
+ import { createMLClassifierPack } from '@framers/agentos-ext-ml-classifiers';
1621
+ import { createTopicalityPack } from '@framers/agentos-ext-topicality';
1622
+ import { createCodeSafetyPack } from '@framers/agentos-ext-code-safety';
1623
+ import { createGroundingGuardPack } from '@framers/agentos-ext-grounding-guard';
1624
+
1574
1625
  // Deep imports (wildcard exports)
1575
1626
  import { SomeType } from '@framers/agentos/core/safety/CircuitBreaker';
1576
1627
  import { SomeConfig } from '@framers/agentos/config/ToolOrchestratorConfig';
@@ -118,6 +118,13 @@ export interface AgentOSFinalResponseChunk extends AgentOSResponseChunk {
118
118
  };
119
119
  updatedConversationContext?: ConversationContext;
120
120
  activePersonaDetails?: Partial<IPersonaDefinition>;
121
+ /**
122
+ * RAG source chunks that were used to generate this response.
123
+ * Populated by the GMI when RAG retrieval was performed.
124
+ * Used by grounding guardrails to verify response faithfulness.
125
+ * Undefined when no RAG retrieval was performed.
126
+ */
127
+ ragSources?: import('../../rag').RagRetrievedChunk[];
121
128
  }
122
129
  /**
123
130
  * @typedef {Object} AgentOSErrorChunk
@@ -1 +1 @@
1
- {"version":3,"file":"AgentOSResponse.d.ts","sourceRoot":"","sources":["../../../src/api/types/AgentOSResponse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentOSResponse.d.ts","sourceRoot":"","sources":["../../../src/api/types/AgentOSResponse.ts"],"names":[],"mappings":"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"}
@@ -166,6 +166,13 @@ export interface GuardrailOutputPayload {
166
166
  context: GuardrailContext;
167
167
  /** The response chunk to evaluate */
168
168
  chunk: AgentOSResponse;
169
+ /**
170
+ * RAG source chunks retrieved for this request.
171
+ * Available to output guardrails for grounding verification.
172
+ * Persists across all chunks in a stream (not just the final chunk).
173
+ * Undefined when no RAG retrieval was performed.
174
+ */
175
+ ragSources?: import('../../rag').RagRetrievedChunk[];
169
176
  }
170
177
  /**
171
178
  * Configuration for guardrail evaluation behavior.
@@ -220,6 +227,38 @@ export interface GuardrailConfig {
220
227
  * @default undefined (no limit)
221
228
  */
222
229
  maxStreamingEvaluations?: number;
230
+ /**
231
+ * Whether this guardrail may return SANITIZE actions that modify content.
232
+ *
233
+ * When true, this guardrail runs in Phase 1 (sequential) of the parallel
234
+ * dispatcher — it sees and can modify text produced by prior sanitizers.
235
+ * Each sanitizer receives the cumulative sanitized text from all preceding
236
+ * sanitizers in registration order.
237
+ *
238
+ * When false or omitted, this guardrail runs in Phase 2 (parallel) on
239
+ * the already-sanitized text from Phase 1. It may return BLOCK, FLAG, or
240
+ * ALLOW. If a Phase 2 guardrail returns SANITIZE, the action is
241
+ * **downgraded to FLAG** with a warning logged, because concurrent
242
+ * sanitization would produce non-deterministic results.
243
+ *
244
+ * @default false
245
+ */
246
+ canSanitize?: boolean;
247
+ /**
248
+ * Maximum time in milliseconds to wait for this guardrail's evaluation.
249
+ *
250
+ * If exceeded, the evaluation is abandoned (fail-open), a warning is
251
+ * logged, and the guardrail contributes nothing to the result. Prevents
252
+ * a slow guardrail (e.g., LLM-based) from blocking the entire pipeline.
253
+ *
254
+ * **Safety note:** Do NOT set timeoutMs on safety-critical guardrails
255
+ * (e.g., CSAM detection, compliance-mandatory filters) because fail-open
256
+ * on timeout means content passes unchecked. Only use on guardrails
257
+ * where a missed evaluation is acceptable.
258
+ *
259
+ * @default undefined (no timeout — wait indefinitely)
260
+ */
261
+ timeoutMs?: number;
223
262
  }
224
263
  /**
225
264
  * Contract for implementing custom guardrail logic.
@@ -1 +1 @@
1
- {"version":3,"file":"IGuardrailService.d.ts","sourceRoot":"","sources":["../../../src/core/guardrails/IGuardrailService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,oBAAY,eAAe;IACzB;;;OAGG;IACH,KAAK,UAAU;IAEf;;;OAGG;IACH,IAAI,SAAS;IAEb;;;;OAIG;IACH,QAAQ,aAAa;IAErB;;;;OAIG;IACH,KAAK,UAAU;CAChB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IAEf,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAElB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,yBAAyB;IACxC,8DAA8D;IAC9D,MAAM,EAAE,eAAe,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,OAAO,EAAE,gBAAgB,CAAC;IAE1B,2CAA2C;IAC3C,KAAK,EAAE,YAAY,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,sBAAsB;IACrC,kDAAkD;IAClD,OAAO,EAAE,gBAAgB,CAAC;IAE1B,qCAAqC;IACrC,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;;;;;;OAQG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IAEzB;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC;IAE1F;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC;CAC7F"}
1
+ {"version":3,"file":"IGuardrailService.d.ts","sourceRoot":"","sources":["../../../src/core/guardrails/IGuardrailService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,oBAAY,eAAe;IACzB;;;OAGG;IACH,KAAK,UAAU;IAEf;;;OAGG;IACH,IAAI,SAAS;IAEb;;;;OAIG;IACH,QAAQ,aAAa;IAErB;;;;OAIG;IACH,KAAK,UAAU;CAChB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IAEf,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAElB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,yBAAyB;IACxC,8DAA8D;IAC9D,MAAM,EAAE,eAAe,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,OAAO,EAAE,gBAAgB,CAAC;IAE1B,2CAA2C;IAC3C,KAAK,EAAE,YAAY,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,sBAAsB;IACrC,kDAAkD;IAClD,OAAO,EAAE,gBAAgB,CAAC;IAE1B,qCAAqC;IACrC,KAAK,EAAE,eAAe,CAAC;IAEvB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,WAAW,EAAE,iBAAiB,EAAE,CAAC;CACtD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;;;;;;OAQG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IAEzB;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC;IAE1F;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC;CAC7F"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @module ParallelGuardrailDispatcher
3
+ *
4
+ * Two-phase parallel guardrail dispatcher that separates sanitizers
5
+ * (sequential, order-dependent) from classifiers (parallel, independent).
6
+ *
7
+ * **Phase 1 (Sequential):** Guardrails with `config.canSanitize === true`
8
+ * run one-at-a-time in registration order. Each sanitizer receives the
9
+ * cumulative output of all preceding sanitizers. A BLOCK here short-circuits
10
+ * the entire pipeline.
11
+ *
12
+ * **Phase 2 (Parallel):** Remaining guardrails run concurrently via
13
+ * `Promise.allSettled`. They receive the fully-sanitized text from Phase 1.
14
+ * If any Phase 2 guardrail returns SANITIZE, it is **downgraded to FLAG**
15
+ * because concurrent sanitization would produce non-deterministic results.
16
+ *
17
+ * The final outcome uses "worst-wins" aggregation:
18
+ * BLOCK (severity 3) > FLAG (severity 2) > ALLOW (severity 0).
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { ParallelGuardrailDispatcher } from '../../core/guardrails';
23
+ *
24
+ * const outcome = await ParallelGuardrailDispatcher.evaluateInput(
25
+ * [piiRedactor, toxicityClassifier, policyGuard],
26
+ * userInput,
27
+ * guardrailContext,
28
+ * );
29
+ * ```
30
+ */
31
+ import type { AgentOSInput } from '../../api/types/AgentOSInput';
32
+ import { type AgentOSResponse } from '../../api/types/AgentOSResponse';
33
+ import { type GuardrailContext, type IGuardrailService } from './IGuardrailService';
34
+ import type { GuardrailInputOutcome, GuardrailOutputOptions } from './guardrailDispatcher';
35
+ /**
36
+ * Stateless two-phase parallel guardrail dispatcher.
37
+ *
38
+ * All methods are static — no instantiation needed. The class exists purely
39
+ * as a namespace to keep the two public entry points grouped.
40
+ */
41
+ export declare class ParallelGuardrailDispatcher {
42
+ /**
43
+ * Evaluate user input through registered guardrails using two-phase execution.
44
+ *
45
+ * **Phase 1 (Sequential — sanitizers):**
46
+ * Guardrails with `config.canSanitize === true` run one-at-a-time in
47
+ * registration order. Each sees (and may modify) the cumulative sanitized
48
+ * input. A BLOCK result short-circuits immediately — Phase 2 never runs.
49
+ *
50
+ * **Phase 2 (Parallel — classifiers):**
51
+ * All remaining guardrails run concurrently via `Promise.allSettled` on
52
+ * the text produced by Phase 1. A Phase 2 SANITIZE is downgraded to FLAG.
53
+ *
54
+ * **Aggregation:** worst-wins (BLOCK > FLAG > ALLOW). The singular
55
+ * `evaluation` field is set to the first BLOCK, else the worst-severity
56
+ * evaluation, else the last evaluation by registration order.
57
+ *
58
+ * @param services - Array of guardrail services (already normalized)
59
+ * @param input - User input to evaluate
60
+ * @param context - Conversational context for policy decisions
61
+ * @returns Outcome with sanitized input and all evaluations in registration order
62
+ */
63
+ static evaluateInput(services: IGuardrailService[], input: AgentOSInput, context: GuardrailContext): Promise<GuardrailInputOutcome>;
64
+ /**
65
+ * Wrap a response stream with two-phase guardrail filtering.
66
+ *
67
+ * Partitions services into four groups (once, up front):
68
+ * 1. **Streaming sanitizers** (`canSanitize && evaluateStreamingChunks`)
69
+ * 2. **Streaming parallel** classifiers (`evaluateStreamingChunks && !canSanitize`)
70
+ * 3. **Final sanitizers** (`canSanitize && !evaluateStreamingChunks`)
71
+ * 4. **Final parallel** classifiers (the rest with `evaluateOutput`)
72
+ *
73
+ * For each TEXT_DELTA chunk: Phase 1 runs streaming sanitizers sequentially
74
+ * (with per-service rate limiting), then Phase 2 runs streaming classifiers
75
+ * in parallel.
76
+ *
77
+ * For each isFinal chunk: Phase 1 runs final sanitizers sequentially, then
78
+ * Phase 2 runs final classifiers in parallel. All services with
79
+ * `evaluateOutput` participate in final evaluation.
80
+ *
81
+ * A BLOCK in either phase terminates the stream immediately with an error
82
+ * chunk.
83
+ *
84
+ * @param services - Array of guardrail services (already normalized)
85
+ * @param context - Conversational context for policy decisions
86
+ * @param stream - Source response stream to filter
87
+ * @param options - Stream options and input evaluations to embed
88
+ * @returns Wrapped async generator with guardrail filtering applied
89
+ */
90
+ static wrapOutput(services: IGuardrailService[], context: GuardrailContext, stream: AsyncGenerator<AgentOSResponse, void, undefined>, options: GuardrailOutputOptions): AsyncGenerator<AgentOSResponse, void, undefined>;
91
+ }
92
+ //# sourceMappingURL=ParallelGuardrailDispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParallelGuardrailDispatcher.d.ts","sourceRoot":"","sources":["../../../src/core/guardrails/ParallelGuardrailDispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEL,KAAK,gBAAgB,EAErB,KAAK,iBAAiB,EACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAqH3F;;;;;GAKG;AACH,qBAAa,2BAA2B;IAKtC;;;;;;;;;;;;;;;;;;;;OAoBG;WACU,aAAa,CACxB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,qBAAqB,CAAC;IAwIjC;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;WACW,UAAU,CACtB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,cAAc,CAAC,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,EACxD,OAAO,EAAE,sBAAsB,GAC9B,cAAc,CAAC,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC;CAmRpD"}