@siduri-x/core 1.0.4 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/action-executor.d.ts +12 -0
- package/dist/action-executor.js +50 -0
- package/dist/action-policy.js +4 -9
- package/dist/architecture-boundary.test.js +1 -0
- package/dist/capability.d.ts +8 -0
- package/dist/capability.js +31 -4
- package/dist/chat-contract.d.ts +5 -1
- package/dist/chat-contract.js +26 -23
- package/dist/cognition-planner.d.ts +15 -0
- package/dist/cognition-planner.js +23 -0
- package/dist/context-retriever.d.ts +24 -0
- package/dist/context-retriever.js +92 -0
- package/dist/context.d.ts +11 -13
- package/dist/context.js +3 -23
- package/dist/context.test.js +7 -40
- package/dist/evidence.d.ts +12 -8
- package/dist/evidence.js +6 -4
- package/dist/experience-emitter.d.ts +21 -0
- package/dist/experience-emitter.js +48 -0
- package/dist/experience.d.ts +6 -5
- package/dist/experience.js +3 -2
- package/dist/experience.test.js +5 -4
- package/dist/gating.d.ts +3 -2
- package/dist/gating.js +4 -8
- package/dist/index.d.ts +27 -43
- package/dist/index.js +14 -0
- package/dist/input-normalizer.d.ts +14 -0
- package/dist/input-normalizer.js +58 -0
- package/dist/input-normalizer.test.d.ts +1 -0
- package/dist/input-normalizer.test.js +39 -0
- package/dist/intent-classifier.d.ts +24 -0
- package/dist/intent-classifier.js +53 -0
- package/dist/intent-classifier.test.d.ts +1 -0
- package/dist/intent-classifier.test.js +68 -0
- package/dist/memory-settler.d.ts +27 -0
- package/dist/memory-settler.js +95 -0
- package/dist/mouth-types.d.ts +85 -0
- package/dist/mouth-types.js +2 -0
- package/dist/perception-cycle.test.d.ts +1 -0
- package/dist/perception-cycle.test.js +155 -0
- package/dist/prompt-compiler.d.ts +20 -0
- package/dist/prompt-compiler.js +57 -0
- package/dist/prompt-compiler.test.d.ts +1 -0
- package/dist/prompt-compiler.test.js +76 -0
- package/dist/proposals.d.ts +30 -0
- package/dist/proposals.js +2 -0
- package/dist/response-envelope.d.ts +25 -0
- package/dist/response-envelope.js +64 -0
- package/dist/runtime-facades.test.d.ts +1 -0
- package/dist/runtime-facades.test.js +69 -0
- package/dist/runtime.d.ts +79 -15
- package/dist/runtime.js +327 -326
- package/dist/session-history.d.ts +20 -0
- package/dist/session-history.js +55 -0
- package/dist/session-history.test.d.ts +1 -0
- package/dist/session-history.test.js +38 -0
- package/dist/sqlite-action-store.d.ts +20 -0
- package/dist/sqlite-action-store.js +225 -0
- package/dist/sqlite-action-store.test.d.ts +1 -0
- package/dist/sqlite-action-store.test.js +252 -0
- package/package.json +1 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type ClaimType = 'semantic' | 'preference' | 'episodic' | 'relationship';
|
|
2
|
+
export type ClaimAuthority = 'user_explicit' | 'user_correction' | 'import' | 'repeated_dialogue' | 'inference' | 'observation';
|
|
3
|
+
export type ClaimStatus = 'PENDING' | 'APPROVED' | 'REJECTED' | 'SESSION_ONLY' | 'EXPIRED' | 'SUPERSEDED' | 'REVOKED';
|
|
4
|
+
export interface SourceEvent {
|
|
5
|
+
id: string;
|
|
6
|
+
sourceType: string;
|
|
7
|
+
occurredAt: string;
|
|
8
|
+
payload: Record<string, unknown>;
|
|
9
|
+
schemaVersion?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface MemoryProposal {
|
|
12
|
+
subject: string;
|
|
13
|
+
predicate: string;
|
|
14
|
+
value: string;
|
|
15
|
+
content?: string;
|
|
16
|
+
provenance?: string;
|
|
17
|
+
claimType?: ClaimType;
|
|
18
|
+
sensitivity?: string;
|
|
19
|
+
allowedAudiences?: string[];
|
|
20
|
+
sourceEventId?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface BehaviorProposal {
|
|
23
|
+
directive: string;
|
|
24
|
+
priority: number;
|
|
25
|
+
subject?: string;
|
|
26
|
+
predicate?: string;
|
|
27
|
+
value?: string;
|
|
28
|
+
memoryClass?: 'identity' | 'relationship' | 'behavioral' | 'semantic' | 'episodic';
|
|
29
|
+
sourceEventId?: string;
|
|
30
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { StagedResponsePlan, ResponseGateEvaluation, Claim, ResponseCitation, ExperienceEvent, ActionExecutionResult } from './index';
|
|
2
|
+
import { MemoryProposalReceipt } from './memory-settler';
|
|
3
|
+
import { FormattedMouthOutput } from './mouth-types';
|
|
4
|
+
export interface AssembleResponseEnvelopeParams {
|
|
5
|
+
stagedPlan: StagedResponsePlan;
|
|
6
|
+
speech: string;
|
|
7
|
+
language?: string;
|
|
8
|
+
speechId?: string;
|
|
9
|
+
createdMemoryProposals: Claim[];
|
|
10
|
+
memoryProposalReceipts: MemoryProposalReceipt[];
|
|
11
|
+
actionResults: ActionExecutionResult[];
|
|
12
|
+
filteredEvidenceIds?: string[];
|
|
13
|
+
filteredCitations?: ResponseCitation[];
|
|
14
|
+
subsystemDiagnostics: Record<string, string>;
|
|
15
|
+
experienceEvents: ExperienceEvent[];
|
|
16
|
+
mouthDelivery?: FormattedMouthOutput;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Creates the standardized rejection envelope for responses that fail gate evaluation.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createGateRejectionEnvelope(stagedPlan: StagedResponsePlan, gateEval: ResponseGateEvaluation): any;
|
|
22
|
+
/**
|
|
23
|
+
* Assembles the standardized response structure for approved companion responses.
|
|
24
|
+
*/
|
|
25
|
+
export declare function assembleResponseEnvelope(params: AssembleResponseEnvelopeParams): any;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createGateRejectionEnvelope = createGateRejectionEnvelope;
|
|
4
|
+
exports.assembleResponseEnvelope = assembleResponseEnvelope;
|
|
5
|
+
/**
|
|
6
|
+
* Creates the standardized rejection envelope for responses that fail gate evaluation.
|
|
7
|
+
*/
|
|
8
|
+
function createGateRejectionEnvelope(stagedPlan, gateEval) {
|
|
9
|
+
return {
|
|
10
|
+
status: gateEval.disposition,
|
|
11
|
+
reasonCode: gateEval.reasonCode,
|
|
12
|
+
response_id: stagedPlan.responseId,
|
|
13
|
+
correlation_id: stagedPlan.correlationId,
|
|
14
|
+
response: {
|
|
15
|
+
subtitle_ja: undefined,
|
|
16
|
+
subtitle_en: undefined,
|
|
17
|
+
},
|
|
18
|
+
metadata: {
|
|
19
|
+
requires_approval: stagedPlan.requiresApproval,
|
|
20
|
+
staged: true,
|
|
21
|
+
confidence: stagedPlan.confidenceSummary,
|
|
22
|
+
uncertainty: stagedPlan.uncertaintySummary,
|
|
23
|
+
proposals: [],
|
|
24
|
+
memory_proposals: [],
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Assembles the standardized response structure for approved companion responses.
|
|
30
|
+
*/
|
|
31
|
+
function assembleResponseEnvelope(params) {
|
|
32
|
+
const { stagedPlan, speech, language, speechId, createdMemoryProposals, memoryProposalReceipts, actionResults, filteredEvidenceIds, filteredCitations, subsystemDiagnostics, experienceEvents, mouthDelivery, } = params;
|
|
33
|
+
return {
|
|
34
|
+
status: 'APPROVED',
|
|
35
|
+
response_id: stagedPlan.responseId,
|
|
36
|
+
correlation_id: stagedPlan.correlationId,
|
|
37
|
+
response: {
|
|
38
|
+
speech_id: speechId,
|
|
39
|
+
audio_url: mouthDelivery?.audioUrl ?? (speechId ? `/voice/stream?id=${speechId}` : undefined),
|
|
40
|
+
subtitle_ja: mouthDelivery?.subtitles?.ja ?? speech,
|
|
41
|
+
subtitle_en: mouthDelivery?.subtitles?.en ?? speech,
|
|
42
|
+
},
|
|
43
|
+
delivery: mouthDelivery,
|
|
44
|
+
metadata: {
|
|
45
|
+
language,
|
|
46
|
+
proposals: createdMemoryProposals,
|
|
47
|
+
memory_proposals: memoryProposalReceipts,
|
|
48
|
+
action_results: actionResults,
|
|
49
|
+
evidence_ids: filteredEvidenceIds,
|
|
50
|
+
citations: filteredCitations,
|
|
51
|
+
subsystem_diagnostics: Object.keys(subsystemDiagnostics).length > 0
|
|
52
|
+
? subsystemDiagnostics
|
|
53
|
+
: undefined,
|
|
54
|
+
events: experienceEvents.map((e) => ({
|
|
55
|
+
event_id: e.eventId,
|
|
56
|
+
kind: e.kind,
|
|
57
|
+
lifecycle: e.lifecycle,
|
|
58
|
+
approval: e.approval,
|
|
59
|
+
expression: e.expression,
|
|
60
|
+
action: e.action,
|
|
61
|
+
})),
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const runtime_1 = require("./runtime");
|
|
4
|
+
describe('SiduriRuntime Facade Methods & Delegation', () => {
|
|
5
|
+
test('delegates vision and observation methods to configured organs', async () => {
|
|
6
|
+
const mockVision = {
|
|
7
|
+
analyze: jest.fn().mockResolvedValue('an ancient artifact'),
|
|
8
|
+
};
|
|
9
|
+
const mockObservation = {
|
|
10
|
+
ingest: jest.fn().mockResolvedValue({ duplicate: false }),
|
|
11
|
+
current: jest.fn().mockReturnValue([{ observationId: 'obs-1' }]),
|
|
12
|
+
clearExpired: jest.fn().mockReturnValue(1),
|
|
13
|
+
};
|
|
14
|
+
const runtime = new runtime_1.SiduriRuntime('test-comp', { name: 'Test' }, {
|
|
15
|
+
vision: mockVision,
|
|
16
|
+
observation: mockObservation,
|
|
17
|
+
});
|
|
18
|
+
const visionResult = await runtime.analyzeVision('http://example.com/img.png', 'describe');
|
|
19
|
+
expect(visionResult).toBe('an ancient artifact');
|
|
20
|
+
expect(mockVision.analyze).toHaveBeenCalledWith('http://example.com/img.png', 'describe');
|
|
21
|
+
const frame = new Uint8Array([1, 2, 3]);
|
|
22
|
+
const obsResult = await runtime.ingestObservation(frame, 'camera-1', 'provider-x');
|
|
23
|
+
expect(obsResult.duplicate).toBe(false);
|
|
24
|
+
expect(mockObservation.ingest).toHaveBeenCalledWith(frame, 'camera-1', 'provider-x');
|
|
25
|
+
const cur = runtime.getCurrentObservations();
|
|
26
|
+
expect(cur).toEqual([{ observationId: 'obs-1' }]);
|
|
27
|
+
const cleared = runtime.clearExpiredObservations();
|
|
28
|
+
expect(cleared).toBe(1);
|
|
29
|
+
});
|
|
30
|
+
test('delegates memory operations cleanly through facade methods', async () => {
|
|
31
|
+
const mockMemory = {
|
|
32
|
+
initialize: jest.fn().mockResolvedValue(undefined),
|
|
33
|
+
getClaims: jest.fn().mockResolvedValue([{ id: 'claim-1' }]),
|
|
34
|
+
getPendingClaims: jest.fn().mockResolvedValue([{ id: 'claim-pending-1' }]),
|
|
35
|
+
getDirectives: jest.fn().mockResolvedValue([{ id: 'dir-1' }]),
|
|
36
|
+
approveClaim: jest.fn().mockResolvedValue(undefined),
|
|
37
|
+
rejectClaim: jest.fn().mockResolvedValue(undefined),
|
|
38
|
+
updateClaim: jest.fn().mockResolvedValue({ id: 'claim-1', value: 'updated' }),
|
|
39
|
+
approveDirective: jest.fn().mockResolvedValue(undefined),
|
|
40
|
+
rejectDirective: jest.fn().mockResolvedValue(undefined),
|
|
41
|
+
revokeDirective: jest.fn().mockResolvedValue(undefined),
|
|
42
|
+
disableDirective: jest.fn().mockResolvedValue(undefined),
|
|
43
|
+
resetMemory: jest.fn().mockResolvedValue(undefined),
|
|
44
|
+
};
|
|
45
|
+
const runtime = new runtime_1.SiduriRuntime('test-comp', { name: 'Test' }, {
|
|
46
|
+
memory: mockMemory,
|
|
47
|
+
});
|
|
48
|
+
expect(await runtime.getClaims(10)).toEqual([{ id: 'claim-1' }]);
|
|
49
|
+
expect(mockMemory.getClaims).toHaveBeenCalledWith(10);
|
|
50
|
+
expect(await runtime.getPendingClaims()).toEqual([{ id: 'claim-pending-1' }]);
|
|
51
|
+
expect(await runtime.getDirectives()).toEqual([{ id: 'dir-1' }]);
|
|
52
|
+
await runtime.approveClaim('c-1');
|
|
53
|
+
expect(mockMemory.approveClaim).toHaveBeenCalledWith('c-1');
|
|
54
|
+
await runtime.rejectClaim('c-2');
|
|
55
|
+
expect(mockMemory.rejectClaim).toHaveBeenCalledWith('c-2');
|
|
56
|
+
await runtime.updateClaim('c-1', { value: 'new' });
|
|
57
|
+
expect(mockMemory.updateClaim).toHaveBeenCalledWith('c-1', { value: 'new' });
|
|
58
|
+
await runtime.approveDirective('d-1');
|
|
59
|
+
expect(mockMemory.approveDirective).toHaveBeenCalledWith('d-1');
|
|
60
|
+
await runtime.rejectDirective('d-2');
|
|
61
|
+
expect(mockMemory.rejectDirective).toHaveBeenCalledWith('d-2');
|
|
62
|
+
await runtime.revokeDirective('d-3');
|
|
63
|
+
expect(mockMemory.revokeDirective).toHaveBeenCalledWith('d-3');
|
|
64
|
+
await runtime.disableDirective('d-4');
|
|
65
|
+
expect(mockMemory.disableDirective).toHaveBeenCalledWith('d-4');
|
|
66
|
+
await runtime.resetMemory();
|
|
67
|
+
expect(mockMemory.resetMemory).toHaveBeenCalled();
|
|
68
|
+
});
|
|
69
|
+
});
|
package/dist/runtime.d.ts
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import { BrainOrgan, MemoryOrgan, VoiceOrgan, KnowledgeOrgan, VisionOrgan, BehaviorOrgan, BodyOrgan, HandsOrgan, EarOrgan, ObservationOrgan,
|
|
1
|
+
import { BrainOrgan, MemoryOrgan, VoiceOrgan, KnowledgeOrgan, VisionOrgan, BehaviorOrgan, BodyOrgan, HandsOrgan, EarOrgan, ObservationOrgan, ObservationResult, Observation, Message, RequestContext, ActionPolicyEngine, ResponseGatingEngine, StageResponseOptions, ApproveResponseOptions, RejectResponseOptions, ExperienceDispatcher, ExperienceAdapter, OrganConfig, Claim, BehaviorDirective, StagedResponsePlan, ResponseGateEvaluation, EvidenceRecord, MouthOrgan, MouthUtterance, MouthMedium, FormattedMouthOutput, MouthStreamChunk, MouthChannel } from './index';
|
|
2
2
|
export interface SiduriRuntimeConfig {
|
|
3
3
|
name: string;
|
|
4
|
-
brain?:
|
|
5
|
-
voice?:
|
|
6
|
-
memory?:
|
|
7
|
-
knowledge?:
|
|
8
|
-
behavior?:
|
|
9
|
-
body?:
|
|
10
|
-
vision?:
|
|
11
|
-
hands?:
|
|
12
|
-
ear?:
|
|
13
|
-
observation?:
|
|
14
|
-
|
|
15
|
-
|
|
4
|
+
brain?: OrganConfig | Record<string, unknown>;
|
|
5
|
+
voice?: OrganConfig | Record<string, unknown>;
|
|
6
|
+
memory?: OrganConfig | Record<string, unknown>;
|
|
7
|
+
knowledge?: OrganConfig | Record<string, unknown>;
|
|
8
|
+
behavior?: OrganConfig | Record<string, unknown>;
|
|
9
|
+
body?: OrganConfig | Record<string, unknown>;
|
|
10
|
+
vision?: OrganConfig | Record<string, unknown>;
|
|
11
|
+
hands?: OrganConfig | Record<string, unknown>;
|
|
12
|
+
ear?: OrganConfig | Record<string, unknown>;
|
|
13
|
+
observation?: OrganConfig | Record<string, unknown>;
|
|
14
|
+
mouth?: OrganConfig | Record<string, unknown>;
|
|
15
|
+
actionPolicy?: Record<string, unknown>;
|
|
16
|
+
[key: string]: unknown;
|
|
16
17
|
}
|
|
17
18
|
export interface RuntimeOrgans {
|
|
18
19
|
brain?: BrainOrgan;
|
|
@@ -25,8 +26,25 @@ export interface RuntimeOrgans {
|
|
|
25
26
|
hands?: HandsOrgan;
|
|
26
27
|
ear?: EarOrgan;
|
|
27
28
|
observation?: ObservationOrgan;
|
|
29
|
+
mouth?: MouthOrgan;
|
|
28
30
|
actionPolicy?: ActionPolicyEngine;
|
|
29
31
|
}
|
|
32
|
+
export interface CompanionPerception {
|
|
33
|
+
source: string;
|
|
34
|
+
text?: string;
|
|
35
|
+
audioBuffer?: Uint8Array;
|
|
36
|
+
roleOrContext?: 'OWNER' | 'VIEWER' | 'OPERATOR' | RequestContext | string;
|
|
37
|
+
context?: RequestContext;
|
|
38
|
+
history?: Message[];
|
|
39
|
+
medium?: MouthMedium;
|
|
40
|
+
metadata?: Record<string, unknown>;
|
|
41
|
+
signal?: AbortSignal;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* SiduriRuntime coordinates companion lifecycle, sensory perception,
|
|
45
|
+
* context retrieval, cognition planning, safety gating, action execution,
|
|
46
|
+
* and experience emission across decoupled organs.
|
|
47
|
+
*/
|
|
30
48
|
export declare class SiduriRuntime {
|
|
31
49
|
id: string;
|
|
32
50
|
config: SiduriRuntimeConfig;
|
|
@@ -40,11 +58,57 @@ export declare class SiduriRuntime {
|
|
|
40
58
|
hands?: HandsOrgan;
|
|
41
59
|
ear?: EarOrgan;
|
|
42
60
|
observation?: ObservationOrgan;
|
|
61
|
+
mouth?: MouthOrgan;
|
|
43
62
|
gating: ResponseGatingEngine;
|
|
44
63
|
actionPolicy: ActionPolicyEngine;
|
|
45
64
|
dispatcher: ExperienceDispatcher;
|
|
46
|
-
private
|
|
65
|
+
private readonly sessionHistory;
|
|
66
|
+
get conversationHistory(): Message[];
|
|
67
|
+
set conversationHistory(messages: Message[]);
|
|
47
68
|
constructor(id: string, config: SiduriRuntimeConfig, organs?: RuntimeOrgans);
|
|
48
69
|
initialize(): Promise<void>;
|
|
49
|
-
|
|
70
|
+
getSessionHistory(sessionKey: string): Message[];
|
|
71
|
+
clearHistory(sessionKey?: string): void;
|
|
72
|
+
analyzeVision(imageUrl: string, prompt: string): Promise<string>;
|
|
73
|
+
ingestObservation(frame: Uint8Array, sourceName: string, providerId?: string): Promise<ObservationResult>;
|
|
74
|
+
getCurrentObservations(now?: Date): Observation[];
|
|
75
|
+
clearExpiredObservations(now?: Date): number;
|
|
76
|
+
getClaims(limit?: number): Promise<Claim[]>;
|
|
77
|
+
getPendingClaims(limit?: number): Promise<Claim[]>;
|
|
78
|
+
getDirectives(): Promise<BehaviorDirective[]>;
|
|
79
|
+
approveClaim(id: string): Promise<void>;
|
|
80
|
+
rejectClaim(id: string): Promise<void>;
|
|
81
|
+
updateClaim(id: string, updates: Partial<Pick<Claim, 'subject' | 'predicate' | 'value' | 'scope' | 'sensitivity' | 'confidence' | 'validFrom' | 'validUntil'>>): Promise<Claim>;
|
|
82
|
+
approveDirective(id: string): Promise<void>;
|
|
83
|
+
rejectDirective(id: string): Promise<void>;
|
|
84
|
+
revokeDirective(id: string): Promise<void>;
|
|
85
|
+
disableDirective(id: string): Promise<void>;
|
|
86
|
+
resetMemory(): Promise<void>;
|
|
87
|
+
stageResponse(options: StageResponseOptions): StagedResponsePlan;
|
|
88
|
+
evaluateGate(plan: StagedResponsePlan, evidenceRecords?: EvidenceRecord[]): ResponseGateEvaluation;
|
|
89
|
+
approveResponse(options: ApproveResponseOptions): {
|
|
90
|
+
success: boolean;
|
|
91
|
+
reason?: string;
|
|
92
|
+
plan?: StagedResponsePlan;
|
|
93
|
+
};
|
|
94
|
+
rejectResponse(options: RejectResponseOptions): {
|
|
95
|
+
success: boolean;
|
|
96
|
+
reason?: string;
|
|
97
|
+
plan?: StagedResponsePlan;
|
|
98
|
+
};
|
|
99
|
+
getStagedPlan(responseId: string): StagedResponsePlan | undefined;
|
|
100
|
+
findStagedPlanByCorrelation(companionId: string, correlationId: string): StagedResponsePlan | undefined;
|
|
101
|
+
/**
|
|
102
|
+
* Processes an incoming perception (sensory audio, text, platform event, or observation alert)
|
|
103
|
+
* through the perception -> retrieval -> cognition -> gating -> action -> experience cycle.
|
|
104
|
+
*/
|
|
105
|
+
processPerception(perception: CompanionPerception): Promise<any>;
|
|
106
|
+
speakMouth(utterance: MouthUtterance): Promise<FormattedMouthOutput | undefined>;
|
|
107
|
+
formatMouth(utterance: MouthUtterance, medium?: MouthMedium): FormattedMouthOutput | undefined;
|
|
108
|
+
registerMouthChannel(channel: MouthChannel): void;
|
|
109
|
+
unregisterMouthChannel(channelId: string): void;
|
|
110
|
+
broadcastMouth(utterance: MouthUtterance): Promise<FormattedMouthOutput[]>;
|
|
111
|
+
interruptMouth(reason?: string): void;
|
|
112
|
+
streamMouth(utterance: MouthUtterance): AsyncIterable<MouthStreamChunk>;
|
|
113
|
+
handleUserMessage(message: string, roleOrContext?: 'OWNER' | 'VIEWER' | 'OPERATOR' | RequestContext | string, history?: Message[], medium?: MouthMedium, signal?: AbortSignal): Promise<any>;
|
|
50
114
|
}
|