@tianshu-ai/tianshu 0.67.1 → 0.68.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/node_modules/@tianshu-ai/plugin-sdk/dist/index.d.ts +1 -0
- package/node_modules/@tianshu-ai/plugin-sdk/dist/index.d.ts.map +1 -1
- package/node_modules/@tianshu-ai/plugin-sdk/dist/index.js +1 -0
- package/node_modules/@tianshu-ai/plugin-sdk/dist/index.js.map +1 -1
- package/node_modules/@tianshu-ai/plugin-sdk/dist/toon.d.ts +36 -0
- package/node_modules/@tianshu-ai/plugin-sdk/dist/toon.d.ts.map +1 -0
- package/node_modules/@tianshu-ai/plugin-sdk/dist/toon.js +88 -0
- package/node_modules/@tianshu-ai/plugin-sdk/dist/toon.js.map +1 -0
- package/node_modules/@tianshu-ai/plugin-sdk/src/index.ts +1 -0
- package/node_modules/@tianshu-ai/plugin-sdk/src/toon.ts +84 -0
- package/package.json +1 -1
- package/packages/plugin-sdk/dist/index.d.ts +1 -0
- package/packages/plugin-sdk/dist/index.d.ts.map +1 -1
- package/packages/plugin-sdk/dist/index.js +1 -0
- package/packages/plugin-sdk/dist/index.js.map +1 -1
- package/packages/plugin-sdk/dist/toon.d.ts +36 -0
- package/packages/plugin-sdk/dist/toon.d.ts.map +1 -0
- package/packages/plugin-sdk/dist/toon.js +88 -0
- package/packages/plugin-sdk/dist/toon.js.map +1 -0
- package/packages/server/builtinConfig/plugins/datasource/manifest.json +1 -1
- package/packages/server/dist/chat/agent-tool-adapter.d.ts.map +1 -1
- package/packages/server/dist/chat/agent-tool-adapter.js +13 -1
- package/packages/server/dist/chat/agent-tool-adapter.js.map +1 -1
- package/packages/server/dist/chat/handler.d.ts.map +1 -1
- package/packages/server/dist/chat/handler.js +56 -2
- package/packages/server/dist/chat/handler.js.map +1 -1
- package/packages/server/dist/chat/host-tools/recall-tools.d.ts.map +1 -1
- package/packages/server/dist/chat/host-tools/recall-tools.js +3 -4
- package/packages/server/dist/chat/host-tools/recall-tools.js.map +1 -1
- package/packages/server/dist/chat/host-tools/solution-tool.d.ts.map +1 -1
- package/packages/server/dist/chat/host-tools/solution-tool.js +5 -4
- package/packages/server/dist/chat/host-tools/solution-tool.js.map +1 -1
- package/packages/web/dist/assets/DataSourceConfigForm-DZwpjn9T.js +1 -0
- package/packages/web/dist/assets/{bundle-web-CCSCC2uj.js → bundle-web-GZ-GMV8k.js} +1 -1
- package/packages/web/dist/assets/{index-3Rb4XL9Q.js → index-DF_F7aWZ.js} +6 -5
- package/packages/web/dist/assets/{react-force-graph-2d-DZFwZCFu.js → react-force-graph-2d-BkjVkSQz.js} +1 -1
- package/packages/web/dist/index.html +1 -1
- package/plugins/board/dist/server.d.ts.map +1 -1
- package/plugins/board/dist/server.js +4 -1
- package/plugins/board/dist/server.js.map +2 -2
- package/plugins/datasource/dist/client.d.ts.map +1 -1
- package/plugins/datasource/dist/client.js +3 -1
- package/plugins/datasource/dist/client.js.map +1 -1
- package/plugins/datasource/dist/connection-pool.d.ts +5 -5
- package/plugins/datasource/dist/connection-pool.d.ts.map +1 -1
- package/plugins/datasource/dist/connection-pool.js +34 -20
- package/plugins/datasource/dist/connection-pool.js.map +1 -1
- package/plugins/datasource/dist/drivers/index.d.ts.map +1 -1
- package/plugins/datasource/dist/drivers/index.js +4 -0
- package/plugins/datasource/dist/drivers/index.js.map +1 -1
- package/plugins/datasource/dist/drivers/interface.d.ts +3 -3
- package/plugins/datasource/dist/drivers/interface.d.ts.map +1 -1
- package/plugins/datasource/dist/drivers/mysql.js +1 -1
- package/plugins/datasource/dist/drivers/mysql.js.map +1 -1
- package/plugins/datasource/dist/drivers/neo4j.d.ts.map +1 -1
- package/plugins/datasource/dist/drivers/neo4j.js +2 -1
- package/plugins/datasource/dist/drivers/neo4j.js.map +1 -1
- package/plugins/datasource/dist/drivers/rest.d.ts +19 -0
- package/plugins/datasource/dist/drivers/rest.d.ts.map +1 -0
- package/plugins/datasource/dist/drivers/rest.js +312 -0
- package/plugins/datasource/dist/drivers/rest.js.map +1 -0
- package/plugins/datasource/dist/server.d.ts.map +1 -1
- package/plugins/datasource/dist/server.js +29 -5
- package/plugins/datasource/dist/server.js.map +1 -1
- package/plugins/datasource/dist/tools/execute.d.ts.map +1 -1
- package/plugins/datasource/dist/tools/execute.js +13 -7
- package/plugins/datasource/dist/tools/execute.js.map +1 -1
- package/plugins/datasource/dist/tools/list.d.ts.map +1 -1
- package/plugins/datasource/dist/tools/list.js +2 -2
- package/plugins/datasource/dist/tools/list.js.map +1 -1
- package/plugins/datasource/dist/tools/query.d.ts.map +1 -1
- package/plugins/datasource/dist/tools/query.js +27 -7
- package/plugins/datasource/dist/tools/query.js.map +1 -1
- package/plugins/datasource/dist/tools/schema.d.ts.map +1 -1
- package/plugins/datasource/dist/tools/schema.js +2 -2
- package/plugins/datasource/dist/tools/schema.js.map +1 -1
- package/plugins/datasource/manifest.json +1 -1
- package/plugins/wiki/dist/server.js +2 -1
- package/plugins/wiki/dist/server.js.map +2 -2
- package/plugins/wiki/dist/sessions.d.ts.map +1 -1
- package/plugins/wiki/dist/sessions.js +5 -1
- package/plugins/wiki/dist/sessions.js.map +1 -1
- package/packages/web/dist/assets/DataSourceConfigForm-h83wW9V0.js +0 -1
|
@@ -11,5 +11,6 @@ export * from "./channel-bindings.js";
|
|
|
11
11
|
export * from "./wiki-ingest.js";
|
|
12
12
|
export * from "./workforce-snapshot.js";
|
|
13
13
|
export * from "./solution.js";
|
|
14
|
+
export * from "./toon.js";
|
|
14
15
|
export { McpToolset, textOfMcpContent, extractMcpUiResources, type McpUiResource, type McpEndpointResolver, type McpToolDescriptor, type McpToolFilter, type McpToolsetEntry, type McpToolsetOptions, type McpToolsetSnapshot, type ToolsetProvider, } from "./mcp-toolset.js";
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC"}
|
|
@@ -21,5 +21,6 @@ export * from "./channel-bindings.js";
|
|
|
21
21
|
export * from "./wiki-ingest.js";
|
|
22
22
|
export * from "./workforce-snapshot.js";
|
|
23
23
|
export * from "./solution.js";
|
|
24
|
+
export * from "./toon.js";
|
|
24
25
|
export { McpToolset, textOfMcpContent, extractMcpUiResources, } from "./mcp-toolset.js";
|
|
25
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,mEAAmE;AACnE,oEAAoE;AACpE,qEAAqE;AACrE,iCAAiC;AACjC,EAAE;AACF,wEAAwE;AACxE,iEAAiE;AACjE,0BAA0B;AAE1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,qBAAqB,GAStB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,mEAAmE;AACnE,oEAAoE;AACpE,qEAAqE;AACrE,iCAAiC;AACjC,EAAE;AACF,wEAAwE;AACxE,iEAAiE;AACjE,0BAA0B;AAE1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,qBAAqB,GAStB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOON — Token-Optimised Object Notation.
|
|
3
|
+
*
|
|
4
|
+
* Compact human/LLM-readable serialisation that drops JSON's quotes,
|
|
5
|
+
* braces, and brackets. Designed for agent tool results where the
|
|
6
|
+
* consumer is an LLM, not a JSON parser.
|
|
7
|
+
*
|
|
8
|
+
* toon({ id: 1, user: { name: "Yu" }, tags: [1,2] })
|
|
9
|
+
* → "id:1, user.name:Yu, tags:1, 2"
|
|
10
|
+
*
|
|
11
|
+
* Rules:
|
|
12
|
+
* - Plain objects → "key:value" pairs, comma-separated.
|
|
13
|
+
* - Nested objects → dot-notation keys (user.name:Yu).
|
|
14
|
+
* - Arrays → comma-separated values (no brackets).
|
|
15
|
+
* - Strings without commas/colons → unquoted.
|
|
16
|
+
* - Strings with commas/colons → double-quoted.
|
|
17
|
+
* - null/undefined → empty string.
|
|
18
|
+
* - Max depth 4 to prevent runaway recursion.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Convert any value to TOON string for tool result text.
|
|
22
|
+
*
|
|
23
|
+
* For arrays of objects (table-like data), use `toonRows()` which
|
|
24
|
+
* produces a more readable multi-line format.
|
|
25
|
+
*/
|
|
26
|
+
export declare function toon(data: unknown): string;
|
|
27
|
+
/**
|
|
28
|
+
* Format an array of objects as a compact multi-line table.
|
|
29
|
+
* First line is column headers, rest are values.
|
|
30
|
+
* Falls back to toon() for non-tabular data.
|
|
31
|
+
*
|
|
32
|
+
* toonRows([{ name: "a", score: 1 }, { name: "b", score: 2 }])
|
|
33
|
+
* → "name | score\na | 1\nb | 2"
|
|
34
|
+
*/
|
|
35
|
+
export declare function toonRows(rows: unknown[], columns?: string[]): string;
|
|
36
|
+
//# sourceMappingURL=toon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toon.d.ts","sourceRoot":"","sources":["../src/toon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAyBH;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAc1C;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAUpE"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOON — Token-Optimised Object Notation.
|
|
3
|
+
*
|
|
4
|
+
* Compact human/LLM-readable serialisation that drops JSON's quotes,
|
|
5
|
+
* braces, and brackets. Designed for agent tool results where the
|
|
6
|
+
* consumer is an LLM, not a JSON parser.
|
|
7
|
+
*
|
|
8
|
+
* toon({ id: 1, user: { name: "Yu" }, tags: [1,2] })
|
|
9
|
+
* → "id:1, user.name:Yu, tags:1, 2"
|
|
10
|
+
*
|
|
11
|
+
* Rules:
|
|
12
|
+
* - Plain objects → "key:value" pairs, comma-separated.
|
|
13
|
+
* - Nested objects → dot-notation keys (user.name:Yu).
|
|
14
|
+
* - Arrays → comma-separated values (no brackets).
|
|
15
|
+
* - Strings without commas/colons → unquoted.
|
|
16
|
+
* - Strings with commas/colons → double-quoted.
|
|
17
|
+
* - null/undefined → empty string.
|
|
18
|
+
* - Max depth 4 to prevent runaway recursion.
|
|
19
|
+
*/
|
|
20
|
+
const NEEDS_QUOTE = /[,:\n]/;
|
|
21
|
+
function formatValue(v, depth) {
|
|
22
|
+
if (v === null || v === undefined)
|
|
23
|
+
return "";
|
|
24
|
+
if (Array.isArray(v))
|
|
25
|
+
return v.map((item) => formatValue(item, depth)).join(", ");
|
|
26
|
+
if (typeof v === "object")
|
|
27
|
+
return toonPairs(v, "", depth);
|
|
28
|
+
const s = String(v);
|
|
29
|
+
return NEEDS_QUOTE.test(s) ? `"${s}"` : s;
|
|
30
|
+
}
|
|
31
|
+
function toonPairs(obj, prefix, depth) {
|
|
32
|
+
const parts = [];
|
|
33
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
34
|
+
const key = prefix ? `${prefix}.${k}` : k;
|
|
35
|
+
if (v !== null && typeof v === "object" && !Array.isArray(v) && depth < 4) {
|
|
36
|
+
parts.push(toonPairs(v, key, depth + 1));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
parts.push(`${key}:${formatValue(v, depth + 1)}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return parts.join(", ");
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Convert any value to TOON string for tool result text.
|
|
46
|
+
*
|
|
47
|
+
* For arrays of objects (table-like data), use `toonRows()` which
|
|
48
|
+
* produces a more readable multi-line format.
|
|
49
|
+
*/
|
|
50
|
+
export function toon(data) {
|
|
51
|
+
if (data === null || data === undefined)
|
|
52
|
+
return "";
|
|
53
|
+
if (Array.isArray(data)) {
|
|
54
|
+
if (data.length === 0)
|
|
55
|
+
return "[]";
|
|
56
|
+
if (typeof data[0] === "object" && data[0] !== null) {
|
|
57
|
+
// Array of objects → one line per item
|
|
58
|
+
return data.map((item) => toon(item)).join("\n");
|
|
59
|
+
}
|
|
60
|
+
return data.map((item) => formatValue(item, 0)).join(", ");
|
|
61
|
+
}
|
|
62
|
+
if (typeof data === "object") {
|
|
63
|
+
return toonPairs(data, "", 0);
|
|
64
|
+
}
|
|
65
|
+
return String(data);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Format an array of objects as a compact multi-line table.
|
|
69
|
+
* First line is column headers, rest are values.
|
|
70
|
+
* Falls back to toon() for non-tabular data.
|
|
71
|
+
*
|
|
72
|
+
* toonRows([{ name: "a", score: 1 }, { name: "b", score: 2 }])
|
|
73
|
+
* → "name | score\na | 1\nb | 2"
|
|
74
|
+
*/
|
|
75
|
+
export function toonRows(rows, columns) {
|
|
76
|
+
if (rows.length === 0)
|
|
77
|
+
return "(empty)";
|
|
78
|
+
if (typeof rows[0] !== "object" || rows[0] === null)
|
|
79
|
+
return toon(rows);
|
|
80
|
+
const cols = columns ?? [...new Set(rows.flatMap((r) => Object.keys(r)))];
|
|
81
|
+
const header = cols.join(" | ");
|
|
82
|
+
const body = rows.map((r) => {
|
|
83
|
+
const obj = r;
|
|
84
|
+
return cols.map((c) => formatValue(obj[c], 0)).join(" | ");
|
|
85
|
+
});
|
|
86
|
+
return [header, ...body].join("\n");
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=toon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toon.js","sourceRoot":"","sources":["../src/toon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOON — Token-Optimised Object Notation.
|
|
3
|
+
*
|
|
4
|
+
* Compact human/LLM-readable serialisation that drops JSON's quotes,
|
|
5
|
+
* braces, and brackets. Designed for agent tool results where the
|
|
6
|
+
* consumer is an LLM, not a JSON parser.
|
|
7
|
+
*
|
|
8
|
+
* toon({ id: 1, user: { name: "Yu" }, tags: [1,2] })
|
|
9
|
+
* → "id:1, user.name:Yu, tags:1, 2"
|
|
10
|
+
*
|
|
11
|
+
* Rules:
|
|
12
|
+
* - Plain objects → "key:value" pairs, comma-separated.
|
|
13
|
+
* - Nested objects → dot-notation keys (user.name:Yu).
|
|
14
|
+
* - Arrays → comma-separated values (no brackets).
|
|
15
|
+
* - Strings without commas/colons → unquoted.
|
|
16
|
+
* - Strings with commas/colons → double-quoted.
|
|
17
|
+
* - null/undefined → empty string.
|
|
18
|
+
* - Max depth 4 to prevent runaway recursion.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
const NEEDS_QUOTE = /[,:\n]/;
|
|
22
|
+
|
|
23
|
+
function formatValue(v: unknown, depth: number): string {
|
|
24
|
+
if (v === null || v === undefined) return "";
|
|
25
|
+
if (Array.isArray(v)) return v.map((item) => formatValue(item, depth)).join(", ");
|
|
26
|
+
if (typeof v === "object") return toonPairs(v as Record<string, unknown>, "", depth);
|
|
27
|
+
const s = String(v);
|
|
28
|
+
return NEEDS_QUOTE.test(s) ? `"${s}"` : s;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function toonPairs(obj: Record<string, unknown>, prefix: string, depth: number): string {
|
|
32
|
+
const parts: string[] = [];
|
|
33
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
34
|
+
const key = prefix ? `${prefix}.${k}` : k;
|
|
35
|
+
if (v !== null && typeof v === "object" && !Array.isArray(v) && depth < 4) {
|
|
36
|
+
parts.push(toonPairs(v as Record<string, unknown>, key, depth + 1));
|
|
37
|
+
} else {
|
|
38
|
+
parts.push(`${key}:${formatValue(v, depth + 1)}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return parts.join(", ");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Convert any value to TOON string for tool result text.
|
|
46
|
+
*
|
|
47
|
+
* For arrays of objects (table-like data), use `toonRows()` which
|
|
48
|
+
* produces a more readable multi-line format.
|
|
49
|
+
*/
|
|
50
|
+
export function toon(data: unknown): string {
|
|
51
|
+
if (data === null || data === undefined) return "";
|
|
52
|
+
if (Array.isArray(data)) {
|
|
53
|
+
if (data.length === 0) return "[]";
|
|
54
|
+
if (typeof data[0] === "object" && data[0] !== null) {
|
|
55
|
+
// Array of objects → one line per item
|
|
56
|
+
return data.map((item) => toon(item)).join("\n");
|
|
57
|
+
}
|
|
58
|
+
return data.map((item) => formatValue(item, 0)).join(", ");
|
|
59
|
+
}
|
|
60
|
+
if (typeof data === "object") {
|
|
61
|
+
return toonPairs(data as Record<string, unknown>, "", 0);
|
|
62
|
+
}
|
|
63
|
+
return String(data);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Format an array of objects as a compact multi-line table.
|
|
68
|
+
* First line is column headers, rest are values.
|
|
69
|
+
* Falls back to toon() for non-tabular data.
|
|
70
|
+
*
|
|
71
|
+
* toonRows([{ name: "a", score: 1 }, { name: "b", score: 2 }])
|
|
72
|
+
* → "name | score\na | 1\nb | 2"
|
|
73
|
+
*/
|
|
74
|
+
export function toonRows(rows: unknown[], columns?: string[]): string {
|
|
75
|
+
if (rows.length === 0) return "(empty)";
|
|
76
|
+
if (typeof rows[0] !== "object" || rows[0] === null) return toon(rows);
|
|
77
|
+
const cols = columns ?? [...new Set(rows.flatMap((r) => Object.keys(r as object)))];
|
|
78
|
+
const header = cols.join(" | ");
|
|
79
|
+
const body = rows.map((r) => {
|
|
80
|
+
const obj = r as Record<string, unknown>;
|
|
81
|
+
return cols.map((c) => formatValue(obj[c], 0)).join(" | ");
|
|
82
|
+
});
|
|
83
|
+
return [header, ...body].join("\n");
|
|
84
|
+
}
|
package/package.json
CHANGED
|
@@ -11,5 +11,6 @@ export * from "./channel-bindings.js";
|
|
|
11
11
|
export * from "./wiki-ingest.js";
|
|
12
12
|
export * from "./workforce-snapshot.js";
|
|
13
13
|
export * from "./solution.js";
|
|
14
|
+
export * from "./toon.js";
|
|
14
15
|
export { McpToolset, textOfMcpContent, extractMcpUiResources, type McpUiResource, type McpEndpointResolver, type McpToolDescriptor, type McpToolFilter, type McpToolsetEntry, type McpToolsetOptions, type McpToolsetSnapshot, type ToolsetProvider, } from "./mcp-toolset.js";
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC"}
|
|
@@ -21,5 +21,6 @@ export * from "./channel-bindings.js";
|
|
|
21
21
|
export * from "./wiki-ingest.js";
|
|
22
22
|
export * from "./workforce-snapshot.js";
|
|
23
23
|
export * from "./solution.js";
|
|
24
|
+
export * from "./toon.js";
|
|
24
25
|
export { McpToolset, textOfMcpContent, extractMcpUiResources, } from "./mcp-toolset.js";
|
|
25
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,mEAAmE;AACnE,oEAAoE;AACpE,qEAAqE;AACrE,iCAAiC;AACjC,EAAE;AACF,wEAAwE;AACxE,iEAAiE;AACjE,0BAA0B;AAE1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,qBAAqB,GAStB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,mEAAmE;AACnE,oEAAoE;AACpE,qEAAqE;AACrE,iCAAiC;AACjC,EAAE;AACF,wEAAwE;AACxE,iEAAiE;AACjE,0BAA0B;AAE1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,qBAAqB,GAStB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOON — Token-Optimised Object Notation.
|
|
3
|
+
*
|
|
4
|
+
* Compact human/LLM-readable serialisation that drops JSON's quotes,
|
|
5
|
+
* braces, and brackets. Designed for agent tool results where the
|
|
6
|
+
* consumer is an LLM, not a JSON parser.
|
|
7
|
+
*
|
|
8
|
+
* toon({ id: 1, user: { name: "Yu" }, tags: [1,2] })
|
|
9
|
+
* → "id:1, user.name:Yu, tags:1, 2"
|
|
10
|
+
*
|
|
11
|
+
* Rules:
|
|
12
|
+
* - Plain objects → "key:value" pairs, comma-separated.
|
|
13
|
+
* - Nested objects → dot-notation keys (user.name:Yu).
|
|
14
|
+
* - Arrays → comma-separated values (no brackets).
|
|
15
|
+
* - Strings without commas/colons → unquoted.
|
|
16
|
+
* - Strings with commas/colons → double-quoted.
|
|
17
|
+
* - null/undefined → empty string.
|
|
18
|
+
* - Max depth 4 to prevent runaway recursion.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Convert any value to TOON string for tool result text.
|
|
22
|
+
*
|
|
23
|
+
* For arrays of objects (table-like data), use `toonRows()` which
|
|
24
|
+
* produces a more readable multi-line format.
|
|
25
|
+
*/
|
|
26
|
+
export declare function toon(data: unknown): string;
|
|
27
|
+
/**
|
|
28
|
+
* Format an array of objects as a compact multi-line table.
|
|
29
|
+
* First line is column headers, rest are values.
|
|
30
|
+
* Falls back to toon() for non-tabular data.
|
|
31
|
+
*
|
|
32
|
+
* toonRows([{ name: "a", score: 1 }, { name: "b", score: 2 }])
|
|
33
|
+
* → "name | score\na | 1\nb | 2"
|
|
34
|
+
*/
|
|
35
|
+
export declare function toonRows(rows: unknown[], columns?: string[]): string;
|
|
36
|
+
//# sourceMappingURL=toon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toon.d.ts","sourceRoot":"","sources":["../src/toon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAyBH;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAc1C;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAUpE"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOON — Token-Optimised Object Notation.
|
|
3
|
+
*
|
|
4
|
+
* Compact human/LLM-readable serialisation that drops JSON's quotes,
|
|
5
|
+
* braces, and brackets. Designed for agent tool results where the
|
|
6
|
+
* consumer is an LLM, not a JSON parser.
|
|
7
|
+
*
|
|
8
|
+
* toon({ id: 1, user: { name: "Yu" }, tags: [1,2] })
|
|
9
|
+
* → "id:1, user.name:Yu, tags:1, 2"
|
|
10
|
+
*
|
|
11
|
+
* Rules:
|
|
12
|
+
* - Plain objects → "key:value" pairs, comma-separated.
|
|
13
|
+
* - Nested objects → dot-notation keys (user.name:Yu).
|
|
14
|
+
* - Arrays → comma-separated values (no brackets).
|
|
15
|
+
* - Strings without commas/colons → unquoted.
|
|
16
|
+
* - Strings with commas/colons → double-quoted.
|
|
17
|
+
* - null/undefined → empty string.
|
|
18
|
+
* - Max depth 4 to prevent runaway recursion.
|
|
19
|
+
*/
|
|
20
|
+
const NEEDS_QUOTE = /[,:\n]/;
|
|
21
|
+
function formatValue(v, depth) {
|
|
22
|
+
if (v === null || v === undefined)
|
|
23
|
+
return "";
|
|
24
|
+
if (Array.isArray(v))
|
|
25
|
+
return v.map((item) => formatValue(item, depth)).join(", ");
|
|
26
|
+
if (typeof v === "object")
|
|
27
|
+
return toonPairs(v, "", depth);
|
|
28
|
+
const s = String(v);
|
|
29
|
+
return NEEDS_QUOTE.test(s) ? `"${s}"` : s;
|
|
30
|
+
}
|
|
31
|
+
function toonPairs(obj, prefix, depth) {
|
|
32
|
+
const parts = [];
|
|
33
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
34
|
+
const key = prefix ? `${prefix}.${k}` : k;
|
|
35
|
+
if (v !== null && typeof v === "object" && !Array.isArray(v) && depth < 4) {
|
|
36
|
+
parts.push(toonPairs(v, key, depth + 1));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
parts.push(`${key}:${formatValue(v, depth + 1)}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return parts.join(", ");
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Convert any value to TOON string for tool result text.
|
|
46
|
+
*
|
|
47
|
+
* For arrays of objects (table-like data), use `toonRows()` which
|
|
48
|
+
* produces a more readable multi-line format.
|
|
49
|
+
*/
|
|
50
|
+
export function toon(data) {
|
|
51
|
+
if (data === null || data === undefined)
|
|
52
|
+
return "";
|
|
53
|
+
if (Array.isArray(data)) {
|
|
54
|
+
if (data.length === 0)
|
|
55
|
+
return "[]";
|
|
56
|
+
if (typeof data[0] === "object" && data[0] !== null) {
|
|
57
|
+
// Array of objects → one line per item
|
|
58
|
+
return data.map((item) => toon(item)).join("\n");
|
|
59
|
+
}
|
|
60
|
+
return data.map((item) => formatValue(item, 0)).join(", ");
|
|
61
|
+
}
|
|
62
|
+
if (typeof data === "object") {
|
|
63
|
+
return toonPairs(data, "", 0);
|
|
64
|
+
}
|
|
65
|
+
return String(data);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Format an array of objects as a compact multi-line table.
|
|
69
|
+
* First line is column headers, rest are values.
|
|
70
|
+
* Falls back to toon() for non-tabular data.
|
|
71
|
+
*
|
|
72
|
+
* toonRows([{ name: "a", score: 1 }, { name: "b", score: 2 }])
|
|
73
|
+
* → "name | score\na | 1\nb | 2"
|
|
74
|
+
*/
|
|
75
|
+
export function toonRows(rows, columns) {
|
|
76
|
+
if (rows.length === 0)
|
|
77
|
+
return "(empty)";
|
|
78
|
+
if (typeof rows[0] !== "object" || rows[0] === null)
|
|
79
|
+
return toon(rows);
|
|
80
|
+
const cols = columns ?? [...new Set(rows.flatMap((r) => Object.keys(r)))];
|
|
81
|
+
const header = cols.join(" | ");
|
|
82
|
+
const body = rows.map((r) => {
|
|
83
|
+
const obj = r;
|
|
84
|
+
return cols.map((c) => formatValue(obj[c], 0)).join(" | ");
|
|
85
|
+
});
|
|
86
|
+
return [header, ...body].join("\n");
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=toon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toon.js","sourceRoot":"","sources":["../src/toon.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"systemPromptFragments": [
|
|
37
37
|
{
|
|
38
38
|
"id": "datasource-tools",
|
|
39
|
-
"text": "Data Source tools: ds_list (list connections), ds_query (read query), ds_execute (write query), ds_schema (inspect schema), ds_panel (push query to UI panel).\n\nWhen creating Board apps (HTML dashboards), use the injected board.ds() API to query databases directly from the board:\n\n const { connections } = await board.dsList()\n // connections: [{name, type, description}]\n\n const { columns, rows, rowCount, error } = await board.ds(source, query, params?)\n // source: data source name from dsList()\n // query: SQL or Cypher string\n // params: optional query parameters object\n\nExample:\n const { rows } = await board.ds('helu-graph', 'MATCH (p:Product) RETURN p.title, p.price LIMIT 10');\n rows.forEach(r => console.log(r['p.title']));\n\nboard.ds() and board.dsList() are available globally on window.board in any board app. No API keys needed."
|
|
39
|
+
"text": "Data Source tools: ds_list (list connections), ds_query (read query), ds_execute (write query), ds_schema (inspect schema), ds_panel (push query to UI panel).\nSupported types: MySQL (SQL), Neo4j (Cypher), REST API (HTTP method + path, e.g. 'GET /users?limit=10').\n\nWhen creating Board apps (HTML dashboards), use the injected board.ds() API to query databases directly from the board:\n\n const { connections } = await board.dsList()\n // connections: [{name, type, description}]\n\n const { columns, rows, rowCount, error } = await board.ds(source, query, params?)\n // source: data source name from dsList()\n // query: SQL or Cypher string\n // params: optional query parameters object\n\nExample:\n const { rows } = await board.ds('helu-graph', 'MATCH (p:Product) RETURN p.title, p.price LIMIT 10');\n rows.forEach(r => console.log(r['p.title']));\n\nboard.ds() and board.dsList() are available globally on window.board in any board app. No API keys needed."
|
|
40
40
|
}
|
|
41
41
|
],
|
|
42
42
|
"apiRoutes": [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-tool-adapter.d.ts","sourceRoot":"","sources":["../../src/chat/agent-tool-adapter.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EACV,SAAS,IAAI,WAAW,EAEzB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-tool-adapter.d.ts","sourceRoot":"","sources":["../../src/chat/agent-tool-adapter.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EACV,SAAS,IAAI,WAAW,EAEzB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAKjD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb;;;gEAG4D;IAC5D,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvD;AAsBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CA+B/D;AAED,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB;mEAC+D;IAC/D,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CACjC;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,CAoH7D;AAED;;qEAEqE;AACrE,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAIvD"}
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
// "soft failures" via the ToolResultMessage's `isError` flag, but
|
|
23
23
|
// tianshu plugins want them to be visible to the LLM verbatim.
|
|
24
24
|
// Tracked in workers.md §7.2.
|
|
25
|
+
import { toon } from "@tianshu-ai/plugin-sdk";
|
|
25
26
|
/** Normalise a plugin-returned `images` field (each entry may be a
|
|
26
27
|
* `{ base64, mimeType }` or a data: URL string) into the internal
|
|
27
28
|
* shape. Silently drops malformed entries. */
|
|
@@ -66,6 +67,17 @@ export function normaliseToolResult(out) {
|
|
|
66
67
|
const r = out;
|
|
67
68
|
return { ok: r.ok, text: r.text, images: extractImages(out) };
|
|
68
69
|
}
|
|
70
|
+
// pi-style { content: [{ type: "text", text }], isError? } — extract
|
|
71
|
+
// text from content blocks instead of JSON-stringifying the wrapper.
|
|
72
|
+
if (out && typeof out === "object" && Array.isArray(out.content)) {
|
|
73
|
+
const r = out;
|
|
74
|
+
const text = r.content
|
|
75
|
+
.filter((b) => b.type === "text" && typeof b.text === "string")
|
|
76
|
+
.map((b) => b.text)
|
|
77
|
+
.join("\n");
|
|
78
|
+
const ok = r.isError !== true;
|
|
79
|
+
return { ok, text, images: extractImages(out) };
|
|
80
|
+
}
|
|
69
81
|
if (out && typeof out === "object") {
|
|
70
82
|
const r = out;
|
|
71
83
|
let ok = true;
|
|
@@ -75,7 +87,7 @@ export function normaliseToolResult(out) {
|
|
|
75
87
|
ok = r.exit_code === 0;
|
|
76
88
|
else if (typeof r.state === "string")
|
|
77
89
|
ok = r.state !== "error" && r.state !== "failed";
|
|
78
|
-
return { ok, text:
|
|
90
|
+
return { ok, text: toon(out) };
|
|
79
91
|
}
|
|
80
92
|
return { ok: true, text: String(out ?? "") };
|
|
81
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-tool-adapter.js","sourceRoot":"","sources":["../../src/chat/agent-tool-adapter.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,mBAAmB;AACnB,2DAA2D;AAC3D,+CAA+C;AAC/C,gEAAgE;AAChE,4DAA4D;AAC5D,gEAAgE;AAChE,cAAc;AACd,wEAAwE;AACxE,+DAA+D;AAC/D,2DAA2D;AAC3D,+DAA+D;AAC/D,oEAAoE;AACpE,EAAE;AACF,qEAAqE;AACrE,mEAAmE;AACnE,wDAAwD;AACxD,gEAAgE;AAChE,mEAAmE;AACnE,oEAAoE;AACpE,kEAAkE;AAClE,+DAA+D;AAC/D,8BAA8B;
|
|
1
|
+
{"version":3,"file":"agent-tool-adapter.js","sourceRoot":"","sources":["../../src/chat/agent-tool-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/chat/handler.ts"],"names":[],"mappings":"AAqDA,OAAO,EACL,mBAAmB,EACnB,cAAc,EAGd,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,CAAC;AAGF,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAQL,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AA6B1B,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAOL,KAAK,WAAW,EAEjB,MAAM,eAAe,CAAC;AAYvB,OAAO,EAGL,KAAK,SAAS,EAEd,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAC;AA6B1B,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,aAAa,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC;IACtE,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/chat/handler.ts"],"names":[],"mappings":"AAqDA,OAAO,EACL,mBAAmB,EACnB,cAAc,EAGd,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,CAAC;AAGF,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAQL,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AA6B1B,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAOL,KAAK,WAAW,EAEjB,MAAM,eAAe,CAAC;AAYvB,OAAO,EAGL,KAAK,SAAS,EAEd,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAC;AA6B1B,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,aAAa,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC;IACtE,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAqQ7D;AAED,UAAU,aAAa;IACrB,GAAG,EAAE,aAAa,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,MAAM,EAAE,WAAW,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;4BAGwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,eAAe,EAAE,WAAW,CAAC;IAC9C;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwzClE;AAsWD,wBAAgB,uBAAuB,CACrC,oBAAoB,EAAE,WAAW,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC3D,2BAA2B,CAAC,EAAE,MAAM,GACnC,MAAM,CAuCR;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,EAAE,CAgB3E;AA0ED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CA0Ef;AA2XD,wBAAgB,cAAc,IAAI,WAAW,EAAE,CAkC9C;AAGD,YAAY,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -195,6 +195,7 @@ export function attachChatHandler(opts) {
|
|
|
195
195
|
modelId: parsed.modelId,
|
|
196
196
|
signal: aborter.signal,
|
|
197
197
|
}).catch((err) => {
|
|
198
|
+
console.error(`[handler] runPrompt FAILED`, err?.stack ?? err);
|
|
198
199
|
send({
|
|
199
200
|
type: "stream_error",
|
|
200
201
|
reason: err instanceof Error ? err.message : String(err),
|
|
@@ -220,6 +221,7 @@ export function attachChatHandler(opts) {
|
|
|
220
221
|
session: explicitSession,
|
|
221
222
|
voiceMode: parsed.voiceMode === true,
|
|
222
223
|
}).catch((err) => {
|
|
224
|
+
console.error(`[handler] runPrompt(explicit) FAILED`, err?.stack ?? err);
|
|
223
225
|
send({
|
|
224
226
|
type: "stream_error",
|
|
225
227
|
reason: err instanceof Error ? err.message : String(err),
|
|
@@ -247,6 +249,7 @@ export function attachChatHandler(opts) {
|
|
|
247
249
|
pluginRegistry,
|
|
248
250
|
homeDir,
|
|
249
251
|
}).catch((err) => {
|
|
252
|
+
console.error(`[handler] runPrompt(retry) FAILED`, err?.stack ?? err);
|
|
250
253
|
send({
|
|
251
254
|
type: "stream_error",
|
|
252
255
|
reason: err instanceof Error ? err.message : String(err),
|
|
@@ -650,6 +653,48 @@ export async function runPrompt(args) {
|
|
|
650
653
|
// class. Returns `{ harness, open }`; `open` lists any operations
|
|
651
654
|
// that were mid-flight in a previously persisted session — for chat
|
|
652
655
|
// we start fresh each turn, so we ignore it.
|
|
656
|
+
// ── repair stale lane operations ─────────────────────────
|
|
657
|
+
// When a turn is interrupted (abort, crash, SIGTERM), the lane
|
|
658
|
+
// state may record a currentOperationId whose op.meta / op.state
|
|
659
|
+
// KV entries were never written. pi-agent-core's restoreLaneState
|
|
660
|
+
// treats this as a fatal SessionInvariantError → HarnessFault,
|
|
661
|
+
// permanently bricking the session. Fix: before harness restore,
|
|
662
|
+
// scan lane states and null out any currentOperationId that points
|
|
663
|
+
// to a missing op.meta. This is a runtime-state repair, not a
|
|
664
|
+
// history rewrite.
|
|
665
|
+
try {
|
|
666
|
+
const laneRows = ctx.db
|
|
667
|
+
.prepare(`SELECT key, value FROM session_values
|
|
668
|
+
WHERE session_id = ? AND namespace = ?`)
|
|
669
|
+
.all(session.id, "pi.lane.state");
|
|
670
|
+
for (const row of laneRows) {
|
|
671
|
+
try {
|
|
672
|
+
const parsed = JSON.parse(row.value);
|
|
673
|
+
const opId = parsed.currentOperationId;
|
|
674
|
+
if (!opId)
|
|
675
|
+
continue;
|
|
676
|
+
const metaRow = ctx.db
|
|
677
|
+
.prepare(`SELECT value FROM session_values
|
|
678
|
+
WHERE session_id = ? AND namespace = ? AND key = ?`)
|
|
679
|
+
.get(session.id, "pi.op.meta", opId);
|
|
680
|
+
if (!metaRow) {
|
|
681
|
+
console.warn(`[handler] repairing stale operation ref session=${session.id} lane=${row.key} operationId=${opId} (op.meta missing)`);
|
|
682
|
+
parsed.currentOperationId = null;
|
|
683
|
+
ctx.db
|
|
684
|
+
.prepare(`UPDATE session_values SET value = ?
|
|
685
|
+
WHERE session_id = ? AND namespace = ? AND key = ?`)
|
|
686
|
+
.run(JSON.stringify(parsed), session.id, "pi.lane.state", row.key);
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
catch (parseErr) {
|
|
690
|
+
// Malformed JSON in lane state — skip, harness will handle it.
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
catch (repairErr) {
|
|
695
|
+
console.warn(`[handler] lane-state repair failed session=${session.id}`, repairErr);
|
|
696
|
+
}
|
|
697
|
+
console.log(`[handler] AgentHarness.create starting session=${session.id}`);
|
|
653
698
|
const { harness } = await AgentHarness.create({
|
|
654
699
|
session: piSession,
|
|
655
700
|
// pi 0.85 typed AgentHarnessTool[] more strictly than our
|
|
@@ -688,11 +733,20 @@ export async function runPrompt(args) {
|
|
|
688
733
|
});
|
|
689
734
|
},
|
|
690
735
|
}),
|
|
691
|
-
}, piContext)
|
|
736
|
+
}, piContext).catch((err) => {
|
|
737
|
+
console.error(`[handler] AgentHarness.create FAILED session=${session.id}`, err);
|
|
738
|
+
throw err;
|
|
739
|
+
});
|
|
740
|
+
console.log(`[handler] AgentHarness.create OK session=${session.id}`);
|
|
692
741
|
// pi 0.85: all lane-scoped operations (prompt, abort, waitForIdle,
|
|
693
742
|
// compact, followUp, etc.) moved from harness onto AgentLane. Use
|
|
694
743
|
// one "main" lane for the whole chat session.
|
|
695
|
-
|
|
744
|
+
console.log(`[handler] harness.lane("main") starting session=${session.id}`);
|
|
745
|
+
const lane = await harness.lane("main", piContext).catch((err) => {
|
|
746
|
+
console.error(`[handler] harness.lane("main") FAILED session=${session.id}`, err);
|
|
747
|
+
throw err;
|
|
748
|
+
});
|
|
749
|
+
console.log(`[handler] harness.lane("main") OK session=${session.id}`);
|
|
696
750
|
// Structured compaction: intercept pi's default free-form summary
|
|
697
751
|
// with a turn-numbered markdown block that lets the model use
|
|
698
752
|
// recall_range(A, B) against exact session turns. Falls through
|