crewly 1.20.32 → 1.20.33
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/backend/backend/src/utils/tool-call-markup.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/tool-call-markup.utils.js +20 -10
- package/dist/backend/backend/src/utils/tool-call-markup.utils.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/utils/tool-call-markup.utils.d.ts.map +1 -1
- package/dist/cli/backend/src/utils/tool-call-markup.utils.js +20 -10
- package/dist/cli/backend/src/utils/tool-call-markup.utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-call-markup.utils.d.ts","sourceRoot":"","sources":["../../../../../backend/src/utils/tool-call-markup.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"tool-call-markup.utils.d.ts","sourceRoot":"","sources":["../../../../../backend/src/utils/tool-call-markup.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAyCH,6CAA6C;AAC7C,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAwB7D"}
|
|
@@ -14,25 +14,35 @@
|
|
|
14
14
|
*
|
|
15
15
|
* @module utils/tool-call-markup
|
|
16
16
|
*/
|
|
17
|
-
/** Tag names that only ever appear in a tool-call envelope. */
|
|
18
|
-
const ENVELOPE_TAGS = ['function_calls', 'invoke', 'parameter'];
|
|
19
17
|
/**
|
|
20
|
-
*
|
|
21
|
-
* any junk/namespace before the name, anything but `<`/`>` after it.
|
|
18
|
+
* Name patterns of the tags that only ever appear in a tool-call envelope.
|
|
22
19
|
*
|
|
23
|
-
*
|
|
20
|
+
* The wrapper is matched by *shape*, not by one literal: models name it
|
|
21
|
+
* `function_calls`, `tool_calls`, or — as deepseek-chat does — with its own
|
|
22
|
+
* separators, `<||DSML|| calls>` (U+FF5C pipes, then a space, then
|
|
23
|
+
* `calls`). The lookbehind keeps an ordinary word ending in "calls" (say
|
|
24
|
+
* `<recalls>`) out of it.
|
|
25
|
+
*/
|
|
26
|
+
const WRAPPER_NAME = '(?:function_calls|tool_calls|(?<![A-Za-z_])calls)';
|
|
27
|
+
const INVOKE_NAME = 'invoke';
|
|
28
|
+
const PARAM_NAME = 'parameter';
|
|
29
|
+
/**
|
|
30
|
+
* A tag like `<invoke …>`, `</invoke>`, `<||DSML|| calls>` — any
|
|
31
|
+
* junk/namespace before the name, anything but `<`/`>` after it.
|
|
32
|
+
*
|
|
33
|
+
* @param name - Tag-name pattern
|
|
24
34
|
* @param closing - Match the closing form
|
|
25
35
|
* @returns The pattern source
|
|
26
36
|
*/
|
|
27
37
|
function tagSource(name, closing) {
|
|
28
|
-
return `<${closing ? '\\s*/' : ''}[^<>]{0,40}
|
|
38
|
+
return `<${closing ? '\\s*/' : ''}[^<>]{0,40}?${name}\\b[^<>]*>`;
|
|
29
39
|
}
|
|
30
40
|
/** Well-formed `<x>…</x>` blocks for the wrapper tags. */
|
|
31
|
-
const BLOCK_PATTERNS = [
|
|
41
|
+
const BLOCK_PATTERNS = [WRAPPER_NAME, INVOKE_NAME].map((name) => new RegExp(`${tagSource(name, false)}[\\s\\S]*?${tagSource(name, true)}`, 'gi'));
|
|
32
42
|
/** An opening wrapper tag with no close — the output was cut off mid-call. */
|
|
33
|
-
const UNCLOSED_PATTERN = new RegExp(`(?:${tagSource(
|
|
43
|
+
const UNCLOSED_PATTERN = new RegExp(`(?:${tagSource(WRAPPER_NAME, false)}|${tagSource(INVOKE_NAME, false)})[\\s\\S]*$`, 'i');
|
|
34
44
|
/** Any leftover lone tag. */
|
|
35
|
-
const LONE_TAG_PATTERN = new RegExp(
|
|
45
|
+
const LONE_TAG_PATTERN = new RegExp([WRAPPER_NAME, INVOKE_NAME, PARAM_NAME].map((name) => `${tagSource(name, false)}|${tagSource(name, true)}`).join('|'), 'gi');
|
|
36
46
|
/**
|
|
37
47
|
* Whether a string contains something that looks like a tool-call envelope.
|
|
38
48
|
*
|
|
@@ -40,7 +50,7 @@ const LONE_TAG_PATTERN = new RegExp(ENVELOPE_TAGS.map((name) => `${tagSource(nam
|
|
|
40
50
|
* @returns True when an `invoke` / `function_calls` tag is present
|
|
41
51
|
*/
|
|
42
52
|
export function hasToolCallMarkup(raw) {
|
|
43
|
-
return new RegExp(`${tagSource(
|
|
53
|
+
return new RegExp(`${tagSource(WRAPPER_NAME, false)}|${tagSource(INVOKE_NAME, false)}`, 'i').test(raw ?? '');
|
|
44
54
|
}
|
|
45
55
|
/**
|
|
46
56
|
* Remove tool-call markup from an agent's text response.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-call-markup.utils.js","sourceRoot":"","sources":["../../../../../backend/src/utils/tool-call-markup.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH
|
|
1
|
+
{"version":3,"file":"tool-call-markup.utils.js","sourceRoot":"","sources":["../../../../../backend/src/utils/tool-call-markup.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-call-markup.utils.d.ts","sourceRoot":"","sources":["../../../../../backend/src/utils/tool-call-markup.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"tool-call-markup.utils.d.ts","sourceRoot":"","sources":["../../../../../backend/src/utils/tool-call-markup.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAyCH,6CAA6C;AAC7C,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAwB7D"}
|
|
@@ -14,25 +14,35 @@
|
|
|
14
14
|
*
|
|
15
15
|
* @module utils/tool-call-markup
|
|
16
16
|
*/
|
|
17
|
-
/** Tag names that only ever appear in a tool-call envelope. */
|
|
18
|
-
const ENVELOPE_TAGS = ['function_calls', 'invoke', 'parameter'];
|
|
19
17
|
/**
|
|
20
|
-
*
|
|
21
|
-
* any junk/namespace before the name, anything but `<`/`>` after it.
|
|
18
|
+
* Name patterns of the tags that only ever appear in a tool-call envelope.
|
|
22
19
|
*
|
|
23
|
-
*
|
|
20
|
+
* The wrapper is matched by *shape*, not by one literal: models name it
|
|
21
|
+
* `function_calls`, `tool_calls`, or — as deepseek-chat does — with its own
|
|
22
|
+
* separators, `<||DSML|| calls>` (U+FF5C pipes, then a space, then
|
|
23
|
+
* `calls`). The lookbehind keeps an ordinary word ending in "calls" (say
|
|
24
|
+
* `<recalls>`) out of it.
|
|
25
|
+
*/
|
|
26
|
+
const WRAPPER_NAME = '(?:function_calls|tool_calls|(?<![A-Za-z_])calls)';
|
|
27
|
+
const INVOKE_NAME = 'invoke';
|
|
28
|
+
const PARAM_NAME = 'parameter';
|
|
29
|
+
/**
|
|
30
|
+
* A tag like `<invoke …>`, `</invoke>`, `<||DSML|| calls>` — any
|
|
31
|
+
* junk/namespace before the name, anything but `<`/`>` after it.
|
|
32
|
+
*
|
|
33
|
+
* @param name - Tag-name pattern
|
|
24
34
|
* @param closing - Match the closing form
|
|
25
35
|
* @returns The pattern source
|
|
26
36
|
*/
|
|
27
37
|
function tagSource(name, closing) {
|
|
28
|
-
return `<${closing ? '\\s*/' : ''}[^<>]{0,40}
|
|
38
|
+
return `<${closing ? '\\s*/' : ''}[^<>]{0,40}?${name}\\b[^<>]*>`;
|
|
29
39
|
}
|
|
30
40
|
/** Well-formed `<x>…</x>` blocks for the wrapper tags. */
|
|
31
|
-
const BLOCK_PATTERNS = [
|
|
41
|
+
const BLOCK_PATTERNS = [WRAPPER_NAME, INVOKE_NAME].map((name) => new RegExp(`${tagSource(name, false)}[\\s\\S]*?${tagSource(name, true)}`, 'gi'));
|
|
32
42
|
/** An opening wrapper tag with no close — the output was cut off mid-call. */
|
|
33
|
-
const UNCLOSED_PATTERN = new RegExp(`(?:${tagSource(
|
|
43
|
+
const UNCLOSED_PATTERN = new RegExp(`(?:${tagSource(WRAPPER_NAME, false)}|${tagSource(INVOKE_NAME, false)})[\\s\\S]*$`, 'i');
|
|
34
44
|
/** Any leftover lone tag. */
|
|
35
|
-
const LONE_TAG_PATTERN = new RegExp(
|
|
45
|
+
const LONE_TAG_PATTERN = new RegExp([WRAPPER_NAME, INVOKE_NAME, PARAM_NAME].map((name) => `${tagSource(name, false)}|${tagSource(name, true)}`).join('|'), 'gi');
|
|
36
46
|
/**
|
|
37
47
|
* Whether a string contains something that looks like a tool-call envelope.
|
|
38
48
|
*
|
|
@@ -40,7 +50,7 @@ const LONE_TAG_PATTERN = new RegExp(ENVELOPE_TAGS.map((name) => `${tagSource(nam
|
|
|
40
50
|
* @returns True when an `invoke` / `function_calls` tag is present
|
|
41
51
|
*/
|
|
42
52
|
export function hasToolCallMarkup(raw) {
|
|
43
|
-
return new RegExp(`${tagSource(
|
|
53
|
+
return new RegExp(`${tagSource(WRAPPER_NAME, false)}|${tagSource(INVOKE_NAME, false)}`, 'i').test(raw ?? '');
|
|
44
54
|
}
|
|
45
55
|
/**
|
|
46
56
|
* Remove tool-call markup from an agent's text response.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-call-markup.utils.js","sourceRoot":"","sources":["../../../../../backend/src/utils/tool-call-markup.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH
|
|
1
|
+
{"version":3,"file":"tool-call-markup.utils.js","sourceRoot":"","sources":["../../../../../backend/src/utils/tool-call-markup.utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "crewly",
|
|
3
|
-
"version": "1.20.
|
|
3
|
+
"version": "1.20.33",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Multi-agent orchestration platform for AI coding teams — coordinates Claude Code, Gemini CLI, and Codex agents with a real-time web dashboard",
|
|
6
6
|
"workspaces": [
|