botanary-mcp 0.9.1 → 0.9.2
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/src/hitl/wait.d.ts
CHANGED
|
@@ -38,13 +38,6 @@ export interface WaitOutcome<T> {
|
|
|
38
38
|
/** Poll a function on a fixed interval. The compatibility path, and the correctness backstop when a
|
|
39
39
|
* stream drops. */
|
|
40
40
|
export declare function pollSource<T>(read: () => Promise<T>, intervalMs: number, sleep?: (ms: number) => Promise<void>): WaitSource<T>;
|
|
41
|
-
/**
|
|
42
|
-
* Read a `text/event-stream` off `fetch`, parsing `data:` frames.
|
|
43
|
-
*
|
|
44
|
-
* NOT `EventSource`. A browser `EventSource` cannot send an `Authorization` header, which is why the
|
|
45
|
-
* backend's marketplace and markets streams had to go `@Public()`. This consumer is Node, so the four
|
|
46
|
-
* routes this package reads stay session-authed - see each route's own doc comment on the backend.
|
|
47
|
-
*/
|
|
48
41
|
export declare function sseSource<T>(url: string, token: string, parse: (data: unknown) => T): WaitSource<T>;
|
|
49
42
|
/**
|
|
50
43
|
* Prefer `primary`, fall back to `fallback` the moment the primary throws or ends without a terminal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/hitl/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,0FAA0F;IAC1F,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;IAClC,+FAA+F;IAC/F,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,WAAW,CAAC;IACjB;8CAC0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID;oBACoB;AACpB,wBAAgB,UAAU,CAAC,CAAC,EAC1B,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAiD,GACnF,UAAU,CAAC,CAAC,CAAC,CAUf;
|
|
1
|
+
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/hitl/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,0FAA0F;IAC1F,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;IAClC,+FAA+F;IAC/F,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,WAAW,CAAC;IACjB;8CAC0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID;oBACoB;AACpB,wBAAgB,UAAU,CAAC,CAAC,EAC1B,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAiD,GACnF,UAAU,CAAC,CAAC,CAAC,CAUf;AA0BD,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CA4CnG;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAsB9F;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CA4BrG"}
|
package/dist/src/hitl/wait.js
CHANGED
|
@@ -41,13 +41,41 @@ export function pollSource(read, intervalMs, sleep = (ms) => new Promise((r) =>
|
|
|
41
41
|
* backend's marketplace and markets streams had to go `@Public()`. This consumer is Node, so the four
|
|
42
42
|
* routes this package reads stay session-authed - see each route's own doc comment on the backend.
|
|
43
43
|
*/
|
|
44
|
+
/**
|
|
45
|
+
* How long the SSE HANDSHAKE may take before this source gives up and lets `withFallback` degrade to
|
|
46
|
+
* polling. Bounds the CONNECT only - once headers are in, the stream itself is open-ended, which is the
|
|
47
|
+
* whole point of a stream.
|
|
48
|
+
*
|
|
49
|
+
* `withFallback` exists so a stream that fails degrades to the poll that has always worked. It can only
|
|
50
|
+
* do that if the stream FAILS, and an unreachable host does not fail promptly - it hangs. That is not
|
|
51
|
+
* hypothetical: `settleRelayedOp` waits on this while an op settles, so a hung connect stalls a
|
|
52
|
+
* money-settlement wait indefinitely instead of falling back. It surfaced as a CI flake first
|
|
53
|
+
* (`propose_payment reports a MINED REVERT...` timing out at exactly 10s against the unroutable
|
|
54
|
+
* `https://api.example.test`, while taking 380ms on a laptop where that name NXDOMAINs immediately),
|
|
55
|
+
* but the production failure it points at is the real reason to bound it.
|
|
56
|
+
*
|
|
57
|
+
* Three seconds is generous for a handshake and short against the caller's own budget.
|
|
58
|
+
*/
|
|
59
|
+
const SSE_CONNECT_TIMEOUT_MS = 3_000;
|
|
44
60
|
export function sseSource(url, token, parse) {
|
|
45
61
|
return {
|
|
46
62
|
async *watch(signal) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
63
|
+
// Derived controller: aborts when the caller aborts, OR when the handshake outruns its budget.
|
|
64
|
+
// The timer is cleared the moment headers land, so it can never cut a healthy open stream short.
|
|
65
|
+
const connect = new AbortController();
|
|
66
|
+
const propagate = () => connect.abort();
|
|
67
|
+
signal.addEventListener('abort', propagate, { once: true });
|
|
68
|
+
const timer = setTimeout(() => connect.abort(), SSE_CONNECT_TIMEOUT_MS);
|
|
69
|
+
let res;
|
|
70
|
+
try {
|
|
71
|
+
res = await fetch(url, {
|
|
72
|
+
headers: { Authorization: `Bearer ${token}`, Accept: 'text/event-stream' },
|
|
73
|
+
signal: connect.signal,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
clearTimeout(timer);
|
|
78
|
+
}
|
|
51
79
|
if (!res.ok || !res.body)
|
|
52
80
|
throw new Error(`stream ${res.status}`);
|
|
53
81
|
const reader = res.body.getReader();
|
|
@@ -74,6 +102,7 @@ export function sseSource(url, token, parse) {
|
|
|
74
102
|
boundary = buffer.indexOf('\n\n');
|
|
75
103
|
}
|
|
76
104
|
}
|
|
105
|
+
signal.removeEventListener('abort', propagate);
|
|
77
106
|
},
|
|
78
107
|
};
|
|
79
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/hitl/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,4CAA4C;AAC5C,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,aAAa,GAAG,CAAC,CAAC;AACpB,CAAC;AA0BD,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAEnC;oBACoB;AACpB,MAAM,UAAU,UAAU,CACxB,IAAsB,EACtB,UAAkB,EAClB,QAAuC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpF,OAAO;QACL,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM;YACjB,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACvB,MAAM,MAAM,IAAI,EAAE,CAAC;gBACnB,IAAI,MAAM,CAAC,OAAO;oBAAE,OAAO;gBAC3B,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAI,GAAW,EAAE,KAAa,EAAE,KAA2B;IAClF,OAAO;QACL,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM;YACjB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/hitl/wait.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "botanary-mcp",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.2",
|
|
5
5
|
"description": "Botanary's local MCP server for an outside coding agent (Claude Code, Codex, Cursor, or a custom build): an AGENT LANE that generates its own signing key and spends unattended under whatever grant its owner gave it, and a WALLET LANE that lets the human owner log in through their browser to read, build, and hand off a signature - the MCP itself can never sign as the owner.",
|
|
6
6
|
"license": "UNLICENSED",
|
|
7
7
|
"homepage": "https://docs.botanary.xyz",
|