@buoy-gg/agent-core 7.0.34 → 7.0.36

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.
Files changed (181) hide show
  1. package/README.md +10 -7
  2. package/lib/commonjs/blocks/receipts.js +83 -24
  3. package/lib/commonjs/blocks/receipts.js.map +1 -1
  4. package/lib/commonjs/blocks/runId.js +31 -0
  5. package/lib/commonjs/blocks/runId.js.map +1 -0
  6. package/lib/commonjs/blocks/types.js +23 -2
  7. package/lib/commonjs/blocks/types.js.map +1 -1
  8. package/lib/commonjs/blocks/uiTool.js +426 -12
  9. package/lib/commonjs/blocks/uiTool.js.map +1 -1
  10. package/lib/commonjs/catalog/catalog.g.js +121 -43
  11. package/lib/commonjs/catalog/catalog.g.js.map +1 -1
  12. package/lib/commonjs/catalog/catalog.source.json +121 -45
  13. package/lib/commonjs/catalog/catalog.types.g.js +44 -0
  14. package/lib/commonjs/catalog/catalog.types.g.js.map +1 -0
  15. package/lib/commonjs/catalog/normalizeParams.js +333 -0
  16. package/lib/commonjs/catalog/normalizeParams.js.map +1 -0
  17. package/lib/commonjs/catalog/signature.js +68 -0
  18. package/lib/commonjs/catalog/signature.js.map +1 -0
  19. package/lib/commonjs/catalog/snapshotReads.js +13 -6
  20. package/lib/commonjs/catalog/snapshotReads.js.map +1 -1
  21. package/lib/commonjs/catalog/toProviderTools.js +41 -5
  22. package/lib/commonjs/catalog/toProviderTools.js.map +1 -1
  23. package/lib/commonjs/context/buildContextPack.js +367 -19
  24. package/lib/commonjs/context/buildContextPack.js.map +1 -1
  25. package/lib/commonjs/effects/digest.js +34 -0
  26. package/lib/commonjs/effects/digest.js.map +1 -0
  27. package/lib/commonjs/effects/ledger.js +85 -1
  28. package/lib/commonjs/effects/ledger.js.map +1 -1
  29. package/lib/commonjs/engine/askGate.js +287 -0
  30. package/lib/commonjs/engine/askGate.js.map +1 -0
  31. package/lib/commonjs/engine/effectFor.js +82 -1
  32. package/lib/commonjs/engine/effectFor.js.map +1 -1
  33. package/lib/commonjs/engine/historyBudget.js +260 -0
  34. package/lib/commonjs/engine/historyBudget.js.map +1 -0
  35. package/lib/commonjs/engine/runAgentTurn.js +958 -88
  36. package/lib/commonjs/engine/runAgentTurn.js.map +1 -1
  37. package/lib/commonjs/engine/systemPrompt.js +72 -8
  38. package/lib/commonjs/engine/systemPrompt.js.map +1 -1
  39. package/lib/commonjs/engine/textToolCalls.js +276 -0
  40. package/lib/commonjs/engine/textToolCalls.js.map +1 -0
  41. package/lib/commonjs/index.js +81 -1
  42. package/lib/commonjs/index.js.map +1 -1
  43. package/lib/commonjs/policy/labels.js +19 -3
  44. package/lib/commonjs/policy/labels.js.map +1 -1
  45. package/lib/commonjs/policy/policy.js +6 -1
  46. package/lib/commonjs/policy/policy.js.map +1 -1
  47. package/lib/commonjs/policy/redact.js +42 -5
  48. package/lib/commonjs/policy/redact.js.map +1 -1
  49. package/lib/commonjs/providers/anthropic.js +340 -174
  50. package/lib/commonjs/providers/anthropic.js.map +1 -1
  51. package/lib/commonjs/providers/openai.js +229 -103
  52. package/lib/commonjs/providers/openai.js.map +1 -1
  53. package/lib/commonjs/providers/sse.js +164 -29
  54. package/lib/commonjs/providers/sse.js.map +1 -1
  55. package/lib/commonjs/providers/streamTimer.js +123 -0
  56. package/lib/commonjs/providers/streamTimer.js.map +1 -0
  57. package/lib/commonjs/providers/transport.js +107 -0
  58. package/lib/commonjs/providers/transport.js.map +1 -0
  59. package/lib/commonjs/providers/xhrStream.js +209 -0
  60. package/lib/commonjs/providers/xhrStream.js.map +1 -0
  61. package/lib/commonjs/session.js +245 -52
  62. package/lib/commonjs/session.js.map +1 -1
  63. package/lib/module/blocks/receipts.js +83 -24
  64. package/lib/module/blocks/receipts.js.map +1 -1
  65. package/lib/module/blocks/runId.js +26 -0
  66. package/lib/module/blocks/runId.js.map +1 -0
  67. package/lib/module/blocks/types.js +23 -2
  68. package/lib/module/blocks/types.js.map +1 -1
  69. package/lib/module/blocks/uiTool.js +424 -12
  70. package/lib/module/blocks/uiTool.js.map +1 -1
  71. package/lib/module/catalog/catalog.g.js +121 -43
  72. package/lib/module/catalog/catalog.g.js.map +1 -1
  73. package/lib/module/catalog/catalog.source.json +121 -45
  74. package/lib/module/catalog/catalog.types.g.js +40 -0
  75. package/lib/module/catalog/catalog.types.g.js.map +1 -0
  76. package/lib/module/catalog/normalizeParams.js +327 -0
  77. package/lib/module/catalog/normalizeParams.js.map +1 -0
  78. package/lib/module/catalog/signature.js +63 -0
  79. package/lib/module/catalog/signature.js.map +1 -0
  80. package/lib/module/catalog/snapshotReads.js +13 -6
  81. package/lib/module/catalog/snapshotReads.js.map +1 -1
  82. package/lib/module/catalog/toProviderTools.js +41 -5
  83. package/lib/module/catalog/toProviderTools.js.map +1 -1
  84. package/lib/module/context/buildContextPack.js +366 -19
  85. package/lib/module/context/buildContextPack.js.map +1 -1
  86. package/lib/module/effects/digest.js +29 -0
  87. package/lib/module/effects/digest.js.map +1 -0
  88. package/lib/module/effects/ledger.js +85 -1
  89. package/lib/module/effects/ledger.js.map +1 -1
  90. package/lib/module/engine/askGate.js +280 -0
  91. package/lib/module/engine/askGate.js.map +1 -0
  92. package/lib/module/engine/effectFor.js +83 -1
  93. package/lib/module/engine/effectFor.js.map +1 -1
  94. package/lib/module/engine/historyBudget.js +251 -0
  95. package/lib/module/engine/historyBudget.js.map +1 -0
  96. package/lib/module/engine/runAgentTurn.js +954 -88
  97. package/lib/module/engine/runAgentTurn.js.map +1 -1
  98. package/lib/module/engine/systemPrompt.js +71 -8
  99. package/lib/module/engine/systemPrompt.js.map +1 -1
  100. package/lib/module/engine/textToolCalls.js +270 -0
  101. package/lib/module/engine/textToolCalls.js.map +1 -0
  102. package/lib/module/index.js +7 -4
  103. package/lib/module/index.js.map +1 -1
  104. package/lib/module/policy/labels.js +19 -3
  105. package/lib/module/policy/labels.js.map +1 -1
  106. package/lib/module/policy/policy.js +6 -1
  107. package/lib/module/policy/policy.js.map +1 -1
  108. package/lib/module/policy/redact.js +42 -5
  109. package/lib/module/policy/redact.js.map +1 -1
  110. package/lib/module/providers/anthropic.js +341 -175
  111. package/lib/module/providers/anthropic.js.map +1 -1
  112. package/lib/module/providers/openai.js +230 -104
  113. package/lib/module/providers/openai.js.map +1 -1
  114. package/lib/module/providers/sse.js +160 -29
  115. package/lib/module/providers/sse.js.map +1 -1
  116. package/lib/module/providers/streamTimer.js +118 -0
  117. package/lib/module/providers/streamTimer.js.map +1 -0
  118. package/lib/module/providers/transport.js +103 -0
  119. package/lib/module/providers/transport.js.map +1 -0
  120. package/lib/module/providers/xhrStream.js +204 -0
  121. package/lib/module/providers/xhrStream.js.map +1 -0
  122. package/lib/module/session.js +228 -54
  123. package/lib/module/session.js.map +1 -1
  124. package/lib/typescript/blocks/receipts.d.ts +5 -10
  125. package/lib/typescript/blocks/receipts.d.ts.map +1 -1
  126. package/lib/typescript/blocks/runId.d.ts +20 -0
  127. package/lib/typescript/blocks/runId.d.ts.map +1 -0
  128. package/lib/typescript/blocks/types.d.ts +23 -2
  129. package/lib/typescript/blocks/types.d.ts.map +1 -1
  130. package/lib/typescript/blocks/uiTool.d.ts +11 -2
  131. package/lib/typescript/blocks/uiTool.d.ts.map +1 -1
  132. package/lib/typescript/catalog/catalog.g.d.ts.map +1 -1
  133. package/lib/typescript/catalog/catalog.types.g.d.ts +40 -0
  134. package/lib/typescript/catalog/catalog.types.g.d.ts.map +1 -0
  135. package/lib/typescript/catalog/normalizeParams.d.ts +43 -0
  136. package/lib/typescript/catalog/normalizeParams.d.ts.map +1 -0
  137. package/lib/typescript/catalog/signature.d.ts +29 -0
  138. package/lib/typescript/catalog/signature.d.ts.map +1 -0
  139. package/lib/typescript/catalog/snapshotReads.d.ts.map +1 -1
  140. package/lib/typescript/catalog/toProviderTools.d.ts +28 -15
  141. package/lib/typescript/catalog/toProviderTools.d.ts.map +1 -1
  142. package/lib/typescript/context/buildContextPack.d.ts +24 -2
  143. package/lib/typescript/context/buildContextPack.d.ts.map +1 -1
  144. package/lib/typescript/effects/digest.d.ts +10 -0
  145. package/lib/typescript/effects/digest.d.ts.map +1 -0
  146. package/lib/typescript/effects/ledger.d.ts +55 -0
  147. package/lib/typescript/effects/ledger.d.ts.map +1 -1
  148. package/lib/typescript/engine/askGate.d.ts +29 -0
  149. package/lib/typescript/engine/askGate.d.ts.map +1 -0
  150. package/lib/typescript/engine/effectFor.d.ts +6 -1
  151. package/lib/typescript/engine/effectFor.d.ts.map +1 -1
  152. package/lib/typescript/engine/historyBudget.d.ts +92 -0
  153. package/lib/typescript/engine/historyBudget.d.ts.map +1 -0
  154. package/lib/typescript/engine/runAgentTurn.d.ts +115 -1
  155. package/lib/typescript/engine/runAgentTurn.d.ts.map +1 -1
  156. package/lib/typescript/engine/systemPrompt.d.ts +41 -0
  157. package/lib/typescript/engine/systemPrompt.d.ts.map +1 -1
  158. package/lib/typescript/engine/textToolCalls.d.ts +58 -0
  159. package/lib/typescript/engine/textToolCalls.d.ts.map +1 -0
  160. package/lib/typescript/index.d.ts +8 -5
  161. package/lib/typescript/index.d.ts.map +1 -1
  162. package/lib/typescript/policy/labels.d.ts.map +1 -1
  163. package/lib/typescript/policy/policy.d.ts.map +1 -1
  164. package/lib/typescript/policy/redact.d.ts.map +1 -1
  165. package/lib/typescript/providers/anthropic.d.ts +5 -0
  166. package/lib/typescript/providers/anthropic.d.ts.map +1 -1
  167. package/lib/typescript/providers/openai.d.ts +0 -16
  168. package/lib/typescript/providers/openai.d.ts.map +1 -1
  169. package/lib/typescript/providers/sse.d.ts +82 -1
  170. package/lib/typescript/providers/sse.d.ts.map +1 -1
  171. package/lib/typescript/providers/streamTimer.d.ts +59 -0
  172. package/lib/typescript/providers/streamTimer.d.ts.map +1 -0
  173. package/lib/typescript/providers/transport.d.ts +40 -0
  174. package/lib/typescript/providers/transport.d.ts.map +1 -0
  175. package/lib/typescript/providers/types.d.ts +116 -3
  176. package/lib/typescript/providers/types.d.ts.map +1 -1
  177. package/lib/typescript/providers/xhrStream.d.ts +43 -0
  178. package/lib/typescript/providers/xhrStream.d.ts.map +1 -0
  179. package/lib/typescript/session.d.ts +63 -2
  180. package/lib/typescript/session.d.ts.map +1 -1
  181. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"names":["parseChunk","buffer","rest","idx","search","raw","slice","event","dataLines","line","split","startsWith","trim","push","replace","length","data","join","readSse","response","body","getReader","text","gen","next","done","value","tail","t","reader","decoder","TextDecoder","read","decode","stream","releaseLock","errorBody","detail","status"],"sourceRoot":"../../../src","sources":["providers/sse.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["parseChunk","buffer","onFrame","rest","idx","search","raw","slice","event","dataLines","line","split","startsWith","trim","push","replace","length","data","join","drain","out","gen","next","done","value","framesFrom","chunks","options","status","leftover","chunk","truncated","readSse","response","signal","body","getReader","text","reader","decoder","TextDecoder","finished","aborted","Promise","_resolve","reject","fail","err","Error","name","addEventListener","once","undefined","catch","read","race","decode","stream","resolve","cancel","releaseLock","nonStreamProblem","type","headers","get","lowered","toLowerCase","includes","detail","errorBody","truncatedMessage","unparseableMessage","args","stopReason","tail"],"sourceRoot":"../../../src","sources":["providers/sse.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * The clock on a model request.
5
+ *
6
+ * There was none. A gateway that accepted the socket and then said nothing —
7
+ * an overloaded proxy, a dropped VPN, a laptop that slept mid-answer — left
8
+ * the turn running with the thinking strip animating until a person pressed
9
+ * Stop. The 180s turn deadline did not help: it is read at the TOP of a step
10
+ * (`runAgentTurn`), and a step parked inside `await fetch(...)` never reaches
11
+ * the next one.
12
+ *
13
+ * Two clocks, because the two silences mean different things:
14
+ *
15
+ * - CONNECT covers "no headers yet". Nothing has been generated, so nothing is
16
+ * lost by giving up; 30s is already long for a gateway to acknowledge a POST.
17
+ * - IDLE covers "headers arrived, then nothing". This one has to be generous.
18
+ * Anthropic sends `ping` frames, but an OpenAI-protocol reasoning model can
19
+ * legitimately emit nothing for a long stretch while it thinks, and cutting
20
+ * that off would look like a broken product. Any frame at all — a keepalive
21
+ * comment included — resets it, so only total silence trips it.
22
+ *
23
+ * A timeout is NOT a retry. Nothing is re-sent: the request may have reached
24
+ * the model, and a duplicate turn is a duplicate bill and possibly duplicate
25
+ * writes. The turn ends with an honest notice and a Continue button.
26
+ */
27
+
28
+ export const DEFAULT_CONNECT_TIMEOUT_MS = 30_000;
29
+ export const DEFAULT_IDLE_TIMEOUT_MS = 90_000;
30
+ /**
31
+ * A timer over an optional caller signal.
32
+ *
33
+ * When no `AbortController` exists (a runtime old enough to lack it) this
34
+ * degrades to passing the caller's signal straight through with no clocks,
35
+ * rather than failing to send anything at all.
36
+ */
37
+ export function createStreamTimer(callerSignal, options = {}) {
38
+ const connectMs = options.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS;
39
+ const idleMs = options.idleTimeoutMs ?? DEFAULT_IDLE_TIMEOUT_MS;
40
+ const Controller = typeof AbortController === "function" ? AbortController : undefined;
41
+ if (!Controller) {
42
+ return {
43
+ signal: callerSignal,
44
+ connected() {},
45
+ activity() {},
46
+ expired: undefined,
47
+ message: () => undefined,
48
+ dispose() {}
49
+ };
50
+ }
51
+ const controller = new Controller();
52
+ let expired;
53
+ let handle;
54
+ let disposed = false;
55
+ const clear = () => {
56
+ if (handle !== undefined) {
57
+ clearTimeout(handle);
58
+ handle = undefined;
59
+ }
60
+ };
61
+ const arm = (ms, which) => {
62
+ clear();
63
+ if (disposed || !Number.isFinite(ms) || ms <= 0) return;
64
+ handle = setTimeout(() => {
65
+ handle = undefined;
66
+ expired = which;
67
+ // The abort is what actually unblocks `fetch` / `reader.read()`. The
68
+ // reason is tracked here rather than read back off the signal because
69
+ // `AbortSignal.reason` is not reliably present on React Native.
70
+ try {
71
+ controller.abort();
72
+ } catch {
73
+ /* already aborted */
74
+ }
75
+ }, ms);
76
+ };
77
+ const onCallerAbort = () => {
78
+ clear();
79
+ try {
80
+ controller.abort();
81
+ } catch {
82
+ /* already aborted */
83
+ }
84
+ };
85
+ if (callerSignal) {
86
+ if (callerSignal.aborted) onCallerAbort();else callerSignal.addEventListener?.("abort", onCallerAbort);
87
+ }
88
+ arm(connectMs, "connect");
89
+ return {
90
+ signal: controller.signal,
91
+ connected() {
92
+ arm(idleMs, "idle");
93
+ },
94
+ activity() {
95
+ // Only rearm a clock that is already running: a provider that reports
96
+ // activity after `dispose` must not resurrect the timer.
97
+ if (!disposed) arm(idleMs, "idle");
98
+ },
99
+ get expired() {
100
+ return expired;
101
+ },
102
+ message() {
103
+ if (expired === "connect") {
104
+ return `The model endpoint did not respond within ${Math.round(connectMs / 1000)}s. Nothing was generated, and nothing was re-sent.`;
105
+ }
106
+ if (expired === "idle") {
107
+ return `The model endpoint stopped sending after ${Math.round(idleMs / 1000)}s of silence. Whatever arrived is above; nothing was re-sent.`;
108
+ }
109
+ return undefined;
110
+ },
111
+ dispose() {
112
+ disposed = true;
113
+ clear();
114
+ callerSignal?.removeEventListener?.("abort", onCallerAbort);
115
+ }
116
+ };
117
+ }
118
+ //# sourceMappingURL=streamTimer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DEFAULT_CONNECT_TIMEOUT_MS","DEFAULT_IDLE_TIMEOUT_MS","createStreamTimer","callerSignal","options","connectMs","connectTimeoutMs","idleMs","idleTimeoutMs","Controller","AbortController","undefined","signal","connected","activity","expired","message","dispose","controller","handle","disposed","clear","clearTimeout","arm","ms","which","Number","isFinite","setTimeout","abort","onCallerAbort","aborted","addEventListener","Math","round","removeEventListener"],"sourceRoot":"../../../src","sources":["providers/streamTimer.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMA,0BAA0B,GAAG,MAAM;AAChD,OAAO,MAAMC,uBAAuB,GAAG,MAAM;AA4B7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAC/BC,YAAqC,EACrCC,OAA2B,GAAG,CAAC,CAAC,EACnB;EACb,MAAMC,SAAS,GAAGD,OAAO,CAACE,gBAAgB,IAAIN,0BAA0B;EACxE,MAAMO,MAAM,GAAGH,OAAO,CAACI,aAAa,IAAIP,uBAAuB;EAE/D,MAAMQ,UAAU,GAAG,OAAOC,eAAe,KAAK,UAAU,GAAGA,eAAe,GAAGC,SAAS;EACtF,IAAI,CAACF,UAAU,EAAE;IACf,OAAO;MACLG,MAAM,EAAET,YAAY;MACpBU,SAASA,CAAA,EAAG,CAAC,CAAC;MACdC,QAAQA,CAAA,EAAG,CAAC,CAAC;MACbC,OAAO,EAAEJ,SAAS;MAClBK,OAAO,EAAEA,CAAA,KAAML,SAAS;MACxBM,OAAOA,CAAA,EAAG,CAAC;IACb,CAAC;EACH;EAEA,MAAMC,UAAU,GAAG,IAAIT,UAAU,CAAC,CAAC;EACnC,IAAIM,OAAuC;EAC3C,IAAII,MAAiD;EACrD,IAAIC,QAAQ,GAAG,KAAK;EAEpB,MAAMC,KAAK,GAAGA,CAAA,KAAM;IAClB,IAAIF,MAAM,KAAKR,SAAS,EAAE;MACxBW,YAAY,CAACH,MAAM,CAAC;MACpBA,MAAM,GAAGR,SAAS;IACpB;EACF,CAAC;EAED,MAAMY,GAAG,GAAGA,CAACC,EAAU,EAAEC,KAAyB,KAAK;IACrDJ,KAAK,CAAC,CAAC;IACP,IAAID,QAAQ,IAAI,CAACM,MAAM,CAACC,QAAQ,CAACH,EAAE,CAAC,IAAIA,EAAE,IAAI,CAAC,EAAE;IACjDL,MAAM,GAAGS,UAAU,CAAC,MAAM;MACxBT,MAAM,GAAGR,SAAS;MAClBI,OAAO,GAAGU,KAAK;MACf;MACA;MACA;MACA,IAAI;QACFP,UAAU,CAACW,KAAK,CAAC,CAAC;MACpB,CAAC,CAAC,MAAM;QACN;MAAA;IAEJ,CAAC,EAAEL,EAAE,CAAC;EACR,CAAC;EAED,MAAMM,aAAa,GAAGA,CAAA,KAAM;IAC1BT,KAAK,CAAC,CAAC;IACP,IAAI;MACFH,UAAU,CAACW,KAAK,CAAC,CAAC;IACpB,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ,CAAC;EAED,IAAI1B,YAAY,EAAE;IAChB,IAAIA,YAAY,CAAC4B,OAAO,EAAED,aAAa,CAAC,CAAC,CAAC,KACrC3B,YAAY,CAAC6B,gBAAgB,GAAG,OAAO,EAAEF,aAAa,CAAC;EAC9D;EAEAP,GAAG,CAAClB,SAAS,EAAE,SAAS,CAAC;EAEzB,OAAO;IACLO,MAAM,EAAEM,UAAU,CAACN,MAAM;IACzBC,SAASA,CAAA,EAAG;MACVU,GAAG,CAAChB,MAAM,EAAE,MAAM,CAAC;IACrB,CAAC;IACDO,QAAQA,CAAA,EAAG;MACT;MACA;MACA,IAAI,CAACM,QAAQ,EAAEG,GAAG,CAAChB,MAAM,EAAE,MAAM,CAAC;IACpC,CAAC;IACD,IAAIQ,OAAOA,CAAA,EAAG;MACZ,OAAOA,OAAO;IAChB,CAAC;IACDC,OAAOA,CAAA,EAAG;MACR,IAAID,OAAO,KAAK,SAAS,EAAE;QACzB,OAAO,6CAA6CkB,IAAI,CAACC,KAAK,CAAC7B,SAAS,GAAG,IAAI,CAAC,oDAAoD;MACtI;MACA,IAAIU,OAAO,KAAK,MAAM,EAAE;QACtB,OAAO,4CAA4CkB,IAAI,CAACC,KAAK,CAAC3B,MAAM,GAAG,IAAI,CAAC,+DAA+D;MAC7I;MACA,OAAOI,SAAS;IAClB,CAAC;IACDM,OAAOA,CAAA,EAAG;MACRG,QAAQ,GAAG,IAAI;MACfC,KAAK,CAAC,CAAC;MACPlB,YAAY,EAAEgC,mBAAmB,GAAG,OAAO,EAAEL,aAAa,CAAC;IAC7D;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * How a request is SENT, decided before it is sent.
5
+ *
6
+ * The obvious place to add XHR was inside `readSse`, once a missing
7
+ * `response.body` had already proved that `fetch` could not stream. That is
8
+ * the wrong boundary and would have been a real bug: the POST has already
9
+ * happened by then, the reader has neither the URL nor the headers nor the
10
+ * body to repeat it, and issuing a second one would ask the model to generate
11
+ * the same answer twice — billed twice, and for a turn that writes, acted on
12
+ * twice. Transport is chosen up front; a response that has started is consumed
13
+ * exactly once, whatever it turns out to be.
14
+ *
15
+ * `auto` therefore learns rather than probes. The first request goes through
16
+ * `fetch`; if that response has no reader, the answer is buffered (as it
17
+ * always was on that runtime) and the SESSION remembers, so every later
18
+ * request uses XHR and streams. One buffered reply at the start of a bare-RN
19
+ * session, and nothing to configure.
20
+ */
21
+
22
+ import { errorBody, nonStreamProblem, readSse } from "./sse";
23
+ import { xhrAvailable, xhrStream } from "./xhrStream";
24
+ const EMPTY = async function* () {};
25
+
26
+ /**
27
+ * One transport per provider instance, because the `auto` decision is worth
28
+ * remembering: re-learning it would buffer the first reply of every turn.
29
+ */
30
+ export function createTransport(config) {
31
+ const requested = config.transport ?? "auto";
32
+ /**
33
+ * Set once a `fetch` response has come back with no reader. Only ever
34
+ * flipped one way: a runtime does not gain streaming mid-session.
35
+ */
36
+ let fetchCannotStream = false;
37
+ const useXhr = () => {
38
+ // A host-supplied `fetch` is never bypassed. It is how a harness keeps
39
+ // model traffic off the global (and out of the network interceptor), and
40
+ // routing around it would defeat the reason it was passed in.
41
+ if (config.fetch) return requested === "xhr" && xhrAvailable();
42
+ if (requested === "xhr") return xhrAvailable();
43
+ if (requested === "fetch") return false;
44
+ return fetchCannotStream && xhrAvailable();
45
+ };
46
+ return {
47
+ async open(req) {
48
+ if (useXhr()) {
49
+ const response = await xhrStream({
50
+ url: config.endpoint,
51
+ headers: req.headers,
52
+ body: req.body,
53
+ signal: req.signal
54
+ });
55
+ if (!response.ok) {
56
+ const detail = (await response.text()).slice(0, 600);
57
+ return {
58
+ problem: `HTTP ${response.status}${detail ? ` — ${detail}` : ""}`,
59
+ frames: EMPTY
60
+ };
61
+ }
62
+ const type = response.contentType.toLowerCase();
63
+ if (type && !type.includes("event-stream")) {
64
+ const detail = (await response.text()).slice(0, 600);
65
+ return {
66
+ problem: type.includes("json") ? `The endpoint answered with JSON instead of a stream — it may not support "stream": true.${detail ? ` — ${detail}` : ""}` : `The endpoint answered with ${response.contentType} instead of an event stream.${detail ? ` — ${detail}` : ""}`,
67
+ frames: EMPTY
68
+ };
69
+ }
70
+ return {
71
+ frames: options => response.frames(options)
72
+ };
73
+ }
74
+ const response = await (config.fetch ?? fetch)(config.endpoint, {
75
+ method: "POST",
76
+ headers: req.headers,
77
+ signal: req.signal,
78
+ body: req.body
79
+ });
80
+ if (!response.ok) return {
81
+ problem: await errorBody(response),
82
+ frames: EMPTY
83
+ };
84
+ const problem = await nonStreamProblem(response);
85
+ if (problem) return {
86
+ problem,
87
+ frames: EMPTY
88
+ };
89
+
90
+ // Learn, for the NEXT request. This one is already in flight and is read
91
+ // through the buffered path — re-sending it is what this file exists to
92
+ // avoid.
93
+ const body = response.body;
94
+ if ((!body || typeof body.getReader !== "function") && !config.fetch) {
95
+ fetchCannotStream = true;
96
+ }
97
+ return {
98
+ frames: options => readSse(response, options)
99
+ };
100
+ }
101
+ };
102
+ }
103
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["errorBody","nonStreamProblem","readSse","xhrAvailable","xhrStream","EMPTY","createTransport","config","requested","transport","fetchCannotStream","useXhr","fetch","open","req","response","url","endpoint","headers","body","signal","ok","detail","text","slice","problem","status","frames","type","contentType","toLowerCase","includes","options","method","getReader"],"sourceRoot":"../../../src","sources":["providers/transport.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Streaming over `XMLHttpRequest`, for the runtimes where `fetch` cannot.
5
+ *
6
+ * React Native core still has no `response.body`: its `fetch` is the whatwg
7
+ * polyfill over XHR and resolves inside `xhr.onload`, i.e. after the ENTIRE
8
+ * body. Under Expo the global is `expo/fetch`, which does stream — but
9
+ * `EXPO_PUBLIC_USE_RN_FETCH=1` reverts that, and the bare-RN CLI, TV CLI and
10
+ * NativeScript lanes never had it at all. On those, every Ask Buoy answer
11
+ * appeared in one lump, however long the model took.
12
+ *
13
+ * XHR itself has streamed the whole time. `responseText` grows as bytes arrive
14
+ * and `onprogress` fires as it does, so slicing from the last offset gives the
15
+ * same incremental text a reader would. Two conditions, both easy to miss:
16
+ * the progress handler must be installed BEFORE `send()`, and `responseType`
17
+ * must stay text — anything else stops RN emitting progress at all.
18
+ *
19
+ * WHAT THIS IS NOT. It is not a second SSE parser: framing, the truncation
20
+ * rule and the terminal-marker contract all live in `sse.ts` and are shared
21
+ * verbatim. This file only produces text chunks.
22
+ */
23
+ import { framesFrom } from "./sse";
24
+
25
+ /** Beyond this the answer is not an answer any more; stop reading. */
26
+ const MAX_RESPONSE_CHARS = 8_000_000;
27
+ export function xhrAvailable() {
28
+ return typeof XMLHttpRequest === "function";
29
+ }
30
+
31
+ /**
32
+ * Send the request and resolve once the HEADERS are in, so the caller can
33
+ * check the status and content type before deciding to read a stream — the
34
+ * same shape `fetch` offers, and the reason this can slot in beside it.
35
+ */
36
+ export function xhrStream(req) {
37
+ return new Promise((resolveHeaders, rejectHeaders) => {
38
+ const xhr = new XMLHttpRequest();
39
+
40
+ /** Text seen but not yet handed to a consumer. */
41
+ const queue = [];
42
+ /** Resolvers for a consumer parked on an empty queue. */
43
+ const waiters = [];
44
+ let offset = 0;
45
+ let done = false;
46
+ let failure;
47
+ let headersSeen = false;
48
+ let capped = false;
49
+ const wake = () => {
50
+ while (waiters.length) waiters.shift()();
51
+ };
52
+ const pull = () => {
53
+ // `responseText` is the WHOLE body so far, so the delta is everything
54
+ // past what was already taken. RN keeps the full string either way;
55
+ // the offset bounds the work, not the memory.
56
+ let text;
57
+ try {
58
+ text = xhr.responseText ?? "";
59
+ } catch {
60
+ return; // Not readable yet on some runtimes; the next event will do.
61
+ }
62
+ if (text.length <= offset) return;
63
+ if (text.length > MAX_RESPONSE_CHARS) {
64
+ capped = true;
65
+ failure = new Error("The endpoint sent more than this tool will read.");
66
+ done = true;
67
+ try {
68
+ xhr.abort();
69
+ } catch {
70
+ /* already gone */
71
+ }
72
+ wake();
73
+ return;
74
+ }
75
+ queue.push(text.slice(offset));
76
+ offset = text.length;
77
+ wake();
78
+ };
79
+ const settleHeaders = () => {
80
+ if (headersSeen) return;
81
+ headersSeen = true;
82
+ let contentType = "";
83
+ try {
84
+ contentType = xhr.getResponseHeader("content-type") ?? "";
85
+ } catch {
86
+ contentType = "";
87
+ }
88
+ resolveHeaders({
89
+ status: xhr.status,
90
+ ok: xhr.status >= 200 && xhr.status < 300,
91
+ contentType,
92
+ async text() {
93
+ // Whatever has arrived. For a non-2xx that is the error body; the
94
+ // request is over by the time anyone asks.
95
+ await new Promise(r => {
96
+ if (done) return r();
97
+ waiters.push(() => r());
98
+ });
99
+ try {
100
+ return xhr.responseText ?? "";
101
+ } catch {
102
+ return "";
103
+ }
104
+ },
105
+ frames(options) {
106
+ return framesFrom(chunks(), options);
107
+ }
108
+ });
109
+ };
110
+ async function* chunks() {
111
+ try {
112
+ for (;;) {
113
+ while (queue.length) yield queue.shift();
114
+ if (done) break;
115
+ await new Promise(r => waiters.push(r));
116
+ }
117
+ while (queue.length) yield queue.shift();
118
+ if (failure) throw failure;
119
+ } finally {
120
+ if (!done) {
121
+ // The consumer left early — a completed turn, a Stop, a timeout.
122
+ // Nothing else will read this socket.
123
+ try {
124
+ xhr.abort();
125
+ } catch {
126
+ /* already gone */
127
+ }
128
+ }
129
+ }
130
+ }
131
+ const onAbort = () => {
132
+ try {
133
+ xhr.abort();
134
+ } catch {
135
+ /* already gone */
136
+ }
137
+ };
138
+ xhr.onreadystatechange = () => {
139
+ // HEADERS_RECEIVED. Status and content type are known here, long before
140
+ // the body finishes — which is the whole point of using XHR directly.
141
+ if (xhr.readyState === 2) settleHeaders();
142
+ };
143
+ xhr.onprogress = () => {
144
+ settleHeaders();
145
+ pull();
146
+ };
147
+ xhr.onload = () => {
148
+ settleHeaders();
149
+ if (!capped) pull();
150
+ done = true;
151
+ wake();
152
+ };
153
+ xhr.onerror = () => {
154
+ failure = new Error("The request failed before it finished.");
155
+ done = true;
156
+ if (!headersSeen) {
157
+ headersSeen = true;
158
+ rejectHeaders(failure);
159
+ }
160
+ wake();
161
+ };
162
+ xhr.onabort = () => {
163
+ const err = new Error("Aborted");
164
+ err.name = "AbortError";
165
+ failure = err;
166
+ done = true;
167
+ if (!headersSeen) {
168
+ headersSeen = true;
169
+ rejectHeaders(err);
170
+ }
171
+ wake();
172
+ };
173
+ xhr.ontimeout = () => {
174
+ failure = new Error("The request timed out.");
175
+ done = true;
176
+ if (!headersSeen) {
177
+ headersSeen = true;
178
+ rejectHeaders(failure);
179
+ }
180
+ wake();
181
+ };
182
+ try {
183
+ xhr.open("POST", req.url, true);
184
+ // Text, and nothing else: RN emits no progress events for any other
185
+ // response type, which turns this back into a buffered read in silence.
186
+ xhr.responseType = "text";
187
+ for (const [k, v] of Object.entries(req.headers)) {
188
+ try {
189
+ xhr.setRequestHeader(k, v);
190
+ } catch {
191
+ /* a header the runtime forbids is not worth failing the turn over */
192
+ }
193
+ }
194
+ if (req.signal) {
195
+ if (req.signal.aborted) onAbort();else req.signal.addEventListener?.("abort", onAbort);
196
+ }
197
+ xhr.send(req.body);
198
+ } catch (err) {
199
+ headersSeen = true;
200
+ rejectHeaders(err instanceof Error ? err : new Error(String(err)));
201
+ }
202
+ });
203
+ }
204
+ //# sourceMappingURL=xhrStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["framesFrom","MAX_RESPONSE_CHARS","xhrAvailable","XMLHttpRequest","xhrStream","req","Promise","resolveHeaders","rejectHeaders","xhr","queue","waiters","offset","done","failure","headersSeen","capped","wake","length","shift","pull","text","responseText","Error","abort","push","slice","settleHeaders","contentType","getResponseHeader","status","ok","r","frames","options","chunks","onAbort","onreadystatechange","readyState","onprogress","onload","onerror","onabort","err","name","ontimeout","open","url","responseType","k","v","Object","entries","headers","setRequestHeader","signal","aborted","addEventListener","send","body","String"],"sourceRoot":"../../../src","sources":["providers/xhrStream.ts"],"mappings":"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","ignoreList":[]}