@loopman/langchain-sdk 1.7.0 → 1.8.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/README.md +72 -5
- package/dist/agents/loopman-agent.d.ts.map +1 -1
- package/dist/agents/loopman-agent.js +51 -92
- package/dist/agents/loopman-agent.js.map +1 -1
- package/dist/client/loopman-api.d.ts +19 -64
- package/dist/client/loopman-api.d.ts.map +1 -1
- package/dist/client/loopman-api.js +85 -248
- package/dist/client/loopman-api.js.map +1 -1
- package/dist/helpers/prompt-orchestrator.js +17 -17
- package/dist/helpers/prompt-orchestrator.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/langgraph/helpers.d.ts +171 -0
- package/dist/langgraph/helpers.d.ts.map +1 -0
- package/dist/langgraph/helpers.js +216 -0
- package/dist/langgraph/helpers.js.map +1 -0
- package/dist/langgraph/index.d.ts +16 -0
- package/dist/langgraph/index.d.ts.map +1 -0
- package/dist/langgraph/index.js +17 -0
- package/dist/langgraph/index.js.map +1 -0
- package/dist/langgraph/loopman-conditional-edge.d.ts +58 -0
- package/dist/langgraph/loopman-conditional-edge.d.ts.map +1 -0
- package/dist/langgraph/loopman-conditional-edge.js +77 -0
- package/dist/langgraph/loopman-conditional-edge.js.map +1 -0
- package/dist/langgraph/loopman-context-node.d.ts +74 -0
- package/dist/langgraph/loopman-context-node.d.ts.map +1 -0
- package/dist/langgraph/loopman-context-node.js +131 -0
- package/dist/langgraph/loopman-context-node.js.map +1 -0
- package/dist/langgraph/loopman-validation-node.d.ts +89 -0
- package/dist/langgraph/loopman-validation-node.d.ts.map +1 -0
- package/dist/langgraph/loopman-validation-node.js +297 -0
- package/dist/langgraph/loopman-validation-node.js.map +1 -0
- package/dist/langgraph/types.d.ts +75 -0
- package/dist/langgraph/types.d.ts.map +1 -0
- package/dist/langgraph/types.js +74 -0
- package/dist/langgraph/types.js.map +1 -0
- package/dist/loopman-agent-wrapper.d.ts +18 -0
- package/dist/loopman-agent-wrapper.d.ts.map +1 -1
- package/dist/loopman-agent-wrapper.js +31 -21
- package/dist/loopman-agent-wrapper.js.map +1 -1
- package/dist/loopman-middleware.d.ts +0 -5
- package/dist/loopman-middleware.d.ts.map +1 -1
- package/dist/loopman-middleware.js +22 -23
- package/dist/loopman-middleware.js.map +1 -1
- package/dist/mcp/tool-registry.d.ts +7 -1
- package/dist/mcp/tool-registry.d.ts.map +1 -1
- package/dist/mcp/tool-registry.js +23 -16
- package/dist/mcp/tool-registry.js.map +1 -1
- package/dist/services/logger.service.d.ts.map +1 -1
- package/dist/services/logger.service.js +4 -12
- package/dist/services/logger.service.js.map +1 -1
- package/dist/services/loopman.service.d.ts +15 -10
- package/dist/services/loopman.service.d.ts.map +1 -1
- package/dist/services/loopman.service.js +49 -37
- package/dist/services/loopman.service.js.map +1 -1
- package/dist/services/polling.service.d.ts +7 -3
- package/dist/services/polling.service.d.ts.map +1 -1
- package/dist/services/polling.service.js +61 -47
- package/dist/services/polling.service.js.map +1 -1
- package/dist/types.d.ts +9 -35
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +6 -4
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Common types and state definition for LangGraph integration
|
|
3
|
+
*/
|
|
4
|
+
import { Annotation } from "@langchain/langgraph";
|
|
5
|
+
/**
|
|
6
|
+
* State definition for LangGraph with Loopman integration
|
|
7
|
+
*
|
|
8
|
+
* This state includes all fields needed for Loopman's Human-in-the-Loop
|
|
9
|
+
* validation and context enrichment features. You can also use your own
|
|
10
|
+
* custom state by including only the fields you need.
|
|
11
|
+
*
|
|
12
|
+
* @example Basic usage
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const workflow = new StateGraph(LoopmanGraphState)
|
|
15
|
+
* .addNode("agent", agentNode)
|
|
16
|
+
* .addNode("validation", validationNode);
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @example Custom state
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const MyState = Annotation.Root({
|
|
22
|
+
* messages: Annotation<BaseMessage[]>({ ... }),
|
|
23
|
+
* myCustomField: Annotation<string>({ ... }),
|
|
24
|
+
* // Add only Loopman fields you need:
|
|
25
|
+
* guidelines: Annotation<LoopmanGuideline[]>({ ... }),
|
|
26
|
+
* requiresValidation: Annotation<boolean>({ ... }),
|
|
27
|
+
* });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export const LoopmanGraphState = Annotation.Root({
|
|
31
|
+
/**
|
|
32
|
+
* Messages in the conversation
|
|
33
|
+
*/
|
|
34
|
+
messages: Annotation({
|
|
35
|
+
reducer: (x, y) => x.concat(y),
|
|
36
|
+
default: () => [],
|
|
37
|
+
}),
|
|
38
|
+
/**
|
|
39
|
+
* ID of the Loopman task awaiting validation
|
|
40
|
+
*/
|
|
41
|
+
loopmanTaskId: Annotation({
|
|
42
|
+
reducer: (x, y) => y ?? x,
|
|
43
|
+
default: () => null,
|
|
44
|
+
}),
|
|
45
|
+
/**
|
|
46
|
+
* Status of the Loopman task (APPROVED, REJECTED, NEEDS_CHANGES, etc.)
|
|
47
|
+
*/
|
|
48
|
+
loopmanTaskStatus: Annotation({
|
|
49
|
+
reducer: (x, y) => y ?? x,
|
|
50
|
+
default: () => null,
|
|
51
|
+
}),
|
|
52
|
+
/**
|
|
53
|
+
* Flag indicating if the current action requires validation
|
|
54
|
+
*/
|
|
55
|
+
requiresValidation: Annotation({
|
|
56
|
+
reducer: (x, y) => y ?? x,
|
|
57
|
+
default: () => false,
|
|
58
|
+
}),
|
|
59
|
+
/**
|
|
60
|
+
* Validation guidelines for the workflow
|
|
61
|
+
*/
|
|
62
|
+
guidelines: Annotation({
|
|
63
|
+
reducer: (x, y) => y ?? x,
|
|
64
|
+
default: () => [],
|
|
65
|
+
}),
|
|
66
|
+
/**
|
|
67
|
+
* Historical decision context from previous human reviews
|
|
68
|
+
*/
|
|
69
|
+
decisionContext: Annotation({
|
|
70
|
+
reducer: (x, y) => y ?? x,
|
|
71
|
+
default: () => [],
|
|
72
|
+
}),
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/langgraph/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAwBlD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC;IAC/C;;OAEG;IACH,QAAQ,EAAE,UAAU,CAAQ;QAC1B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;KAClB,CAAC;IAEF;;OAEG;IACH,aAAa,EAAE,UAAU,CAAgB;QACvC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;QACzB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;KACpB,CAAC;IAEF;;OAEG;IACH,iBAAiB,EAAE,UAAU,CAAgB;QAC3C,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;QACzB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;KACpB,CAAC;IAEF;;OAEG;IACH,kBAAkB,EAAE,UAAU,CAAU;QACtC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;QACzB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK;KACrB,CAAC;IAEF;;OAEG;IACH,UAAU,EAAE,UAAU,CAAqB;QACzC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;QACzB,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;KAClB,CAAC;IAEF;;OAEG;IACH,eAAe,EAAE,UAAU,CAAoB;QAC7C,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;QACzB,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;KAClB,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -23,6 +23,12 @@ import { RunnableConfig } from "@langchain/core/runnables";
|
|
|
23
23
|
export declare function invokeWithRetry(agent: any, input: any, config?: RunnableConfig, options?: {
|
|
24
24
|
maxRetries?: number;
|
|
25
25
|
debug?: boolean;
|
|
26
|
+
logger?: {
|
|
27
|
+
debug: (message: string, data?: any) => void;
|
|
28
|
+
info: (message: string, data?: any) => void;
|
|
29
|
+
warn: (message: string, data?: any) => void;
|
|
30
|
+
error: (message: string, data?: any) => void;
|
|
31
|
+
};
|
|
26
32
|
}): Promise<any>;
|
|
27
33
|
/**
|
|
28
34
|
* Helper function to stream a LangChain agent with automatic retry on human feedback
|
|
@@ -52,6 +58,12 @@ export declare function invokeWithRetry(agent: any, input: any, config?: Runnabl
|
|
|
52
58
|
export declare function streamWithRetry(agent: any, input: any, config?: RunnableConfig, options?: {
|
|
53
59
|
maxRetries?: number;
|
|
54
60
|
debug?: boolean;
|
|
61
|
+
logger?: {
|
|
62
|
+
debug: (message: string, data?: any) => void;
|
|
63
|
+
info: (message: string, data?: any) => void;
|
|
64
|
+
warn: (message: string, data?: any) => void;
|
|
65
|
+
error: (message: string, data?: any) => void;
|
|
66
|
+
};
|
|
55
67
|
}): AsyncGenerator<any, void, unknown>;
|
|
56
68
|
/**
|
|
57
69
|
* DEPRECATED: Use `invokeWithRetry()` instead for more explicit control
|
|
@@ -66,5 +78,11 @@ export declare function streamWithRetry(agent: any, input: any, config?: Runnabl
|
|
|
66
78
|
export declare function createLoopmanAgent(agent: any, options?: {
|
|
67
79
|
maxRetries?: number;
|
|
68
80
|
debug?: boolean;
|
|
81
|
+
logger?: {
|
|
82
|
+
debug: (message: string, data?: any) => void;
|
|
83
|
+
info: (message: string, data?: any) => void;
|
|
84
|
+
warn: (message: string, data?: any) => void;
|
|
85
|
+
error: (message: string, data?: any) => void;
|
|
86
|
+
};
|
|
69
87
|
}): any;
|
|
70
88
|
//# sourceMappingURL=loopman-agent-wrapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loopman-agent-wrapper.d.ts","sourceRoot":"","sources":["../src/loopman-agent-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,GAAG,EACV,KAAK,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"loopman-agent-wrapper.d.ts","sourceRoot":"","sources":["../src/loopman-agent-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,GAAG,EACV,KAAK,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC7C,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC5C,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC5C,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;KAC9C,CAAC;CACH,GACA,OAAO,CAAC,GAAG,CAAC,CA+Dd;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAuB,eAAe,CACpC,KAAK,EAAE,GAAG,EACV,KAAK,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC7C,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC5C,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC5C,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;KAC9C,CAAC;CACH,GACA,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAkEpC;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,GAAG,EACV,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC7C,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC5C,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC5C,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;KAC9C,CAAC;CACH,OAcF"}
|
|
@@ -22,9 +22,18 @@
|
|
|
22
22
|
export async function invokeWithRetry(agent, input, config, options) {
|
|
23
23
|
const maxRetries = options?.maxRetries || 5;
|
|
24
24
|
const debug = options?.debug || false;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
const logger = options?.logger;
|
|
26
|
+
const logDebug = (message, data) => {
|
|
27
|
+
if (debug && logger) {
|
|
28
|
+
logger.debug(message, data);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const logWarn = (message, data) => {
|
|
32
|
+
if (logger) {
|
|
33
|
+
logger.warn(message, data);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
logDebug("[LoopmanWrapper] Starting agent invocation with auto-retry support");
|
|
28
37
|
// First invocation
|
|
29
38
|
let result = await agent.invoke(input, config);
|
|
30
39
|
// Check if we need to retry (look for SystemMessage with retry instruction)
|
|
@@ -39,15 +48,11 @@ export async function invokeWithRetry(agent, input, config, options) {
|
|
|
39
48
|
content.includes("generate a new corrected tool call");
|
|
40
49
|
if (!needsRetry) {
|
|
41
50
|
// No retry needed, return final result
|
|
42
|
-
|
|
43
|
-
console.log("[LoopmanWrapper] No retry needed, returning result");
|
|
44
|
-
}
|
|
51
|
+
logDebug("[LoopmanWrapper] No retry needed, returning result");
|
|
45
52
|
break;
|
|
46
53
|
}
|
|
47
54
|
retryCount++;
|
|
48
|
-
|
|
49
|
-
console.log(`[LoopmanWrapper] Human feedback detected, retrying (${retryCount}/${maxRetries})...`);
|
|
50
|
-
}
|
|
55
|
+
logDebug(`[LoopmanWrapper] Human feedback detected, retrying (${retryCount}/${maxRetries})...`);
|
|
51
56
|
// Continue the conversation from the current state
|
|
52
57
|
// The agent will see the feedback and SystemMessage, and should generate a corrected tool call
|
|
53
58
|
result = await agent.invoke({
|
|
@@ -55,7 +60,7 @@ export async function invokeWithRetry(agent, input, config, options) {
|
|
|
55
60
|
}, config);
|
|
56
61
|
}
|
|
57
62
|
if (retryCount >= maxRetries) {
|
|
58
|
-
|
|
63
|
+
logWarn(`[LoopmanWrapper] Max retries (${maxRetries}) reached. Human feedback may require manual intervention.`);
|
|
59
64
|
}
|
|
60
65
|
return result;
|
|
61
66
|
}
|
|
@@ -87,9 +92,18 @@ export async function invokeWithRetry(agent, input, config, options) {
|
|
|
87
92
|
export async function* streamWithRetry(agent, input, config, options) {
|
|
88
93
|
const maxRetries = options?.maxRetries || 5;
|
|
89
94
|
const debug = options?.debug || false;
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
95
|
+
const logger = options?.logger;
|
|
96
|
+
const logDebug = (message, data) => {
|
|
97
|
+
if (debug && logger) {
|
|
98
|
+
logger.debug(message, data);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const logWarn = (message, data) => {
|
|
102
|
+
if (logger) {
|
|
103
|
+
logger.warn(message, data);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
logDebug("[LoopmanWrapper] Starting agent streaming with auto-retry support");
|
|
93
107
|
let retryCount = 0;
|
|
94
108
|
while (retryCount <= maxRetries) {
|
|
95
109
|
// Collect chunks to detect retry signal
|
|
@@ -114,18 +128,14 @@ export async function* streamWithRetry(agent, input, config, options) {
|
|
|
114
128
|
}
|
|
115
129
|
// If no retry needed, we're done
|
|
116
130
|
if (!needsRetry) {
|
|
117
|
-
|
|
118
|
-
console.log("[LoopmanWrapper] Streaming completed, no retry needed");
|
|
119
|
-
}
|
|
131
|
+
logDebug("[LoopmanWrapper] Streaming completed, no retry needed");
|
|
120
132
|
return;
|
|
121
133
|
}
|
|
122
134
|
// Retry needed
|
|
123
135
|
retryCount++;
|
|
124
|
-
|
|
125
|
-
console.log(`[LoopmanWrapper] Human feedback detected in stream, retrying (${retryCount}/${maxRetries})...`);
|
|
126
|
-
}
|
|
136
|
+
logDebug(`[LoopmanWrapper] Human feedback detected in stream, retrying (${retryCount}/${maxRetries})...`);
|
|
127
137
|
if (retryCount > maxRetries) {
|
|
128
|
-
|
|
138
|
+
logWarn(`[LoopmanWrapper] Max retries (${maxRetries}) reached during streaming.`);
|
|
129
139
|
return;
|
|
130
140
|
}
|
|
131
141
|
// Continue with empty messages (use checkpointer state)
|
|
@@ -143,7 +153,7 @@ export async function* streamWithRetry(agent, input, config, options) {
|
|
|
143
153
|
* @deprecated Use `invokeWithRetry()` directly instead
|
|
144
154
|
*/
|
|
145
155
|
export function createLoopmanAgent(agent, options) {
|
|
146
|
-
|
|
156
|
+
options?.logger?.warn?.("[Loopman] createLoopmanAgent() is deprecated. Use invokeWithRetry() for explicit control.");
|
|
147
157
|
return {
|
|
148
158
|
...agent,
|
|
149
159
|
invoke: async (input, config) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loopman-agent-wrapper.js","sourceRoot":"","sources":["../src/loopman-agent-wrapper.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAU,EACV,KAAU,EACV,MAAuB,EACvB,
|
|
1
|
+
{"version":3,"file":"loopman-agent-wrapper.js","sourceRoot":"","sources":["../src/loopman-agent-wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,11 +16,6 @@ export interface LoopmanMiddlewareConfig {
|
|
|
16
16
|
* Execution ID (optional, will be auto-generated if not provided)
|
|
17
17
|
*/
|
|
18
18
|
executionId?: string;
|
|
19
|
-
/**
|
|
20
|
-
* Channel ID for organizing tasks in Loopman (optional)
|
|
21
|
-
* Used to route tasks to specific channels/teams
|
|
22
|
-
*/
|
|
23
|
-
channelId?: string;
|
|
24
19
|
/**
|
|
25
20
|
* Mapping of tool names to interrupt configuration
|
|
26
21
|
* - true: interrupt for all tools calls with this name
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loopman-middleware.d.ts","sourceRoot":"","sources":["../src/loopman-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,QAAQ,EAET,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAoB,MAAM,WAAW,CAAC;AAK9D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB
|
|
1
|
+
{"version":3,"file":"loopman-middleware.d.ts","sourceRoot":"","sources":["../src/loopman-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,QAAQ,EAET,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAoB,MAAM,WAAW,CAAC;AAK9D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEtC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AAEnE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,uBAAuB,GAC9B,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CA0chC;AAED;;GAEG;AACH,YAAY,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -21,7 +21,7 @@ import { LoopmanService } from "./services/loopman.service";
|
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
23
23
|
export function loopmanMiddleware(config) {
|
|
24
|
-
const { apiKey, workflowId, executionId = `exec-${Date.now()}-${Math.random().toString(36)}`,
|
|
24
|
+
const { apiKey, workflowId, executionId = `exec-${Date.now()}-${Math.random().toString(36)}`, interruptOn = {}, timeout = 5 * 60 * 1000, // 5 minutes
|
|
25
25
|
pollingInterval = 5000, // 5 seconds
|
|
26
26
|
debug = false, } = config;
|
|
27
27
|
// Keep config reference to access dynamic parentTaskId
|
|
@@ -31,7 +31,6 @@ export function loopmanMiddleware(config) {
|
|
|
31
31
|
apiKey,
|
|
32
32
|
workflowId,
|
|
33
33
|
executionId,
|
|
34
|
-
channelId,
|
|
35
34
|
timeout,
|
|
36
35
|
pollingInterval,
|
|
37
36
|
debug,
|
|
@@ -48,7 +47,7 @@ export function loopmanMiddleware(config) {
|
|
|
48
47
|
* Uses PollingService directly for maximum control and transparency
|
|
49
48
|
*/
|
|
50
49
|
const sendToolCallToLoopman = async (toolCall, aiMessageContent, userMessage) => {
|
|
51
|
-
log(
|
|
50
|
+
log(`Sending decision request to Loopman for tool: ${toolCall.name}`, toolCall.args);
|
|
52
51
|
try {
|
|
53
52
|
// Business context: User's original request OR LLM's reasoning (prefer user)
|
|
54
53
|
let businessContext = userMessage || aiMessageContent || undefined;
|
|
@@ -59,27 +58,27 @@ export function loopmanMiddleware(config) {
|
|
|
59
58
|
const parentTaskId = configRef.parentTaskId;
|
|
60
59
|
if (parentTaskId) {
|
|
61
60
|
try {
|
|
62
|
-
log(
|
|
61
|
+
log(`Fetching parent task context from task: ${parentTaskId}`);
|
|
63
62
|
const parentTask = await loopmanService.getTask(parentTaskId);
|
|
64
63
|
if (parentTask != null) {
|
|
65
64
|
// Reuse business context from parent if not already provided
|
|
66
65
|
if (parentTask.businessContext) {
|
|
67
66
|
businessContext = parentTask.businessContext;
|
|
68
|
-
logDebug(
|
|
67
|
+
logDebug("Inherited businessContext from parent task");
|
|
69
68
|
}
|
|
70
69
|
// Extract proposedDecision and decisionReasoning from parent task
|
|
71
70
|
if (parentTask.proposedDecision) {
|
|
72
71
|
proposedDecision = parentTask.proposedDecision;
|
|
73
|
-
logDebug(
|
|
72
|
+
logDebug("Inherited proposedDecision from parent task");
|
|
74
73
|
}
|
|
75
74
|
if (parentTask.decisionReasoning) {
|
|
76
75
|
decisionReasoning = parentTask.decisionReasoning;
|
|
77
|
-
logDebug(
|
|
76
|
+
logDebug("Inherited decisionReasoning from parent task");
|
|
78
77
|
}
|
|
79
78
|
}
|
|
80
79
|
}
|
|
81
80
|
catch (error) {
|
|
82
|
-
logWarn(
|
|
81
|
+
logWarn(`Failed to fetch parent task ${parentTaskId}`, error);
|
|
83
82
|
// Continue without parent context
|
|
84
83
|
}
|
|
85
84
|
}
|
|
@@ -92,7 +91,7 @@ export function loopmanMiddleware(config) {
|
|
|
92
91
|
);
|
|
93
92
|
// Set taskId in logger for subsequent logs
|
|
94
93
|
logger.setTaskId(task.id);
|
|
95
|
-
log(
|
|
94
|
+
log(`Task created with ID: ${task.id}`, {
|
|
96
95
|
status: task.status,
|
|
97
96
|
});
|
|
98
97
|
// Step 2: Poll directly with PollingService
|
|
@@ -110,7 +109,7 @@ export function loopmanMiddleware(config) {
|
|
|
110
109
|
const finalTask = pollingResult.data
|
|
111
110
|
? await loopmanService.getTask(task.id)
|
|
112
111
|
: await loopmanService.getTask(task.id);
|
|
113
|
-
log(
|
|
112
|
+
log("Task resolved", {
|
|
114
113
|
id: finalTask.id,
|
|
115
114
|
status: finalTask.status,
|
|
116
115
|
metadata: finalTask.metadata,
|
|
@@ -118,7 +117,7 @@ export function loopmanMiddleware(config) {
|
|
|
118
117
|
return finalTask;
|
|
119
118
|
}
|
|
120
119
|
catch (error) {
|
|
121
|
-
logError(
|
|
120
|
+
logError("Failed to get decision from Loopman", error instanceof Error ? error.message : String(error));
|
|
122
121
|
throw error;
|
|
123
122
|
}
|
|
124
123
|
};
|
|
@@ -139,7 +138,7 @@ export function loopmanMiddleware(config) {
|
|
|
139
138
|
const latestDecision = task.decisions[0]; // Already sorted by date desc
|
|
140
139
|
feedback = latestDecision.comment || undefined;
|
|
141
140
|
if (feedback) {
|
|
142
|
-
log(
|
|
141
|
+
log("Found feedback from decision", feedback);
|
|
143
142
|
}
|
|
144
143
|
}
|
|
145
144
|
// Fallback: Get feedback from metadata (legacy system)
|
|
@@ -148,7 +147,7 @@ export function loopmanMiddleware(config) {
|
|
|
148
147
|
}
|
|
149
148
|
// Extract modified data from metadata (fallback for manual edits)
|
|
150
149
|
const modifiedData = task.metadata?.modified_tool_args || task.metadata?.modifiedToolArgs;
|
|
151
|
-
log(
|
|
150
|
+
log("Processing Loopman task", {
|
|
152
151
|
status: task.status,
|
|
153
152
|
toolName: originalToolCall.name,
|
|
154
153
|
hasFeedback: !!feedback,
|
|
@@ -157,15 +156,15 @@ export function loopmanMiddleware(config) {
|
|
|
157
156
|
switch (task.status) {
|
|
158
157
|
case "APPROVED":
|
|
159
158
|
// ✅ Human approved - Execute tool with original arguments
|
|
160
|
-
log(
|
|
159
|
+
log(`Tool '${originalToolCall.name}' APPROVED - executing as-is`);
|
|
161
160
|
return {
|
|
162
161
|
revisedToolCall: originalToolCall,
|
|
163
162
|
toolMessage: null,
|
|
164
163
|
};
|
|
165
164
|
case "NEEDS_CHANGES":
|
|
166
|
-
//
|
|
165
|
+
// Case 1: Human provided modified data manually (fallback)
|
|
167
166
|
if (modifiedData) {
|
|
168
|
-
log(
|
|
167
|
+
log(`Tool '${originalToolCall.name}' NEEDS_CHANGES - executing with modified arguments`, modifiedData);
|
|
169
168
|
return {
|
|
170
169
|
revisedToolCall: {
|
|
171
170
|
...originalToolCall,
|
|
@@ -174,9 +173,9 @@ export function loopmanMiddleware(config) {
|
|
|
174
173
|
toolMessage: null,
|
|
175
174
|
};
|
|
176
175
|
}
|
|
177
|
-
//
|
|
176
|
+
// Case 2: Human provided feedback → ask LLM to auto-correct
|
|
178
177
|
if (feedback) {
|
|
179
|
-
log(
|
|
178
|
+
log(`Tool '${originalToolCall.name}' NEEDS_CHANGES - returning feedback to agent for auto-correction`);
|
|
180
179
|
// Return a tool message indicating the tool wasn't executed
|
|
181
180
|
// and the agent should try again with corrections
|
|
182
181
|
return {
|
|
@@ -188,15 +187,15 @@ export function loopmanMiddleware(config) {
|
|
|
188
187
|
}),
|
|
189
188
|
};
|
|
190
189
|
}
|
|
191
|
-
//
|
|
192
|
-
logWarn(
|
|
190
|
+
// Case 3: Neither feedback nor data → warning + execute original
|
|
191
|
+
logWarn(`Tool '${originalToolCall.name}' marked NEEDS_CHANGES but no feedback/data provided, executing original`);
|
|
193
192
|
return {
|
|
194
193
|
revisedToolCall: originalToolCall,
|
|
195
194
|
toolMessage: null,
|
|
196
195
|
};
|
|
197
196
|
case "REJECTED":
|
|
198
|
-
//
|
|
199
|
-
log(
|
|
197
|
+
// Human rejected - Cancel execution with feedback
|
|
198
|
+
log(`Tool '${originalToolCall.name}' REJECTED - cancelling execution`);
|
|
200
199
|
const rejectedFeedback = feedback ||
|
|
201
200
|
`Tool call "${originalToolCall.name}" was rejected by human reviewer`;
|
|
202
201
|
return {
|
|
@@ -210,7 +209,7 @@ export function loopmanMiddleware(config) {
|
|
|
210
209
|
};
|
|
211
210
|
case "PENDING":
|
|
212
211
|
// This should not happen as we poll until resolved
|
|
213
|
-
logWarn(
|
|
212
|
+
logWarn(`Tool '${originalToolCall.name}' still PENDING after polling - treating as timeout`);
|
|
214
213
|
return {
|
|
215
214
|
revisedToolCall: null,
|
|
216
215
|
toolMessage: new ToolMessage({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loopman-middleware.js","sourceRoot":"","sources":["../src/loopman-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,aAAa,EAEb,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAmB,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAiE5D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAA+B;IAE/B,MAAM,EACJ,MAAM,EACN,UAAU,EACV,WAAW,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAChE,SAAS,EACT,WAAW,GAAG,EAAE,EAChB,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY;IACrC,eAAe,GAAG,IAAI,EAAE,YAAY;IACpC,KAAK,GAAG,KAAK,GACd,GAAG,MAAM,CAAC;IAEX,uDAAuD;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC;IAEzB,6BAA6B;IAC7B,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC;QACxC,MAAM;QACN,UAAU;QACV,WAAW;QACX,SAAS;QACT,OAAO;QACP,eAAe;QACf,KAAK;KACN,CAAC,CAAC;IAEH,0CAA0C;IAC1C,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IAErC,+BAA+B;IAC/B,MAAM,GAAG,GAAG,CAAC,OAAe,EAAE,IAAU,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAE,IAAU,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,IAAU,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAE,IAAU,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE9E;;;OAGG;IACH,MAAM,qBAAqB,GAAG,KAAK,EACjC,QAAkB,EAClB,gBAAyB,EACzB,WAAoB,EACU,EAAE;QAChC,GAAG,CACD,oDAAoD,QAAQ,CAAC,IAAI,EAAE,EACnE,QAAQ,CAAC,IAAI,CACd,CAAC;QAEF,IAAI,CAAC;YACH,6EAA6E;YAC7E,IAAI,eAAe,GAAG,WAAW,IAAI,gBAAgB,IAAI,SAAS,CAAC;YACnE,IAAI,gBAAoC,CAAC;YACzC,IAAI,iBAAqC,CAAC;YAE1C,4EAA4E;YAC5E,wDAAwD;YACxD,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;YAC5C,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,GAAG,CAAC,8CAA8C,YAAY,EAAE,CAAC,CAAC;oBAClE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;oBAC9D,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;wBACvB,6DAA6D;wBAC7D,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;4BAC/B,eAAe,GAAG,UAAU,CAAC,eAAe,CAAC;4BAC7C,QAAQ,CAAC,+CAA+C,CAAC,CAAC;wBAC5D,CAAC;wBAED,kEAAkE;wBAClE,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;4BAChC,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAC;4BAC/C,QAAQ,CAAC,gDAAgD,CAAC,CAAC;wBAC7D,CAAC;wBAED,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;4BACjC,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,CAAC;4BACjD,QAAQ,CAAC,iDAAiD,CAAC,CAAC;wBAC9D,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,kCAAkC,YAAY,GAAG,EAAE,KAAK,CAAC,CAAC;oBAClE,kCAAkC;gBACpC,CAAC;YACH,CAAC;YAED,gDAAgD;YAChD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,uBAAuB,CACvD,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,IAAI,EACb,iCAAiC,QAAQ,CAAC,IAAI,EAAE,EAChD,QAAQ,CAAC,EAAE,EAAE,sCAAsC;YACnD,eAAe,EAAE,4CAA4C;YAC7D,YAAY,EAAE,iCAAiC;YAC/C,gBAAgB,EAAE,mBAAmB;YACrC,iBAAiB,CAAC,mBAAmB;aACtC,CAAC;YAEF,2CAA2C;YAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE1B,GAAG,CAAC,4BAA4B,IAAI,CAAC,EAAE,EAAE,EAAE;gBACzC,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YAEH,4CAA4C;YAC5C,MAAM,cAAc,GAAG,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,eAAe,CAChE,cAAc,CACf,CAAC;YAEF,0BAA0B;YAC1B,IAAI,aAAa,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CACb,iBAAiB,IAAI,CAAC,EAAE,kCAAkC,CAC3D,CAAC;YACJ,CAAC;YAED,IAAI,aAAa,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,CAAC,EAAE,wBAAwB,CACzD,CAAC;YACJ,CAAC;YAED,sBAAsB;YACtB,mDAAmD;YACnD,MAAM,SAAS,GAAwB,aAAa,CAAC,IAAI;gBACvD,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE1C,GAAG,CAAC,kBAAkB,EAAE;gBACtB,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,QAAQ,EAAE,SAAS,CAAC,QAAQ;aAC7B,CAAC,CAAC;YAEH,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CACN,wCAAwC,EACxC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF;;;;;;;;OAQG;IACH,MAAM,0BAA0B,GAAG,CACjC,IAAyB,EACzB,gBAA0B,EAC6C,EAAE;QACzE,yDAAyD;QACzD,IAAI,QAA4B,CAAC;QAEjC,gEAAgE;QAChE,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;YACxE,QAAQ,GAAG,cAAc,CAAC,OAAO,IAAI,SAAS,CAAC;YAC/C,IAAI,QAAQ,EAAE,CAAC;gBACb,GAAG,CAAC,kCAAkC,EAAE,QAAQ,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC;QACzD,CAAC;QAED,kEAAkE;QAClE,MAAM,YAAY,GAChB,IAAI,CAAC,QAAQ,EAAE,kBAAkB,IAAI,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC;QAEvE,GAAG,CAAC,6BAA6B,EAAE;YACjC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,gBAAgB,CAAC,IAAI;YAC/B,WAAW,EAAE,CAAC,CAAC,QAAQ;YACvB,eAAe,EAAE,CAAC,CAAC,YAAY;SAChC,CAAC,CAAC;QAEH,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,UAAU;gBACb,0DAA0D;gBAC1D,GAAG,CAAC,WAAW,gBAAgB,CAAC,IAAI,8BAA8B,CAAC,CAAC;gBACpE,OAAO;oBACL,eAAe,EAAE,gBAAgB;oBACjC,WAAW,EAAE,IAAI;iBAClB,CAAC;YAEJ,KAAK,eAAe;gBAClB,8DAA8D;gBAC9D,IAAI,YAAY,EAAE,CAAC;oBACjB,GAAG,CACD,aAAa,gBAAgB,CAAC,IAAI,sDAAsD,EACxF,YAAY,CACb,CAAC;oBACF,OAAO;wBACL,eAAe,EAAE;4BACf,GAAG,gBAAgB;4BACnB,IAAI,EAAE,YAAY;yBACnB;wBACD,WAAW,EAAE,IAAI;qBAClB,CAAC;gBACJ,CAAC;gBAED,+DAA+D;gBAC/D,IAAI,QAAQ,EAAE,CAAC;oBACb,GAAG,CACD,YAAY,gBAAgB,CAAC,IAAI,mEAAmE,CACrG,CAAC;oBAEF,4DAA4D;oBAC5D,kDAAkD;oBAClD,OAAO;wBACL,eAAe,EAAE,IAAI;wBACrB,WAAW,EAAE,IAAI,WAAW,CAAC;4BAC3B,OAAO,EAAE,gEAAgE,QAAQ,sEAAsE;4BACvJ,IAAI,EAAE,gBAAgB,CAAC,IAAI;4BAC3B,YAAY,EAAE,gBAAgB,CAAC,EAAE,IAAI,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;yBAC1D,CAAC;qBACH,CAAC;gBACJ,CAAC;gBAED,oEAAoE;gBACpE,OAAO,CACL,aAAa,gBAAgB,CAAC,IAAI,0EAA0E,CAC7G,CAAC;gBACF,OAAO;oBACL,eAAe,EAAE,gBAAgB;oBACjC,WAAW,EAAE,IAAI;iBAClB,CAAC;YAEJ,KAAK,UAAU;gBACb,oDAAoD;gBACpD,GAAG,CACD,WAAW,gBAAgB,CAAC,IAAI,mCAAmC,CACpE,CAAC;gBACF,MAAM,gBAAgB,GACpB,QAAQ;oBACR,cAAc,gBAAgB,CAAC,IAAI,kCAAkC,CAAC;gBAExE,OAAO;oBACL,eAAe,EAAE,IAAI;oBACrB,WAAW,EAAE,IAAI,WAAW,CAAC;wBAC3B,OAAO,EAAE,gBAAgB;wBACzB,IAAI,EAAE,gBAAgB,CAAC,IAAI;wBAC3B,YAAY,EAAE,gBAAgB,CAAC,EAAE,IAAI,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;wBACzD,MAAM,EAAE,OAAO;qBAChB,CAAC;iBACH,CAAC;YAEJ,KAAK,SAAS;gBACZ,mDAAmD;gBACnD,OAAO,CACL,aAAa,gBAAgB,CAAC,IAAI,qDAAqD,CACxF,CAAC;gBACF,OAAO;oBACL,eAAe,EAAE,IAAI;oBACrB,WAAW,EAAE,IAAI,WAAW,CAAC;wBAC3B,OAAO,EAAE,cAAc,gBAAgB,CAAC,IAAI,sCAAsC;wBAClF,IAAI,EAAE,gBAAgB,CAAC,IAAI;wBAC3B,YAAY,EAAE,gBAAgB,CAAC,EAAE,IAAI,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;wBACzD,MAAM,EAAE,OAAO;qBAChB,CAAC;iBACH,CAAC;YAEJ;gBACE,iBAAiB;gBACjB,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,CAAC,MAAM,aAAa,gBAAgB,CAAC,IAAI,EAAE,CAChF,CAAC;QACN,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,gBAAgB,CAAC;QACtB,IAAI,EAAE,mBAAmB;QACzB,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC;YACtB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;SAC9C,CAAC;QACF,UAAU,EAAE;YACV,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM;oBAAE,OAAO;gBAE7B,sBAAsB;gBACtB,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC;qBAC9B,OAAO,EAAE;qBACT,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE5C,IAAI,CAAC,WAAW;oBAAE,OAAO;gBAEzB;;mBAEG;gBACH,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;oBACpC,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBAC3B,OAAO;gBACT,CAAC;gBAED,GAAG,CAAC,SAAS,WAAW,CAAC,UAAU,CAAC,MAAM,aAAa,CAAC,CAAC;gBAEzD,uDAAuD;gBACvD,MAAM,kBAAkB,GAAe,EAAE,CAAC;gBAC1C,MAAM,qBAAqB,GAAe,EAAE,CAAC;gBAE7C,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;oBAC9C,QAAQ,CAAC,mBAAmB,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;oBAC9C,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;oBAC7C,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;oBAC5D,QAAQ,CAAC,qBAAqB,eAAe,EAAE,CAAC,CAAC;oBAEjD,IAAI,eAAe,EAAE,CAAC;wBACpB,QAAQ,CAAC,SAAS,QAAQ,CAAC,IAAI,uBAAuB,CAAC,CAAC;wBACxD,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACpC,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,SAAS,QAAQ,CAAC,IAAI,iBAAiB,CAAC,CAAC;wBAClD,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;gBAED,iDAAiD;gBACjD,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACpC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;oBACxC,OAAO;gBACT,CAAC;gBAED,GAAG,CAAC,6BAA6B,kBAAkB,CAAC,MAAM,QAAQ,CAAC,CAAC;gBAEpE,yCAAyC;gBACzC,MAAM,gBAAgB,GACpB,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ;oBACrC,CAAC,CAAC,WAAW,CAAC,OAAO;oBACrB,CAAC,CAAC,SAAS,CAAC;gBAEhB,yCAAyC;gBACzC,MAAM,eAAe,GAAG,CAAC,GAAG,QAAQ,CAAC;qBAClC,OAAO,EAAE;qBACT,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAC;gBAC7C,MAAM,kBAAkB,GACtB,eAAe,IAAI,OAAO,eAAe,CAAC,OAAO,KAAK,QAAQ;oBAC5D,CAAC,CAAC,eAAe,CAAC,OAAO;oBACzB,CAAC,CAAC,SAAS,CAAC;gBAEhB,+DAA+D;gBAC/D,2DAA2D;gBAC3D,MAAM,WAAW,GAIZ,EAAE,CAAC;gBAER,KAAK,MAAM,QAAQ,IAAI,kBAAkB,EAAE,CAAC;oBAC1C,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,MAAM,qBAAqB,CACtC,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,CACnB,CAAC;wBACF,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;oBACvC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,0CAA0C;wBAC1C,QAAQ,CACN,SAAS,QAAQ,CAAC,IAAI,sBAAsB,EAC5C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;wBACF,WAAW,CAAC,IAAI,CAAC;4BACf,QAAQ;4BACR,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;yBACjE,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,6CAA6C;gBAC7C,MAAM,sBAAsB,GAAkB,EAAE,CAAC;gBACjD,MAAM,YAAY,GAAG,CAAC,GAAG,qBAAqB,CAAC,CAAC;gBAEhD,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;oBACjC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;wBACjB,4EAA4E;wBAC5E,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;4BAC3D,CAAC,CAAC,cAAc,MAAM,CAAC,QAAQ,CAAC,IAAI,0CAA0C;4BAC9E,CAAC,CAAC,cAAc,MAAM,CAAC,QAAQ,CAAC,IAAI,aAAa,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;wBAE1E,sBAAsB,CAAC,IAAI,CACzB,IAAI,WAAW,CAAC;4BACd,OAAO,EAAE,YAAY;4BACrB,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;4BAC1B,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;4BACxD,MAAM,EAAE,OAAO;yBAChB,CAAC,CACH,CAAC;oBACJ,CAAC;yBAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;wBACvB,0BAA0B;wBAC1B,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,0BAA0B,CACjE,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,QAAQ,CAChB,CAAC;wBAEF,IAAI,eAAe,EAAE,CAAC;4BACpB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBACrC,CAAC;wBAED,iEAAiE;wBACjE,wEAAwE;wBACxE,IAAI,WAAW,EAAE,CAAC;4BAChB,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAC3C,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,yEAAyE;gBACzE,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtC,GAAG,CACD,aAAa,sBAAsB,CAAC,MAAM,oCAAoC,CAC/E,CAAC;oBAEF,iEAAiE;oBACjE,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAC3C,CAAC,EAAE,EAAE,EAAE,CACL,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE,CAAC,EAAE,CAAC,CACpE,CAAC;oBAEF,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACjC,qFAAqF;wBACrF,MAAM,YAAY,GAAG,IAAI,SAAS,CAAC;4BACjC,OAAO,EAAE,WAAW,CAAC,OAAO;4BAC5B,UAAU,EAAE,iBAAiB;yBAC9B,CAAC,CAAC;wBACH,OAAO;4BACL,QAAQ,EAAE,CAAC,YAAY,EAAE,GAAG,sBAAsB,CAAC;yBACpD,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,kEAAkE;wBAClE,2DAA2D;wBAC3D,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;4BACtC,OAAO,EACL,oHAAoH;yBACvH,CAAC,CAAC;wBACH,OAAO;4BACL,QAAQ,EAAE,CAAC,GAAG,sBAAsB,EAAE,aAAa,CAAC;yBACrD,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,oEAAoE;gBACpE,GAAG,CACD,OAAO,YAAY,CAAC,MAAM,mDAAmD,CAC9E,CAAC;gBAEF,+EAA+E;gBAC/E,mFAAmF;gBACnF,OAAO;YACT,CAAC;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"loopman-middleware.js","sourceRoot":"","sources":["../src/loopman-middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,13 @@ export interface LoopmanToolRegistryConfig {
|
|
|
4
4
|
workflowId: string;
|
|
5
5
|
executionId: string;
|
|
6
6
|
category?: string;
|
|
7
|
-
channelId?: string;
|
|
8
7
|
debug?: boolean;
|
|
8
|
+
logger?: {
|
|
9
|
+
debug: (message: string, data?: any) => void;
|
|
10
|
+
info: (message: string, data?: any) => void;
|
|
11
|
+
warn: (message: string, data?: any) => void;
|
|
12
|
+
error: (message: string, data?: any) => void;
|
|
13
|
+
};
|
|
9
14
|
}
|
|
10
15
|
type McpTool = {
|
|
11
16
|
name: string;
|
|
@@ -17,6 +22,7 @@ type McpTool = {
|
|
|
17
22
|
export declare class LoopmanToolRegistry {
|
|
18
23
|
private readonly config;
|
|
19
24
|
constructor(config: LoopmanToolRegistryConfig);
|
|
25
|
+
private logDebug;
|
|
20
26
|
toDynamicTools(mcpTools: McpTool[]): DynamicStructuredTool[];
|
|
21
27
|
private createTool;
|
|
22
28
|
private resolveSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC7C,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC5C,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC5C,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;KAC9C,CAAC;CACH;AAED,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC;IAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3D,CAAC;AAEF,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,yBAAyB;IAE9D,OAAO,CAAC,QAAQ;IAMhB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,qBAAqB,EAAE;IAI5D,OAAO,CAAC,UAAU;IAkClB,OAAO,CAAC,aAAa;IAgErB,OAAO,CAAC,WAAW;IA6BnB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,cAAc;IA+BtB,OAAO,CAAC,WAAW;CAKpB"}
|
|
@@ -5,14 +5,17 @@ export class LoopmanToolRegistry {
|
|
|
5
5
|
constructor(config) {
|
|
6
6
|
this.config = config;
|
|
7
7
|
}
|
|
8
|
+
logDebug(message, data) {
|
|
9
|
+
if (this.config.debug && this.config.logger) {
|
|
10
|
+
this.config.logger.debug(message, data);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
8
13
|
toDynamicTools(mcpTools) {
|
|
9
14
|
return mcpTools.map((tool) => this.createTool(tool));
|
|
10
15
|
}
|
|
11
16
|
createTool(tool) {
|
|
12
17
|
const schema = this.resolveSchema(tool);
|
|
13
|
-
|
|
14
|
-
console.log(`[LoopmanToolRegistry] Creating tool ${tool.name} with schema:`, schema);
|
|
15
|
-
}
|
|
18
|
+
this.logDebug(`[LoopmanToolRegistry] Creating tool ${tool.name} with schema`, schema);
|
|
16
19
|
return new DynamicStructuredTool({
|
|
17
20
|
name: tool.name,
|
|
18
21
|
description: this.buildDescription(tool, schema),
|
|
@@ -20,14 +23,24 @@ export class LoopmanToolRegistry {
|
|
|
20
23
|
returnDirect: tool.name === "submitForHumanReview",
|
|
21
24
|
func: async (input) => {
|
|
22
25
|
const args = this.prepareArgs(tool.name, input);
|
|
23
|
-
|
|
24
|
-
console.log(`[LoopmanTool] Executing ${tool.name}`, args);
|
|
25
|
-
}
|
|
26
|
+
this.logDebug(`[LoopmanTool] Executing ${tool.name}`, args);
|
|
26
27
|
const result = await tool.func(args);
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
this.logDebug(`[LoopmanTool] Result for ${tool.name}`, result);
|
|
29
|
+
// Serialize complex results (arrays, objects) to JSON string
|
|
30
|
+
// This prevents OpenAI API errors when LangChain tries to format tool results as message content
|
|
31
|
+
if (typeof result === "string") {
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
// For structured content from MCP tools, extract and serialize appropriately
|
|
35
|
+
if (result && typeof result === "object") {
|
|
36
|
+
// If it's an MCP CallToolResult with structuredContent, extract it
|
|
37
|
+
if ("structuredContent" in result) {
|
|
38
|
+
return JSON.stringify(result.structuredContent);
|
|
39
|
+
}
|
|
40
|
+
// Otherwise, serialize the entire object
|
|
41
|
+
return JSON.stringify(result);
|
|
29
42
|
}
|
|
30
|
-
return result;
|
|
43
|
+
return String(result);
|
|
31
44
|
},
|
|
32
45
|
});
|
|
33
46
|
}
|
|
@@ -84,17 +97,11 @@ export class LoopmanToolRegistry {
|
|
|
84
97
|
prepareArgs(toolName, input) {
|
|
85
98
|
const args = { ...input };
|
|
86
99
|
if (toolName === "submitForHumanReview") {
|
|
87
|
-
|
|
88
|
-
if (this.config.debug) {
|
|
89
|
-
console.log("[LoopmanToolRegistry] submitForHumanReview input:", JSON.stringify(input, null, 2));
|
|
90
|
-
}
|
|
100
|
+
this.logDebug("[LoopmanToolRegistry] submitForHumanReview input", input);
|
|
91
101
|
// Only inject workflow metadata, don't validate (MCP will validate)
|
|
92
102
|
args.workflowIdentifier ??= this.config.workflowId;
|
|
93
103
|
args.executionIdentifier ??= this.config.executionId;
|
|
94
104
|
args.category ??= this.config.category;
|
|
95
|
-
if (this.config.channelId) {
|
|
96
|
-
args.channelId ??= this.config.channelId;
|
|
97
|
-
}
|
|
98
105
|
}
|
|
99
106
|
if (toolName === "getHumanGuidelines") {
|
|
100
107
|
args.workflow_id ??= this.config.workflowId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/mcp/tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/mcp/tool-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../src/services/logger.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,SAAS,EAAE,gBAAgB,CAAC;IAC5B,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAQhC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIxC;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIvC;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIvC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIxC;;OAEG;IACH,OAAO,CAAC,GAAG;IAUX;;OAEG;IACH,OAAO,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../src/services/logger.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,SAAS,EAAE,gBAAgB,CAAC;IAC5B,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAQhC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIxC;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIvC;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIvC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIxC;;OAEG;IACH,OAAO,CAAC,GAAG;IAUX;;OAEG;IACH,OAAO,CAAC,YAAY;IAsBpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;YACW,YAAY;IAoC1B;;;;;;;;;;OAUG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa;IAOpC;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;CAMnD"}
|