@minded-ai/mindedjs 1.0.100 → 1.0.101
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/browserTask/executeBrowserTask.d.ts +11 -1
- package/dist/browserTask/executeBrowserTask.d.ts.map +1 -1
- package/dist/browserTask/executeBrowserTask.js +170 -32
- package/dist/browserTask/executeBrowserTask.js.map +1 -1
- package/dist/edges/edgeFactory.d.ts.map +1 -1
- package/dist/edges/edgeFactory.js +5 -0
- package/dist/edges/edgeFactory.js.map +1 -1
- package/dist/nodes/addBrowserTaskNode.d.ts +1 -1
- package/dist/nodes/addBrowserTaskNode.d.ts.map +1 -1
- package/dist/nodes/addBrowserTaskNode.js +42 -45
- package/dist/nodes/addBrowserTaskNode.js.map +1 -1
- package/dist/nodes/addBrowserTaskRunNode.d.ts +13 -0
- package/dist/nodes/addBrowserTaskRunNode.d.ts.map +1 -0
- package/dist/nodes/addBrowserTaskRunNode.js +122 -0
- package/dist/nodes/addBrowserTaskRunNode.js.map +1 -0
- package/dist/types/Flows.types.d.ts +2 -1
- package/dist/types/Flows.types.d.ts.map +1 -1
- package/dist/types/Flows.types.js +1 -0
- package/dist/types/Flows.types.js.map +1 -1
- package/dist/types/LangGraph.types.d.ts.map +1 -1
- package/dist/types/LangGraph.types.js +1 -0
- package/dist/types/LangGraph.types.js.map +1 -1
- package/package.json +2 -2
- package/src/browserTask/executeBrowserTask.ts +200 -31
- package/src/edges/edgeFactory.ts +17 -1
- package/src/nodes/addBrowserTaskNode.ts +51 -49
- package/src/nodes/addBrowserTaskRunNode.ts +138 -0
- package/src/types/Flows.types.ts +1 -0
- package/src/types/LangGraph.types.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flows.types.d.ts","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Flows.types.d.ts","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,oBAAY,QAAQ;IAClB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,QAAQ,YAAY;IACpB,WAAW,eAAe;IAC1B,YAAY,eAAe;IAC3B,YAAY,gBAAgB;CAC7B;AAED,oBAAY,QAAQ;IAClB,iBAAiB,qBAAqB;IACtC,gBAAgB,oBAAoB;IACpC,YAAY,gBAAgB;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,oBAAY,WAAW;IACrB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,cAAe,SAAQ,eAAe,EAAE,WAAW;IAClE,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC;IAC/B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAErG,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;CACzB;AAED,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAY,SAAQ,QAAQ,EAAE,WAAW;IACxD,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,IAAI,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,eAAe,CAAC;AAEnH,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,oBAAqB,SAAQ,QAAQ;IACpD,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAoB,SAAQ,QAAQ;IACnD,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;CAC7B;AAED,MAAM,MAAM,IAAI,GAAG,oBAAoB,GAAG,mBAAmB,GAAG,eAAe,CAAC;AAEhF,oBAAY,mBAAmB;IAC7B,QAAQ,YAAY;CACrB;AACD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AACD,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC;IACnC,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,oBAAoB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,oBAAoB,CAAC;QAC3B,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;KACjC,CAAC;CACH,CAAC;AAEF,oBAAY,oBAAoB;IAC9B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,GAAG,QAAQ;CACZ;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,iBAAiB,sBAAsB;IACvC,aAAa,kBAAkB;CAChC;AAED,oBAAY,mBAAmB;IAC7B,iBAAiB,oBAAoB;IACrC,QAAQ,aAAa;IACrB,gBAAgB,oBAAoB;CACrC"}
|
|
@@ -47,5 +47,6 @@ var internalNodesSuffix;
|
|
|
47
47
|
(function (internalNodesSuffix) {
|
|
48
48
|
internalNodesSuffix["HUMAN_IN_THE_LOOP"] = "_humanInTheLoop";
|
|
49
49
|
internalNodesSuffix["TOOL_RUN"] = "_toolRun";
|
|
50
|
+
internalNodesSuffix["BROWSER_TASK_RUN"] = "_browserTaskRun";
|
|
50
51
|
})(internalNodesSuffix || (exports.internalNodesSuffix = internalNodesSuffix = {}));
|
|
51
52
|
//# sourceMappingURL=Flows.types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flows.types.js","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":";;;AAMA,IAAY,QAQX;AARD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;IACnB,iCAAqB,CAAA;IACrB,yBAAa,CAAA;IACb,gCAAoB,CAAA;IACpB,sCAA0B,CAAA;IAC1B,uCAA2B,CAAA;IAC3B,wCAA4B,CAAA;AAC9B,CAAC,EARW,QAAQ,wBAAR,QAAQ,QAQnB;AAED,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,kDAAsC,CAAA;IACtC,gDAAoC,CAAA;IACpC,wCAA4B,CAAA;AAC9B,CAAC,EAJW,QAAQ,wBAAR,QAAQ,QAInB;AAWD,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,0BAAW,CAAA;IACX,kCAAmB,CAAA;IACnB,gCAAiB,CAAA;IACjB,8BAAe,CAAA;AACjB,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AA4GD,IAAY,mBAEX;AAFD,WAAY,mBAAmB;IAC7B,2CAAoB,CAAA;AACtB,CAAC,EAFW,mBAAmB,mCAAnB,mBAAmB,QAE9B;AAsBD,IAAY,oBAOX;AAPD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,yCAAiB,CAAA;IACjB,2CAAmB,CAAA;IACnB,uCAAe,CAAA;IACf,yCAAiB,CAAA;IACjB,mCAAW,CAAA;AACb,CAAC,EAPW,oBAAoB,oCAApB,oBAAoB,QAO/B;AAQD,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,wCAAmB,CAAA;IACnB,4DAAuC,CAAA;IACvC,oDAA+B,CAAA;AACjC,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B;AAED,IAAY,
|
|
1
|
+
{"version":3,"file":"Flows.types.js","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":";;;AAMA,IAAY,QAQX;AARD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;IACnB,iCAAqB,CAAA;IACrB,yBAAa,CAAA;IACb,gCAAoB,CAAA;IACpB,sCAA0B,CAAA;IAC1B,uCAA2B,CAAA;IAC3B,wCAA4B,CAAA;AAC9B,CAAC,EARW,QAAQ,wBAAR,QAAQ,QAQnB;AAED,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,kDAAsC,CAAA;IACtC,gDAAoC,CAAA;IACpC,wCAA4B,CAAA;AAC9B,CAAC,EAJW,QAAQ,wBAAR,QAAQ,QAInB;AAWD,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,0BAAW,CAAA;IACX,kCAAmB,CAAA;IACnB,gCAAiB,CAAA;IACjB,8BAAe,CAAA;AACjB,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AA4GD,IAAY,mBAEX;AAFD,WAAY,mBAAmB;IAC7B,2CAAoB,CAAA;AACtB,CAAC,EAFW,mBAAmB,mCAAnB,mBAAmB,QAE9B;AAsBD,IAAY,oBAOX;AAPD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,yCAAiB,CAAA;IACjB,2CAAmB,CAAA;IACnB,uCAAe,CAAA;IACf,yCAAiB,CAAA;IACjB,mCAAW,CAAA;AACb,CAAC,EAPW,oBAAoB,oCAApB,oBAAoB,QAO/B;AAQD,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,wCAAmB,CAAA;IACnB,4DAAuC,CAAA;IACvC,oDAA+B,CAAA;AACjC,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B;AAED,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,4DAAqC,CAAA;IACrC,4CAAqB,CAAA;IACrB,2DAAoC,CAAA;AACtC,CAAC,EAJW,mBAAmB,mCAAnB,mBAAmB,QAI9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LangGraph.types.d.ts","sourceRoot":"","sources":["../../src/types/LangGraph.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAc,kBAAkB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEzD,eAAO,MAAM,qBAAqB,GAAI,MAAM,GAAG,GAAG;;;;;;;;
|
|
1
|
+
{"version":3,"file":"LangGraph.types.d.ts","sourceRoot":"","sources":["../../src/types/LangGraph.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAc,kBAAkB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEzD,eAAO,MAAM,qBAAqB,GAAI,MAAM,GAAG,GAAG;;;;;;;;EAyC9C,CAAC;AAGL,eAAO,MAAM,eAAe;;;;;;;;EAA0B,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AACjE,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5D,MAAM,MAAM,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -14,6 +14,7 @@ const createStateAnnotation = () => langgraph_1.Annotation.Root({
|
|
|
14
14
|
const index = res.findIndex((m) => m.id && m.id === message.id);
|
|
15
15
|
if (index !== -1) {
|
|
16
16
|
res[index].content = message.content;
|
|
17
|
+
res[index].additional_kwargs = { ...res[index].additional_kwargs, ...message.additional_kwargs };
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
20
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LangGraph.types.js","sourceRoot":"","sources":["../../src/types/LangGraph.types.ts"],"names":[],"mappings":";;;AACA,oDAAkF;AAClF,+CAAyD;AAElD,MAAM,qBAAqB,GAAG,GAAiB,EAAE,CACtD,sBAAU,CAAC,IAAI,CAAC;IACd,QAAQ,EAAE,IAAA,sBAAU,EAAqB;QACvC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;QACjB,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE;;YACrC,MAAM,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;YAC9B,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gBAClC,IAAI,MAAA,OAAO,CAAC,iBAAiB,0CAAE,MAAM,EAAE,CAAC;oBACtC,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;oBAChE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;wBACjB,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"LangGraph.types.js","sourceRoot":"","sources":["../../src/types/LangGraph.types.ts"],"names":[],"mappings":";;;AACA,oDAAkF;AAClF,+CAAyD;AAElD,MAAM,qBAAqB,GAAG,GAAiB,EAAE,CACtD,sBAAU,CAAC,IAAI,CAAC;IACd,QAAQ,EAAE,IAAA,sBAAU,EAAqB;QACvC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;QACjB,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE;;YACrC,MAAM,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;YAC9B,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gBAClC,IAAI,MAAA,OAAO,CAAC,iBAAiB,0CAAE,MAAM,EAAE,CAAC;oBACtC,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;oBAChE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;wBACjB,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;wBACrC,GAAG,CAAC,KAAK,CAAC,CAAC,iBAAiB,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;oBACnG,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;KACF,CAAC;IACF,MAAM,EAAE,IAAA,sBAAU,EAAS;QACzB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAa,CAAA;QAC7B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;KACpC,CAAC;IACF,OAAO,EAAE,IAAA,sBAAU,EAAqB;QACtC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;QACjB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KAC/B,CAAC;IACF,SAAS,EAAE,IAAA,sBAAU,GAAU;IAC/B,IAAI,EAAE,IAAA,sBAAU,EAA4B;QAC1C,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;QACnB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;KACrB,CAAC;IACF,WAAW,EAAE,IAAA,sBAAU,EAAc;QACnC,OAAO,EAAE,GAAG,EAAE,CAAC,yBAAW,CAAC,IAAI;QAC/B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;KAC1B,CAAC;IACF,uBAAuB,EAAE,IAAA,sBAAU,EAAgB;QACjD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;QACnB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;KACrB,CAAC;CACH,CAAC,CAAC;AAzCQ,QAAA,qBAAqB,yBAyC7B;AAEL,gDAAgD;AACnC,QAAA,eAAe,GAAG,IAAA,6BAAqB,GAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@minded-ai/mindedjs",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.101",
|
|
4
4
|
"description": "MindedJS is a TypeScript library for building agents.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -66,4 +66,4 @@
|
|
|
66
66
|
"uuid": "^11.1.0",
|
|
67
67
|
"ws": "^8.15.1"
|
|
68
68
|
}
|
|
69
|
-
}
|
|
69
|
+
}
|
|
@@ -1,44 +1,213 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { logger } from "../utils/logger";
|
|
1
|
+
import { logger } from '../utils/logger';
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
// Browser Use Cloud API configuration
|
|
4
|
+
const BROWSER_USE_API_BASE_URL = 'https://api.browser-use.com/api/v1';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
// Types for Browser Use Cloud API
|
|
7
|
+
export interface CloudTaskResponse {
|
|
8
|
+
id: string;
|
|
9
|
+
status: string;
|
|
10
|
+
live_url?: string;
|
|
11
|
+
steps?: any[];
|
|
12
|
+
output?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Browser Use Cloud API methods
|
|
16
|
+
export const createCloudTask = async (prompt: string, model?: string): Promise<string> => {
|
|
17
|
+
const apiKey = process.env.BROWSER_USE_API_KEY;
|
|
18
|
+
if (!apiKey) {
|
|
19
|
+
throw new Error('BROWSER_USE_API_KEY environment variable is required');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
logger.debug({ msg: 'Creating cloud browser task', prompt: prompt.substring(0, 100) + '...' });
|
|
23
|
+
|
|
24
|
+
const response = await fetch(`${BROWSER_USE_API_BASE_URL}/run-task`, {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: {
|
|
27
|
+
Authorization: `Bearer ${apiKey}`,
|
|
28
|
+
'Content-Type': 'application/json',
|
|
29
|
+
},
|
|
30
|
+
body: JSON.stringify({
|
|
31
|
+
task: prompt,
|
|
32
|
+
use_proxy: false,
|
|
33
|
+
llm_model: model || 'gpt-4o',
|
|
34
|
+
}),
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
logger.error({ msg: 'Failed to create cloud browser task', status: response.status, statusText: response.statusText });
|
|
39
|
+
throw new Error(`Failed to create browser task: ${response.statusText}`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const data = await response.json();
|
|
43
|
+
logger.debug({ msg: 'Cloud browser task created', taskId: data.id });
|
|
44
|
+
return data.id;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export const getTaskDetails = async (taskId: string): Promise<CloudTaskResponse> => {
|
|
48
|
+
const apiKey = process.env.BROWSER_USE_API_KEY;
|
|
49
|
+
if (!apiKey) {
|
|
50
|
+
throw new Error('BROWSER_USE_API_KEY environment variable is required');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const response = await fetch(`${BROWSER_USE_API_BASE_URL}/task/${taskId}`, {
|
|
54
|
+
headers: {
|
|
55
|
+
Authorization: `Bearer ${apiKey}`,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
if (!response.ok) {
|
|
60
|
+
logger.error({ msg: 'Failed to get task details', taskId, status: response.status, statusText: response.statusText });
|
|
61
|
+
throw new Error(`Failed to get task details: ${response.statusText}`);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return response.json();
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export const waitForLiveUrl = async (taskId: string, maxWaitTime: number = 30000): Promise<CloudTaskResponse> => {
|
|
68
|
+
const startTime = Date.now();
|
|
69
|
+
const pollInterval = 2000; // 2 seconds
|
|
70
|
+
let pollCount = 0;
|
|
71
|
+
|
|
72
|
+
logger.debug({ msg: 'Starting to poll for live_url', taskId, maxWaitTime, pollInterval });
|
|
12
73
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
74
|
+
while (Date.now() - startTime < maxWaitTime) {
|
|
75
|
+
pollCount++;
|
|
76
|
+
const elapsedTime = Date.now() - startTime;
|
|
77
|
+
|
|
78
|
+
logger.trace({
|
|
79
|
+
msg: 'Polling for live_url',
|
|
80
|
+
taskId,
|
|
81
|
+
pollCount,
|
|
82
|
+
elapsedTime,
|
|
83
|
+
remainingTime: maxWaitTime - elapsedTime,
|
|
17
84
|
});
|
|
18
|
-
let output = '';
|
|
19
85
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
86
|
+
const taskDetails = await getTaskDetails(taskId);
|
|
87
|
+
|
|
88
|
+
logger.trace({
|
|
89
|
+
msg: 'Task details received',
|
|
90
|
+
taskId,
|
|
91
|
+
status: taskDetails.status,
|
|
92
|
+
hasLiveUrl: !!taskDetails.live_url,
|
|
93
|
+
pollCount,
|
|
25
94
|
});
|
|
26
95
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
96
|
+
if (taskDetails.live_url) {
|
|
97
|
+
logger.debug({
|
|
98
|
+
msg: 'Live URL available',
|
|
99
|
+
taskId,
|
|
100
|
+
liveUrl: taskDetails.live_url,
|
|
101
|
+
pollCount,
|
|
102
|
+
totalTime: elapsedTime,
|
|
103
|
+
});
|
|
104
|
+
return taskDetails;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (taskDetails.status === 'failed' || taskDetails.status === 'stopped') {
|
|
108
|
+
logger.error({
|
|
109
|
+
msg: 'Task failed while waiting for live_url',
|
|
110
|
+
taskId,
|
|
111
|
+
status: taskDetails.status,
|
|
112
|
+
pollCount,
|
|
113
|
+
elapsedTime,
|
|
114
|
+
});
|
|
115
|
+
throw new Error(`Task failed with status: ${taskDetails.status}`);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
logger.trace({
|
|
119
|
+
msg: 'Live URL not yet available, continuing to poll',
|
|
120
|
+
taskId,
|
|
121
|
+
status: taskDetails.status,
|
|
122
|
+
pollCount,
|
|
123
|
+
nextPollIn: pollInterval,
|
|
30
124
|
});
|
|
31
125
|
|
|
32
|
-
|
|
33
|
-
|
|
126
|
+
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
logger.error({
|
|
130
|
+
msg: 'Timeout waiting for live_url',
|
|
131
|
+
taskId,
|
|
132
|
+
pollCount,
|
|
133
|
+
totalTime: Date.now() - startTime,
|
|
134
|
+
maxWaitTime,
|
|
135
|
+
});
|
|
136
|
+
throw new Error('Timeout waiting for live_url to become available');
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
export const waitForCompletion = async (taskId: string, maxWaitTime: number = 300000): Promise<CloudTaskResponse> => {
|
|
140
|
+
const startTime = Date.now();
|
|
141
|
+
const pollInterval = 3000; // 3 seconds for completion polling
|
|
142
|
+
let pollCount = 0;
|
|
143
|
+
|
|
144
|
+
logger.debug({ msg: 'Starting to poll for task completion', taskId, maxWaitTime, pollInterval });
|
|
145
|
+
|
|
146
|
+
while (Date.now() - startTime < maxWaitTime) {
|
|
147
|
+
pollCount++;
|
|
148
|
+
const elapsedTime = Date.now() - startTime;
|
|
149
|
+
|
|
150
|
+
logger.trace({
|
|
151
|
+
msg: 'Polling for task completion',
|
|
152
|
+
taskId,
|
|
153
|
+
pollCount,
|
|
154
|
+
elapsedTime,
|
|
155
|
+
remainingTime: maxWaitTime - elapsedTime,
|
|
34
156
|
});
|
|
35
157
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
158
|
+
const taskDetails = await getTaskDetails(taskId);
|
|
159
|
+
|
|
160
|
+
logger.trace({
|
|
161
|
+
msg: 'Task completion status received',
|
|
162
|
+
taskId,
|
|
163
|
+
status: taskDetails.status,
|
|
164
|
+
pollCount,
|
|
165
|
+
hasOutput: !!taskDetails.output,
|
|
166
|
+
stepCount: taskDetails.steps?.length || 0,
|
|
42
167
|
});
|
|
168
|
+
|
|
169
|
+
if (taskDetails.status === 'finished') {
|
|
170
|
+
logger.debug({
|
|
171
|
+
msg: 'Task completed successfully',
|
|
172
|
+
taskId,
|
|
173
|
+
pollCount,
|
|
174
|
+
totalTime: elapsedTime,
|
|
175
|
+
stepCount: taskDetails.steps?.length || 0,
|
|
176
|
+
hasOutput: !!taskDetails.output,
|
|
177
|
+
});
|
|
178
|
+
return taskDetails;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (taskDetails.status === 'failed' || taskDetails.status === 'stopped') {
|
|
182
|
+
logger.error({
|
|
183
|
+
msg: 'Task failed during completion polling',
|
|
184
|
+
taskId,
|
|
185
|
+
status: taskDetails.status,
|
|
186
|
+
pollCount,
|
|
187
|
+
elapsedTime,
|
|
188
|
+
stepCount: taskDetails.steps?.length || 0,
|
|
189
|
+
});
|
|
190
|
+
throw new Error(`Task failed with status: ${taskDetails.status}`);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
logger.trace({
|
|
194
|
+
msg: 'Task still in progress, continuing to poll',
|
|
195
|
+
taskId,
|
|
196
|
+
status: taskDetails.status,
|
|
197
|
+
pollCount,
|
|
198
|
+
stepCount: taskDetails.steps?.length || 0,
|
|
199
|
+
nextPollIn: pollInterval,
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
logger.error({
|
|
206
|
+
msg: 'Timeout waiting for task completion',
|
|
207
|
+
taskId,
|
|
208
|
+
pollCount,
|
|
209
|
+
totalTime: Date.now() - startTime,
|
|
210
|
+
maxWaitTime,
|
|
43
211
|
});
|
|
44
|
-
|
|
212
|
+
throw new Error('Timeout waiting for task completion');
|
|
213
|
+
};
|
package/src/edges/edgeFactory.ts
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Edge,
|
|
3
|
+
EdgeType,
|
|
4
|
+
Node,
|
|
5
|
+
PromptConditionEdge,
|
|
6
|
+
LogicalConditionEdge,
|
|
7
|
+
StepForwardEdge,
|
|
8
|
+
NodeType,
|
|
9
|
+
ToolNode,
|
|
10
|
+
BrowserTaskNode,
|
|
11
|
+
} from '../types/Flows.types';
|
|
2
12
|
import { PreCompiledGraph } from '../types/LangGraph.types';
|
|
3
13
|
import { BaseLanguageModel } from '@langchain/core/language_models/base';
|
|
4
14
|
import { createPromptRouter } from './createPromptRouter';
|
|
@@ -6,6 +16,7 @@ import { createLogicalRouter } from './createLogicalRouter';
|
|
|
6
16
|
import { createDirectEdge } from './createDirectEdge';
|
|
7
17
|
import { addHumanInTheLoopNode, buildHumanInTheLoopNodeName } from '../nodes/addHumanInTheLoopNode';
|
|
8
18
|
import { addToolRunNode, buildToolRunNodeName } from '../nodes/addToolRunNode';
|
|
19
|
+
import { addBrowserTaskRunNode, buildBrowserTaskRunNodeName } from '../nodes/addBrowserTaskRunNode';
|
|
9
20
|
import { Tool } from '../types/Tools.types';
|
|
10
21
|
import { Agent } from '../agent';
|
|
11
22
|
import { logger } from '../utils/logger';
|
|
@@ -92,6 +103,11 @@ export const edgeFactory = ({
|
|
|
92
103
|
effectiveSource = buildToolRunNodeName(source);
|
|
93
104
|
}
|
|
94
105
|
|
|
106
|
+
if (originalNode?.type === NodeType.BROWSER_TASK) {
|
|
107
|
+
addBrowserTaskRunNode({ graph, browserTaskNode: originalNode as BrowserTaskNode, attachedToNodeName: source, agent });
|
|
108
|
+
effectiveSource = buildBrowserTaskRunNodeName(source);
|
|
109
|
+
}
|
|
110
|
+
|
|
95
111
|
// Create and add the combined conditional edge with original node reference
|
|
96
112
|
const combinedRouter = createCombinedRouter(effectiveSource, edgesBySource, originalNode);
|
|
97
113
|
graph.addConditionalEdges(effectiveSource as any, combinedRouter);
|
|
@@ -4,10 +4,10 @@ import { PreCompiledGraph, stateAnnotation } from '../types/LangGraph.types';
|
|
|
4
4
|
import { HistoryStep } from '../types/Agent.types';
|
|
5
5
|
import { logger } from '../utils/logger';
|
|
6
6
|
import { createHistoryStep } from '../utils/history';
|
|
7
|
-
import { AIMessage
|
|
8
|
-
import { executeBrowserTask } from '../browserTask/executeBrowserTask';
|
|
7
|
+
import { AIMessage } from '@langchain/core/messages';
|
|
9
8
|
import { v4 as uuidv4 } from 'uuid';
|
|
10
9
|
import { Agent } from '../agent';
|
|
10
|
+
import { createCloudTask, waitForLiveUrl } from '../browserTask/executeBrowserTask';
|
|
11
11
|
|
|
12
12
|
type AddBrowserTaskNodeParams = {
|
|
13
13
|
graph: PreCompiledGraph;
|
|
@@ -15,9 +15,10 @@ type AddBrowserTaskNodeParams = {
|
|
|
15
15
|
agent: Agent;
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
export const addBrowserTaskNode = async ({ graph, node
|
|
18
|
+
export const addBrowserTaskNode = async ({ graph, node }: AddBrowserTaskNodeParams) => {
|
|
19
19
|
const callback: RunnableLike = async (state: typeof stateAnnotation.State) => {
|
|
20
20
|
logger.info({ msg: `Executing browser task node ${node.displayName}`, prompt: node.prompt });
|
|
21
|
+
logger.info({ msg: `Executing browser task node ${node.displayName}`, prompt: node.prompt });
|
|
21
22
|
|
|
22
23
|
const prompt = `
|
|
23
24
|
Follow the instructions. Any retrieved data should be printed as string and not saved to a file
|
|
@@ -28,74 +29,75 @@ export const addBrowserTaskNode = async ({ graph, node, agent }: AddBrowserTaskN
|
|
|
28
29
|
|
|
29
30
|
const toolCallId = uuidv4();
|
|
30
31
|
const toolCallingMessageId = uuidv4();
|
|
31
|
-
|
|
32
|
-
id: toolCallingMessageId,
|
|
33
|
-
content: '',
|
|
34
|
-
tool_calls: [
|
|
35
|
-
{
|
|
36
|
-
id: toolCallId,
|
|
37
|
-
name: 'browser-task',
|
|
38
|
-
args: {
|
|
39
|
-
prompt,
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
],
|
|
43
|
-
additional_kwargs: {
|
|
44
|
-
mindedMetadata: {
|
|
45
|
-
nodeType: NodeType.BROWSER_TASK,
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
});
|
|
32
|
+
|
|
49
33
|
try {
|
|
50
|
-
|
|
51
|
-
await
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
messages: [toolCallingMessage],
|
|
55
|
-
},
|
|
56
|
-
node.name,
|
|
34
|
+
// Create the browser task in the cloud
|
|
35
|
+
const taskId = await createCloudTask(
|
|
36
|
+
`Follow the instructions. Any retrieved data should be printed as string and not saved to a file.\n${node.prompt}`,
|
|
37
|
+
node.model,
|
|
57
38
|
);
|
|
58
|
-
logger.debug({
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
39
|
+
logger.debug({ msg: 'Browser task created', taskId });
|
|
40
|
+
|
|
41
|
+
// Wait for live_url to become available
|
|
42
|
+
const taskDetails = await waitForLiveUrl(taskId);
|
|
43
|
+
logger.debug({ msg: 'Live URL available', taskId, liveUrl: taskDetails.live_url });
|
|
44
|
+
|
|
45
|
+
const toolCallingMessage = new AIMessage({
|
|
46
|
+
id: toolCallingMessageId,
|
|
47
|
+
content: '',
|
|
48
|
+
tool_calls: [
|
|
49
|
+
{
|
|
50
|
+
id: toolCallId,
|
|
51
|
+
name: 'browser-task',
|
|
52
|
+
args: {
|
|
53
|
+
prompt,
|
|
54
|
+
taskId,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
],
|
|
67
58
|
additional_kwargs: {
|
|
68
59
|
mindedMetadata: {
|
|
69
60
|
nodeType: NodeType.BROWSER_TASK,
|
|
61
|
+
taskId,
|
|
62
|
+
liveUrl: taskDetails.live_url,
|
|
70
63
|
},
|
|
71
64
|
},
|
|
72
65
|
});
|
|
66
|
+
|
|
73
67
|
return {
|
|
74
68
|
history: createHistoryStep<HistoryStep>(state.history, {
|
|
75
69
|
type: NodeType.BROWSER_TASK,
|
|
76
70
|
nodeId: node.name,
|
|
77
71
|
nodeDisplayName: node.displayName,
|
|
78
|
-
raw:
|
|
72
|
+
raw: { taskId, liveUrl: taskDetails.live_url },
|
|
79
73
|
messageIds: [toolCallingMessageId],
|
|
80
74
|
}),
|
|
81
|
-
messages: [toolCallingMessage
|
|
75
|
+
messages: [toolCallingMessage],
|
|
82
76
|
};
|
|
83
77
|
} catch (error: any) {
|
|
84
|
-
logger.error(`Error
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
78
|
+
logger.error(`Error creating browser task node ${node.displayName}: ${error}`);
|
|
79
|
+
|
|
80
|
+
const toolCallingMessage = new AIMessage({
|
|
81
|
+
id: toolCallingMessageId,
|
|
82
|
+
content: '',
|
|
83
|
+
tool_calls: [
|
|
84
|
+
{
|
|
85
|
+
id: toolCallId,
|
|
86
|
+
name: 'browser-task',
|
|
87
|
+
args: {
|
|
88
|
+
prompt,
|
|
89
|
+
error: error.message,
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
93
|
additional_kwargs: {
|
|
94
94
|
mindedMetadata: {
|
|
95
95
|
nodeType: NodeType.BROWSER_TASK,
|
|
96
|
+
error: error.message,
|
|
96
97
|
},
|
|
97
98
|
},
|
|
98
99
|
});
|
|
100
|
+
|
|
99
101
|
return {
|
|
100
102
|
history: createHistoryStep<HistoryStep>(state.history, {
|
|
101
103
|
type: NodeType.BROWSER_TASK,
|
|
@@ -104,7 +106,7 @@ export const addBrowserTaskNode = async ({ graph, node, agent }: AddBrowserTaskN
|
|
|
104
106
|
raw: error,
|
|
105
107
|
messageIds: [toolCallingMessageId],
|
|
106
108
|
}),
|
|
107
|
-
messages: [toolCallingMessage
|
|
109
|
+
messages: [toolCallingMessage],
|
|
108
110
|
};
|
|
109
111
|
}
|
|
110
112
|
};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { PreCompiledGraph, stateAnnotation } from '../types/LangGraph.types';
|
|
2
|
+
import { RunnableLike } from '@langchain/core/runnables';
|
|
3
|
+
import { internalNodesSuffix, NodeType, BrowserTaskNode } from '../types/Flows.types';
|
|
4
|
+
import { ToolMessage, AIMessage } from '@langchain/core/messages';
|
|
5
|
+
import { Agent } from '../agent';
|
|
6
|
+
import { logger } from '../utils/logger';
|
|
7
|
+
import { createHistoryStep } from '../utils/history';
|
|
8
|
+
import { HistoryStep } from '../types/Agent.types';
|
|
9
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
10
|
+
import { waitForCompletion } from '../browserTask/executeBrowserTask';
|
|
11
|
+
|
|
12
|
+
type AddBrowserTaskRunNodeParams = {
|
|
13
|
+
graph: PreCompiledGraph;
|
|
14
|
+
browserTaskNode: BrowserTaskNode;
|
|
15
|
+
attachedToNodeName: string;
|
|
16
|
+
agent: Agent;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const buildBrowserTaskRunNodeName = (nodeName: string) => `${nodeName}${internalNodesSuffix.BROWSER_TASK_RUN}`;
|
|
20
|
+
|
|
21
|
+
export const addBrowserTaskRunNode = async ({ graph, browserTaskNode, attachedToNodeName }: AddBrowserTaskRunNodeParams) => {
|
|
22
|
+
const callback: RunnableLike = async (state: typeof stateAnnotation.State) => {
|
|
23
|
+
logger.info(`Executing browser task run node for ${browserTaskNode.displayName}`);
|
|
24
|
+
|
|
25
|
+
const toolCallObj = state.messages[state.messages.length - 1] as any;
|
|
26
|
+
if (!toolCallObj.tool_calls) {
|
|
27
|
+
throw new Error('Tool call not found');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const toolCall = toolCallObj.tool_calls[0];
|
|
31
|
+
const taskId = toolCall.args.taskId;
|
|
32
|
+
|
|
33
|
+
if (!taskId) {
|
|
34
|
+
throw new Error('Task ID not found in tool call arguments');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
try {
|
|
38
|
+
// Wait for task completion
|
|
39
|
+
const completedTask = await waitForCompletion(taskId);
|
|
40
|
+
logger.debug({ msg: 'Browser task completed', taskId, output: completedTask.output });
|
|
41
|
+
|
|
42
|
+
// Create tool message with the result
|
|
43
|
+
const toolMessage = new ToolMessage({
|
|
44
|
+
id: uuidv4(),
|
|
45
|
+
content: JSON.stringify({
|
|
46
|
+
result: completedTask.output || 'Task completed successfully',
|
|
47
|
+
steps: completedTask.steps || [],
|
|
48
|
+
}),
|
|
49
|
+
name: 'browser-task',
|
|
50
|
+
tool_call_id: toolCall.id,
|
|
51
|
+
status: 'success',
|
|
52
|
+
additional_kwargs: {
|
|
53
|
+
mindedMetadata: {
|
|
54
|
+
nodeType: NodeType.BROWSER_TASK,
|
|
55
|
+
taskId,
|
|
56
|
+
steps: completedTask.steps,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// Update the AI message with steps using the message reducer pattern
|
|
62
|
+
const updatedAIMessage = new AIMessage({
|
|
63
|
+
id: toolCallObj.id,
|
|
64
|
+
content: toolCallObj.content,
|
|
65
|
+
tool_calls: toolCallObj.tool_calls,
|
|
66
|
+
additional_kwargs: {
|
|
67
|
+
...toolCallObj.additional_kwargs,
|
|
68
|
+
mindedMetadata: {
|
|
69
|
+
...toolCallObj.additional_kwargs?.mindedMetadata,
|
|
70
|
+
steps: completedTask.steps,
|
|
71
|
+
status: 'completed',
|
|
72
|
+
},
|
|
73
|
+
update: true, // This triggers the message reducer to update the existing message
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
messages: [toolMessage, updatedAIMessage],
|
|
79
|
+
history: createHistoryStep<HistoryStep>(state.history, {
|
|
80
|
+
type: NodeType.BROWSER_TASK,
|
|
81
|
+
nodeId: browserTaskNode.name,
|
|
82
|
+
nodeDisplayName: browserTaskNode.displayName,
|
|
83
|
+
raw: completedTask,
|
|
84
|
+
messageIds: [],
|
|
85
|
+
}),
|
|
86
|
+
};
|
|
87
|
+
} catch (error: any) {
|
|
88
|
+
logger.error({ msg: 'Error executing browser task run node', error });
|
|
89
|
+
|
|
90
|
+
const errorToolMessage = new ToolMessage({
|
|
91
|
+
id: uuidv4(),
|
|
92
|
+
content: JSON.stringify({
|
|
93
|
+
error: error instanceof Error ? error.message : error.toString(),
|
|
94
|
+
}),
|
|
95
|
+
status: 'error',
|
|
96
|
+
name: 'browser-task',
|
|
97
|
+
tool_call_id: toolCall.id,
|
|
98
|
+
additional_kwargs: {
|
|
99
|
+
mindedMetadata: {
|
|
100
|
+
nodeType: NodeType.BROWSER_TASK,
|
|
101
|
+
taskId,
|
|
102
|
+
error: error.message,
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Update the AI message with error status
|
|
108
|
+
const updatedAIMessage = new AIMessage({
|
|
109
|
+
id: toolCallObj.id,
|
|
110
|
+
content: toolCallObj.content,
|
|
111
|
+
tool_calls: toolCallObj.tool_calls,
|
|
112
|
+
additional_kwargs: {
|
|
113
|
+
...toolCallObj.additional_kwargs,
|
|
114
|
+
mindedMetadata: {
|
|
115
|
+
...toolCallObj.additional_kwargs?.mindedMetadata,
|
|
116
|
+
status: 'failed',
|
|
117
|
+
error: error.message,
|
|
118
|
+
},
|
|
119
|
+
update: true,
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
return {
|
|
124
|
+
messages: [errorToolMessage, updatedAIMessage],
|
|
125
|
+
history: createHistoryStep<HistoryStep>(state.history, {
|
|
126
|
+
type: NodeType.BROWSER_TASK,
|
|
127
|
+
nodeId: browserTaskNode.name,
|
|
128
|
+
nodeDisplayName: browserTaskNode.displayName,
|
|
129
|
+
raw: error,
|
|
130
|
+
messageIds: [],
|
|
131
|
+
}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
graph.addNode(buildBrowserTaskRunNodeName(attachedToNodeName), callback);
|
|
137
|
+
graph.addEdge(attachedToNodeName as any, buildBrowserTaskRunNodeName(attachedToNodeName) as any);
|
|
138
|
+
};
|
package/src/types/Flows.types.ts
CHANGED
|
@@ -13,6 +13,7 @@ export const createStateAnnotation = <Memory = any>() =>
|
|
|
13
13
|
const index = res.findIndex((m) => m.id && m.id === message.id);
|
|
14
14
|
if (index !== -1) {
|
|
15
15
|
res[index].content = message.content;
|
|
16
|
+
res[index].additional_kwargs = { ...res[index].additional_kwargs, ...message.additional_kwargs };
|
|
16
17
|
}
|
|
17
18
|
} else {
|
|
18
19
|
res.push(message);
|