@tianshu-ai/tianshu 0.49.1 → 0.50.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tianshu-ai/tianshu",
3
- "version": "0.49.1",
3
+ "version": "0.50.0",
4
4
  "description": "An open AI agent platform with a sidecar browser. Built in public.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/tianshu-ai/tianshu",
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC;AACjC,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;AAE/F,MAAM,WAAW,OAAO;IACtB,6DAA6D;IAC7D,OAAO,EAAE,IAAI,EAAE,CAAC;IAChB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,WAAW,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAC;QAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IACvF;gEAC4D;IAC5D,WAAW,EAAE,gBAAgB,CAAC;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IAC5D;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CACjC;AAED;wDACwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,oBAAoB,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB;+DAC2D;IAC3D,UAAU,CAAC,EACP;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAChB;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,GAAG,EAAE,YAAY,CAAC;IAClB;+DAC2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC9B;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACpD;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAoF3E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC;AACjC,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;AAqF/F,MAAM,WAAW,OAAO;IACtB,6DAA6D;IAC7D,OAAO,EAAE,IAAI,EAAE,CAAC;IAChB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,WAAW,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAC;QAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IACvF;gEAC4D;IAC5D,WAAW,EAAE,gBAAgB,CAAC;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IAC5D;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CACjC;AAED;wDACwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,oBAAoB,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB;+DAC2D;IAC3D,UAAU,CAAC,EACP;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAChB;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,GAAG,EAAE,YAAY,CAAC;IAClB;+DAC2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC9B;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACpD;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAoF3E"}
@@ -15,6 +15,77 @@
15
15
  // `files` plugin disabled and no microsandbox), the agent simply
16
16
  // gets an empty toolset \u2014 it can still answer questions, just
17
17
  // can't touch files or run commands.
18
+ /**
19
+ * Wrap a raw tool executor with a safety net that:
20
+ * 1. Honors an aborted signal before invoking the tool.
21
+ * 2. Catches any throw / promise rejection from the tool body
22
+ * — including from inner async code paths the caller might
23
+ * have overlooked — and rethrows a normalized error message
24
+ * that reads as "tool X failed: <cause>. You may retry with
25
+ * different arguments or take an alternative approach."
26
+ *
27
+ * Why not just let pi handle it? pi-agent-core's executePreparedToolCall
28
+ * already catches sync/async throws and turns them into a
29
+ * `{ result: ErrorToolResult, isError: true }` for the agent — but
30
+ * the resulting `tool_result` content is just the bare Error.message,
31
+ * which for cases like bridge exec / network SSH failures reads as
32
+ * something opaque like "ECONNRESET" or "aborted" and the agent
33
+ * doesn't always realize the sensible next move is "try again" or
34
+ * "tell the user what failed".
35
+ *
36
+ * This wrapper does NOT swallow the error — it re-throws. pi still
37
+ * takes the standard path (isError=true tool_result gets sent back
38
+ * to the model). We only enrich the message so the model has
39
+ * enough context to decide what to do next instead of stalling.
40
+ */
41
+ function wrapExecutorWithErrorGuard(toolName, origin, toolContext, raw) {
42
+ return async (args) => {
43
+ if (toolContext.signal?.aborted) {
44
+ throw new Error("aborted by user");
45
+ }
46
+ try {
47
+ // Await here (rather than returning the Promise directly) so
48
+ // async rejections land in our catch block, not on the caller.
49
+ return await raw(args);
50
+ }
51
+ catch (err) {
52
+ const causeMessage = err instanceof Error ? err.message : String(err);
53
+ const causeStack = err instanceof Error && err.stack ? err.stack : undefined;
54
+ // Detailed context in the server log — the agent doesn't need
55
+ // stack traces, but a human debugging bridge/tool crashes does.
56
+ toolContext.log.warn(`[tool-guard] ${origin}:${toolName} threw: ${causeMessage}${causeStack ? `\n${causeStack.split("\n").slice(0, 6).join("\n")}` : ""}`);
57
+ // Rethrow with an agent-actionable message. pi's tool-loop
58
+ // catches this and returns it as isError=true tool_result,
59
+ // so the model sees this text as its next input.
60
+ const guidance = deriveRecoveryHint(toolName, causeMessage);
61
+ throw new Error(`${toolName} failed: ${causeMessage}. ${guidance}`);
62
+ }
63
+ };
64
+ }
65
+ /**
66
+ * Best-effort tool-specific guidance strings that tell the agent
67
+ * what a plausible recovery move looks like. Keeps the message
68
+ * short (<200 chars) so it doesn't dominate the tool_result.
69
+ */
70
+ function deriveRecoveryHint(toolName, causeMessage) {
71
+ const lower = causeMessage.toLowerCase();
72
+ // Bridge exec / SSH / remote tools — usually transient network
73
+ // or process-crash failures.
74
+ if (/^bridge_.*_exec$|bridge_.*_shell$/i.test(toolName)) {
75
+ if (/econnrefused|econnreset|etimedout|network|socket|hang up|closed/i.test(lower)) {
76
+ return "The bridge connection may have dropped. You may retry the command once; if it still fails, tell the user the bridge is unreachable and stop retrying.";
77
+ }
78
+ if (/exit(ed)? .*(1|127|130|137)|non-zero exit|failed with code/i.test(lower)) {
79
+ return "The command completed but exited non-zero. Read the output above (if any) to decide whether to fix the arguments, run a different command, or report the failure to the user.";
80
+ }
81
+ return "Retry once with the same or corrected arguments; if it fails a second time, describe the failure to the user rather than looping.";
82
+ }
83
+ if (/aborted by user/i.test(lower)) {
84
+ return "The user cancelled this turn. Stop working and wait for the next user message.";
85
+ }
86
+ // Generic default — don't over-promise a fix.
87
+ return "You may retry with different arguments or take an alternative approach; do not repeat the exact same call more than twice in a row.";
88
+ }
18
89
  /**
19
90
  * Build a per-request toolset. Plugin tools are registered iff
20
91
  * their `available()` hook (default: true) returns truthy.
@@ -72,23 +143,13 @@ export async function buildToolset(opts) {
72
143
  const effectiveAccess = toolAccess ?? "member";
73
144
  if (effectiveAccess === "admin" && toolContext.userRole === "member")
74
145
  continue;
75
- executors[name] = (args) => {
76
- if (toolContext.signal?.aborted) {
77
- throw new Error("aborted by user");
78
- }
79
- return tool.execute(args, ctx);
80
- };
146
+ executors[name] = wrapExecutorWithErrorGuard(name, pluginId, toolContext, (args) => tool.execute(args, ctx));
81
147
  }
82
148
  // Host-level tools (always available, not from plugins).
83
149
  for (const { schema, executor } of opts.hostTools ?? []) {
84
150
  if (!executors[schema.name]) {
85
151
  schemas.push(schema);
86
- executors[schema.name] = (args) => {
87
- if (toolContext.signal?.aborted) {
88
- throw new Error("aborted by user");
89
- }
90
- return executor(args);
91
- };
152
+ executors[schema.name] = wrapExecutorWithErrorGuard(schema.name, "host", toolContext, (args) => executor(args));
92
153
  }
93
154
  }
94
155
  return { schemas, executors };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}