@cloudwarriors-ai/rlm 0.1.8 → 0.2.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.
- package/dist/application/handlers/llm-query-handler.d.ts +67 -0
- package/dist/application/handlers/llm-query-handler.d.ts.map +1 -0
- package/dist/application/handlers/llm-query-handler.js +169 -0
- package/dist/application/handlers/llm-query-handler.js.map +1 -0
- package/dist/application/query-handler.d.ts +23 -2
- package/dist/application/query-handler.d.ts.map +1 -1
- package/dist/application/query-handler.js +213 -143
- package/dist/application/query-handler.js.map +1 -1
- package/dist/cli/commands/query.d.ts +1 -0
- package/dist/cli/commands/query.d.ts.map +1 -1
- package/dist/cli/commands/query.js +1 -0
- package/dist/cli/commands/query.js.map +1 -1
- package/dist/cli/config-loader.d.ts +3 -0
- package/dist/cli/config-loader.d.ts.map +1 -1
- package/dist/cli/config-loader.js +1 -0
- package/dist/cli/config-loader.js.map +1 -1
- package/dist/cli/index.js +6 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/domain/constants.d.ts +124 -0
- package/dist/domain/constants.d.ts.map +1 -0
- package/dist/domain/constants.js +148 -0
- package/dist/domain/constants.js.map +1 -0
- package/dist/domain/errors/index.d.ts +1 -0
- package/dist/domain/errors/index.d.ts.map +1 -1
- package/dist/domain/errors/index.js +2 -0
- package/dist/domain/errors/index.js.map +1 -1
- package/dist/domain/errors/token-budget-error.d.ts +47 -0
- package/dist/domain/errors/token-budget-error.d.ts.map +1 -0
- package/dist/domain/errors/token-budget-error.js +41 -0
- package/dist/domain/errors/token-budget-error.js.map +1 -0
- package/dist/domain/interfaces/code-executor.d.ts +32 -3
- package/dist/domain/interfaces/code-executor.d.ts.map +1 -1
- package/dist/domain/interfaces/event-emitter.d.ts +55 -1
- package/dist/domain/interfaces/event-emitter.d.ts.map +1 -1
- package/dist/domain/interfaces/llm-provider.d.ts +4 -0
- package/dist/domain/interfaces/llm-provider.d.ts.map +1 -1
- package/dist/domain/services/cost-calculator.d.ts.map +1 -1
- package/dist/domain/services/cost-calculator.js +9 -4
- package/dist/domain/services/cost-calculator.js.map +1 -1
- package/dist/domain/types/config.d.ts +17 -0
- package/dist/domain/types/config.d.ts.map +1 -1
- package/dist/domain/types/config.js +41 -0
- package/dist/domain/types/config.js.map +1 -1
- package/dist/domain/types/index-schema.d.ts +206 -0
- package/dist/domain/types/index-schema.d.ts.map +1 -0
- package/dist/domain/types/index-schema.js +41 -0
- package/dist/domain/types/index-schema.js.map +1 -0
- package/dist/domain/types/index.d.ts +2 -0
- package/dist/domain/types/index.d.ts.map +1 -1
- package/dist/domain/types/index.js +4 -0
- package/dist/domain/types/index.js.map +1 -1
- package/dist/domain/utils/timer.d.ts +34 -0
- package/dist/domain/utils/timer.d.ts.map +1 -0
- package/dist/domain/utils/timer.js +39 -0
- package/dist/domain/utils/timer.js.map +1 -0
- package/dist/factory/create-rlm.d.ts +39 -6
- package/dist/factory/create-rlm.d.ts.map +1 -1
- package/dist/factory/create-rlm.js +41 -14
- package/dist/factory/create-rlm.js.map +1 -1
- package/dist/factory/default-config.d.ts +2 -0
- package/dist/factory/default-config.d.ts.map +1 -1
- package/dist/factory/default-config.js +2 -0
- package/dist/factory/default-config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/infrastructure/llm/openrouter-provider.d.ts +2 -0
- package/dist/infrastructure/llm/openrouter-provider.d.ts.map +1 -1
- package/dist/infrastructure/llm/openrouter-provider.js +50 -18
- package/dist/infrastructure/llm/openrouter-provider.js.map +1 -1
- package/dist/infrastructure/llm/prompts/index.d.ts +1 -1
- package/dist/infrastructure/llm/prompts/index.d.ts.map +1 -1
- package/dist/infrastructure/llm/prompts/index.js +1 -1
- package/dist/infrastructure/llm/prompts/index.js.map +1 -1
- package/dist/infrastructure/llm/prompts/system-prompt.d.ts +14 -1
- package/dist/infrastructure/llm/prompts/system-prompt.d.ts.map +1 -1
- package/dist/infrastructure/llm/prompts/system-prompt.js +186 -52
- package/dist/infrastructure/llm/prompts/system-prompt.js.map +1 -1
- package/dist/infrastructure/logging/debug-logger.d.ts +29 -0
- package/dist/infrastructure/logging/debug-logger.d.ts.map +1 -0
- package/dist/infrastructure/logging/debug-logger.js +35 -0
- package/dist/infrastructure/logging/debug-logger.js.map +1 -0
- package/dist/infrastructure/sandbox/prelude/rlm_prelude.py +637 -41
- package/dist/infrastructure/sandbox/process-manager.d.ts +1 -0
- package/dist/infrastructure/sandbox/process-manager.d.ts.map +1 -1
- package/dist/infrastructure/sandbox/process-manager.js +19 -6
- package/dist/infrastructure/sandbox/process-manager.js.map +1 -1
- package/dist/infrastructure/sandbox/python-executor.d.ts +5 -1
- package/dist/infrastructure/sandbox/python-executor.d.ts.map +1 -1
- package/dist/infrastructure/sandbox/python-executor.js +124 -6
- package/dist/infrastructure/sandbox/python-executor.js.map +1 -1
- package/package.json +5 -2
- package/src/infrastructure/sandbox/prelude/rlm_prelude.py +637 -41
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { RLMConfig } from '../../domain/types/config.js';
|
|
2
|
+
import type { SessionState, RLMSession } from '../../domain/types/session.js';
|
|
3
|
+
import type { ILLMProvider } from '../../domain/interfaces/llm-provider.js';
|
|
4
|
+
import type { IEventEmitter } from '../../domain/interfaces/event-emitter.js';
|
|
5
|
+
import type { LLMQueryCommand } from '../../domain/interfaces/code-executor.js';
|
|
6
|
+
import type { QueryResult } from '../query-handler.js';
|
|
7
|
+
/**
|
|
8
|
+
* Response from handling an llm_query command
|
|
9
|
+
*/
|
|
10
|
+
export type LLMQueryResponse = {
|
|
11
|
+
result: string;
|
|
12
|
+
} | {
|
|
13
|
+
error: string;
|
|
14
|
+
} | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Function signature for executing a recursive query
|
|
17
|
+
*/
|
|
18
|
+
export type RecursiveExecutor = (session: RLMSession, state: SessionState, config: RLMConfig) => Promise<QueryResult>;
|
|
19
|
+
/**
|
|
20
|
+
* Dependencies for the LLM Query Handler
|
|
21
|
+
*/
|
|
22
|
+
export interface LLMQueryHandlerDeps {
|
|
23
|
+
readonly llmProvider: ILLMProvider;
|
|
24
|
+
readonly eventEmitter: IEventEmitter;
|
|
25
|
+
readonly executeRecursive: RecursiveExecutor;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Context for handling an llm_query command
|
|
29
|
+
*/
|
|
30
|
+
export interface LLMQueryContext {
|
|
31
|
+
readonly session: RLMSession;
|
|
32
|
+
readonly state: SessionState;
|
|
33
|
+
readonly config: RLMConfig;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Handles llm_query commands during Python code execution.
|
|
37
|
+
*
|
|
38
|
+
* This handler implements the recursive RLM pattern where sub-queries
|
|
39
|
+
* are executed as full RLM cycles, not just direct LLM calls.
|
|
40
|
+
*/
|
|
41
|
+
export declare class LLMQueryHandler {
|
|
42
|
+
private readonly deps;
|
|
43
|
+
constructor(deps: LLMQueryHandlerDeps);
|
|
44
|
+
/**
|
|
45
|
+
* Handle an llm_query command from Python code execution
|
|
46
|
+
*
|
|
47
|
+
* @param command - The llm_query command with query and context variables
|
|
48
|
+
* @param context - The current execution context (session, state, config)
|
|
49
|
+
* @returns Response with result or error, or undefined if not handled
|
|
50
|
+
*/
|
|
51
|
+
handle(command: LLMQueryCommand | {
|
|
52
|
+
type: string;
|
|
53
|
+
}, context: LLMQueryContext): Promise<LLMQueryResponse>;
|
|
54
|
+
/**
|
|
55
|
+
* Emit token check event for observability
|
|
56
|
+
*/
|
|
57
|
+
private emitTokenCheck;
|
|
58
|
+
/**
|
|
59
|
+
* Create sub-session and sub-state for recursive execution
|
|
60
|
+
*/
|
|
61
|
+
private createSubSessionAndState;
|
|
62
|
+
/**
|
|
63
|
+
* Accumulate usage from sub-state back to parent state
|
|
64
|
+
*/
|
|
65
|
+
private accumulateUsage;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=llm-query-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-query-handler.d.ts","sourceRoot":"","sources":["../../../src/application/handlers/llm-query-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQvD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,SAAS,KACd,OAAO,CAAC,WAAW,CAAC,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;CAC5B;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,mBAAmB;IAEtD;;;;;;OAMG;IACG,MAAM,CACV,OAAO,EAAE,eAAe,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAC3C,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,gBAAgB,CAAC;IA2F5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAsDhC;;OAEG;IACH,OAAO,CAAC,eAAe;CAOxB"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { canRecurse } from '../../domain/services/limit-checker.js';
|
|
2
|
+
import { LlmQueryCapacityError } from '../../domain/errors/index.js';
|
|
3
|
+
import { LLM_QUERY_MAX_CHARS } from '../../domain/constants.js';
|
|
4
|
+
import { createDebugLogger } from '../../infrastructure/logging/debug-logger.js';
|
|
5
|
+
const dbg = createDebugLogger('LQH');
|
|
6
|
+
/**
|
|
7
|
+
* Handles llm_query commands during Python code execution.
|
|
8
|
+
*
|
|
9
|
+
* This handler implements the recursive RLM pattern where sub-queries
|
|
10
|
+
* are executed as full RLM cycles, not just direct LLM calls.
|
|
11
|
+
*/
|
|
12
|
+
export class LLMQueryHandler {
|
|
13
|
+
deps;
|
|
14
|
+
constructor(deps) {
|
|
15
|
+
this.deps = deps;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Handle an llm_query command from Python code execution
|
|
19
|
+
*
|
|
20
|
+
* @param command - The llm_query command with query and context variables
|
|
21
|
+
* @param context - The current execution context (session, state, config)
|
|
22
|
+
* @returns Response with result or error, or undefined if not handled
|
|
23
|
+
*/
|
|
24
|
+
async handle(command, context) {
|
|
25
|
+
if (command.type !== 'llm_query') {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
const llmCommand = command;
|
|
29
|
+
const { session, state, config } = context;
|
|
30
|
+
// Check recursion limit
|
|
31
|
+
if (!canRecurse(state, config)) {
|
|
32
|
+
return { error: 'Maximum recursion depth reached' };
|
|
33
|
+
}
|
|
34
|
+
const subContext = llmCommand.contextVariables.join('\n\n');
|
|
35
|
+
dbg('RECURSIVE_START', {
|
|
36
|
+
depth: state.currentDepth + 1,
|
|
37
|
+
contextSize: subContext.length,
|
|
38
|
+
queryLen: llmCommand.query.length,
|
|
39
|
+
});
|
|
40
|
+
// Validate llm_query() capacity limit (per MIT paper: ~500K chars)
|
|
41
|
+
if (subContext.length > LLM_QUERY_MAX_CHARS) {
|
|
42
|
+
const error = new LlmQueryCapacityError({
|
|
43
|
+
providedChars: subContext.length,
|
|
44
|
+
maxChars: LLM_QUERY_MAX_CHARS,
|
|
45
|
+
hint: 'Use smaller chunks or get_units_safe() to stay within limit',
|
|
46
|
+
});
|
|
47
|
+
return { error: error.message };
|
|
48
|
+
}
|
|
49
|
+
// Emit token check event for observability
|
|
50
|
+
this.emitTokenCheck(session, state, subContext);
|
|
51
|
+
// Create sub-session and sub-state
|
|
52
|
+
const { subSession, subState } = this.createSubSessionAndState(session, state, config, llmCommand.query, subContext);
|
|
53
|
+
// Use subModel for recursive calls if configured (per MIT paper)
|
|
54
|
+
const subConfig = config.subModel
|
|
55
|
+
? { ...config, model: config.subModel }
|
|
56
|
+
: config;
|
|
57
|
+
try {
|
|
58
|
+
const recursiveStart = Date.now();
|
|
59
|
+
this.deps.eventEmitter.emit({
|
|
60
|
+
type: 'rlm.recursive.started',
|
|
61
|
+
sessionId: subSession.id,
|
|
62
|
+
timestamp: new Date(),
|
|
63
|
+
query: llmCommand.query,
|
|
64
|
+
depth: subState.currentDepth,
|
|
65
|
+
});
|
|
66
|
+
// RECURSIVE: Execute full RLM cycle - sub-LLM writes code to analyze
|
|
67
|
+
const result = await this.deps.executeRecursive(subSession, subState, subConfig);
|
|
68
|
+
dbg('RECURSIVE_END', {
|
|
69
|
+
depth: subState.currentDepth,
|
|
70
|
+
success: result.success,
|
|
71
|
+
durationMs: Date.now() - recursiveStart,
|
|
72
|
+
answerLen: result.answer.length,
|
|
73
|
+
});
|
|
74
|
+
// Accumulate usage back to parent
|
|
75
|
+
this.accumulateUsage(state, subState);
|
|
76
|
+
this.deps.eventEmitter.emit({
|
|
77
|
+
type: 'rlm.recursive.completed',
|
|
78
|
+
sessionId: subSession.id,
|
|
79
|
+
timestamp: new Date(),
|
|
80
|
+
depth: subState.currentDepth,
|
|
81
|
+
resultLength: result.answer.length,
|
|
82
|
+
});
|
|
83
|
+
if (result.success) {
|
|
84
|
+
return { result: result.answer };
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
return { error: result.error ?? 'Sub-query failed' };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
92
|
+
return { error: errorMessage };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Emit token check event for observability
|
|
97
|
+
*/
|
|
98
|
+
emitTokenCheck(session, state, subContext) {
|
|
99
|
+
const contextTokens = this.deps.llmProvider.estimateTokens(subContext);
|
|
100
|
+
const modelLimit = this.deps.llmProvider.getModelContextLimit();
|
|
101
|
+
this.deps.eventEmitter.emit({
|
|
102
|
+
type: 'rlm.token_check',
|
|
103
|
+
sessionId: session.id,
|
|
104
|
+
timestamp: new Date(),
|
|
105
|
+
contextTokens,
|
|
106
|
+
limit: modelLimit,
|
|
107
|
+
depth: state.currentDepth + 1,
|
|
108
|
+
action: contextTokens > modelLimit * 0.9 ? 'warning' : 'ok',
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Create sub-session and sub-state for recursive execution
|
|
113
|
+
*/
|
|
114
|
+
createSubSessionAndState(session, state, config, query, subContext) {
|
|
115
|
+
const subSessionId = `${session.id}-r${state.recursiveCalls}`;
|
|
116
|
+
const subSession = {
|
|
117
|
+
id: subSessionId,
|
|
118
|
+
query,
|
|
119
|
+
context: [{
|
|
120
|
+
name: 'context',
|
|
121
|
+
content: subContext,
|
|
122
|
+
metadata: {
|
|
123
|
+
source: 'variable',
|
|
124
|
+
sizeBytes: Buffer.byteLength(subContext, 'utf-8'),
|
|
125
|
+
estimatedTokens: this.deps.llmProvider.estimateTokens(subContext),
|
|
126
|
+
createdAt: new Date(),
|
|
127
|
+
},
|
|
128
|
+
}],
|
|
129
|
+
config,
|
|
130
|
+
status: 'running',
|
|
131
|
+
currentDepth: state.currentDepth + 1,
|
|
132
|
+
usage: {
|
|
133
|
+
totalTokens: 0,
|
|
134
|
+
costUsd: 0,
|
|
135
|
+
llmCalls: 0,
|
|
136
|
+
recursiveCalls: 0,
|
|
137
|
+
maxDepthReached: 0,
|
|
138
|
+
executionTimeMs: 0,
|
|
139
|
+
},
|
|
140
|
+
trace: { steps: [], warnings: [], recoveredErrors: [] },
|
|
141
|
+
createdAt: new Date(),
|
|
142
|
+
cancellationRequested: false,
|
|
143
|
+
};
|
|
144
|
+
const subState = {
|
|
145
|
+
sessionId: subSessionId,
|
|
146
|
+
currentDepth: state.currentDepth + 1,
|
|
147
|
+
maxDepthReached: state.currentDepth + 1,
|
|
148
|
+
totalTokens: 0,
|
|
149
|
+
totalCostUsd: 0,
|
|
150
|
+
llmCalls: 0,
|
|
151
|
+
recursiveCalls: 0,
|
|
152
|
+
startTime: Date.now(),
|
|
153
|
+
pythonVariables: new Map([['context', subContext]]),
|
|
154
|
+
cancellationRequested: false,
|
|
155
|
+
};
|
|
156
|
+
return { subSession, subState };
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Accumulate usage from sub-state back to parent state
|
|
160
|
+
*/
|
|
161
|
+
accumulateUsage(state, subState) {
|
|
162
|
+
state.totalTokens += subState.totalTokens;
|
|
163
|
+
state.totalCostUsd += subState.totalCostUsd;
|
|
164
|
+
state.llmCalls += subState.llmCalls;
|
|
165
|
+
state.recursiveCalls += 1 + subState.recursiveCalls;
|
|
166
|
+
state.maxDepthReached = Math.max(state.maxDepthReached, subState.maxDepthReached);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=llm-query-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-query-handler.js","sourceRoot":"","sources":["../../../src/application/handlers/llm-query-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,11 @@ export interface QueryResult {
|
|
|
16
16
|
error?: string;
|
|
17
17
|
/** Execution steps performed */
|
|
18
18
|
steps: ExecutionStep[];
|
|
19
|
+
/**
|
|
20
|
+
* Confidence level if set_result_final() was called (0.0-1.0)
|
|
21
|
+
* Signals early termination - no further processing needed
|
|
22
|
+
*/
|
|
23
|
+
finalAnswerConfidence?: number;
|
|
19
24
|
}
|
|
20
25
|
/**
|
|
21
26
|
* Handles execution of RLM queries
|
|
@@ -33,14 +38,30 @@ export declare class QueryHandler {
|
|
|
33
38
|
* Generate Python code for the query
|
|
34
39
|
*/
|
|
35
40
|
private generateCode;
|
|
41
|
+
/**
|
|
42
|
+
* Generate a direct answer for recursive calls (depth > 0)
|
|
43
|
+
*
|
|
44
|
+
* Unlike generateCode(), this method asks the LLM to provide a direct
|
|
45
|
+
* text answer rather than writing Python code. This matches the MIT paper's
|
|
46
|
+
* intended behavior for llm_query() calls.
|
|
47
|
+
*/
|
|
48
|
+
private generateDirectAnswer;
|
|
36
49
|
/**
|
|
37
50
|
* Execute Python code and handle commands
|
|
38
51
|
*/
|
|
39
52
|
private executeCode;
|
|
40
53
|
/**
|
|
41
|
-
*
|
|
54
|
+
* Create execution context for Python code execution
|
|
55
|
+
*/
|
|
56
|
+
private createExecutionContext;
|
|
57
|
+
/**
|
|
58
|
+
* Record execution step in trace
|
|
59
|
+
*/
|
|
60
|
+
private recordExecutionStep;
|
|
61
|
+
/**
|
|
62
|
+
* Process set_variable commands from execution result
|
|
42
63
|
*/
|
|
43
|
-
private
|
|
64
|
+
private processVariableCommands;
|
|
44
65
|
/**
|
|
45
66
|
* Attempt to recover from an error by asking the LLM to fix the code
|
|
46
67
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-handler.d.ts","sourceRoot":"","sources":["../../src/application/query-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,2BAA2B,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,sCAAsC,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,uCAAuC,CAAC;AAC5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"query-handler.d.ts","sourceRoot":"","sources":["../../src/application/query-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,2BAA2B,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,sCAAsC,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,uCAAuC,CAAC;AAC5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AA0B3E;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IAEf,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IAEjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,gCAAgC;IAChC,KAAK,EAAE,aAAa,EAAE,CAAC;IAEvB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAFZ,WAAW,EAAE,YAAY,EACzB,YAAY,EAAE,aAAa,EAC3B,YAAY,EAAE,aAAa;IAG9C;;OAEG;IACG,OAAO,CACX,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,WAAW,CAAC;IAgEvB;;OAEG;YACW,YAAY;IA6G1B;;;;;;OAMG;YACW,oBAAoB;IAiHlC;;OAEG;YACW,WAAW;IA0HzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAW/B;;OAEG;YACW,gBAAgB;CA4C/B"}
|