replicas-mcp 0.2.2 → 0.2.4
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/bowser-QNXG5MCF.js +2822 -0
- package/dist/chunk-3X3IL2A6.js +2094 -0
- package/dist/chunk-C6IOMGXW.js +1052 -0
- package/dist/chunk-FIMT2XWG.js +576 -0
- package/dist/chunk-KEOQGGM5.js +1490 -0
- package/dist/chunk-NWBPSHNL.js +2865 -0
- package/dist/{chunk-MO4EEYFW.js → chunk-Q6JESX2O.js} +5 -1
- package/dist/chunk-QIOBV22I.js +436 -0
- package/dist/{dist-es-SCPV3ZCZ.js → dist-es-3DLRX4SC.js} +26 -24
- package/dist/{dist-es-HU5E5HQ2.js → dist-es-7DMTLQRJ.js} +10 -11
- package/dist/{dist-es-VRURAF5E.js → dist-es-B6XNMCQ4.js} +5 -4
- package/dist/{dist-es-7T436X7S.js → dist-es-KLEKEXIP.js} +11 -12
- package/dist/{dist-es-BSYEGR6D.js → dist-es-MAMFGWZS.js} +48 -52
- package/dist/{dist-es-BPXINP6D.js → dist-es-V7ZJXG3C.js} +22 -32
- package/dist/{dist-es-RNSS2U3E.js → dist-es-VBWSM7AX.js} +28 -33
- package/dist/event-streams-D47TMH7D.js +1377 -0
- package/dist/index.js +1063 -314
- package/dist/{loadSso-XSERNFCM.js → loadSso-4NJATGLO.js} +85 -62
- package/dist/{signin-GATCKLJP.js → signin-HB5KQSHQ.js} +95 -83
- package/dist/{sso-oidc-JF4BALR2.js → sso-oidc-7AKRONOU.js} +103 -64
- package/dist/{sts-UFAVCISZ.js → sts-WSDR725H.js} +4965 -5056
- package/package.json +1 -1
- package/src/index.ts +2 -2
- package/dist/chunk-2KQ6OUSY.js +0 -1033
- package/dist/chunk-2Y7PD56W.js +0 -164
- package/dist/chunk-5VUQ55WW.js +0 -242
- package/dist/chunk-AAVVX4U5.js +0 -175
- package/dist/chunk-CXFLI7S3.js +0 -5706
- package/dist/chunk-ERL3EC7G.js +0 -44
- package/dist/chunk-SGITM26Q.js +0 -877
- package/dist/chunk-ST5JVROM.js +0 -39
- package/dist/chunk-SWX24AGM.js +0 -62
- package/dist/chunk-WPAL27HA.js +0 -29
- package/dist/chunk-ZDZBYCXV.js +0 -52
- package/dist/chunk-ZNARSMJG.js +0 -14
- package/dist/event-streams-EHSSWA6E.js +0 -253
package/dist/index.js
CHANGED
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
__commonJS,
|
|
4
4
|
__require,
|
|
5
5
|
__toESM
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-Q6JESX2O.js";
|
|
7
7
|
|
|
8
|
-
// ../node_modules/.bun/yaml@2.
|
|
8
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js
|
|
9
9
|
var require_identity = __commonJS({
|
|
10
|
-
"../node_modules/.bun/yaml@2.
|
|
10
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js"(exports) {
|
|
11
11
|
"use strict";
|
|
12
12
|
var ALIAS = /* @__PURE__ */ Symbol.for("yaml.alias");
|
|
13
13
|
var DOC = /* @__PURE__ */ Symbol.for("yaml.document");
|
|
@@ -62,9 +62,9 @@ var require_identity = __commonJS({
|
|
|
62
62
|
}
|
|
63
63
|
});
|
|
64
64
|
|
|
65
|
-
// ../node_modules/.bun/yaml@2.
|
|
65
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/visit.js
|
|
66
66
|
var require_visit = __commonJS({
|
|
67
|
-
"../node_modules/.bun/yaml@2.
|
|
67
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/visit.js"(exports) {
|
|
68
68
|
"use strict";
|
|
69
69
|
var identity = require_identity();
|
|
70
70
|
var BREAK = /* @__PURE__ */ Symbol("break visit");
|
|
@@ -220,9 +220,9 @@ var require_visit = __commonJS({
|
|
|
220
220
|
}
|
|
221
221
|
});
|
|
222
222
|
|
|
223
|
-
// ../node_modules/.bun/yaml@2.
|
|
223
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/directives.js
|
|
224
224
|
var require_directives = __commonJS({
|
|
225
|
-
"../node_modules/.bun/yaml@2.
|
|
225
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/directives.js"(exports) {
|
|
226
226
|
"use strict";
|
|
227
227
|
var identity = require_identity();
|
|
228
228
|
var visit = require_visit();
|
|
@@ -391,9 +391,9 @@ var require_directives = __commonJS({
|
|
|
391
391
|
}
|
|
392
392
|
});
|
|
393
393
|
|
|
394
|
-
// ../node_modules/.bun/yaml@2.
|
|
394
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/anchors.js
|
|
395
395
|
var require_anchors = __commonJS({
|
|
396
|
-
"../node_modules/.bun/yaml@2.
|
|
396
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/anchors.js"(exports) {
|
|
397
397
|
"use strict";
|
|
398
398
|
var identity = require_identity();
|
|
399
399
|
var visit = require_visit();
|
|
@@ -461,9 +461,9 @@ var require_anchors = __commonJS({
|
|
|
461
461
|
}
|
|
462
462
|
});
|
|
463
463
|
|
|
464
|
-
// ../node_modules/.bun/yaml@2.
|
|
464
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/applyReviver.js
|
|
465
465
|
var require_applyReviver = __commonJS({
|
|
466
|
-
"../node_modules/.bun/yaml@2.
|
|
466
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/applyReviver.js"(exports) {
|
|
467
467
|
"use strict";
|
|
468
468
|
function applyReviver(reviver, obj, key, val) {
|
|
469
469
|
if (val && typeof val === "object") {
|
|
@@ -511,9 +511,9 @@ var require_applyReviver = __commonJS({
|
|
|
511
511
|
}
|
|
512
512
|
});
|
|
513
513
|
|
|
514
|
-
// ../node_modules/.bun/yaml@2.
|
|
514
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/toJS.js
|
|
515
515
|
var require_toJS = __commonJS({
|
|
516
|
-
"../node_modules/.bun/yaml@2.
|
|
516
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/toJS.js"(exports) {
|
|
517
517
|
"use strict";
|
|
518
518
|
var identity = require_identity();
|
|
519
519
|
function toJS(value, arg, ctx) {
|
|
@@ -541,9 +541,9 @@ var require_toJS = __commonJS({
|
|
|
541
541
|
}
|
|
542
542
|
});
|
|
543
543
|
|
|
544
|
-
// ../node_modules/.bun/yaml@2.
|
|
544
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Node.js
|
|
545
545
|
var require_Node = __commonJS({
|
|
546
|
-
"../node_modules/.bun/yaml@2.
|
|
546
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Node.js"(exports) {
|
|
547
547
|
"use strict";
|
|
548
548
|
var applyReviver = require_applyReviver();
|
|
549
549
|
var identity = require_identity();
|
|
@@ -582,9 +582,9 @@ var require_Node = __commonJS({
|
|
|
582
582
|
}
|
|
583
583
|
});
|
|
584
584
|
|
|
585
|
-
// ../node_modules/.bun/yaml@2.
|
|
585
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Alias.js
|
|
586
586
|
var require_Alias = __commonJS({
|
|
587
|
-
"../node_modules/.bun/yaml@2.
|
|
587
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Alias.js"(exports) {
|
|
588
588
|
"use strict";
|
|
589
589
|
var anchors = require_anchors();
|
|
590
590
|
var visit = require_visit();
|
|
@@ -698,9 +698,9 @@ var require_Alias = __commonJS({
|
|
|
698
698
|
}
|
|
699
699
|
});
|
|
700
700
|
|
|
701
|
-
// ../node_modules/.bun/yaml@2.
|
|
701
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Scalar.js
|
|
702
702
|
var require_Scalar = __commonJS({
|
|
703
|
-
"../node_modules/.bun/yaml@2.
|
|
703
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Scalar.js"(exports) {
|
|
704
704
|
"use strict";
|
|
705
705
|
var identity = require_identity();
|
|
706
706
|
var Node = require_Node();
|
|
@@ -728,9 +728,9 @@ var require_Scalar = __commonJS({
|
|
|
728
728
|
}
|
|
729
729
|
});
|
|
730
730
|
|
|
731
|
-
// ../node_modules/.bun/yaml@2.
|
|
731
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/createNode.js
|
|
732
732
|
var require_createNode = __commonJS({
|
|
733
|
-
"../node_modules/.bun/yaml@2.
|
|
733
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/createNode.js"(exports) {
|
|
734
734
|
"use strict";
|
|
735
735
|
var Alias = require_Alias();
|
|
736
736
|
var identity = require_identity();
|
|
@@ -803,9 +803,9 @@ var require_createNode = __commonJS({
|
|
|
803
803
|
}
|
|
804
804
|
});
|
|
805
805
|
|
|
806
|
-
// ../node_modules/.bun/yaml@2.
|
|
806
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Collection.js
|
|
807
807
|
var require_Collection = __commonJS({
|
|
808
|
-
"../node_modules/.bun/yaml@2.
|
|
808
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Collection.js"(exports) {
|
|
809
809
|
"use strict";
|
|
810
810
|
var createNode = require_createNode();
|
|
811
811
|
var identity = require_identity();
|
|
@@ -946,9 +946,9 @@ var require_Collection = __commonJS({
|
|
|
946
946
|
}
|
|
947
947
|
});
|
|
948
948
|
|
|
949
|
-
// ../node_modules/.bun/yaml@2.
|
|
949
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyComment.js
|
|
950
950
|
var require_stringifyComment = __commonJS({
|
|
951
|
-
"../node_modules/.bun/yaml@2.
|
|
951
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyComment.js"(exports) {
|
|
952
952
|
"use strict";
|
|
953
953
|
var stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, "#");
|
|
954
954
|
function indentComment(comment, indent) {
|
|
@@ -963,9 +963,9 @@ var require_stringifyComment = __commonJS({
|
|
|
963
963
|
}
|
|
964
964
|
});
|
|
965
965
|
|
|
966
|
-
// ../node_modules/.bun/yaml@2.
|
|
966
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/foldFlowLines.js
|
|
967
967
|
var require_foldFlowLines = __commonJS({
|
|
968
|
-
"../node_modules/.bun/yaml@2.
|
|
968
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/foldFlowLines.js"(exports) {
|
|
969
969
|
"use strict";
|
|
970
970
|
var FOLD_FLOW = "flow";
|
|
971
971
|
var FOLD_BLOCK = "block";
|
|
@@ -1099,9 +1099,9 @@ ${indent}${text.slice(fold + 1, end2)}`;
|
|
|
1099
1099
|
}
|
|
1100
1100
|
});
|
|
1101
1101
|
|
|
1102
|
-
// ../node_modules/.bun/yaml@2.
|
|
1102
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyString.js
|
|
1103
1103
|
var require_stringifyString = __commonJS({
|
|
1104
|
-
"../node_modules/.bun/yaml@2.
|
|
1104
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyString.js"(exports) {
|
|
1105
1105
|
"use strict";
|
|
1106
1106
|
var Scalar = require_Scalar();
|
|
1107
1107
|
var foldFlowLines = require_foldFlowLines();
|
|
@@ -1382,9 +1382,9 @@ ${indent}`);
|
|
|
1382
1382
|
}
|
|
1383
1383
|
});
|
|
1384
1384
|
|
|
1385
|
-
// ../node_modules/.bun/yaml@2.
|
|
1385
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringify.js
|
|
1386
1386
|
var require_stringify = __commonJS({
|
|
1387
|
-
"../node_modules/.bun/yaml@2.
|
|
1387
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringify.js"(exports) {
|
|
1388
1388
|
"use strict";
|
|
1389
1389
|
var anchors = require_anchors();
|
|
1390
1390
|
var identity = require_identity();
|
|
@@ -1506,9 +1506,9 @@ ${ctx.indent}${str}`;
|
|
|
1506
1506
|
}
|
|
1507
1507
|
});
|
|
1508
1508
|
|
|
1509
|
-
// ../node_modules/.bun/yaml@2.
|
|
1509
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyPair.js
|
|
1510
1510
|
var require_stringifyPair = __commonJS({
|
|
1511
|
-
"../node_modules/.bun/yaml@2.
|
|
1511
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyPair.js"(exports) {
|
|
1512
1512
|
"use strict";
|
|
1513
1513
|
var identity = require_identity();
|
|
1514
1514
|
var Scalar = require_Scalar();
|
|
@@ -1639,9 +1639,9 @@ ${ctx.indent}`;
|
|
|
1639
1639
|
}
|
|
1640
1640
|
});
|
|
1641
1641
|
|
|
1642
|
-
// ../node_modules/.bun/yaml@2.
|
|
1642
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/log.js
|
|
1643
1643
|
var require_log = __commonJS({
|
|
1644
|
-
"../node_modules/.bun/yaml@2.
|
|
1644
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/log.js"(exports) {
|
|
1645
1645
|
"use strict";
|
|
1646
1646
|
var node_process = __require("process");
|
|
1647
1647
|
function debug(logLevel, ...messages) {
|
|
@@ -1661,9 +1661,9 @@ var require_log = __commonJS({
|
|
|
1661
1661
|
}
|
|
1662
1662
|
});
|
|
1663
1663
|
|
|
1664
|
-
// ../node_modules/.bun/yaml@2.
|
|
1664
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/merge.js
|
|
1665
1665
|
var require_merge = __commonJS({
|
|
1666
|
-
"../node_modules/.bun/yaml@2.
|
|
1666
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/merge.js"(exports) {
|
|
1667
1667
|
"use strict";
|
|
1668
1668
|
var identity = require_identity();
|
|
1669
1669
|
var Scalar = require_Scalar();
|
|
@@ -1721,9 +1721,9 @@ var require_merge = __commonJS({
|
|
|
1721
1721
|
}
|
|
1722
1722
|
});
|
|
1723
1723
|
|
|
1724
|
-
// ../node_modules/.bun/yaml@2.
|
|
1724
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/addPairToJSMap.js
|
|
1725
1725
|
var require_addPairToJSMap = __commonJS({
|
|
1726
|
-
"../node_modules/.bun/yaml@2.
|
|
1726
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/addPairToJSMap.js"(exports) {
|
|
1727
1727
|
"use strict";
|
|
1728
1728
|
var log = require_log();
|
|
1729
1729
|
var merge = require_merge();
|
|
@@ -1785,9 +1785,9 @@ var require_addPairToJSMap = __commonJS({
|
|
|
1785
1785
|
}
|
|
1786
1786
|
});
|
|
1787
1787
|
|
|
1788
|
-
// ../node_modules/.bun/yaml@2.
|
|
1788
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Pair.js
|
|
1789
1789
|
var require_Pair = __commonJS({
|
|
1790
|
-
"../node_modules/.bun/yaml@2.
|
|
1790
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Pair.js"(exports) {
|
|
1791
1791
|
"use strict";
|
|
1792
1792
|
var createNode = require_createNode();
|
|
1793
1793
|
var stringifyPair = require_stringifyPair();
|
|
@@ -1825,9 +1825,9 @@ var require_Pair = __commonJS({
|
|
|
1825
1825
|
}
|
|
1826
1826
|
});
|
|
1827
1827
|
|
|
1828
|
-
// ../node_modules/.bun/yaml@2.
|
|
1828
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyCollection.js
|
|
1829
1829
|
var require_stringifyCollection = __commonJS({
|
|
1830
|
-
"../node_modules/.bun/yaml@2.
|
|
1830
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyCollection.js"(exports) {
|
|
1831
1831
|
"use strict";
|
|
1832
1832
|
var identity = require_identity();
|
|
1833
1833
|
var stringify = require_stringify();
|
|
@@ -1976,9 +1976,9 @@ ${indent}${end}`;
|
|
|
1976
1976
|
}
|
|
1977
1977
|
});
|
|
1978
1978
|
|
|
1979
|
-
// ../node_modules/.bun/yaml@2.
|
|
1979
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLMap.js
|
|
1980
1980
|
var require_YAMLMap = __commonJS({
|
|
1981
|
-
"../node_modules/.bun/yaml@2.
|
|
1981
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLMap.js"(exports) {
|
|
1982
1982
|
"use strict";
|
|
1983
1983
|
var stringifyCollection = require_stringifyCollection();
|
|
1984
1984
|
var addPairToJSMap = require_addPairToJSMap();
|
|
@@ -2120,9 +2120,9 @@ var require_YAMLMap = __commonJS({
|
|
|
2120
2120
|
}
|
|
2121
2121
|
});
|
|
2122
2122
|
|
|
2123
|
-
// ../node_modules/.bun/yaml@2.
|
|
2123
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/map.js
|
|
2124
2124
|
var require_map = __commonJS({
|
|
2125
|
-
"../node_modules/.bun/yaml@2.
|
|
2125
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/map.js"(exports) {
|
|
2126
2126
|
"use strict";
|
|
2127
2127
|
var identity = require_identity();
|
|
2128
2128
|
var YAMLMap = require_YAMLMap();
|
|
@@ -2142,9 +2142,9 @@ var require_map = __commonJS({
|
|
|
2142
2142
|
}
|
|
2143
2143
|
});
|
|
2144
2144
|
|
|
2145
|
-
// ../node_modules/.bun/yaml@2.
|
|
2145
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLSeq.js
|
|
2146
2146
|
var require_YAMLSeq = __commonJS({
|
|
2147
|
-
"../node_modules/.bun/yaml@2.
|
|
2147
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLSeq.js"(exports) {
|
|
2148
2148
|
"use strict";
|
|
2149
2149
|
var createNode = require_createNode();
|
|
2150
2150
|
var stringifyCollection = require_stringifyCollection();
|
|
@@ -2258,9 +2258,9 @@ var require_YAMLSeq = __commonJS({
|
|
|
2258
2258
|
}
|
|
2259
2259
|
});
|
|
2260
2260
|
|
|
2261
|
-
// ../node_modules/.bun/yaml@2.
|
|
2261
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/seq.js
|
|
2262
2262
|
var require_seq = __commonJS({
|
|
2263
|
-
"../node_modules/.bun/yaml@2.
|
|
2263
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/seq.js"(exports) {
|
|
2264
2264
|
"use strict";
|
|
2265
2265
|
var identity = require_identity();
|
|
2266
2266
|
var YAMLSeq = require_YAMLSeq();
|
|
@@ -2280,9 +2280,9 @@ var require_seq = __commonJS({
|
|
|
2280
2280
|
}
|
|
2281
2281
|
});
|
|
2282
2282
|
|
|
2283
|
-
// ../node_modules/.bun/yaml@2.
|
|
2283
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/string.js
|
|
2284
2284
|
var require_string = __commonJS({
|
|
2285
|
-
"../node_modules/.bun/yaml@2.
|
|
2285
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/string.js"(exports) {
|
|
2286
2286
|
"use strict";
|
|
2287
2287
|
var stringifyString = require_stringifyString();
|
|
2288
2288
|
var string = {
|
|
@@ -2299,9 +2299,9 @@ var require_string = __commonJS({
|
|
|
2299
2299
|
}
|
|
2300
2300
|
});
|
|
2301
2301
|
|
|
2302
|
-
// ../node_modules/.bun/yaml@2.
|
|
2302
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/null.js
|
|
2303
2303
|
var require_null = __commonJS({
|
|
2304
|
-
"../node_modules/.bun/yaml@2.
|
|
2304
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/null.js"(exports) {
|
|
2305
2305
|
"use strict";
|
|
2306
2306
|
var Scalar = require_Scalar();
|
|
2307
2307
|
var nullTag = {
|
|
@@ -2317,9 +2317,9 @@ var require_null = __commonJS({
|
|
|
2317
2317
|
}
|
|
2318
2318
|
});
|
|
2319
2319
|
|
|
2320
|
-
// ../node_modules/.bun/yaml@2.
|
|
2320
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/bool.js
|
|
2321
2321
|
var require_bool = __commonJS({
|
|
2322
|
-
"../node_modules/.bun/yaml@2.
|
|
2322
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/bool.js"(exports) {
|
|
2323
2323
|
"use strict";
|
|
2324
2324
|
var Scalar = require_Scalar();
|
|
2325
2325
|
var boolTag = {
|
|
@@ -2341,9 +2341,9 @@ var require_bool = __commonJS({
|
|
|
2341
2341
|
}
|
|
2342
2342
|
});
|
|
2343
2343
|
|
|
2344
|
-
// ../node_modules/.bun/yaml@2.
|
|
2344
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyNumber.js
|
|
2345
2345
|
var require_stringifyNumber = __commonJS({
|
|
2346
|
-
"../node_modules/.bun/yaml@2.
|
|
2346
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyNumber.js"(exports) {
|
|
2347
2347
|
"use strict";
|
|
2348
2348
|
function stringifyNumber({ format, minFractionDigits, tag, value }) {
|
|
2349
2349
|
if (typeof value === "bigint")
|
|
@@ -2368,9 +2368,9 @@ var require_stringifyNumber = __commonJS({
|
|
|
2368
2368
|
}
|
|
2369
2369
|
});
|
|
2370
2370
|
|
|
2371
|
-
// ../node_modules/.bun/yaml@2.
|
|
2371
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/float.js
|
|
2372
2372
|
var require_float = __commonJS({
|
|
2373
|
-
"../node_modules/.bun/yaml@2.
|
|
2373
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/float.js"(exports) {
|
|
2374
2374
|
"use strict";
|
|
2375
2375
|
var Scalar = require_Scalar();
|
|
2376
2376
|
var stringifyNumber = require_stringifyNumber();
|
|
@@ -2414,9 +2414,9 @@ var require_float = __commonJS({
|
|
|
2414
2414
|
}
|
|
2415
2415
|
});
|
|
2416
2416
|
|
|
2417
|
-
// ../node_modules/.bun/yaml@2.
|
|
2417
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/int.js
|
|
2418
2418
|
var require_int = __commonJS({
|
|
2419
|
-
"../node_modules/.bun/yaml@2.
|
|
2419
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/int.js"(exports) {
|
|
2420
2420
|
"use strict";
|
|
2421
2421
|
var stringifyNumber = require_stringifyNumber();
|
|
2422
2422
|
var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
|
|
@@ -2459,9 +2459,9 @@ var require_int = __commonJS({
|
|
|
2459
2459
|
}
|
|
2460
2460
|
});
|
|
2461
2461
|
|
|
2462
|
-
// ../node_modules/.bun/yaml@2.
|
|
2462
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/schema.js
|
|
2463
2463
|
var require_schema = __commonJS({
|
|
2464
|
-
"../node_modules/.bun/yaml@2.
|
|
2464
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/schema.js"(exports) {
|
|
2465
2465
|
"use strict";
|
|
2466
2466
|
var map = require_map();
|
|
2467
2467
|
var _null = require_null();
|
|
@@ -2487,9 +2487,9 @@ var require_schema = __commonJS({
|
|
|
2487
2487
|
}
|
|
2488
2488
|
});
|
|
2489
2489
|
|
|
2490
|
-
// ../node_modules/.bun/yaml@2.
|
|
2490
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/json/schema.js
|
|
2491
2491
|
var require_schema2 = __commonJS({
|
|
2492
|
-
"../node_modules/.bun/yaml@2.
|
|
2492
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/json/schema.js"(exports) {
|
|
2493
2493
|
"use strict";
|
|
2494
2494
|
var Scalar = require_Scalar();
|
|
2495
2495
|
var map = require_map();
|
|
@@ -2554,9 +2554,9 @@ var require_schema2 = __commonJS({
|
|
|
2554
2554
|
}
|
|
2555
2555
|
});
|
|
2556
2556
|
|
|
2557
|
-
// ../node_modules/.bun/yaml@2.
|
|
2557
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/binary.js
|
|
2558
2558
|
var require_binary = __commonJS({
|
|
2559
|
-
"../node_modules/.bun/yaml@2.
|
|
2559
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/binary.js"(exports) {
|
|
2560
2560
|
"use strict";
|
|
2561
2561
|
var node_buffer = __require("buffer");
|
|
2562
2562
|
var Scalar = require_Scalar();
|
|
@@ -2620,9 +2620,9 @@ var require_binary = __commonJS({
|
|
|
2620
2620
|
}
|
|
2621
2621
|
});
|
|
2622
2622
|
|
|
2623
|
-
// ../node_modules/.bun/yaml@2.
|
|
2623
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
|
|
2624
2624
|
var require_pairs = __commonJS({
|
|
2625
|
-
"../node_modules/.bun/yaml@2.
|
|
2625
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/pairs.js"(exports) {
|
|
2626
2626
|
"use strict";
|
|
2627
2627
|
var identity = require_identity();
|
|
2628
2628
|
var Pair = require_Pair();
|
|
@@ -2698,9 +2698,9 @@ ${cn.comment}` : item.comment;
|
|
|
2698
2698
|
}
|
|
2699
2699
|
});
|
|
2700
2700
|
|
|
2701
|
-
// ../node_modules/.bun/yaml@2.
|
|
2701
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/omap.js
|
|
2702
2702
|
var require_omap = __commonJS({
|
|
2703
|
-
"../node_modules/.bun/yaml@2.
|
|
2703
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/omap.js"(exports) {
|
|
2704
2704
|
"use strict";
|
|
2705
2705
|
var identity = require_identity();
|
|
2706
2706
|
var toJS = require_toJS();
|
|
@@ -2776,9 +2776,9 @@ var require_omap = __commonJS({
|
|
|
2776
2776
|
}
|
|
2777
2777
|
});
|
|
2778
2778
|
|
|
2779
|
-
// ../node_modules/.bun/yaml@2.
|
|
2779
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/bool.js
|
|
2780
2780
|
var require_bool2 = __commonJS({
|
|
2781
|
-
"../node_modules/.bun/yaml@2.
|
|
2781
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/bool.js"(exports) {
|
|
2782
2782
|
"use strict";
|
|
2783
2783
|
var Scalar = require_Scalar();
|
|
2784
2784
|
function boolStringify({ value, source }, ctx) {
|
|
@@ -2808,9 +2808,9 @@ var require_bool2 = __commonJS({
|
|
|
2808
2808
|
}
|
|
2809
2809
|
});
|
|
2810
2810
|
|
|
2811
|
-
// ../node_modules/.bun/yaml@2.
|
|
2811
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/float.js
|
|
2812
2812
|
var require_float2 = __commonJS({
|
|
2813
|
-
"../node_modules/.bun/yaml@2.
|
|
2813
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/float.js"(exports) {
|
|
2814
2814
|
"use strict";
|
|
2815
2815
|
var Scalar = require_Scalar();
|
|
2816
2816
|
var stringifyNumber = require_stringifyNumber();
|
|
@@ -2857,9 +2857,9 @@ var require_float2 = __commonJS({
|
|
|
2857
2857
|
}
|
|
2858
2858
|
});
|
|
2859
2859
|
|
|
2860
|
-
// ../node_modules/.bun/yaml@2.
|
|
2860
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/int.js
|
|
2861
2861
|
var require_int2 = __commonJS({
|
|
2862
|
-
"../node_modules/.bun/yaml@2.
|
|
2862
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/int.js"(exports) {
|
|
2863
2863
|
"use strict";
|
|
2864
2864
|
var stringifyNumber = require_stringifyNumber();
|
|
2865
2865
|
var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
|
|
@@ -2936,9 +2936,9 @@ var require_int2 = __commonJS({
|
|
|
2936
2936
|
}
|
|
2937
2937
|
});
|
|
2938
2938
|
|
|
2939
|
-
// ../node_modules/.bun/yaml@2.
|
|
2939
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/set.js
|
|
2940
2940
|
var require_set = __commonJS({
|
|
2941
|
-
"../node_modules/.bun/yaml@2.
|
|
2941
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/set.js"(exports) {
|
|
2942
2942
|
"use strict";
|
|
2943
2943
|
var identity = require_identity();
|
|
2944
2944
|
var Pair = require_Pair();
|
|
@@ -3025,9 +3025,9 @@ var require_set = __commonJS({
|
|
|
3025
3025
|
}
|
|
3026
3026
|
});
|
|
3027
3027
|
|
|
3028
|
-
// ../node_modules/.bun/yaml@2.
|
|
3028
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
|
|
3029
3029
|
var require_timestamp = __commonJS({
|
|
3030
|
-
"../node_modules/.bun/yaml@2.
|
|
3030
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js"(exports) {
|
|
3031
3031
|
"use strict";
|
|
3032
3032
|
var stringifyNumber = require_stringifyNumber();
|
|
3033
3033
|
function parseSexagesimal(str, asBigInt) {
|
|
@@ -3113,9 +3113,9 @@ var require_timestamp = __commonJS({
|
|
|
3113
3113
|
}
|
|
3114
3114
|
});
|
|
3115
3115
|
|
|
3116
|
-
// ../node_modules/.bun/yaml@2.
|
|
3116
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/schema.js
|
|
3117
3117
|
var require_schema3 = __commonJS({
|
|
3118
|
-
"../node_modules/.bun/yaml@2.
|
|
3118
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/schema.js"(exports) {
|
|
3119
3119
|
"use strict";
|
|
3120
3120
|
var map = require_map();
|
|
3121
3121
|
var _null = require_null();
|
|
@@ -3157,9 +3157,9 @@ var require_schema3 = __commonJS({
|
|
|
3157
3157
|
}
|
|
3158
3158
|
});
|
|
3159
3159
|
|
|
3160
|
-
// ../node_modules/.bun/yaml@2.
|
|
3160
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/tags.js
|
|
3161
3161
|
var require_tags = __commonJS({
|
|
3162
|
-
"../node_modules/.bun/yaml@2.
|
|
3162
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/tags.js"(exports) {
|
|
3163
3163
|
"use strict";
|
|
3164
3164
|
var map = require_map();
|
|
3165
3165
|
var _null = require_null();
|
|
@@ -3251,9 +3251,9 @@ var require_tags = __commonJS({
|
|
|
3251
3251
|
}
|
|
3252
3252
|
});
|
|
3253
3253
|
|
|
3254
|
-
// ../node_modules/.bun/yaml@2.
|
|
3254
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/Schema.js
|
|
3255
3255
|
var require_Schema = __commonJS({
|
|
3256
|
-
"../node_modules/.bun/yaml@2.
|
|
3256
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/Schema.js"(exports) {
|
|
3257
3257
|
"use strict";
|
|
3258
3258
|
var identity = require_identity();
|
|
3259
3259
|
var map = require_map();
|
|
@@ -3283,9 +3283,9 @@ var require_Schema = __commonJS({
|
|
|
3283
3283
|
}
|
|
3284
3284
|
});
|
|
3285
3285
|
|
|
3286
|
-
// ../node_modules/.bun/yaml@2.
|
|
3286
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyDocument.js
|
|
3287
3287
|
var require_stringifyDocument = __commonJS({
|
|
3288
|
-
"../node_modules/.bun/yaml@2.
|
|
3288
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyDocument.js"(exports) {
|
|
3289
3289
|
"use strict";
|
|
3290
3290
|
var identity = require_identity();
|
|
3291
3291
|
var stringify = require_stringify();
|
|
@@ -3363,9 +3363,9 @@ var require_stringifyDocument = __commonJS({
|
|
|
3363
3363
|
}
|
|
3364
3364
|
});
|
|
3365
3365
|
|
|
3366
|
-
// ../node_modules/.bun/yaml@2.
|
|
3366
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/Document.js
|
|
3367
3367
|
var require_Document = __commonJS({
|
|
3368
|
-
"../node_modules/.bun/yaml@2.
|
|
3368
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/Document.js"(exports) {
|
|
3369
3369
|
"use strict";
|
|
3370
3370
|
var Alias = require_Alias();
|
|
3371
3371
|
var Collection = require_Collection();
|
|
@@ -3672,9 +3672,9 @@ var require_Document = __commonJS({
|
|
|
3672
3672
|
}
|
|
3673
3673
|
});
|
|
3674
3674
|
|
|
3675
|
-
// ../node_modules/.bun/yaml@2.
|
|
3675
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/errors.js
|
|
3676
3676
|
var require_errors = __commonJS({
|
|
3677
|
-
"../node_modules/.bun/yaml@2.
|
|
3677
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/errors.js"(exports) {
|
|
3678
3678
|
"use strict";
|
|
3679
3679
|
var YAMLError = class extends Error {
|
|
3680
3680
|
constructor(name, pos, code, message) {
|
|
@@ -3737,9 +3737,9 @@ ${pointer}
|
|
|
3737
3737
|
}
|
|
3738
3738
|
});
|
|
3739
3739
|
|
|
3740
|
-
// ../node_modules/.bun/yaml@2.
|
|
3740
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-props.js
|
|
3741
3741
|
var require_resolve_props = __commonJS({
|
|
3742
|
-
"../node_modules/.bun/yaml@2.
|
|
3742
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-props.js"(exports) {
|
|
3743
3743
|
"use strict";
|
|
3744
3744
|
function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {
|
|
3745
3745
|
let spaceBefore = false;
|
|
@@ -3871,9 +3871,9 @@ var require_resolve_props = __commonJS({
|
|
|
3871
3871
|
}
|
|
3872
3872
|
});
|
|
3873
3873
|
|
|
3874
|
-
// ../node_modules/.bun/yaml@2.
|
|
3874
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-contains-newline.js
|
|
3875
3875
|
var require_util_contains_newline = __commonJS({
|
|
3876
|
-
"../node_modules/.bun/yaml@2.
|
|
3876
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-contains-newline.js"(exports) {
|
|
3877
3877
|
"use strict";
|
|
3878
3878
|
function containsNewline(key) {
|
|
3879
3879
|
if (!key)
|
|
@@ -3913,9 +3913,9 @@ var require_util_contains_newline = __commonJS({
|
|
|
3913
3913
|
}
|
|
3914
3914
|
});
|
|
3915
3915
|
|
|
3916
|
-
// ../node_modules/.bun/yaml@2.
|
|
3916
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-flow-indent-check.js
|
|
3917
3917
|
var require_util_flow_indent_check = __commonJS({
|
|
3918
|
-
"../node_modules/.bun/yaml@2.
|
|
3918
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-flow-indent-check.js"(exports) {
|
|
3919
3919
|
"use strict";
|
|
3920
3920
|
var utilContainsNewline = require_util_contains_newline();
|
|
3921
3921
|
function flowIndentCheck(indent, fc, onError) {
|
|
@@ -3931,9 +3931,9 @@ var require_util_flow_indent_check = __commonJS({
|
|
|
3931
3931
|
}
|
|
3932
3932
|
});
|
|
3933
3933
|
|
|
3934
|
-
// ../node_modules/.bun/yaml@2.
|
|
3934
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-map-includes.js
|
|
3935
3935
|
var require_util_map_includes = __commonJS({
|
|
3936
|
-
"../node_modules/.bun/yaml@2.
|
|
3936
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-map-includes.js"(exports) {
|
|
3937
3937
|
"use strict";
|
|
3938
3938
|
var identity = require_identity();
|
|
3939
3939
|
function mapIncludes(ctx, items, search) {
|
|
@@ -3947,9 +3947,9 @@ var require_util_map_includes = __commonJS({
|
|
|
3947
3947
|
}
|
|
3948
3948
|
});
|
|
3949
3949
|
|
|
3950
|
-
// ../node_modules/.bun/yaml@2.
|
|
3950
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-map.js
|
|
3951
3951
|
var require_resolve_block_map = __commonJS({
|
|
3952
|
-
"../node_modules/.bun/yaml@2.
|
|
3952
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-map.js"(exports) {
|
|
3953
3953
|
"use strict";
|
|
3954
3954
|
var Pair = require_Pair();
|
|
3955
3955
|
var YAMLMap = require_YAMLMap();
|
|
@@ -4055,9 +4055,9 @@ var require_resolve_block_map = __commonJS({
|
|
|
4055
4055
|
}
|
|
4056
4056
|
});
|
|
4057
4057
|
|
|
4058
|
-
// ../node_modules/.bun/yaml@2.
|
|
4058
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-seq.js
|
|
4059
4059
|
var require_resolve_block_seq = __commonJS({
|
|
4060
|
-
"../node_modules/.bun/yaml@2.
|
|
4060
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-seq.js"(exports) {
|
|
4061
4061
|
"use strict";
|
|
4062
4062
|
var YAMLSeq = require_YAMLSeq();
|
|
4063
4063
|
var resolveProps = require_resolve_props();
|
|
@@ -4106,9 +4106,9 @@ var require_resolve_block_seq = __commonJS({
|
|
|
4106
4106
|
}
|
|
4107
4107
|
});
|
|
4108
4108
|
|
|
4109
|
-
// ../node_modules/.bun/yaml@2.
|
|
4109
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-end.js
|
|
4110
4110
|
var require_resolve_end = __commonJS({
|
|
4111
|
-
"../node_modules/.bun/yaml@2.
|
|
4111
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-end.js"(exports) {
|
|
4112
4112
|
"use strict";
|
|
4113
4113
|
function resolveEnd(end, offset, reqSpace, onError) {
|
|
4114
4114
|
let comment = "";
|
|
@@ -4149,9 +4149,9 @@ var require_resolve_end = __commonJS({
|
|
|
4149
4149
|
}
|
|
4150
4150
|
});
|
|
4151
4151
|
|
|
4152
|
-
// ../node_modules/.bun/yaml@2.
|
|
4152
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-collection.js
|
|
4153
4153
|
var require_resolve_flow_collection = __commonJS({
|
|
4154
|
-
"../node_modules/.bun/yaml@2.
|
|
4154
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-collection.js"(exports) {
|
|
4155
4155
|
"use strict";
|
|
4156
4156
|
var identity = require_identity();
|
|
4157
4157
|
var Pair = require_Pair();
|
|
@@ -4343,9 +4343,9 @@ var require_resolve_flow_collection = __commonJS({
|
|
|
4343
4343
|
}
|
|
4344
4344
|
});
|
|
4345
4345
|
|
|
4346
|
-
// ../node_modules/.bun/yaml@2.
|
|
4346
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-collection.js
|
|
4347
4347
|
var require_compose_collection = __commonJS({
|
|
4348
|
-
"../node_modules/.bun/yaml@2.
|
|
4348
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-collection.js"(exports) {
|
|
4349
4349
|
"use strict";
|
|
4350
4350
|
var identity = require_identity();
|
|
4351
4351
|
var Scalar = require_Scalar();
|
|
@@ -4408,9 +4408,9 @@ var require_compose_collection = __commonJS({
|
|
|
4408
4408
|
}
|
|
4409
4409
|
});
|
|
4410
4410
|
|
|
4411
|
-
// ../node_modules/.bun/yaml@2.
|
|
4411
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-scalar.js
|
|
4412
4412
|
var require_resolve_block_scalar = __commonJS({
|
|
4413
|
-
"../node_modules/.bun/yaml@2.
|
|
4413
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-scalar.js"(exports) {
|
|
4414
4414
|
"use strict";
|
|
4415
4415
|
var Scalar = require_Scalar();
|
|
4416
4416
|
function resolveBlockScalar(ctx, scalar, onError) {
|
|
@@ -4591,9 +4591,9 @@ var require_resolve_block_scalar = __commonJS({
|
|
|
4591
4591
|
}
|
|
4592
4592
|
});
|
|
4593
4593
|
|
|
4594
|
-
// ../node_modules/.bun/yaml@2.
|
|
4594
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-scalar.js
|
|
4595
4595
|
var require_resolve_flow_scalar = __commonJS({
|
|
4596
|
-
"../node_modules/.bun/yaml@2.
|
|
4596
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-scalar.js"(exports) {
|
|
4597
4597
|
"use strict";
|
|
4598
4598
|
var Scalar = require_Scalar();
|
|
4599
4599
|
var resolveEnd = require_resolve_end();
|
|
@@ -4811,9 +4811,9 @@ var require_resolve_flow_scalar = __commonJS({
|
|
|
4811
4811
|
}
|
|
4812
4812
|
});
|
|
4813
4813
|
|
|
4814
|
-
// ../node_modules/.bun/yaml@2.
|
|
4814
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-scalar.js
|
|
4815
4815
|
var require_compose_scalar = __commonJS({
|
|
4816
|
-
"../node_modules/.bun/yaml@2.
|
|
4816
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-scalar.js"(exports) {
|
|
4817
4817
|
"use strict";
|
|
4818
4818
|
var identity = require_identity();
|
|
4819
4819
|
var Scalar = require_Scalar();
|
|
@@ -4892,9 +4892,9 @@ var require_compose_scalar = __commonJS({
|
|
|
4892
4892
|
}
|
|
4893
4893
|
});
|
|
4894
4894
|
|
|
4895
|
-
// ../node_modules/.bun/yaml@2.
|
|
4895
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-empty-scalar-position.js
|
|
4896
4896
|
var require_util_empty_scalar_position = __commonJS({
|
|
4897
|
-
"../node_modules/.bun/yaml@2.
|
|
4897
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-empty-scalar-position.js"(exports) {
|
|
4898
4898
|
"use strict";
|
|
4899
4899
|
function emptyScalarPosition(offset, before, pos) {
|
|
4900
4900
|
if (before) {
|
|
@@ -4922,9 +4922,9 @@ var require_util_empty_scalar_position = __commonJS({
|
|
|
4922
4922
|
}
|
|
4923
4923
|
});
|
|
4924
4924
|
|
|
4925
|
-
// ../node_modules/.bun/yaml@2.
|
|
4925
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-node.js
|
|
4926
4926
|
var require_compose_node = __commonJS({
|
|
4927
|
-
"../node_modules/.bun/yaml@2.
|
|
4927
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-node.js"(exports) {
|
|
4928
4928
|
"use strict";
|
|
4929
4929
|
var Alias = require_Alias();
|
|
4930
4930
|
var identity = require_identity();
|
|
@@ -5028,9 +5028,9 @@ var require_compose_node = __commonJS({
|
|
|
5028
5028
|
}
|
|
5029
5029
|
});
|
|
5030
5030
|
|
|
5031
|
-
// ../node_modules/.bun/yaml@2.
|
|
5031
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-doc.js
|
|
5032
5032
|
var require_compose_doc = __commonJS({
|
|
5033
|
-
"../node_modules/.bun/yaml@2.
|
|
5033
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-doc.js"(exports) {
|
|
5034
5034
|
"use strict";
|
|
5035
5035
|
var Document = require_Document();
|
|
5036
5036
|
var composeNode = require_compose_node();
|
|
@@ -5071,9 +5071,9 @@ var require_compose_doc = __commonJS({
|
|
|
5071
5071
|
}
|
|
5072
5072
|
});
|
|
5073
5073
|
|
|
5074
|
-
// ../node_modules/.bun/yaml@2.
|
|
5074
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/composer.js
|
|
5075
5075
|
var require_composer = __commonJS({
|
|
5076
|
-
"../node_modules/.bun/yaml@2.
|
|
5076
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/composer.js"(exports) {
|
|
5077
5077
|
"use strict";
|
|
5078
5078
|
var node_process = __require("process");
|
|
5079
5079
|
var directives = require_directives();
|
|
@@ -5155,8 +5155,10 @@ ${cb}` : comment;
|
|
|
5155
5155
|
}
|
|
5156
5156
|
}
|
|
5157
5157
|
if (afterDoc) {
|
|
5158
|
-
|
|
5159
|
-
|
|
5158
|
+
for (let i = 0; i < this.errors.length; ++i)
|
|
5159
|
+
doc.errors.push(this.errors[i]);
|
|
5160
|
+
for (let i = 0; i < this.warnings.length; ++i)
|
|
5161
|
+
doc.warnings.push(this.warnings[i]);
|
|
5160
5162
|
} else {
|
|
5161
5163
|
doc.errors = this.errors;
|
|
5162
5164
|
doc.warnings = this.warnings;
|
|
@@ -5277,9 +5279,9 @@ ${end.comment}` : end.comment;
|
|
|
5277
5279
|
}
|
|
5278
5280
|
});
|
|
5279
5281
|
|
|
5280
|
-
// ../node_modules/.bun/yaml@2.
|
|
5282
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-scalar.js
|
|
5281
5283
|
var require_cst_scalar = __commonJS({
|
|
5282
|
-
"../node_modules/.bun/yaml@2.
|
|
5284
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-scalar.js"(exports) {
|
|
5283
5285
|
"use strict";
|
|
5284
5286
|
var resolveBlockScalar = require_resolve_block_scalar();
|
|
5285
5287
|
var resolveFlowScalar = require_resolve_flow_scalar();
|
|
@@ -5462,9 +5464,9 @@ var require_cst_scalar = __commonJS({
|
|
|
5462
5464
|
}
|
|
5463
5465
|
});
|
|
5464
5466
|
|
|
5465
|
-
// ../node_modules/.bun/yaml@2.
|
|
5467
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-stringify.js
|
|
5466
5468
|
var require_cst_stringify = __commonJS({
|
|
5467
|
-
"../node_modules/.bun/yaml@2.
|
|
5469
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-stringify.js"(exports) {
|
|
5468
5470
|
"use strict";
|
|
5469
5471
|
var stringify = (cst) => "type" in cst ? stringifyToken(cst) : stringifyItem(cst);
|
|
5470
5472
|
function stringifyToken(token) {
|
|
@@ -5523,9 +5525,9 @@ var require_cst_stringify = __commonJS({
|
|
|
5523
5525
|
}
|
|
5524
5526
|
});
|
|
5525
5527
|
|
|
5526
|
-
// ../node_modules/.bun/yaml@2.
|
|
5528
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-visit.js
|
|
5527
5529
|
var require_cst_visit = __commonJS({
|
|
5528
|
-
"../node_modules/.bun/yaml@2.
|
|
5530
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-visit.js"(exports) {
|
|
5529
5531
|
"use strict";
|
|
5530
5532
|
var BREAK = /* @__PURE__ */ Symbol("break visit");
|
|
5531
5533
|
var SKIP = /* @__PURE__ */ Symbol("skip children");
|
|
@@ -5585,9 +5587,9 @@ var require_cst_visit = __commonJS({
|
|
|
5585
5587
|
}
|
|
5586
5588
|
});
|
|
5587
5589
|
|
|
5588
|
-
// ../node_modules/.bun/yaml@2.
|
|
5590
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst.js
|
|
5589
5591
|
var require_cst = __commonJS({
|
|
5590
|
-
"../node_modules/.bun/yaml@2.
|
|
5592
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst.js"(exports) {
|
|
5591
5593
|
"use strict";
|
|
5592
5594
|
var cstScalar = require_cst_scalar();
|
|
5593
5595
|
var cstStringify = require_cst_stringify();
|
|
@@ -5687,9 +5689,9 @@ var require_cst = __commonJS({
|
|
|
5687
5689
|
}
|
|
5688
5690
|
});
|
|
5689
5691
|
|
|
5690
|
-
// ../node_modules/.bun/yaml@2.
|
|
5692
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/lexer.js
|
|
5691
5693
|
var require_lexer = __commonJS({
|
|
5692
|
-
"../node_modules/.bun/yaml@2.
|
|
5694
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/lexer.js"(exports) {
|
|
5693
5695
|
"use strict";
|
|
5694
5696
|
var cst = require_cst();
|
|
5695
5697
|
function isEmpty(ch) {
|
|
@@ -5889,7 +5891,7 @@ var require_lexer = __commonJS({
|
|
|
5889
5891
|
const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));
|
|
5890
5892
|
this.indentNext = this.indentValue + 1;
|
|
5891
5893
|
this.indentValue += n;
|
|
5892
|
-
return
|
|
5894
|
+
return "block-start";
|
|
5893
5895
|
}
|
|
5894
5896
|
return "doc";
|
|
5895
5897
|
}
|
|
@@ -6188,28 +6190,38 @@ var require_lexer = __commonJS({
|
|
|
6188
6190
|
return 0;
|
|
6189
6191
|
}
|
|
6190
6192
|
*pushIndicators() {
|
|
6191
|
-
|
|
6192
|
-
|
|
6193
|
-
|
|
6194
|
-
|
|
6195
|
-
|
|
6196
|
-
|
|
6197
|
-
|
|
6198
|
-
|
|
6199
|
-
|
|
6200
|
-
|
|
6201
|
-
|
|
6202
|
-
|
|
6203
|
-
|
|
6204
|
-
|
|
6205
|
-
|
|
6206
|
-
|
|
6207
|
-
|
|
6208
|
-
|
|
6193
|
+
let n = 0;
|
|
6194
|
+
loop: while (true) {
|
|
6195
|
+
switch (this.charAt(0)) {
|
|
6196
|
+
case "!":
|
|
6197
|
+
n += yield* this.pushTag();
|
|
6198
|
+
n += yield* this.pushSpaces(true);
|
|
6199
|
+
continue loop;
|
|
6200
|
+
case "&":
|
|
6201
|
+
n += yield* this.pushUntil(isNotAnchorChar);
|
|
6202
|
+
n += yield* this.pushSpaces(true);
|
|
6203
|
+
continue loop;
|
|
6204
|
+
case "-":
|
|
6205
|
+
// this is an error
|
|
6206
|
+
case "?":
|
|
6207
|
+
// this is an error outside flow collections
|
|
6208
|
+
case ":": {
|
|
6209
|
+
const inFlow = this.flowLevel > 0;
|
|
6210
|
+
const ch1 = this.charAt(1);
|
|
6211
|
+
if (isEmpty(ch1) || inFlow && flowIndicatorChars.has(ch1)) {
|
|
6212
|
+
if (!inFlow)
|
|
6213
|
+
this.indentNext = this.indentValue + 1;
|
|
6214
|
+
else if (this.flowKey)
|
|
6215
|
+
this.flowKey = false;
|
|
6216
|
+
n += yield* this.pushCount(1);
|
|
6217
|
+
n += yield* this.pushSpaces(true);
|
|
6218
|
+
continue loop;
|
|
6219
|
+
}
|
|
6209
6220
|
}
|
|
6210
6221
|
}
|
|
6222
|
+
break loop;
|
|
6211
6223
|
}
|
|
6212
|
-
return
|
|
6224
|
+
return n;
|
|
6213
6225
|
}
|
|
6214
6226
|
*pushTag() {
|
|
6215
6227
|
if (this.charAt(1) === "<") {
|
|
@@ -6266,9 +6278,9 @@ var require_lexer = __commonJS({
|
|
|
6266
6278
|
}
|
|
6267
6279
|
});
|
|
6268
6280
|
|
|
6269
|
-
// ../node_modules/.bun/yaml@2.
|
|
6281
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/line-counter.js
|
|
6270
6282
|
var require_line_counter = __commonJS({
|
|
6271
|
-
"../node_modules/.bun/yaml@2.
|
|
6283
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/line-counter.js"(exports) {
|
|
6272
6284
|
"use strict";
|
|
6273
6285
|
var LineCounter = class {
|
|
6274
6286
|
constructor() {
|
|
@@ -6297,9 +6309,9 @@ var require_line_counter = __commonJS({
|
|
|
6297
6309
|
}
|
|
6298
6310
|
});
|
|
6299
6311
|
|
|
6300
|
-
// ../node_modules/.bun/yaml@2.
|
|
6312
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/parser.js
|
|
6301
6313
|
var require_parser = __commonJS({
|
|
6302
|
-
"../node_modules/.bun/yaml@2.
|
|
6314
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/parser.js"(exports) {
|
|
6303
6315
|
"use strict";
|
|
6304
6316
|
var node_process = __require("process");
|
|
6305
6317
|
var cst = require_cst();
|
|
@@ -6368,6 +6380,13 @@ var require_parser = __commonJS({
|
|
|
6368
6380
|
}
|
|
6369
6381
|
return prev.splice(i, prev.length);
|
|
6370
6382
|
}
|
|
6383
|
+
function arrayPushArray(target, source) {
|
|
6384
|
+
if (source.length < 1e5)
|
|
6385
|
+
Array.prototype.push.apply(target, source);
|
|
6386
|
+
else
|
|
6387
|
+
for (let i = 0; i < source.length; ++i)
|
|
6388
|
+
target.push(source[i]);
|
|
6389
|
+
}
|
|
6371
6390
|
function fixFlowSeqItems(fc) {
|
|
6372
6391
|
if (fc.start.type === "flow-seq-start") {
|
|
6373
6392
|
for (const it of fc.items) {
|
|
@@ -6377,11 +6396,11 @@ var require_parser = __commonJS({
|
|
|
6377
6396
|
delete it.key;
|
|
6378
6397
|
if (isFlowToken(it.value)) {
|
|
6379
6398
|
if (it.value.end)
|
|
6380
|
-
|
|
6399
|
+
arrayPushArray(it.value.end, it.sep);
|
|
6381
6400
|
else
|
|
6382
6401
|
it.value.end = it.sep;
|
|
6383
6402
|
} else
|
|
6384
|
-
|
|
6403
|
+
arrayPushArray(it.start, it.sep);
|
|
6385
6404
|
delete it.sep;
|
|
6386
6405
|
}
|
|
6387
6406
|
}
|
|
@@ -6736,7 +6755,7 @@ var require_parser = __commonJS({
|
|
|
6736
6755
|
const prev = map.items[map.items.length - 2];
|
|
6737
6756
|
const end = prev?.value?.end;
|
|
6738
6757
|
if (Array.isArray(end)) {
|
|
6739
|
-
|
|
6758
|
+
arrayPushArray(end, it.start);
|
|
6740
6759
|
end.push(this.sourceToken);
|
|
6741
6760
|
map.items.pop();
|
|
6742
6761
|
return;
|
|
@@ -6924,7 +6943,7 @@ var require_parser = __commonJS({
|
|
|
6924
6943
|
const prev = seq.items[seq.items.length - 2];
|
|
6925
6944
|
const end = prev?.value?.end;
|
|
6926
6945
|
if (Array.isArray(end)) {
|
|
6927
|
-
|
|
6946
|
+
arrayPushArray(end, it.start);
|
|
6928
6947
|
end.push(this.sourceToken);
|
|
6929
6948
|
seq.items.pop();
|
|
6930
6949
|
return;
|
|
@@ -7164,9 +7183,9 @@ var require_parser = __commonJS({
|
|
|
7164
7183
|
}
|
|
7165
7184
|
});
|
|
7166
7185
|
|
|
7167
|
-
// ../node_modules/.bun/yaml@2.
|
|
7186
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/public-api.js
|
|
7168
7187
|
var require_public_api = __commonJS({
|
|
7169
|
-
"../node_modules/.bun/yaml@2.
|
|
7188
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/public-api.js"(exports) {
|
|
7170
7189
|
"use strict";
|
|
7171
7190
|
var composer = require_composer();
|
|
7172
7191
|
var Document = require_Document();
|
|
@@ -7261,9 +7280,9 @@ var require_public_api = __commonJS({
|
|
|
7261
7280
|
}
|
|
7262
7281
|
});
|
|
7263
7282
|
|
|
7264
|
-
// ../node_modules/.bun/yaml@2.
|
|
7283
|
+
// ../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/index.js
|
|
7265
7284
|
var require_dist = __commonJS({
|
|
7266
|
-
"../node_modules/.bun/yaml@2.
|
|
7285
|
+
"../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/index.js"(exports) {
|
|
7267
7286
|
"use strict";
|
|
7268
7287
|
var composer = require_composer();
|
|
7269
7288
|
var Document = require_Document();
|
|
@@ -7318,7 +7337,30 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
7318
7337
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
7319
7338
|
import { z } from "zod";
|
|
7320
7339
|
|
|
7340
|
+
// ../shared/src/type-guards.ts
|
|
7341
|
+
function isRecord(value) {
|
|
7342
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
7343
|
+
}
|
|
7344
|
+
|
|
7321
7345
|
// ../shared/src/event.ts
|
|
7346
|
+
var CLAUDE_PARTIAL_MESSAGE_EVENT_TYPE = "claude-partial-message";
|
|
7347
|
+
function coerceClaudePartialMessagePayload(payload) {
|
|
7348
|
+
const streamId = payload.streamId;
|
|
7349
|
+
if (typeof streamId !== "string" || !streamId) return null;
|
|
7350
|
+
const parentToolUseId = payload.parent_tool_use_id;
|
|
7351
|
+
const text = typeof payload.text === "string" && payload.text ? payload.text : void 0;
|
|
7352
|
+
const thinking = typeof payload.thinking === "string" && payload.thinking ? payload.thinking : void 0;
|
|
7353
|
+
if (!text && !thinking) return null;
|
|
7354
|
+
return {
|
|
7355
|
+
streamId,
|
|
7356
|
+
parent_tool_use_id: typeof parentToolUseId === "string" ? parentToolUseId : null,
|
|
7357
|
+
...text ? { text } : {},
|
|
7358
|
+
...thinking ? { thinking } : {},
|
|
7359
|
+
status: payload.status === "completed" ? "completed" : "in_progress"
|
|
7360
|
+
};
|
|
7361
|
+
}
|
|
7362
|
+
var USER_MESSAGE_ID_PAYLOAD_KEY = "replicasMessageId";
|
|
7363
|
+
var CODEX_ASP_ITEM_ID_PAYLOAD_KEY = "codexAspItemId";
|
|
7322
7364
|
var CODEX_QUOTA_STATUS_EVENT_TYPE = "codex-quota-status";
|
|
7323
7365
|
|
|
7324
7366
|
// ../shared/src/pricing.ts
|
|
@@ -7398,20 +7440,194 @@ var SANDBOX_LIFECYCLE = {
|
|
|
7398
7440
|
AUTO_DELETE_MINUTES: -1,
|
|
7399
7441
|
SSH_TOKEN_EXPIRATION_MINUTES: 3 * 60
|
|
7400
7442
|
};
|
|
7401
|
-
|
|
7402
|
-
|
|
7403
|
-
|
|
7404
|
-
|
|
7405
|
-
|
|
7406
|
-
|
|
7407
|
-
|
|
7408
|
-
|
|
7409
|
-
|
|
7410
|
-
|
|
7411
|
-
|
|
7443
|
+
var WORKSPACE_SIZES = ["small", "large"];
|
|
7444
|
+
var INVALID_WORKSPACE_SIZE_ERROR = `Invalid size: must be one of ${WORKSPACE_SIZES.join(", ")}`;
|
|
7445
|
+
|
|
7446
|
+
// ../shared/src/default-skills/replicas-agent/abilities/computer.ts
|
|
7447
|
+
var SECTION = `### Computer use (Linux desktop control)
|
|
7448
|
+
Drive the workspace's Linux desktop - open a browser, click, type, scroll, screenshot, record - via the \`replicas computer\` CLI. Every Replicas workspace boots with Xvfb / openbox / x11vnc / noVNC pre-installed and the live noVNC viewer is automatically published as an authenticated preview, so a \`Desktop\` tab is always available in the dashboard. Use \`replicas computer info\` to get the viewer URL when you want to share it (e.g. point a user on Slack at the live stream).
|
|
7449
|
+
|
|
7450
|
+
**Reference:** \`references/COMPUTER-USE.md\`
|
|
7451
|
+
|
|
7452
|
+
Use this when:
|
|
7453
|
+
- A task requires interacting with a website, web app, or desktop application that has no usable API
|
|
7454
|
+
- You want the user to watch the agent work - they can open the \`Desktop\` tab, or you can share the URL from \`replicas computer info\`
|
|
7455
|
+
- You're testing UI changes in a browser before reporting them as done
|
|
7456
|
+
- You want to record a screen capture of a task as proof to share back`;
|
|
7457
|
+
var REFERENCE = `# Computer use (Linux desktop control)
|
|
7458
|
+
|
|
7459
|
+
Every Replicas workspace boots with a full Linux desktop stack - Xvfb (1920\xD71080), openbox, tint2, x11vnc, noVNC, ffmpeg, and Google Chrome. The engine also auto-registers the noVNC viewer (port 6080) as an authenticated preview at startup, so the dashboard \`Desktop\` tab is live the moment the workspace is up. You drive the desktop through the \`replicas computer\` CLI.
|
|
7460
|
+
|
|
7461
|
+
Use this for anything the user can't reasonably do via an API - clicking around web apps, filling forms, testing UI changes, dragging files between desktop apps, recording a walkthrough.
|
|
7462
|
+
|
|
7463
|
+
## When to use it
|
|
7464
|
+
|
|
7465
|
+
- **Prefer real APIs first.** If a task has a CLI or HTTP API (GitHub, Linear, Slack, Replicas itself), use that. Driving a UI is slower, flakier, and less auditable.
|
|
7466
|
+
- **Use it when there's no API**: testing a frontend you just changed, navigating a vendor portal, demonstrating a flow on video.
|
|
7467
|
+
- **Use it when the user wants to watch.** The dashboard already shows a \`Desktop\` tab. If you're talking to the user somewhere else (e.g. Slack), call \`replicas computer info\` to get the viewer URL and paste it in.
|
|
7468
|
+
|
|
7469
|
+
## Never use raw \`xdotool\` / \`scrot\` / \`ffmpeg\` directly
|
|
7470
|
+
|
|
7471
|
+
The CLI is the canonical surface. Chat transcripts that show \`DISPLAY=:99 xdotool key Return\` are noisy and break when the underlying stack changes. Always call the CLI:
|
|
7472
|
+
|
|
7473
|
+
\`\`\`bash
|
|
7474
|
+
# DO
|
|
7475
|
+
replicas computer key Return
|
|
7476
|
+
replicas computer screenshot /tmp/state.png
|
|
7477
|
+
|
|
7478
|
+
# DON'T
|
|
7479
|
+
DISPLAY=:99 xdotool key Return
|
|
7480
|
+
scrot /tmp/state.png
|
|
7481
|
+
\`\`\`
|
|
7482
|
+
|
|
7483
|
+
## Quickstart
|
|
7484
|
+
|
|
7485
|
+
\`\`\`bash
|
|
7486
|
+
# 1) (Optional) Get the live viewer URL so you can share it with the user.
|
|
7487
|
+
# The desktop is already running and the preview is already registered -
|
|
7488
|
+
# this just looks up the URL.
|
|
7489
|
+
replicas computer info
|
|
7490
|
+
|
|
7491
|
+
# 2) Launch a browser on the workspace display.
|
|
7492
|
+
replicas computer launch chrome
|
|
7493
|
+
|
|
7494
|
+
# 3) Take a screenshot so you can see what's there.
|
|
7495
|
+
replicas computer screenshot /tmp/state.png
|
|
7496
|
+
# (Read the PNG yourself before deciding where to click.)
|
|
7497
|
+
|
|
7498
|
+
# 4) Drive the UI.
|
|
7499
|
+
replicas computer key ctrl+l # focus address bar
|
|
7500
|
+
replicas computer type "https://news.ycombinator.com"
|
|
7501
|
+
replicas computer key Return
|
|
7502
|
+
replicas computer click 521 700 # click coordinates from the screenshot
|
|
7503
|
+
replicas computer scroll down --amount 5
|
|
7504
|
+
|
|
7505
|
+
# 5) (Optional) Record a screencap to share back.
|
|
7506
|
+
replicas computer record start /tmp/demo.mp4 --fps 60
|
|
7507
|
+
# ... do stuff ...
|
|
7508
|
+
replicas computer record stop
|
|
7509
|
+
replicas media upload /tmp/demo.mp4
|
|
7510
|
+
\`\`\`
|
|
7511
|
+
|
|
7512
|
+
## Command reference
|
|
7513
|
+
|
|
7514
|
+
### \`replicas computer info\`
|
|
7515
|
+
Prints the live noVNC viewer URL (\`https://6080-<hash>.tryreplicas.com/\`) for the workspace desktop. The engine auto-registers this authenticated preview on startup; \`info\` just looks it up. Use it when you want to share the live stream URL with the user out-of-band (e.g. in a Slack reply) - the dashboard \`Desktop\` tab already points at the same URL automatically.
|
|
7516
|
+
|
|
7517
|
+
If invoked very early in the workspace lifecycle, \`info\` will poll briefly while the engine finishes registering the preview, then error if it's still not available.
|
|
7518
|
+
|
|
7519
|
+
### \`replicas computer status\`
|
|
7520
|
+
Prints which desktop services are running and the active preview URL (if any). Useful for debugging when a tool call seems to be doing nothing.
|
|
7521
|
+
|
|
7522
|
+
### \`replicas computer screenshot <path>\`
|
|
7523
|
+
Captures the current desktop to a PNG at the given path. Read the file (e.g. with your Read tool) to see what's on screen - coordinates from the screenshot drive subsequent \`click\` / \`move\` / \`drag\` calls.
|
|
7524
|
+
|
|
7525
|
+
### \`replicas computer click <x> <y> [--button N] [--double] [--modifiers ctrl+shift]\`
|
|
7526
|
+
Move to (x, y) and click. Default is left-click (button 1); pass \`--button 3\` for right-click. \`--modifiers\` holds keys during the click (e.g. ctrl-click a link to open in a new tab).
|
|
7527
|
+
|
|
7528
|
+
### \`replicas computer move <x> <y>\`
|
|
7529
|
+
Move the mouse without clicking. Useful for hovering tooltips.
|
|
7530
|
+
|
|
7531
|
+
### \`replicas computer type <text> [--delay MS]\`
|
|
7532
|
+
Type a literal string into the focused field. Default per-character delay is 12ms (~80 wpm) - feels human and avoids breaking apps that debounce input. Bump \`--delay 30\` for stricter apps.
|
|
7533
|
+
|
|
7534
|
+
For key combos (not literal text), use \`key\`. \`type "ctrl+l"\` will literally type the seven characters \`c t r l + l\`.
|
|
7535
|
+
|
|
7536
|
+
### \`replicas computer key <combo>\`
|
|
7537
|
+
Press a single key or combo. Examples: \`Return\`, \`Escape\`, \`Tab\`, \`ctrl+l\`, \`ctrl+shift+t\`, \`alt+Left\`, \`Page_Down\`, \`Home\`. Syntax matches \`xdotool key\`.
|
|
7538
|
+
|
|
7539
|
+
### \`replicas computer scroll <up|down|left|right> [--amount N] [--x X --y Y]\`
|
|
7540
|
+
Scroll the wheel. Pass \`--x\` / \`--y\` to hover before scrolling (otherwise scrolls wherever the cursor currently is). Default amount is 3 wheel ticks.
|
|
7541
|
+
|
|
7542
|
+
### \`replicas computer drag <fromX> <fromY> <toX> <toY>\`
|
|
7543
|
+
Press left mouse at (fromX, fromY), drag to (toX, toY), release. For things like dragging a file onto an upload zone.
|
|
7544
|
+
|
|
7545
|
+
### \`replicas computer launch <app> [args...]\`
|
|
7546
|
+
Spawns an app on the workspace display. Built-in aliases:
|
|
7547
|
+
- \`chrome\` - Google Chrome with a clean profile and sane flags
|
|
7548
|
+
- \`chromium\` - Chromium variant
|
|
7549
|
+
- \`firefox\` - Firefox
|
|
7550
|
+
- \`terminal\` - xfce4-terminal (modern, themed); \`xterm\` for the classic
|
|
7551
|
+
- \`notepad\` / \`editor\` - mousepad (lightweight GTK text editor)
|
|
7552
|
+
- \`files\` / \`filemanager\` - thunar (file manager)
|
|
7553
|
+
Anything else gets \`exec\`'d verbatim, so \`replicas computer launch xeyes\` works if xeyes is installed.
|
|
7554
|
+
|
|
7555
|
+
### \`replicas computer record start <path> [--fps N]\`
|
|
7556
|
+
Starts an ffmpeg screen recorder. Output is a fragmented MP4 (still playable if the workspace dies mid-record). Default 60fps; drop to 30 if the workspace is CPU-constrained.
|
|
7557
|
+
|
|
7558
|
+
Only one recording at a time. Re-running \`start\` while one is active fails - call \`stop\` first.
|
|
7559
|
+
|
|
7560
|
+
### \`replicas computer record stop\`
|
|
7561
|
+
SIGINTs ffmpeg, waits for it to finalize the MP4, prints the output path. Upload it with \`replicas media upload <path>\` to share it.
|
|
7562
|
+
|
|
7563
|
+
## Patterns
|
|
7564
|
+
|
|
7565
|
+
### Action / screenshot loop
|
|
7566
|
+
You are blind between tool calls. After any action that changes the screen, take a screenshot before deciding the next coordinate:
|
|
7567
|
+
|
|
7568
|
+
\`\`\`bash
|
|
7569
|
+
replicas computer click 521 700
|
|
7570
|
+
sleep 2 # let the page settle
|
|
7571
|
+
replicas computer screenshot /tmp/after-click.png
|
|
7572
|
+
# read /tmp/after-click.png, decide next click
|
|
7573
|
+
\`\`\`
|
|
7574
|
+
|
|
7575
|
+
\`sleep\` is a regular shell sleep - there's no \`replicas computer wait\` command, but you can mix shell sleeps freely.
|
|
7576
|
+
|
|
7577
|
+
### Typing into an address bar
|
|
7578
|
+
\`\`\`bash
|
|
7579
|
+
replicas computer key ctrl+l # focus address bar
|
|
7580
|
+
replicas computer type "https://example.com"
|
|
7581
|
+
replicas computer key Return
|
|
7582
|
+
sleep 3 # wait for page load
|
|
7583
|
+
replicas computer screenshot /tmp/loaded.png
|
|
7584
|
+
\`\`\`
|
|
7585
|
+
|
|
7586
|
+
### Coordinates from screenshots
|
|
7587
|
+
The display is 1920\xD71080 by default. Screenshot pixels map 1:1 to click coordinates - if your Read tool shows a button at pixel (520, 700), click \`replicas computer click 520 700\`. **No translation needed.** Modern image-reading models often imagine the screenshot is at a different resolution; trust the \`xdpyinfo\` value (\`replicas computer status\` shows the real size).
|
|
7588
|
+
|
|
7589
|
+
### Letting the user watch
|
|
7590
|
+
The Desktop tab is already live in the dashboard - the user can open it any time. If you're communicating with the user somewhere else (Slack, PR comment, etc.), grab the URL with \`replicas computer info\` and share it inline so they can watch you work.
|
|
7591
|
+
|
|
7592
|
+
### Recording a deliverable
|
|
7593
|
+
For tasks the user wants proof of:
|
|
7594
|
+
\`\`\`bash
|
|
7595
|
+
replicas computer record start /tmp/walkthrough.mp4
|
|
7596
|
+
# ... your work ...
|
|
7597
|
+
replicas computer record stop
|
|
7598
|
+
replicas media upload /tmp/walkthrough.mp4
|
|
7599
|
+
\`\`\`
|
|
7600
|
+
Then embed the printed \`\` line in your chat reply. See \`MEDIA.md\`.
|
|
7601
|
+
|
|
7602
|
+
## Failure modes
|
|
7603
|
+
|
|
7604
|
+
- **"Desktop services script missing"**: workspace image is older than this skill. Tell the user - nothing you can do from the CLI side.
|
|
7605
|
+
- **\`xdotool ... failed: Can't open display\`**: Xvfb didn't come up. \`replicas computer status\` will show which service is dead. Re-running any CLI command auto-attempts to start it.
|
|
7606
|
+
- **Browser doesn't appear after \`launch chrome\`**: give it 1-2s, then screenshot. Chrome cold-start on the virtual display takes ~500ms but bigger pages take longer.
|
|
7607
|
+
- **Live preview shows static / black screen**: the browser may have crashed. \`replicas computer status\` should show no Chrome process - re-launch.
|
|
7608
|
+
- **\`replicas computer info\` errors with "not registered"**: engine couldn't register the preview at startup (transient monolith error, or warming mode). Re-running the engine usually fixes it. Until it's registered, the Desktop tab will show a placeholder.
|
|
7609
|
+
|
|
7610
|
+
## What gets baked in vs. lazy
|
|
7611
|
+
|
|
7612
|
+
| Component | Where |
|
|
7613
|
+
|---|---|
|
|
7614
|
+
| \`xvfb\`, \`openbox\`, \`tint2\`, \`x11vnc\`, \`websockify\`, \`xdotool\`, \`scrot\`, \`ffmpeg\`, \`google-chrome\` | Baked into the workspace image |
|
|
7615
|
+
| Xvfb / openbox / tint2 / x11vnc / websockify processes | Started at workspace boot (\`replicas-start-desktop-services\`) |
|
|
7616
|
+
| noVNC preview URL (port 6080) | Registered by the engine on startup (authenticated) |
|
|
7617
|
+
| Dashboard \`Desktop\` tab | Always available once the engine has registered the preview |
|
|
7618
|
+
|
|
7619
|
+
You can call any of the input tools (\`click\`, \`type\`, \`screenshot\`, etc.) immediately - the daemons are already running.
|
|
7620
|
+
`;
|
|
7621
|
+
var COMPUTER_ABILITY = {
|
|
7622
|
+
label: "Computer use",
|
|
7623
|
+
description: "Drive the workspace's Linux desktop and stream a live noVNC viewer.",
|
|
7624
|
+
bullet: "- Driving the workspace Linux desktop (open a browser, click, type, scroll, screenshot, record) and exposing a live noVNC viewer in the dashboard",
|
|
7625
|
+
section: SECTION,
|
|
7626
|
+
referenceFile: { name: "COMPUTER-USE.md", content: REFERENCE }
|
|
7627
|
+
};
|
|
7412
7628
|
|
|
7413
7629
|
// ../shared/src/default-skills/replicas-agent/abilities/docker.ts
|
|
7414
|
-
var
|
|
7630
|
+
var SECTION2 = `### Docker
|
|
7415
7631
|
Start and use the Docker daemon in Replicas workspaces. Docker is pre-installed but the daemon does not auto-start.
|
|
7416
7632
|
|
|
7417
7633
|
**Reference:** \`references/DOCKER.md\`
|
|
@@ -7420,7 +7636,7 @@ Use this when:
|
|
|
7420
7636
|
- You need to run \`docker\` or \`docker compose\` commands
|
|
7421
7637
|
- You need to build or run Docker containers
|
|
7422
7638
|
- Your task involves containerized services or Docker-based workflows`;
|
|
7423
|
-
var
|
|
7639
|
+
var REFERENCE2 = `# Docker
|
|
7424
7640
|
|
|
7425
7641
|
Docker is pre-installed in Replicas workspaces, but the daemon does **not** auto-start. You must start it manually before running any \`docker\` or \`docker compose\` commands.
|
|
7426
7642
|
|
|
@@ -7428,33 +7644,30 @@ Docker is pre-installed in Replicas workspaces, but the daemon does **not** auto
|
|
|
7428
7644
|
|
|
7429
7645
|
\`\`\`bash
|
|
7430
7646
|
sudo service docker start
|
|
7647
|
+
until docker info >/dev/null 2>&1; do sleep 0.2; done
|
|
7431
7648
|
\`\`\`
|
|
7432
7649
|
|
|
7433
|
-
|
|
7434
|
-
|
|
7435
|
-
\`\`\`bash
|
|
7436
|
-
docker info
|
|
7437
|
-
\`\`\`
|
|
7650
|
+
\`service docker start\` returns before the socket is accepting connections, so immediate commands may fail without the poll.
|
|
7438
7651
|
|
|
7439
7652
|
## Important Notes
|
|
7440
7653
|
|
|
7441
7654
|
- **Start once per session.** The daemon stays running until the workspace shuts down. You do not need to restart it between commands.
|
|
7442
7655
|
- **Check before starting.** If you are unsure whether the daemon is already running, check first to avoid an unnecessary restart:
|
|
7443
7656
|
\`\`\`bash
|
|
7444
|
-
docker info
|
|
7657
|
+
docker info >/dev/null 2>&1 || { sudo service docker start && until docker info >/dev/null 2>&1; do sleep 0.2; done; }
|
|
7445
7658
|
\`\`\`
|
|
7446
|
-
- **Sudo is required
|
|
7659
|
+
- **Sudo is only required for starting the daemon.** The workspace user is in the \`docker\` group, so regular \`docker\` commands work without sudo.
|
|
7447
7660
|
`;
|
|
7448
7661
|
var DOCKER_ABILITY = {
|
|
7449
7662
|
label: "Docker",
|
|
7450
7663
|
description: "Start the daemon, build/run containers, drive `docker compose`.",
|
|
7451
7664
|
bullet: "- Using Docker (starting the daemon, running containers, docker compose)",
|
|
7452
|
-
section:
|
|
7453
|
-
referenceFile: { name: "DOCKER.md", content:
|
|
7665
|
+
section: SECTION2,
|
|
7666
|
+
referenceFile: { name: "DOCKER.md", content: REFERENCE2 }
|
|
7454
7667
|
};
|
|
7455
7668
|
|
|
7456
7669
|
// ../shared/src/default-skills/replicas-agent/abilities/github.ts
|
|
7457
|
-
var
|
|
7670
|
+
var SECTION3 = `### GitHub
|
|
7458
7671
|
Use the pre-authenticated \`gh\` CLI for pull requests, issues, actions, and API calls.
|
|
7459
7672
|
|
|
7460
7673
|
**Reference:** \`references/GITHUB.md\`
|
|
@@ -7464,7 +7677,7 @@ Use this when:
|
|
|
7464
7677
|
- You need to interact with GitHub issues or actions
|
|
7465
7678
|
- You need to use the GitHub API for advanced operations
|
|
7466
7679
|
- You need to include images in PR descriptions`;
|
|
7467
|
-
var
|
|
7680
|
+
var REFERENCE3 = `# GitHub Integration
|
|
7468
7681
|
|
|
7469
7682
|
This guide covers how to interact with GitHub from within your Replicas workspace.
|
|
7470
7683
|
|
|
@@ -7583,19 +7796,77 @@ gh pr review 123 --request-changes --body "Changes needed"
|
|
|
7583
7796
|
GitHub does NOT have a public API for uploading images to PRs/issues. When you need to include images:
|
|
7584
7797
|
- Do NOT use placeholder image URLs
|
|
7585
7798
|
- Do NOT commit screenshots as files to the repository
|
|
7586
|
-
-
|
|
7587
|
-
- If you were triggered from Slack, also upload the
|
|
7799
|
+
- Use the \`replicas-agent\` skill to share the image
|
|
7800
|
+
- If you were triggered from Slack, also upload the image to the Slack thread so the user can see it directly
|
|
7588
7801
|
`;
|
|
7589
7802
|
var GITHUB_ABILITY = {
|
|
7590
7803
|
label: "GitHub",
|
|
7591
7804
|
description: "Pre-authenticated `gh` CLI for PRs, issues, releases, and GraphQL.",
|
|
7592
7805
|
bullet: "- Interacting with GitHub (creating PRs, managing issues, using the API, etc.)",
|
|
7593
|
-
section:
|
|
7594
|
-
referenceFile: { name: "GITHUB.md", content:
|
|
7806
|
+
section: SECTION3,
|
|
7807
|
+
referenceFile: { name: "GITHUB.md", content: REFERENCE3 }
|
|
7808
|
+
};
|
|
7809
|
+
|
|
7810
|
+
// ../shared/src/default-skills/replicas-agent/abilities/gitlab.ts
|
|
7811
|
+
var SECTION4 = `### GitLab
|
|
7812
|
+
Workspace repos hosted on GitLab use pre-configured git credentials \u2014 push, pull, and open merge requests with plain \`git\`.
|
|
7813
|
+
|
|
7814
|
+
**Reference:** \`references/GITLAB.md\`
|
|
7815
|
+
|
|
7816
|
+
Use this when:
|
|
7817
|
+
- A repo's remote is on gitlab.com or a self-managed GitLab instance
|
|
7818
|
+
- You need to open or update a merge request`;
|
|
7819
|
+
var REFERENCE4 = `# GitLab Integration
|
|
7820
|
+
|
|
7821
|
+
This guide covers how to work with GitLab-hosted repositories from within your Replicas workspace.
|
|
7822
|
+
|
|
7823
|
+
## Prerequisites
|
|
7824
|
+
|
|
7825
|
+
Git credentials for the workspace's GitLab hosts are pre-configured in \`~/.git-credentials\` and refreshed automatically. Plain \`git fetch\` / \`git pull\` / \`git push\` over HTTPS work with no additional setup.
|
|
7826
|
+
|
|
7827
|
+
- Never ask the user for a GitLab token or PAT \u2014 credentials are already wired. If a push fails with an authentication error, report it to the user instead of working around it.
|
|
7828
|
+
- There is no \`glab\` CLI in the workspace, and \`gh\` only works for GitHub remotes. Check a repo's host with \`git remote get-url origin\` before choosing the GitHub or GitLab workflow.
|
|
7829
|
+
|
|
7830
|
+
## Merge Requests
|
|
7831
|
+
|
|
7832
|
+
Create a merge request directly from a push using push options:
|
|
7833
|
+
|
|
7834
|
+
\`\`\`bash
|
|
7835
|
+
git push -o merge_request.create -o merge_request.target=<default-branch> origin HEAD
|
|
7836
|
+
\`\`\`
|
|
7837
|
+
|
|
7838
|
+
Useful options:
|
|
7839
|
+
|
|
7840
|
+
\`\`\`bash
|
|
7841
|
+
-o merge_request.title="Title"
|
|
7842
|
+
-o merge_request.description="Description"
|
|
7843
|
+
-o merge_request.draft # open as draft
|
|
7844
|
+
-o merge_request.remove_source_branch # delete branch on merge
|
|
7845
|
+
\`\`\`
|
|
7846
|
+
|
|
7847
|
+
GitLab prints the MR URL in the push output \u2014 include it in your reply to the user.
|
|
7848
|
+
|
|
7849
|
+
## GitLab API (advanced)
|
|
7850
|
+
|
|
7851
|
+
For operations with no git equivalent (commenting on MRs, reading pipelines), call the REST API with the workspace credential:
|
|
7852
|
+
|
|
7853
|
+
\`\`\`bash
|
|
7854
|
+
TOKEN=$(grep -m1 '://oauth2:' ~/.git-credentials | sed -E 's#https://oauth2:([^@]+)@.*#\\1#')
|
|
7855
|
+
curl -s -H "Authorization: Bearer $TOKEN" "https://gitlab.com/api/v4/projects/<url-encoded-path>/merge_requests"
|
|
7856
|
+
\`\`\`
|
|
7857
|
+
|
|
7858
|
+
Use the repo's own host in the API base URL for self-managed instances.
|
|
7859
|
+
`;
|
|
7860
|
+
var GITLAB_ABILITY = {
|
|
7861
|
+
label: "GitLab",
|
|
7862
|
+
description: "Pre-configured git credentials for GitLab repos; merge requests via push options.",
|
|
7863
|
+
bullet: "- Interacting with GitLab (pushing to GitLab repos, opening merge requests)",
|
|
7864
|
+
section: SECTION4,
|
|
7865
|
+
referenceFile: { name: "GITLAB.md", content: REFERENCE4 }
|
|
7595
7866
|
};
|
|
7596
7867
|
|
|
7597
7868
|
// ../shared/src/default-skills/replicas-agent/abilities/google.ts
|
|
7598
|
-
var
|
|
7869
|
+
var SECTION5 = `### Google Workspace (Docs, Sheets, Forms, Drive)
|
|
7599
7870
|
Create and edit Google Docs, Sheets, and Forms via the Replicas gateway. Files are owned by Replicas \u2014 the integration cannot access pre-existing Google content created outside of it.
|
|
7600
7871
|
|
|
7601
7872
|
**Reference:** \`references/GOOGLE.md\`
|
|
@@ -7604,7 +7875,7 @@ Use this when:
|
|
|
7604
7875
|
- You need to create or edit a Google Doc, Sheet, or Form
|
|
7605
7876
|
- You need to share, rename, move, or delete a Replicas-created Google file
|
|
7606
7877
|
- You need to read responses from a Replicas-created Google Form`;
|
|
7607
|
-
var
|
|
7878
|
+
var REFERENCE5 = `# Google Workspace (Docs, Sheets, Forms, Drive)
|
|
7608
7879
|
|
|
7609
7880
|
This guide covers how to create and edit Google Docs, Sheets, and Forms \u2014 plus do basic Drive file operations \u2014 from inside a Replicas workspace, using the monolith as a gateway to Google's APIs.
|
|
7610
7881
|
|
|
@@ -7865,12 +8136,12 @@ var GOOGLE_ABILITY = {
|
|
|
7865
8136
|
label: "Google Workspace",
|
|
7866
8137
|
description: "Create / edit Docs, Sheets, Forms, and Drive files via the Replicas gateway.",
|
|
7867
8138
|
bullet: "- Interacting with Google Workspace (creating and editing Docs, Sheets, and Forms, sharing files, reading form responses, etc.)",
|
|
7868
|
-
section:
|
|
7869
|
-
referenceFile: { name: "GOOGLE.md", content:
|
|
8139
|
+
section: SECTION5,
|
|
8140
|
+
referenceFile: { name: "GOOGLE.md", content: REFERENCE5 }
|
|
7870
8141
|
};
|
|
7871
8142
|
|
|
7872
8143
|
// ../shared/src/default-skills/replicas-agent/abilities/linear.ts
|
|
7873
|
-
var
|
|
8144
|
+
var SECTION6 = `### Linear
|
|
7874
8145
|
Fetch issues, update state, add comments, and search via the Linear GraphQL API.
|
|
7875
8146
|
|
|
7876
8147
|
**Reference:** \`references/LINEAR.md\`
|
|
@@ -7879,7 +8150,7 @@ Use this when:
|
|
|
7879
8150
|
- You encounter a Linear issue link and need to understand the task
|
|
7880
8151
|
- You need to update an issue's state (e.g. mark as done)
|
|
7881
8152
|
- You need to comment on or search for Linear issues`;
|
|
7882
|
-
var
|
|
8153
|
+
var REFERENCE6 = `# Linear Integration
|
|
7883
8154
|
|
|
7884
8155
|
This guide covers how to interact with Linear from within your Replicas workspace.
|
|
7885
8156
|
|
|
@@ -7954,13 +8225,13 @@ var LINEAR_ABILITY = {
|
|
|
7954
8225
|
label: "Linear",
|
|
7955
8226
|
description: "Fetch issues, post comments, update states via the Linear GraphQL API.",
|
|
7956
8227
|
bullet: "- Interacting with Linear (fetching issues, updating state, commenting, etc.)",
|
|
7957
|
-
section:
|
|
7958
|
-
referenceFile: { name: "LINEAR.md", content:
|
|
8228
|
+
section: SECTION6,
|
|
8229
|
+
referenceFile: { name: "LINEAR.md", content: REFERENCE6 }
|
|
7959
8230
|
};
|
|
7960
8231
|
|
|
7961
8232
|
// ../shared/src/default-skills/replicas-agent/abilities/media.ts
|
|
7962
|
-
var
|
|
7963
|
-
Share screenshots, screen recordings, generated diagrams, and audio clips inline in the Replicas chat
|
|
8233
|
+
var SECTION7 = `### Media
|
|
8234
|
+
Share screenshots, screen recordings, generated diagrams, and audio clips inline in the Replicas chat and natively embedded in external messages.
|
|
7964
8235
|
|
|
7965
8236
|
**Reference:** \`references/MEDIA.md\`
|
|
7966
8237
|
|
|
@@ -7968,9 +8239,9 @@ Use this when:
|
|
|
7968
8239
|
- You produce a screenshot, recording, generated image, or audio clip the user should see
|
|
7969
8240
|
- You record video output (browser automation, screen capture) \u2014 including the recommended aspect ratio and FPS
|
|
7970
8241
|
- You need to embed media in a Slack/Linear/GitHub message AND keep a referenceable copy in the Replicas dashboard`;
|
|
7971
|
-
var
|
|
8242
|
+
var REFERENCE7 = `# Media (Screenshots, Recordings, Audio)
|
|
7972
8243
|
|
|
7973
|
-
This guide covers how to share screenshots, screen recordings, generated diagrams, and audio clips
|
|
8244
|
+
This guide covers how to share screenshots, screen recordings, generated diagrams, and audio clips \u2014 both inline in the Replicas chat and natively embedded in external surfaces (Slack, Linear, GitHub).
|
|
7974
8245
|
|
|
7975
8246
|
## Prerequisites
|
|
7976
8247
|
|
|
@@ -7986,7 +8257,7 @@ Upload to Replicas in these cases \u2014 and **only** these cases:
|
|
|
7986
8257
|
|
|
7987
8258
|
If none of these apply, don't upload.
|
|
7988
8259
|
|
|
7989
|
-
## Uploading
|
|
8260
|
+
## Uploading to Replicas
|
|
7990
8261
|
|
|
7991
8262
|
\`\`\`bash
|
|
7992
8263
|
replicas media upload <path-to-file> [<path-to-file> ...]
|
|
@@ -7996,48 +8267,185 @@ Pass one or more file paths. Uploading several files in a single invocation is p
|
|
|
7996
8267
|
|
|
7997
8268
|
For each file, the CLI prints two lines:
|
|
7998
8269
|
|
|
7999
|
-
1. \`\` \u2014 the chat embed (renders inline in Replicas chat only
|
|
8270
|
+
1. \`\` \u2014 the chat embed (renders inline in Replicas chat **only** \u2014 see below).
|
|
8000
8271
|
2. \`View in Replicas: <deep-link>\` \u2014 a per-file dashboard URL of the form \`https://tryreplicas.com/workspaces/<workspace-id>?mode=media&media=<media-id>\` that opens directly to that specific file.
|
|
8001
8272
|
|
|
8002
8273
|
Match each "View in Replicas" line to the embed line directly above it \u2014 that's the deep link for that file.
|
|
8003
8274
|
|
|
8004
|
-
##
|
|
8275
|
+
## The two URLs the CLI gives you \u2014 and where each one is allowed
|
|
8005
8276
|
|
|
8006
|
-
|
|
8277
|
+
| URL | What it is | Where it's allowed |
|
|
8278
|
+
|---|---|---|
|
|
8279
|
+
| \`https://api.tryreplicas.com/v1/media/<id>\` (inside \`\`) | Authenticated API redirect to a presigned blob \u2014 requires the Replicas chat session | **Only** in the Replicas chat reply. Nowhere else. |
|
|
8280
|
+
| \`https://tryreplicas.com/workspaces/<workspace-id>?mode=media&media=<media-id>\` | Public dashboard deep link to the media tab, scrolled to that specific file | Everywhere external \u2014 Slack, GitHub, Linear, PR bodies, comments, emails. |
|
|
8007
8281
|
|
|
8008
|
-
|
|
8282
|
+
### NEVER link the API redirect URL outside the Replicas chat reply
|
|
8009
8283
|
|
|
8010
|
-
**
|
|
8284
|
+
The \`api.tryreplicas.com/v1/media/<id>\` URL is **not public**. It's an authenticated redirect that only resolves to a presigned download when the Replicas chat session token is present. Anywhere else (Slack, Linear, GitHub, a browser tab the user opens directly, a customer copy-pasting from chat) it returns \`{"error":"Missing authorization token"}\` and renders as a broken image.
|
|
8011
8285
|
|
|
8012
|
-
|
|
8286
|
+
This rule has no exceptions:
|
|
8287
|
+
- \u274C Never paste it in a Slack message \u2014 upload the actual bytes via the 3-step \`files.getUploadURLExternal\` \u2192 POST bytes \u2192 \`files.completeUploadExternal\` flow instead (see below).
|
|
8288
|
+
- \u274C Never paste it in a GitHub PR description, issue body, review comment, or commit message.
|
|
8289
|
+
- \u274C Never paste it in a Linear issue body or comment \u2014 upload via Linear's \`fileUpload\` mutation instead (see below).
|
|
8290
|
+
- \u274C Never link to it from any external doc, email, or external chat.
|
|
8291
|
+
- \u274C Never include it as a "backup link" in case the dashboard link breaks \u2014 it will always break externally.
|
|
8013
8292
|
|
|
8014
|
-
|
|
8293
|
+
### ALWAYS link the dashboard URL \u2014 never the API URL \u2014 when referencing media externally
|
|
8015
8294
|
|
|
8016
|
-
|
|
8017
|
-
|
|
8295
|
+
When you reference an uploaded file from anywhere outside the Replicas chat reply, the link must be the dashboard form:
|
|
8296
|
+
|
|
8297
|
+
\`\`\`
|
|
8298
|
+
https://tryreplicas.com/workspaces/<workspace-id>?mode=media&media=<media-id>
|
|
8018
8299
|
\`\`\`
|
|
8019
8300
|
|
|
8020
|
-
|
|
8301
|
+
Both query params are required:
|
|
8302
|
+
- \`mode=media\` opens the media tab in the dashboard.
|
|
8303
|
+
- \`media=<media-id>\` scrolls to and opens that specific file.
|
|
8021
8304
|
|
|
8022
|
-
|
|
8305
|
+
Never link \`tryreplicas.com/workspaces/<id>?mode=media\` without the \`media=<id>\` param when you have a specific file in mind \u2014 that lands on the gallery, not the file. Never link the bare workspace URL.
|
|
8023
8306
|
|
|
8024
|
-
|
|
8025
|
-
- **Media tab link** (no \`media=\` param): \`...?mode=media\` opens the workspace's media tab listing all files. Use this only when you're pointing at the collection, not a specific file (rare \u2014 you almost always have a specific file in mind).
|
|
8307
|
+
Always render as a markdown / mrkdwn hyperlink labeled **View in Replicas** \u2014 never paste a raw URL.
|
|
8026
8308
|
|
|
8027
|
-
|
|
8309
|
+
## In your Replicas chat reply
|
|
8028
8310
|
|
|
8029
8311
|
Include each markdown embed line **verbatim** where you want that file to render inline. The chat substitutes each one with an embedded image, video, or audio player. Multiple embeds can appear in a single reply.
|
|
8030
8312
|
|
|
8031
|
-
After (or alongside) the embeds, include a \`[View in Replicas](<deep-link>)\` hyperlink for each file using the per-file URL the CLI
|
|
8313
|
+
After (or alongside) the embeds, include a \`[View in Replicas](<deep-link>)\` hyperlink for each file using the per-file dashboard URL from the CLI. This lets the user jump to the specific item in the media tab.
|
|
8314
|
+
|
|
8315
|
+
## On external platforms \u2014 upload natively AND link the dashboard
|
|
8316
|
+
|
|
8317
|
+
Sharing media externally is a **two-step requirement** for every file:
|
|
8318
|
+
|
|
8319
|
+
1. **Upload the raw bytes natively to that platform** so the recipient sees the media embedded inline in the message itself.
|
|
8320
|
+
2. **Link the Replicas dashboard deep link** (\`?mode=media&media=<id>\` form) so the user can jump straight to the workspace.
|
|
8321
|
+
|
|
8322
|
+
A link alone is not enough. A native upload alone is not enough. Do both.
|
|
8323
|
+
|
|
8324
|
+
The one exception is GitHub, which has no public image upload API \u2014 there, the dashboard link is the only option (see below).
|
|
8032
8325
|
|
|
8033
|
-
###
|
|
8326
|
+
### Slack \u2014 embed natively via the 3-step external file upload flow
|
|
8034
8327
|
|
|
8035
|
-
|
|
8328
|
+
A Slack message that just contains a \`tryreplicas.com\` link is not acceptable when the message is supposed to show an image. The recipient should see the image inline in the thread.
|
|
8036
8329
|
|
|
8037
|
-
|
|
8038
|
-
2. Include a \`[View in Replicas](<deep-link>)\` hyperlink \u2014 use the per-file deep link the CLI printed for that file (\`...?mode=media&media=<media-id>\`), so the recipient lands directly on that specific item.
|
|
8330
|
+
Slack deprecated the single-shot \`files.upload\` endpoint. The raw HTTP replacement is a 3-step flow: reserve an upload URL with \`files.getUploadURLExternal\`, POST the bytes to it, then share into the channel/thread with \`files.completeUploadExternal\`. (\`files.uploadV2\` is **only** an SDK convenience wrapper \u2014 it is NOT a real Web API HTTP endpoint and \`POST https://slack.com/api/files.uploadV2\` will return \`unknown_method\`.)
|
|
8039
8331
|
|
|
8040
|
-
|
|
8332
|
+
\`\`\`bash
|
|
8333
|
+
FILE=/abs/path/to/screenshot.png
|
|
8334
|
+
FILENAME=$(basename "$FILE")
|
|
8335
|
+
LENGTH=$(stat -c%s "$FILE" 2>/dev/null || stat -f%z "$FILE")
|
|
8336
|
+
|
|
8337
|
+
# 1. Reserve an upload URL + file ID.
|
|
8338
|
+
RESERVE=$(curl -s -G "https://slack.com/api/files.getUploadURLExternal" \\
|
|
8339
|
+
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \\
|
|
8340
|
+
--data-urlencode "filename=$FILENAME" \\
|
|
8341
|
+
--data-urlencode "length=$LENGTH")
|
|
8342
|
+
UPLOAD_URL=$(echo "$RESERVE" | jq -r '.upload_url')
|
|
8343
|
+
FILE_ID=$(echo "$RESERVE" | jq -r '.file_id')
|
|
8344
|
+
|
|
8345
|
+
# 2. POST the raw bytes to the reserved URL.
|
|
8346
|
+
# Do not use -F / multipart here \u2014 the presigned URL expects the bytes
|
|
8347
|
+
# directly in the request body.
|
|
8348
|
+
curl -s -X POST "$UPLOAD_URL" \\
|
|
8349
|
+
-H "Content-Type: application/octet-stream" \\
|
|
8350
|
+
--data-binary @"$FILE"
|
|
8351
|
+
|
|
8352
|
+
# 3. Complete the upload, sharing it into the channel/thread with the dashboard link.
|
|
8353
|
+
curl -s -X POST "https://slack.com/api/files.completeUploadExternal" \\
|
|
8354
|
+
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \\
|
|
8355
|
+
-H "Content-Type: application/json; charset=utf-8" \\
|
|
8356
|
+
-d "{
|
|
8357
|
+
\\"files\\": [{\\"id\\": \\"$FILE_ID\\", \\"title\\": \\"Screenshot\\"}],
|
|
8358
|
+
\\"channel_id\\": \\"CHANNEL_ID\\",
|
|
8359
|
+
\\"thread_ts\\": \\"THREAD_TS\\",
|
|
8360
|
+
\\"initial_comment\\": \\"<https://tryreplicas.com/workspaces/<workspace-id>?mode=media&media=<media-id>|View in Replicas>\\"
|
|
8361
|
+
}"
|
|
8362
|
+
\`\`\`
|
|
8363
|
+
|
|
8364
|
+
Notes:
|
|
8365
|
+
- All three steps are required; do not try to POST to \`https://slack.com/api/files.uploadV2\` \u2014 that endpoint does not exist on the Web API.
|
|
8366
|
+
- \`initial_comment\` uses Slack mrkdwn (\`<url|label>\`), not GitHub-flavored markdown.
|
|
8367
|
+
- Omit \`thread_ts\` only when you genuinely want a top-level channel post.
|
|
8368
|
+
- For multiple files in the same message, run steps 1\u20132 per file and pass all \`{id, title}\` objects in the \`files\` array of a single \`files.completeUploadExternal\` call \u2014 they share into the thread together.
|
|
8369
|
+
- If you also need to post a separate text reply in the thread, send it with \`chat.postMessage\` after the upload \u2014 but the upload itself must carry the image.
|
|
8370
|
+
|
|
8371
|
+
Never paste the \`api.tryreplicas.com/v1/media/<id>\` URL into a Slack message body or \`initial_comment\` \u2014 it will render as a broken image attempt.
|
|
8372
|
+
|
|
8373
|
+
### Linear \u2014 embed natively via the GraphQL \`fileUpload\` mutation
|
|
8374
|
+
|
|
8375
|
+
Linear comments and issue bodies support markdown image embeds, but the image URL must be publicly accessible \u2014 so you upload the file to Linear's storage first, then reference the returned \`assetUrl\` in markdown. Three steps:
|
|
8376
|
+
|
|
8377
|
+
Use \`jq\` to build the JSON bodies \u2014 the GraphQL variables (\`size\`, \`filename\`, the comment body) need to be real JSON values, not unquoted placeholders, and \`jq -n --argjson / --arg\` is the safest way to interpolate shell values without quoting bugs.
|
|
8378
|
+
|
|
8379
|
+
\`\`\`bash
|
|
8380
|
+
FILE=/abs/path/to/screenshot.png
|
|
8381
|
+
FILENAME=$(basename "$FILE")
|
|
8382
|
+
SIZE=$(stat -c%s "$FILE" 2>/dev/null || stat -f%z "$FILE")
|
|
8383
|
+
CONTENT_TYPE=image/png
|
|
8384
|
+
ISSUE_UUID=... # the Linear issue's UUID
|
|
8385
|
+
WORKSPACE_ID=... # the Replicas workspace ID
|
|
8386
|
+
MEDIA_ID=... # the media ID printed by \`replicas media upload\`
|
|
8387
|
+
|
|
8388
|
+
# 1. Ask Linear for an upload URL + assetUrl.
|
|
8389
|
+
RESERVE=$(curl -s -X POST https://api.linear.app/graphql \\
|
|
8390
|
+
-H "Authorization: Bearer $LINEAR_ACCESS_TOKEN" \\
|
|
8391
|
+
-H "Content-Type: application/json" \\
|
|
8392
|
+
-d "$(jq -n \\
|
|
8393
|
+
--argjson size "$SIZE" \\
|
|
8394
|
+
--arg contentType "$CONTENT_TYPE" \\
|
|
8395
|
+
--arg filename "$FILENAME" \\
|
|
8396
|
+
'{
|
|
8397
|
+
query: "mutation($size: Int!, $contentType: String!, $filename: String!) { fileUpload(size: $size, contentType: $contentType, filename: $filename) { uploadFile { uploadUrl assetUrl headers { key value } } } }",
|
|
8398
|
+
variables: { size: $size, contentType: $contentType, filename: $filename }
|
|
8399
|
+
}')")
|
|
8400
|
+
UPLOAD_URL=$(echo "$RESERVE" | jq -r '.data.fileUpload.uploadFile.uploadUrl')
|
|
8401
|
+
ASSET_URL=$(echo "$RESERVE" | jq -r '.data.fileUpload.uploadFile.assetUrl')
|
|
8402
|
+
|
|
8403
|
+
# 2. PUT the bytes to uploadUrl, replaying every header Linear returned.
|
|
8404
|
+
# Linear's presigned URL requires the exact Content-Type / Cache-Control /
|
|
8405
|
+
# etc. it gave you back, so forward each {key, value} from the headers array.
|
|
8406
|
+
HEADER_ARGS=()
|
|
8407
|
+
while IFS=$'\\t' read -r k v; do
|
|
8408
|
+
HEADER_ARGS+=(-H "$k: $v")
|
|
8409
|
+
done < <(echo "$RESERVE" | jq -r '.data.fileUpload.uploadFile.headers[] | "\\(.key)\\t\\(.value)"')
|
|
8410
|
+
|
|
8411
|
+
curl -s -X PUT "$UPLOAD_URL" \\
|
|
8412
|
+
"\${HEADER_ARGS[@]}" \\
|
|
8413
|
+
--data-binary @"$FILE"
|
|
8414
|
+
|
|
8415
|
+
# 3. Reference assetUrl inline in the comment body, alongside the dashboard link.
|
|
8416
|
+
BODY=$(printf '\\n\\n[View in Replicas](https://tryreplicas.com/workspaces/%s?mode=media&media=%s)' \\
|
|
8417
|
+
"$ASSET_URL" "$WORKSPACE_ID" "$MEDIA_ID")
|
|
8418
|
+
|
|
8419
|
+
curl -s -X POST https://api.linear.app/graphql \\
|
|
8420
|
+
-H "Authorization: Bearer $LINEAR_ACCESS_TOKEN" \\
|
|
8421
|
+
-H "Content-Type: application/json" \\
|
|
8422
|
+
-d "$(jq -n \\
|
|
8423
|
+
--arg issueId "$ISSUE_UUID" \\
|
|
8424
|
+
--arg body "$BODY" \\
|
|
8425
|
+
'{
|
|
8426
|
+
query: "mutation($issueId: String!, $body: String!) { commentCreate(input: { issueId: $issueId, body: $body }) { success } }",
|
|
8427
|
+
variables: { issueId: $issueId, body: $body }
|
|
8428
|
+
}')"
|
|
8429
|
+
\`\`\`
|
|
8430
|
+
|
|
8431
|
+
The same flow works for issue bodies (use \`issueCreate\` / \`issueUpdate\` with the same markdown body).
|
|
8432
|
+
|
|
8433
|
+
Never paste the \`api.tryreplicas.com/v1/media/<id>\` URL into a Linear body or comment \u2014 it will render as a broken image to anyone outside your Replicas chat.
|
|
8434
|
+
|
|
8435
|
+
### GitHub \u2014 link the dashboard deep link (no public upload API exists)
|
|
8436
|
+
|
|
8437
|
+
GitHub has **no public API** for uploading images to PRs or issues. Their web UI uses an undocumented internal endpoint that's not available to API clients. So for GitHub specifically, the only correct way to share media is the dashboard deep link, rendered as a markdown hyperlink:
|
|
8438
|
+
|
|
8439
|
+
\`\`\`markdown
|
|
8440
|
+
[View in Replicas](https://tryreplicas.com/workspaces/<workspace-id>?mode=media&media=<media-id>)
|
|
8441
|
+
\`\`\`
|
|
8442
|
+
|
|
8443
|
+
Do **not**:
|
|
8444
|
+
- Commit screenshots as files to the repo as a workaround.
|
|
8445
|
+
- Use placeholder image URLs.
|
|
8446
|
+
- Embed the \`api.tryreplicas.com/v1/media/<id>\` URL in markdown \u2014 it renders as a broken image for every viewer.
|
|
8447
|
+
|
|
8448
|
+
This applies to PR descriptions, PR review comments, issue bodies, issue comments, and commit messages.
|
|
8041
8449
|
|
|
8042
8450
|
## Recording defaults
|
|
8043
8451
|
|
|
@@ -8081,13 +8489,13 @@ replicas media upload chart-a.svg chart-b.svg --kind image
|
|
|
8081
8489
|
var MEDIA_ABILITY = {
|
|
8082
8490
|
label: "Media",
|
|
8083
8491
|
description: "Share screenshots, recordings, generated images, and audio clips.",
|
|
8084
|
-
bullet: "-
|
|
8085
|
-
section:
|
|
8086
|
-
referenceFile: { name: "MEDIA.md", content:
|
|
8492
|
+
bullet: "- Producing or showing the user any media \u2014 screenshots, screen recordings, generated images or diagrams, audio clips \u2014 including in your Replicas chat reply, PR descriptions/comments, and other external platforms",
|
|
8493
|
+
section: SECTION7,
|
|
8494
|
+
referenceFile: { name: "MEDIA.md", content: REFERENCE7 }
|
|
8087
8495
|
};
|
|
8088
8496
|
|
|
8089
8497
|
// ../shared/src/default-skills/replicas-agent/abilities/previews.ts
|
|
8090
|
-
var
|
|
8498
|
+
var SECTION8 = `### Previews
|
|
8091
8499
|
Expose locally running services (web apps, APIs, databases) as public preview URLs so humans can interact with them directly.
|
|
8092
8500
|
|
|
8093
8501
|
**Reference:** \`references/PREVIEWS.md\`
|
|
@@ -8096,7 +8504,7 @@ Use this when:
|
|
|
8096
8504
|
- You need to start a service that a human should view or interact with
|
|
8097
8505
|
- The task involves UI work that benefits from human review
|
|
8098
8506
|
- You are verifying frontend/backend integrations visually`;
|
|
8099
|
-
var
|
|
8507
|
+
var REFERENCE8 = `# Preview URLs
|
|
8100
8508
|
|
|
8101
8509
|
When you run services on ports \u2014 such as a web app, API server, or database \u2014 humans may want to interact with them directly. You can expose your locally running services as public preview URLs.
|
|
8102
8510
|
|
|
@@ -8178,12 +8586,12 @@ var PREVIEWS_ABILITY = {
|
|
|
8178
8586
|
label: "Previews",
|
|
8179
8587
|
description: "Expose locally running services on public preview URLs for humans.",
|
|
8180
8588
|
bullet: "- Creating preview URLs for locally running services",
|
|
8181
|
-
section:
|
|
8182
|
-
referenceFile: { name: "PREVIEWS.md", content:
|
|
8589
|
+
section: SECTION8,
|
|
8590
|
+
referenceFile: { name: "PREVIEWS.md", content: REFERENCE8 }
|
|
8183
8591
|
};
|
|
8184
8592
|
|
|
8185
8593
|
// ../shared/src/default-skills/replicas-agent/abilities/replicas.ts
|
|
8186
|
-
var
|
|
8594
|
+
var SECTION9 = `### Replicas (in-workspace CLI)
|
|
8187
8595
|
Take action *with* Replicas itself \u2014 manage automations, environments (variables, files), repos, and \`replicas.json\` config \u2014 using the pre-installed, pre-authenticated \`replicas\` CLI.
|
|
8188
8596
|
|
|
8189
8597
|
**Reference:** \`references/REPLICAS.md\`
|
|
@@ -8193,7 +8601,7 @@ Use this when:
|
|
|
8193
8601
|
- The user asks you to manage environments, environment variables, or environment files
|
|
8194
8602
|
- The user asks "what envs / repos / automations do I have?"
|
|
8195
8603
|
- The user asks you to scaffold a \`replicas.json\` / \`replicas.yaml\` in a repo`;
|
|
8196
|
-
var
|
|
8604
|
+
var REFERENCE9 = `# Replicas (in-workspace CLI)
|
|
8197
8605
|
|
|
8198
8606
|
This guide covers how to take action *with* Replicas itself from inside a Replicas workspace \u2014 managing automations, environments (and their variables/files), repos, previews, and the user's \`replicas.json\` config \u2014 using the pre-installed \`replicas\` CLI.
|
|
8199
8607
|
|
|
@@ -8387,13 +8795,13 @@ var REPLICAS_ABILITY = {
|
|
|
8387
8795
|
description: "Teach the agent about Replicas itself \u2014 automations, environments, the in-workspace CLI.",
|
|
8388
8796
|
// No bullet — help_instructions covers the `replicas` CLI surface in detail.
|
|
8389
8797
|
bullet: "",
|
|
8390
|
-
section:
|
|
8391
|
-
referenceFile: { name: "REPLICAS.md", content:
|
|
8798
|
+
section: SECTION9,
|
|
8799
|
+
referenceFile: { name: "REPLICAS.md", content: REFERENCE9 },
|
|
8392
8800
|
locked: true
|
|
8393
8801
|
};
|
|
8394
8802
|
|
|
8395
8803
|
// ../shared/src/default-skills/replicas-agent/abilities/slack.ts
|
|
8396
|
-
var
|
|
8804
|
+
var SECTION10 = `### Slack
|
|
8397
8805
|
Send messages, read threads, search conversations, and upload files via the Slack Web API.
|
|
8398
8806
|
|
|
8399
8807
|
**Reference:** \`references/SLACK.md\`
|
|
@@ -8403,7 +8811,7 @@ Use this when:
|
|
|
8403
8811
|
- You need to read or fetch a Slack conversation
|
|
8404
8812
|
- You encounter a Slack message link and need to retrieve its content
|
|
8405
8813
|
- The task asks you to notify, update, or communicate via Slack`;
|
|
8406
|
-
var
|
|
8814
|
+
var REFERENCE10 = `# Slack Integration
|
|
8407
8815
|
|
|
8408
8816
|
This guide covers how to interact with Slack from within your Replicas workspace.
|
|
8409
8817
|
|
|
@@ -8458,14 +8866,42 @@ curl -s "https://slack.com/api/search.messages?query=YOUR_SEARCH_QUERY" \\
|
|
|
8458
8866
|
|
|
8459
8867
|
### Uploading Files
|
|
8460
8868
|
|
|
8869
|
+
Slack deprecated \`files.upload\`; the raw HTTP replacement is a 3-step flow. (\`files.uploadV2\` is **only** an SDK convenience wrapper and is NOT a real Web API HTTP endpoint \u2014 \`POST https://slack.com/api/files.uploadV2\` returns \`unknown_method\`.)
|
|
8870
|
+
|
|
8461
8871
|
\`\`\`bash
|
|
8462
|
-
|
|
8872
|
+
FILE=/path/to/file
|
|
8873
|
+
FILENAME=$(basename "$FILE")
|
|
8874
|
+
LENGTH=$(stat -c%s "$FILE" 2>/dev/null || stat -f%z "$FILE")
|
|
8875
|
+
|
|
8876
|
+
# 1. Reserve an upload URL + file ID.
|
|
8877
|
+
RESERVE=$(curl -s -G "https://slack.com/api/files.getUploadURLExternal" \\
|
|
8878
|
+
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \\
|
|
8879
|
+
--data-urlencode "filename=$FILENAME" \\
|
|
8880
|
+
--data-urlencode "length=$LENGTH")
|
|
8881
|
+
UPLOAD_URL=$(echo "$RESERVE" | jq -r '.upload_url')
|
|
8882
|
+
FILE_ID=$(echo "$RESERVE" | jq -r '.file_id')
|
|
8883
|
+
|
|
8884
|
+
# 2. POST the raw bytes to the reserved URL.
|
|
8885
|
+
# Do not use -F / multipart here \u2014 the presigned URL expects the bytes
|
|
8886
|
+
# directly in the request body.
|
|
8887
|
+
curl -s -X POST "$UPLOAD_URL" \\
|
|
8888
|
+
-H "Content-Type: application/octet-stream" \\
|
|
8889
|
+
--data-binary @"$FILE"
|
|
8890
|
+
|
|
8891
|
+
# 3. Complete the upload and share into a channel (and optionally a thread).
|
|
8892
|
+
curl -s -X POST "https://slack.com/api/files.completeUploadExternal" \\
|
|
8463
8893
|
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \\
|
|
8464
|
-
-
|
|
8465
|
-
-
|
|
8466
|
-
|
|
8894
|
+
-H "Content-Type: application/json; charset=utf-8" \\
|
|
8895
|
+
-d "{
|
|
8896
|
+
\\"files\\": [{\\"id\\": \\"$FILE_ID\\", \\"title\\": \\"File title\\"}],
|
|
8897
|
+
\\"channel_id\\": \\"CHANNEL_ID\\",
|
|
8898
|
+
\\"thread_ts\\": \\"OPTIONAL_THREAD_TS\\",
|
|
8899
|
+
\\"initial_comment\\": \\"Optional message body\\"
|
|
8900
|
+
}"
|
|
8467
8901
|
\`\`\`
|
|
8468
8902
|
|
|
8903
|
+
Omit \`thread_ts\` and/or \`initial_comment\` if you don't need them.
|
|
8904
|
+
|
|
8469
8905
|
### Other Operations
|
|
8470
8906
|
|
|
8471
8907
|
You can list channels, read channel history, add reactions, and perform any other operation supported by the Slack Web API using the same authentication pattern.
|
|
@@ -8476,15 +8912,17 @@ var SLACK_ABILITY = {
|
|
|
8476
8912
|
label: "Slack",
|
|
8477
8913
|
description: "Send messages, read threads, search conversations, upload files.",
|
|
8478
8914
|
bullet: "- Interacting with Slack (sending messages, reading threads, etc.)",
|
|
8479
|
-
section:
|
|
8480
|
-
referenceFile: { name: "SLACK.md", content:
|
|
8915
|
+
section: SECTION10,
|
|
8916
|
+
referenceFile: { name: "SLACK.md", content: REFERENCE10 }
|
|
8481
8917
|
};
|
|
8482
8918
|
|
|
8483
8919
|
// ../shared/src/default-skills/replicas-agent/registry.ts
|
|
8484
8920
|
var REPLICAS_AGENT_ABILITY_REGISTRY = {
|
|
8485
8921
|
replicas: REPLICAS_ABILITY,
|
|
8922
|
+
computer: COMPUTER_ABILITY,
|
|
8486
8923
|
docker: DOCKER_ABILITY,
|
|
8487
8924
|
github: GITHUB_ABILITY,
|
|
8925
|
+
gitlab: GITLAB_ABILITY,
|
|
8488
8926
|
google: GOOGLE_ABILITY,
|
|
8489
8927
|
linear: LINEAR_ABILITY,
|
|
8490
8928
|
media: MEDIA_ABILITY,
|
|
@@ -8510,36 +8948,40 @@ var DEFAULT_DEFAULT_SKILLS = {
|
|
|
8510
8948
|
var import_yaml = __toESM(require_dist());
|
|
8511
8949
|
|
|
8512
8950
|
// ../shared/src/warm-hooks.ts
|
|
8513
|
-
var DEFAULT_WARM_HOOK_TIMEOUT_MS =
|
|
8514
|
-
var MAX_WARM_HOOK_TIMEOUT_MS =
|
|
8951
|
+
var DEFAULT_WARM_HOOK_TIMEOUT_MS = 60 * 60 * 1e3;
|
|
8952
|
+
var MAX_WARM_HOOK_TIMEOUT_MS = 120 * 60 * 1e3;
|
|
8953
|
+
var DEFAULT_START_HOOK_TIMEOUT_MS = 5 * 60 * 1e3;
|
|
8515
8954
|
var HOOK_EXEC_MAX_BUFFER_BYTES = 10 * 1024 * 1024;
|
|
8516
8955
|
|
|
8517
8956
|
// ../shared/src/engine/types.ts
|
|
8518
8957
|
var CLAUDE_OPUS_1M_MODEL = "opus[1m]";
|
|
8519
8958
|
var LEGACY_CLAUDE_OPUS_1M_MODEL = "opus-1m";
|
|
8959
|
+
var DEFAULT_CODEX_MODEL = "gpt-5.5";
|
|
8520
8960
|
var MODEL_LABELS = {
|
|
8521
8961
|
sonnet: "Sonnet 4.5",
|
|
8522
|
-
opus: "Opus 4.
|
|
8523
|
-
[CLAUDE_OPUS_1M_MODEL]: "Opus 4.
|
|
8524
|
-
[LEGACY_CLAUDE_OPUS_1M_MODEL]: "Opus 4.
|
|
8962
|
+
opus: "Opus 4.8",
|
|
8963
|
+
[CLAUDE_OPUS_1M_MODEL]: "Opus 4.8 (1M)",
|
|
8964
|
+
[LEGACY_CLAUDE_OPUS_1M_MODEL]: "Opus 4.8 (1M)",
|
|
8525
8965
|
haiku: "Haiku 4.5",
|
|
8526
|
-
|
|
8966
|
+
[DEFAULT_CODEX_MODEL]: "GPT-5.5",
|
|
8527
8967
|
"gpt-5.4": "GPT-5.4",
|
|
8528
8968
|
"gpt-5.4-mini": "GPT-5.4 Mini",
|
|
8529
8969
|
"gpt-5.3-codex": "GPT-5.3 Codex",
|
|
8530
|
-
"gpt-5.
|
|
8531
|
-
"gpt-5.2-codex": "GPT-5.2 Codex",
|
|
8532
|
-
"gpt-5.2": "GPT-5.2",
|
|
8533
|
-
"gpt-5.1-codex-max": "GPT-5.1 Codex Max",
|
|
8534
|
-
"gpt-5.1-codex": "GPT-5.1 Codex",
|
|
8535
|
-
"gpt-5.1": "GPT-5.1",
|
|
8536
|
-
"gpt-5-codex": "GPT-5 Codex",
|
|
8537
|
-
"gpt-5": "GPT-5"
|
|
8970
|
+
"gpt-5.2": "GPT-5.2"
|
|
8538
8971
|
};
|
|
8972
|
+
var MAX_CANVAS_FILE_BYTES = 5 * 1024 * 1024;
|
|
8539
8973
|
|
|
8540
8974
|
// ../shared/src/routes/workspaces.ts
|
|
8541
8975
|
var WORKSPACE_FILE_UPLOAD_MAX_SIZE_BYTES = 20 * 1024 * 1024;
|
|
8542
8976
|
var WORKSPACE_FILE_CONTENT_MAX_SIZE_BYTES = 1 * 1024 * 1024;
|
|
8977
|
+
var WORKSPACE_STATUS_FILTERS = ["active", "sleeping", "preparing", "failed"];
|
|
8978
|
+
var DEFAULT_STATUS_FILTERS = [...WORKSPACE_STATUS_FILTERS];
|
|
8979
|
+
var DEFAULT_WORKSPACE_FILTERS = {
|
|
8980
|
+
statuses: [...DEFAULT_STATUS_FILTERS],
|
|
8981
|
+
ownerIds: [],
|
|
8982
|
+
activity: "any"
|
|
8983
|
+
};
|
|
8984
|
+
var ONE_DAY_MS = 24 * 60 * 60 * 1e3;
|
|
8543
8985
|
|
|
8544
8986
|
// ../shared/src/audit-log.ts
|
|
8545
8987
|
var AUDIT_LOG_ACTION = {
|
|
@@ -8551,7 +8993,71 @@ var AUDIT_LOG_ACTION = {
|
|
|
8551
8993
|
};
|
|
8552
8994
|
var AUDIT_LOG_ACTIONS = Object.values(AUDIT_LOG_ACTION);
|
|
8553
8995
|
|
|
8554
|
-
// ../shared/src/
|
|
8996
|
+
// ../shared/src/automations/types.ts
|
|
8997
|
+
var AUTOMATION_DEBOUNCE_MAX_SECONDS = 24 * 60 * 60;
|
|
8998
|
+
|
|
8999
|
+
// ../shared/src/display-message/types.ts
|
|
9000
|
+
var BACKGROUND_TASK_SUBTYPES = /* @__PURE__ */ new Set([
|
|
9001
|
+
"task_started",
|
|
9002
|
+
"task_progress",
|
|
9003
|
+
"task_updated",
|
|
9004
|
+
"task_notification"
|
|
9005
|
+
]);
|
|
9006
|
+
function isBackgroundTaskSubtype(subtype) {
|
|
9007
|
+
return typeof subtype === "string" && BACKGROUND_TASK_SUBTYPES.has(subtype);
|
|
9008
|
+
}
|
|
9009
|
+
function optionalString(value) {
|
|
9010
|
+
return typeof value === "string" ? value : void 0;
|
|
9011
|
+
}
|
|
9012
|
+
function coerceBackgroundTaskPayload(payload) {
|
|
9013
|
+
if (!isRecord(payload)) return null;
|
|
9014
|
+
const subtype = payload.subtype;
|
|
9015
|
+
if (!isBackgroundTaskSubtype(subtype)) return null;
|
|
9016
|
+
const taskId = payload.task_id;
|
|
9017
|
+
if (typeof taskId !== "string" || !taskId) return null;
|
|
9018
|
+
const patch = isRecord(payload.patch) ? {
|
|
9019
|
+
status: optionalString(payload.patch.status),
|
|
9020
|
+
description: optionalString(payload.patch.description),
|
|
9021
|
+
error: optionalString(payload.patch.error),
|
|
9022
|
+
isBackgrounded: optionalBoolean(payload.patch.is_backgrounded)
|
|
9023
|
+
} : void 0;
|
|
9024
|
+
const usage = isRecord(payload.usage) ? {
|
|
9025
|
+
totalTokens: optionalNumber(payload.usage.total_tokens),
|
|
9026
|
+
toolUses: optionalNumber(payload.usage.tool_uses),
|
|
9027
|
+
durationMs: optionalNumber(payload.usage.duration_ms)
|
|
9028
|
+
} : void 0;
|
|
9029
|
+
return {
|
|
9030
|
+
subtype,
|
|
9031
|
+
taskId,
|
|
9032
|
+
description: optionalString(payload.description),
|
|
9033
|
+
summary: optionalString(payload.summary),
|
|
9034
|
+
outputFile: optionalString(payload.output_file),
|
|
9035
|
+
status: optionalString(payload.status),
|
|
9036
|
+
taskType: optionalString(payload.task_type),
|
|
9037
|
+
workflowName: optionalString(payload.workflow_name),
|
|
9038
|
+
prompt: optionalString(payload.prompt),
|
|
9039
|
+
lastToolName: optionalString(payload.last_tool_name),
|
|
9040
|
+
usage,
|
|
9041
|
+
patch
|
|
9042
|
+
};
|
|
9043
|
+
}
|
|
9044
|
+
function optionalNumber(value) {
|
|
9045
|
+
return typeof value === "number" && Number.isFinite(value) ? value : void 0;
|
|
9046
|
+
}
|
|
9047
|
+
function optionalBoolean(value) {
|
|
9048
|
+
return typeof value === "boolean" ? value : void 0;
|
|
9049
|
+
}
|
|
9050
|
+
function normalizeBackgroundTaskStatus(status) {
|
|
9051
|
+
if (status === "completed" || status === "failed" || status === "stopped") {
|
|
9052
|
+
return status;
|
|
9053
|
+
}
|
|
9054
|
+
if (status === "killed") {
|
|
9055
|
+
return "stopped";
|
|
9056
|
+
}
|
|
9057
|
+
return "in_progress";
|
|
9058
|
+
}
|
|
9059
|
+
|
|
9060
|
+
// ../shared/src/json.ts
|
|
8555
9061
|
function safeJsonParse(str, fallback) {
|
|
8556
9062
|
try {
|
|
8557
9063
|
return JSON.parse(str);
|
|
@@ -8559,9 +9065,27 @@ function safeJsonParse(str, fallback) {
|
|
|
8559
9065
|
return fallback;
|
|
8560
9066
|
}
|
|
8561
9067
|
}
|
|
9068
|
+
|
|
9069
|
+
// ../shared/src/display-message/parsers/codex-parser.ts
|
|
8562
9070
|
function getStatusFromExitCode(exitCode) {
|
|
8563
9071
|
return exitCode === 0 ? "completed" : "failed";
|
|
8564
9072
|
}
|
|
9073
|
+
function getPayloadString(event, key) {
|
|
9074
|
+
const value = event.payload?.[key];
|
|
9075
|
+
return typeof value === "string" ? value : null;
|
|
9076
|
+
}
|
|
9077
|
+
function displayId(event, eventIndex, prefix) {
|
|
9078
|
+
const stableId = getPayloadString(event, USER_MESSAGE_ID_PAYLOAD_KEY) ?? getPayloadString(event, CODEX_ASP_ITEM_ID_PAYLOAD_KEY);
|
|
9079
|
+
return stableId ? `${prefix}-${stableId}` : `${prefix}-${event.timestamp}-${eventIndex}`;
|
|
9080
|
+
}
|
|
9081
|
+
function userMessageImages(value) {
|
|
9082
|
+
if (!Array.isArray(value)) return void 0;
|
|
9083
|
+
const images = value.filter((item) => {
|
|
9084
|
+
if (!isRecord(item)) return false;
|
|
9085
|
+
return item.type === "image" && typeof item.mediaType === "string" && typeof item.data === "string";
|
|
9086
|
+
});
|
|
9087
|
+
return images.length > 0 ? images : void 0;
|
|
9088
|
+
}
|
|
8565
9089
|
function parseShellOutput(raw) {
|
|
8566
9090
|
const exitCodeMatch = raw.match(/^Exit code: (\d+)/m) || raw.match(/Process exited with code (\d+)/);
|
|
8567
9091
|
const exitCode = exitCodeMatch ? parseInt(exitCodeMatch[1], 10) : 0;
|
|
@@ -8625,6 +9149,7 @@ function parsePatch(input) {
|
|
|
8625
9149
|
function parseCodexEvents(events) {
|
|
8626
9150
|
const messages = [];
|
|
8627
9151
|
const pendingCommands = /* @__PURE__ */ new Map();
|
|
9152
|
+
const pendingToolCalls = /* @__PURE__ */ new Map();
|
|
8628
9153
|
const pendingPatches = /* @__PURE__ */ new Map();
|
|
8629
9154
|
events.forEach((event, eventIndex) => {
|
|
8630
9155
|
if (event.type === CODEX_QUOTA_STATUS_EVENT_TYPE) {
|
|
@@ -8644,16 +9169,18 @@ function parseCodexEvents(events) {
|
|
|
8644
9169
|
return;
|
|
8645
9170
|
}
|
|
8646
9171
|
if (event.type === "event_msg" && event.payload?.type === "user_message") {
|
|
9172
|
+
const message = getPayloadString(event, "message");
|
|
8647
9173
|
messages.push({
|
|
8648
|
-
id:
|
|
9174
|
+
id: displayId(event, eventIndex, "user"),
|
|
8649
9175
|
type: "user",
|
|
8650
|
-
content:
|
|
9176
|
+
content: message ?? "",
|
|
9177
|
+
images: userMessageImages(event.payload.images),
|
|
8651
9178
|
timestamp: event.timestamp
|
|
8652
9179
|
});
|
|
8653
9180
|
}
|
|
8654
9181
|
if (event.type === "event_msg" && event.payload?.type === "agent_reasoning") {
|
|
8655
9182
|
messages.push({
|
|
8656
|
-
id:
|
|
9183
|
+
id: displayId(event, eventIndex, "reasoning"),
|
|
8657
9184
|
type: "reasoning",
|
|
8658
9185
|
content: event.payload.text || "",
|
|
8659
9186
|
status: "completed",
|
|
@@ -8667,7 +9194,7 @@ function parseCodexEvents(events) {
|
|
|
8667
9194
|
const textContent = content.filter((c) => c.type === "output_text").map((c) => c.text || "").join("\n");
|
|
8668
9195
|
if (textContent) {
|
|
8669
9196
|
messages.push({
|
|
8670
|
-
id:
|
|
9197
|
+
id: displayId(event, eventIndex, "agent"),
|
|
8671
9198
|
type: "agent",
|
|
8672
9199
|
content: textContent,
|
|
8673
9200
|
timestamp: event.timestamp
|
|
@@ -8707,19 +9234,25 @@ function parseCodexEvents(events) {
|
|
|
8707
9234
|
const callId = event.payload.call_id;
|
|
8708
9235
|
const name = event.payload.name;
|
|
8709
9236
|
const input = event.payload.input || "";
|
|
9237
|
+
const server2 = typeof event.payload.server === "string" ? event.payload.server : "custom";
|
|
8710
9238
|
const status = event.payload.status || "in_progress";
|
|
8711
9239
|
if (name === "apply_patch") {
|
|
8712
9240
|
const operations = parsePatch(input);
|
|
8713
9241
|
pendingPatches.set(callId, { input, status, timestamp: event.timestamp, operations });
|
|
8714
9242
|
} else {
|
|
8715
|
-
|
|
8716
|
-
id: `toolcall-${event.timestamp}-${eventIndex}`,
|
|
9243
|
+
const msg = {
|
|
9244
|
+
id: `toolcall-${callId || getPayloadString(event, CODEX_ASP_ITEM_ID_PAYLOAD_KEY) || `${event.timestamp}-${eventIndex}`}`,
|
|
8717
9245
|
type: "tool_call",
|
|
8718
|
-
server:
|
|
9246
|
+
server: server2,
|
|
8719
9247
|
tool: name,
|
|
9248
|
+
input,
|
|
8720
9249
|
status,
|
|
8721
9250
|
timestamp: event.timestamp
|
|
8722
|
-
}
|
|
9251
|
+
};
|
|
9252
|
+
messages.push(msg);
|
|
9253
|
+
if (callId) {
|
|
9254
|
+
pendingToolCalls.set(callId, msg);
|
|
9255
|
+
}
|
|
8723
9256
|
}
|
|
8724
9257
|
}
|
|
8725
9258
|
if (payloadType === "custom_tool_call_output") {
|
|
@@ -8741,9 +9274,14 @@ function parseCodexEvents(events) {
|
|
|
8741
9274
|
});
|
|
8742
9275
|
pendingPatches.delete(callId);
|
|
8743
9276
|
} else {
|
|
8744
|
-
const
|
|
9277
|
+
const fallbackToolCallMsg = messages.findLast((m) => m.type === "tool_call");
|
|
9278
|
+
const toolCallMsg = pendingToolCalls.get(callId) ?? fallbackToolCallMsg;
|
|
8745
9279
|
if (toolCallMsg) {
|
|
8746
9280
|
toolCallMsg.status = getStatusFromExitCode(output.metadata?.exit_code);
|
|
9281
|
+
toolCallMsg.output = output.output ?? (typeof event.payload.output === "string" ? event.payload.output : "");
|
|
9282
|
+
if (callId) {
|
|
9283
|
+
pendingToolCalls.delete(callId);
|
|
9284
|
+
}
|
|
8747
9285
|
}
|
|
8748
9286
|
}
|
|
8749
9287
|
}
|
|
@@ -8771,40 +9309,210 @@ function parseCodexEvents(events) {
|
|
|
8771
9309
|
return messages;
|
|
8772
9310
|
}
|
|
8773
9311
|
|
|
8774
|
-
// ../shared/src/display-message/
|
|
8775
|
-
function
|
|
9312
|
+
// ../shared/src/display-message/task-accumulator.ts
|
|
9313
|
+
function mapTaskStatus(status) {
|
|
9314
|
+
if (status === "in_progress" || status === "completed") return status;
|
|
9315
|
+
return "pending";
|
|
9316
|
+
}
|
|
9317
|
+
function toAccumulatorInput(input) {
|
|
9318
|
+
if (typeof input === "string") {
|
|
9319
|
+
try {
|
|
9320
|
+
const parsed = JSON.parse(input);
|
|
9321
|
+
return isRecord(parsed) ? parsed : {};
|
|
9322
|
+
} catch {
|
|
9323
|
+
return {};
|
|
9324
|
+
}
|
|
9325
|
+
}
|
|
9326
|
+
return isRecord(input) ? input : {};
|
|
9327
|
+
}
|
|
9328
|
+
function extractToolResultText(content, separator = "\n") {
|
|
9329
|
+
if (typeof content === "string") return content;
|
|
9330
|
+
if (!Array.isArray(content)) return "";
|
|
9331
|
+
const texts = [];
|
|
9332
|
+
for (const part of content) {
|
|
9333
|
+
if (isRecord(part) && part.type === "text" && typeof part.text === "string") {
|
|
9334
|
+
texts.push(part.text);
|
|
9335
|
+
}
|
|
9336
|
+
}
|
|
9337
|
+
return texts.join(separator);
|
|
9338
|
+
}
|
|
9339
|
+
function normalizeContentBlocks(content) {
|
|
9340
|
+
if (typeof content === "string") {
|
|
9341
|
+
return content ? [{ type: "text", text: content }] : [];
|
|
9342
|
+
}
|
|
9343
|
+
return content ?? [];
|
|
9344
|
+
}
|
|
9345
|
+
function parseStringField(value) {
|
|
9346
|
+
if (typeof value !== "string") return null;
|
|
9347
|
+
const trimmed = value.trim();
|
|
9348
|
+
return trimmed ? trimmed : null;
|
|
9349
|
+
}
|
|
9350
|
+
function parseCreateResultTaskId(resultText) {
|
|
8776
9351
|
try {
|
|
8777
|
-
|
|
9352
|
+
const parsed = JSON.parse(resultText);
|
|
9353
|
+
if (isRecord(parsed) && isRecord(parsed.task)) {
|
|
9354
|
+
return parseStringField(parsed.task.id);
|
|
9355
|
+
}
|
|
8778
9356
|
} catch {
|
|
8779
|
-
return fallback;
|
|
8780
9357
|
}
|
|
9358
|
+
return resultText.match(/\bTask\s+#?([A-Za-z0-9_-]+)\s+created\b/i)?.[1] ?? null;
|
|
8781
9359
|
}
|
|
8782
|
-
|
|
8783
|
-
|
|
8784
|
-
|
|
8785
|
-
|
|
8786
|
-
|
|
9360
|
+
var TaskAccumulator = class {
|
|
9361
|
+
tasksByTaskId = /* @__PURE__ */ new Map();
|
|
9362
|
+
tasksByCreateToolUseId = /* @__PURE__ */ new Map();
|
|
9363
|
+
orderedKeys = [];
|
|
9364
|
+
processToolUse(toolName, toolUseId, input) {
|
|
9365
|
+
if (toolName === "TaskCreate") {
|
|
9366
|
+
const subject = parseStringField(input.subject);
|
|
9367
|
+
if (!subject) return false;
|
|
9368
|
+
this.tasksByCreateToolUseId.set(toolUseId, { subject, status: "pending" });
|
|
9369
|
+
this.orderedKeys.push(toolUseId);
|
|
9370
|
+
return true;
|
|
9371
|
+
}
|
|
9372
|
+
if (toolName === "TaskUpdate") {
|
|
9373
|
+
const taskId = parseStringField(input.taskId);
|
|
9374
|
+
if (!taskId) return false;
|
|
9375
|
+
if (input.status === "deleted") {
|
|
9376
|
+
if (!this.tasksByTaskId.delete(taskId)) return false;
|
|
9377
|
+
const idx = this.orderedKeys.indexOf(taskId);
|
|
9378
|
+
if (idx !== -1) this.orderedKeys.splice(idx, 1);
|
|
9379
|
+
return true;
|
|
9380
|
+
}
|
|
9381
|
+
const existing = this.tasksByTaskId.get(taskId);
|
|
9382
|
+
const subject = parseStringField(input.subject) ?? existing?.subject;
|
|
9383
|
+
if (!subject) return false;
|
|
9384
|
+
const status = input.status !== void 0 ? mapTaskStatus(input.status) : existing?.status ?? "pending";
|
|
9385
|
+
this.tasksByTaskId.set(taskId, { subject, status });
|
|
9386
|
+
if (!existing) this.orderedKeys.push(taskId);
|
|
9387
|
+
return true;
|
|
9388
|
+
}
|
|
9389
|
+
if (toolName === "TaskList") {
|
|
9390
|
+
if (!Array.isArray(input.tasks)) return false;
|
|
9391
|
+
let changed = false;
|
|
9392
|
+
for (const raw of input.tasks) {
|
|
9393
|
+
if (!isRecord(raw)) continue;
|
|
9394
|
+
const id = parseStringField(raw.id);
|
|
9395
|
+
const subject = parseStringField(raw.subject);
|
|
9396
|
+
if (!id || !subject) continue;
|
|
9397
|
+
const existing = this.tasksByTaskId.get(id);
|
|
9398
|
+
const next = { subject, status: mapTaskStatus(raw.status) };
|
|
9399
|
+
if (existing && existing.subject === next.subject && existing.status === next.status) continue;
|
|
9400
|
+
this.tasksByTaskId.set(id, next);
|
|
9401
|
+
if (!existing) this.orderedKeys.push(id);
|
|
9402
|
+
changed = true;
|
|
9403
|
+
}
|
|
9404
|
+
return changed;
|
|
9405
|
+
}
|
|
9406
|
+
return false;
|
|
9407
|
+
}
|
|
9408
|
+
processCreateResult(toolUseId, resultText) {
|
|
9409
|
+
const pending = this.tasksByCreateToolUseId.get(toolUseId);
|
|
9410
|
+
if (!pending) return false;
|
|
9411
|
+
const taskId = parseCreateResultTaskId(resultText);
|
|
9412
|
+
if (!taskId) return false;
|
|
9413
|
+
this.tasksByTaskId.set(taskId, pending);
|
|
9414
|
+
this.tasksByCreateToolUseId.delete(toolUseId);
|
|
9415
|
+
const idx = this.orderedKeys.indexOf(toolUseId);
|
|
9416
|
+
if (idx !== -1) this.orderedKeys.splice(idx, 1, taskId);
|
|
9417
|
+
return true;
|
|
9418
|
+
}
|
|
9419
|
+
getTasks() {
|
|
9420
|
+
const out = [];
|
|
9421
|
+
for (const key of this.orderedKeys) {
|
|
9422
|
+
const task = this.tasksByTaskId.get(key) ?? this.tasksByCreateToolUseId.get(key);
|
|
9423
|
+
if (task && task.subject) out.push(task);
|
|
9424
|
+
}
|
|
9425
|
+
return out;
|
|
9426
|
+
}
|
|
9427
|
+
processContentBlock(block) {
|
|
9428
|
+
if (!isRecord(block)) return false;
|
|
9429
|
+
if (block.type === "tool_use" && typeof block.name === "string" && typeof block.id === "string") {
|
|
9430
|
+
return this.processToolUse(block.name, block.id, toAccumulatorInput(block.input));
|
|
9431
|
+
}
|
|
9432
|
+
if (block.type === "tool_result" && typeof block.tool_use_id === "string") {
|
|
9433
|
+
return this.processCreateResult(block.tool_use_id, extractToolResultText(block.content, ""));
|
|
9434
|
+
}
|
|
9435
|
+
return false;
|
|
8787
9436
|
}
|
|
8788
|
-
|
|
9437
|
+
};
|
|
9438
|
+
|
|
9439
|
+
// ../shared/src/display-message/parsers/mcp.ts
|
|
9440
|
+
function parseMcpToolName(name) {
|
|
9441
|
+
const prefix = "mcp__";
|
|
9442
|
+
if (!name.startsWith(prefix)) return null;
|
|
9443
|
+
const rest = name.slice(prefix.length);
|
|
9444
|
+
const sep = rest.indexOf("__");
|
|
9445
|
+
if (sep <= 0) return null;
|
|
9446
|
+
const server2 = rest.slice(0, sep);
|
|
9447
|
+
const tool = rest.slice(sep + 2);
|
|
9448
|
+
if (!server2 || !tool) return null;
|
|
9449
|
+
return { server: server2, tool };
|
|
8789
9450
|
}
|
|
9451
|
+
|
|
9452
|
+
// ../shared/src/display-message/parsers/claude-parser.ts
|
|
9453
|
+
var LOCAL_COMMAND_ECHO_REGEX = /^<(?:command-name|command-message|local-command-stdout|local-command-stderr)>/;
|
|
8790
9454
|
function parseClaudeEvents(events, parentToolUseId) {
|
|
8791
9455
|
const messages = [];
|
|
8792
9456
|
const filterValue = parentToolUseId !== void 0 ? parentToolUseId : null;
|
|
8793
|
-
const filteredEvents = events.filter(
|
|
8794
|
-
|
|
8795
|
-
|
|
9457
|
+
const filteredEvents = events.filter((e) => {
|
|
9458
|
+
const eventParentToolUseId = e.payload.parent_tool_use_id ?? null;
|
|
9459
|
+
return eventParentToolUseId === filterValue;
|
|
9460
|
+
});
|
|
8796
9461
|
const toolCallMap = /* @__PURE__ */ new Map();
|
|
9462
|
+
const taskMessageMap = /* @__PURE__ */ new Map();
|
|
9463
|
+
const partialIndexes = /* @__PURE__ */ new Map();
|
|
9464
|
+
const completedPartialStreamIds = /* @__PURE__ */ new Set();
|
|
9465
|
+
const taskAccumulator = new TaskAccumulator();
|
|
9466
|
+
const taskSnapshot = () => taskAccumulator.getTasks().map((task) => ({
|
|
9467
|
+
text: task.subject,
|
|
9468
|
+
completed: task.status === "completed",
|
|
9469
|
+
itemStatus: task.status
|
|
9470
|
+
}));
|
|
8797
9471
|
filteredEvents.forEach((event) => {
|
|
9472
|
+
if (event.type === CLAUDE_PARTIAL_MESSAGE_EVENT_TYPE) {
|
|
9473
|
+
const payload = coerceClaudePartialMessagePayload(event.payload);
|
|
9474
|
+
if (!payload) return;
|
|
9475
|
+
const existing = partialIndexes.get(payload.streamId) ?? {};
|
|
9476
|
+
if (payload.thinking) {
|
|
9477
|
+
const reasoningMessage = {
|
|
9478
|
+
id: `reasoning-partial:${payload.streamId}`,
|
|
9479
|
+
type: "reasoning",
|
|
9480
|
+
content: payload.thinking,
|
|
9481
|
+
status: payload.status,
|
|
9482
|
+
timestamp: event.timestamp
|
|
9483
|
+
};
|
|
9484
|
+
if (existing.reasoning !== void 0) messages[existing.reasoning] = reasoningMessage;
|
|
9485
|
+
else existing.reasoning = messages.push(reasoningMessage) - 1;
|
|
9486
|
+
}
|
|
9487
|
+
if (payload.text) {
|
|
9488
|
+
const agentMessage = {
|
|
9489
|
+
id: `agent-partial:${payload.streamId}`,
|
|
9490
|
+
type: "agent",
|
|
9491
|
+
content: payload.text,
|
|
9492
|
+
timestamp: event.timestamp
|
|
9493
|
+
};
|
|
9494
|
+
if (existing.agent !== void 0) messages[existing.agent] = agentMessage;
|
|
9495
|
+
else existing.agent = messages.push(agentMessage) - 1;
|
|
9496
|
+
}
|
|
9497
|
+
partialIndexes.set(payload.streamId, existing);
|
|
9498
|
+
return;
|
|
9499
|
+
}
|
|
8798
9500
|
if (event.type === "claude-user") {
|
|
8799
|
-
const content = event.payload.message?.content
|
|
9501
|
+
const content = normalizeContentBlocks(event.payload.message?.content);
|
|
8800
9502
|
const toolResult = content.find((c) => c.type === "tool_result");
|
|
8801
9503
|
if (toolResult && toolResult.tool_use_id) {
|
|
9504
|
+
if (!toolResult.is_error) {
|
|
9505
|
+
taskAccumulator.processContentBlock(toolResult);
|
|
9506
|
+
}
|
|
8802
9507
|
return;
|
|
8803
9508
|
}
|
|
8804
9509
|
if (event.payload.isSynthetic) {
|
|
8805
9510
|
return;
|
|
8806
9511
|
}
|
|
8807
9512
|
const textContent = content.filter((c) => c.type === "text").map((c) => c.text || "").join("\n");
|
|
9513
|
+
if (LOCAL_COMMAND_ECHO_REGEX.test(textContent.trim())) {
|
|
9514
|
+
return;
|
|
9515
|
+
}
|
|
8808
9516
|
const images = content.filter((c) => c.type === "image" && c.source).map((c) => {
|
|
8809
9517
|
const source = c.source;
|
|
8810
9518
|
return {
|
|
@@ -8824,7 +9532,11 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
8824
9532
|
}
|
|
8825
9533
|
}
|
|
8826
9534
|
if (event.type === "claude-assistant") {
|
|
8827
|
-
const
|
|
9535
|
+
const messageId = event.payload.message?.id;
|
|
9536
|
+
if (typeof messageId === "string" && messageId) {
|
|
9537
|
+
completedPartialStreamIds.add(messageId);
|
|
9538
|
+
}
|
|
9539
|
+
const contentBlocks = normalizeContentBlocks(event.payload.message?.content);
|
|
8828
9540
|
contentBlocks.forEach((block) => {
|
|
8829
9541
|
if (block.type === "text" && block.text) {
|
|
8830
9542
|
messages.push({
|
|
@@ -8853,7 +9565,7 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
8853
9565
|
input: toolInput
|
|
8854
9566
|
});
|
|
8855
9567
|
if (toolName === "Task" || toolName === "Agent") {
|
|
8856
|
-
const inputObj = typeof toolInput === "string" ?
|
|
9568
|
+
const inputObj = typeof toolInput === "string" ? safeJsonParse(toolInput, {}) : toolInput;
|
|
8857
9569
|
const nestedEvents = events.filter((e) => e.payload.parent_tool_use_id === toolUseId).map((e) => ({
|
|
8858
9570
|
timestamp: e.timestamp,
|
|
8859
9571
|
type: e.type,
|
|
@@ -8872,7 +9584,7 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
8872
9584
|
timestamp: event.timestamp
|
|
8873
9585
|
});
|
|
8874
9586
|
} else if (toolName === "Bash" || toolName === "bash" || toolName === "shell") {
|
|
8875
|
-
const inputObj = typeof toolInput === "string" ?
|
|
9587
|
+
const inputObj = typeof toolInput === "string" ? safeJsonParse(toolInput, {}) : toolInput;
|
|
8876
9588
|
const command = inputObj.command || "";
|
|
8877
9589
|
messages.push({
|
|
8878
9590
|
id: `command-${event.timestamp}-${messages.length}`,
|
|
@@ -8883,7 +9595,7 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
8883
9595
|
timestamp: event.timestamp
|
|
8884
9596
|
});
|
|
8885
9597
|
} else if (toolName === "Write" || toolName === "Edit") {
|
|
8886
|
-
const inputObj = typeof toolInput === "string" ?
|
|
9598
|
+
const inputObj = typeof toolInput === "string" ? safeJsonParse(toolInput, {}) : toolInput;
|
|
8887
9599
|
const filePath = inputObj.file_path || "";
|
|
8888
9600
|
const action = toolName === "Write" ? "add" : "update";
|
|
8889
9601
|
let diff;
|
|
@@ -8919,24 +9631,20 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
8919
9631
|
status: "in_progress",
|
|
8920
9632
|
timestamp: event.timestamp
|
|
8921
9633
|
});
|
|
8922
|
-
} else if (toolName === "
|
|
8923
|
-
|
|
8924
|
-
const
|
|
8925
|
-
|
|
8926
|
-
text: todo.content,
|
|
8927
|
-
completed: todo.status === "completed"
|
|
8928
|
-
}));
|
|
8929
|
-
if (todoItems.length > 0) {
|
|
9634
|
+
} else if (toolName === "TaskCreate" || toolName === "TaskUpdate" || toolName === "TaskList") {
|
|
9635
|
+
taskAccumulator.processContentBlock(block);
|
|
9636
|
+
const snapshot = taskSnapshot();
|
|
9637
|
+
if (snapshot.length > 0) {
|
|
8930
9638
|
messages.push({
|
|
8931
9639
|
id: `todo-${event.timestamp}-${messages.length}`,
|
|
8932
9640
|
type: "todo_list",
|
|
8933
|
-
items:
|
|
9641
|
+
items: snapshot,
|
|
8934
9642
|
status: "completed",
|
|
8935
9643
|
timestamp: event.timestamp
|
|
8936
9644
|
});
|
|
8937
9645
|
}
|
|
8938
9646
|
} else if (toolName === "WebSearch") {
|
|
8939
|
-
const inputObj = typeof toolInput === "string" ?
|
|
9647
|
+
const inputObj = typeof toolInput === "string" ? safeJsonParse(toolInput, {}) : toolInput;
|
|
8940
9648
|
const query = inputObj.query || "";
|
|
8941
9649
|
messages.push({
|
|
8942
9650
|
id: `search-${event.timestamp}-${messages.length}`,
|
|
@@ -8946,7 +9654,7 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
8946
9654
|
timestamp: event.timestamp
|
|
8947
9655
|
});
|
|
8948
9656
|
} else if (toolName === "Skill") {
|
|
8949
|
-
const inputObj = typeof toolInput === "string" ?
|
|
9657
|
+
const inputObj = typeof toolInput === "string" ? safeJsonParse(toolInput, {}) : toolInput;
|
|
8950
9658
|
messages.push({
|
|
8951
9659
|
id: `skill-${event.timestamp}-${messages.length}`,
|
|
8952
9660
|
type: "skill",
|
|
@@ -8956,7 +9664,7 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
8956
9664
|
timestamp: event.timestamp
|
|
8957
9665
|
});
|
|
8958
9666
|
} else if (toolName === "mcp__relay-subagent-tools__spawn_agent") {
|
|
8959
|
-
const inputObj = typeof toolInput === "string" ?
|
|
9667
|
+
const inputObj = typeof toolInput === "string" ? safeJsonParse(toolInput, {}) : toolInput;
|
|
8960
9668
|
messages.push({
|
|
8961
9669
|
id: `subagent-${event.timestamp}-${messages.length}`,
|
|
8962
9670
|
type: "subagent",
|
|
@@ -8971,12 +9679,13 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
8971
9679
|
timestamp: event.timestamp
|
|
8972
9680
|
});
|
|
8973
9681
|
} else if (toolName === "mcp__relay-subagent-tools__delete_agent") {
|
|
8974
|
-
const inputObj = typeof toolInput === "string" ?
|
|
9682
|
+
const inputObj = typeof toolInput === "string" ? safeJsonParse(toolInput, {}) : toolInput;
|
|
9683
|
+
const mcp = parseMcpToolName(toolName);
|
|
8975
9684
|
messages.push({
|
|
8976
9685
|
id: `toolcall-${event.timestamp}-${messages.length}`,
|
|
8977
9686
|
type: "tool_call",
|
|
8978
|
-
server: "relay-subagent-tools",
|
|
8979
|
-
tool: "delete_agent",
|
|
9687
|
+
server: mcp?.server ?? "relay-subagent-tools",
|
|
9688
|
+
tool: mcp?.tool ?? "delete_agent",
|
|
8980
9689
|
input: inputObj,
|
|
8981
9690
|
status: "in_progress",
|
|
8982
9691
|
timestamp: event.timestamp
|
|
@@ -9008,6 +9717,36 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
9008
9717
|
});
|
|
9009
9718
|
}
|
|
9010
9719
|
}
|
|
9720
|
+
if (event.type === "claude-system") {
|
|
9721
|
+
const payload = coerceBackgroundTaskPayload(event.payload);
|
|
9722
|
+
if (payload) {
|
|
9723
|
+
const existing = taskMessageMap.get(payload.taskId);
|
|
9724
|
+
const nextStatus = payload.subtype === "task_notification" ? normalizeBackgroundTaskStatus(payload.status) : payload.subtype === "task_updated" ? normalizeBackgroundTaskStatus(payload.patch?.status) : existing?.status ?? "in_progress";
|
|
9725
|
+
const nextMessage = {
|
|
9726
|
+
id: existing?.id ?? `task-${event.timestamp}-${messages.length}`,
|
|
9727
|
+
type: "background_task",
|
|
9728
|
+
taskId: payload.taskId,
|
|
9729
|
+
status: nextStatus,
|
|
9730
|
+
description: payload.description ?? payload.patch?.description ?? existing?.description,
|
|
9731
|
+
summary: payload.summary ?? existing?.summary,
|
|
9732
|
+
outputFile: payload.outputFile ?? existing?.outputFile,
|
|
9733
|
+
taskType: payload.taskType ?? existing?.taskType,
|
|
9734
|
+
workflowName: payload.workflowName ?? existing?.workflowName,
|
|
9735
|
+
prompt: payload.prompt ?? existing?.prompt,
|
|
9736
|
+
lastToolName: payload.lastToolName ?? existing?.lastToolName,
|
|
9737
|
+
usage: payload.usage ?? existing?.usage,
|
|
9738
|
+
error: payload.patch?.error ?? existing?.error,
|
|
9739
|
+
isBackgrounded: payload.patch?.isBackgrounded ?? existing?.isBackgrounded,
|
|
9740
|
+
timestamp: existing?.timestamp ?? event.timestamp
|
|
9741
|
+
};
|
|
9742
|
+
if (existing) {
|
|
9743
|
+
Object.assign(existing, nextMessage);
|
|
9744
|
+
} else {
|
|
9745
|
+
taskMessageMap.set(payload.taskId, nextMessage);
|
|
9746
|
+
messages.push(nextMessage);
|
|
9747
|
+
}
|
|
9748
|
+
}
|
|
9749
|
+
}
|
|
9011
9750
|
});
|
|
9012
9751
|
filteredEvents.forEach((event) => {
|
|
9013
9752
|
if (event.type === "replicas-tool-input-request") {
|
|
@@ -9042,14 +9781,17 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
9042
9781
|
});
|
|
9043
9782
|
filteredEvents.forEach((event) => {
|
|
9044
9783
|
if (event.type === "claude-user") {
|
|
9045
|
-
const content = event.payload.message?.content
|
|
9784
|
+
const content = normalizeContentBlocks(event.payload.message?.content);
|
|
9046
9785
|
const toolResult = content.find((c) => c.type === "tool_result");
|
|
9047
9786
|
if (toolResult && toolResult.tool_use_id) {
|
|
9048
9787
|
const toolInfo = toolCallMap.get(toolResult.tool_use_id);
|
|
9049
9788
|
if (!toolInfo) return;
|
|
9050
|
-
const resultContent =
|
|
9789
|
+
const resultContent = extractToolResultText(toolResult.content);
|
|
9051
9790
|
const isError = toolResult.is_error || false;
|
|
9052
9791
|
const status = isError ? "failed" : "completed";
|
|
9792
|
+
if (toolInfo.toolName === "TaskCreate" && !isError) {
|
|
9793
|
+
taskAccumulator.processContentBlock(toolResult);
|
|
9794
|
+
}
|
|
9053
9795
|
const message = messages[toolInfo.messageIndex];
|
|
9054
9796
|
if (!message) return;
|
|
9055
9797
|
if (message.type === "command") {
|
|
@@ -9074,7 +9816,7 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
9074
9816
|
message.output = resultContent;
|
|
9075
9817
|
message.status = status;
|
|
9076
9818
|
if (!message.chatId && resultContent) {
|
|
9077
|
-
const parsed =
|
|
9819
|
+
const parsed = safeJsonParse(resultContent, {});
|
|
9078
9820
|
if (parsed.chatId) {
|
|
9079
9821
|
message.chatId = parsed.chatId;
|
|
9080
9822
|
}
|
|
@@ -9083,9 +9825,16 @@ function parseClaudeEvents(events, parentToolUseId) {
|
|
|
9083
9825
|
}
|
|
9084
9826
|
}
|
|
9085
9827
|
});
|
|
9086
|
-
return messages;
|
|
9828
|
+
if (partialIndexes.size === 0 || completedPartialStreamIds.size === 0) return messages;
|
|
9829
|
+
return messages.filter((message) => {
|
|
9830
|
+
const prefix = ["reasoning-partial:", "agent-partial:"].find((p) => message.id.startsWith(p));
|
|
9831
|
+
return !prefix || !completedPartialStreamIds.has(message.id.slice(prefix.length));
|
|
9832
|
+
});
|
|
9087
9833
|
}
|
|
9088
9834
|
|
|
9835
|
+
// ../shared/src/display-message/parsers/codex-asp-parser.ts
|
|
9836
|
+
var DUPLICATE_WINDOW_MS = 5 * 60 * 1e3;
|
|
9837
|
+
|
|
9089
9838
|
// ../shared/src/display-message/parsers/index.ts
|
|
9090
9839
|
function parseAgentEvents(events, agentType) {
|
|
9091
9840
|
if (agentType === "codex") {
|
|
@@ -9135,7 +9884,7 @@ function result(data, isError = false) {
|
|
|
9135
9884
|
}
|
|
9136
9885
|
var server = new McpServer({
|
|
9137
9886
|
name: "replicas-mcp",
|
|
9138
|
-
version: "0.2.
|
|
9887
|
+
version: "0.2.4"
|
|
9139
9888
|
});
|
|
9140
9889
|
var registerTool = server.registerTool.bind(server);
|
|
9141
9890
|
registerTool(
|
|
@@ -9177,7 +9926,7 @@ registerTool(
|
|
|
9177
9926
|
page: z.number().optional(),
|
|
9178
9927
|
limit: z.number().optional(),
|
|
9179
9928
|
user_id: z.string().optional().describe("Filter by creator user ID"),
|
|
9180
|
-
source: z.enum(["api", "dashboard", "slack", "linear", "github", "automation"]).optional().describe("Filter by creation source"),
|
|
9929
|
+
source: z.enum(["api", "dashboard", "slack", "linear", "github", "gitlab", "automation"]).optional().describe("Filter by creation source"),
|
|
9181
9930
|
status: z.enum(["active", "sleeping", "preparing"]).optional().describe("Filter by workspace status")
|
|
9182
9931
|
}
|
|
9183
9932
|
},
|