@xiaoso/dsh-tool-plus 0.1.16 → 0.1.17-beta.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/lib/{abort-DZ54CaKU.mjs → abort-BTblp0Rt.mjs} +2 -2
- package/lib/{alibaba-coding-plan-DODpkcqi.mjs → alibaba-coding-plan-t3R4YKCB.mjs} +3 -3
- package/lib/{alibaba-token-plan-C6lpKCda.mjs → alibaba-token-plan-CO4djG1y.mjs} +4 -4
- package/lib/{alibaba-token-plan-CHGyWOfX.mjs → alibaba-token-plan-CUjYJX0-.mjs} +1 -1
- package/lib/{anthropic-Dv_GGX6g.mjs → anthropic-nf7w6so1.mjs} +48 -21
- package/lib/{api-key-validation-MnMf_ihX.mjs → api-key-validation-C_tZ7Y9a.mjs} +2 -2
- package/lib/behavior-BwvTUtag.mjs +111 -0
- package/lib/{browser-render-BZXt548F.mjs → browser-render-BQaEVK_n.mjs} +4 -4
- package/lib/{reference-CtvM4zLU.mjs → bundled-references-CrQ4dQcT.mjs} +57 -4
- package/lib/cascade-BWjRTD1q.mjs +30265 -0
- package/lib/{cline-pass-BT9CBEOj.mjs → cline-pass-Bjm-O8GG.mjs} +2 -2
- package/lib/cloudflare-CKXRJ0l9.mjs +37 -0
- package/lib/{cloudflare-ai-gateway-DReN6ohJ.mjs → cloudflare-ai-gateway-BpnBSjwV.mjs} +8 -4
- package/lib/cloudflare-workers-ai-odj9XswL.mjs +32 -0
- package/lib/collapse-_nkb2dn7.mjs +1945 -0
- package/lib/{coreweave-C82HrLpb.mjs → coreweave-CGDZOD8-.mjs} +1 -1
- package/lib/{coreweave-C68UgRQO.mjs → coreweave-DwffcgW5.mjs} +4 -4
- package/lib/cursor-BgOuV7Qf.mjs +794 -0
- package/lib/{cursor-_gHHq-Dq.mjs → cursor-CF1iHHbv.mjs} +68 -19
- package/lib/{cursor-proto-Cr_WEMuv.mjs → cursor-proto-BuNTjX3L.mjs} +823 -23
- package/lib/{devin-QpfTSl9H.mjs → devin-7OEeEb80.mjs} +112 -31
- package/lib/{devin-proto-DYhp4Ty6.mjs → devin-proto-C-QreeAv.mjs} +71 -5
- package/lib/{dom-DG3sPESc.mjs → dom-BmbZv4v9.mjs} +598 -182
- package/lib/{error-O63pC8zg.mjs → error-8LVo7tug.mjs} +725 -104
- package/lib/factory-droid-ChhmsGWb.mjs +71 -0
- package/lib/{fs-promises-shim-B2YFWkcd.mjs → fs-promises-shim-CANAxFWh.mjs} +10 -1
- package/lib/{github-copilot-BMEcw8N1.mjs → github-copilot-QwevdT30.mjs} +4 -4
- package/lib/{github-copilot-headers-DnjGEbko.mjs → github-copilot-headers-CAUZ0rUD.mjs} +138 -26
- package/lib/{gitlab-duo-DnHqJjFY.mjs → gitlab-duo-DigV7k_o.mjs} +2 -2
- package/lib/{google-antigravity-B1mSckrK.mjs → google-antigravity-D-oe0r8A.mjs} +6 -7
- package/lib/{google-gemini-cli-DJwThCCn.mjs → google-gemini-cli-CQBHgGJT.mjs} +5 -6
- package/lib/{google-oauth-shared-BctLpVUN.mjs → google-oauth-shared-CvgVIUwJ.mjs} +2 -2
- package/lib/google-validation-CdvRj4ec.mjs +126 -0
- package/lib/id-EJwVLDHE.mjs +2548 -0
- package/lib/index.mjs +248 -258
- package/lib/{kilo-BEgEwMJQ.mjs → kilo-5r6OffCa.mjs} +2 -2
- package/lib/{kimi-T9NldEIJ.mjs → kimi-DOOtbXmm.mjs} +9 -10
- package/lib/{launch-BIWNyrBB.mjs → launch-DkAjib7h.mjs} +1 -1
- package/lib/{markit-Dvp2JPdT.mjs → markit-CCcyeAds.mjs} +359 -140
- package/lib/{models-DnXMYGcJ.mjs → models-DCpDT_im.mjs} +199203 -112275
- package/lib/{muse-code-CNvqqAp6.mjs → muse-code-CYf8zj_B.mjs} +5 -5
- package/lib/{openai-codex-D5-CyTxa.mjs → openai-codex-Cj-TvSFh.mjs} +13 -10
- package/lib/{perplexity-A2PEoGaC.mjs → perplexity-Dh_Qgsmx.mjs} +68 -25
- package/lib/{pkce-BYjmugmw.mjs → pkce-DO-jBJLV.mjs} +1 -1
- package/lib/pricing-DusBEhwm.mjs +593 -0
- package/lib/{readability-uGhqb4GC.mjs → readability-XHK0o3bv.mjs} +287 -27
- package/lib/{scrapers-C1ujjV8k.mjs → scrapers-B6PADOVm.mjs} +13 -13
- package/lib/slugify-ynYWBIA5.mjs +11 -0
- package/lib/snowflake-B_jap6lz.mjs +666 -0
- package/lib/snowflake-Cu1ZyOp6.mjs +151 -0
- package/lib/{src-AELUUb5U.mjs → src-BhinCSpi.mjs} +1172 -458
- package/lib/{stream-AVOoe5Hj.mjs → stream-D2ivg3GH.mjs} +3740 -5311
- package/lib/{turndown-D6fof1OX.mjs → turndown-Vya8SavL.mjs} +82 -30
- package/lib/types/tools/hashline/native/index.d.ts +2 -2
- package/lib/types/tools/hashline/native/policy.d.ts +19 -21
- package/lib/types/tools/omp/session/agent-storage.d.ts +3 -3
- package/lib/types/tools/shared/bun-named-shim.d.ts +5 -0
- package/lib/{types-BLrLohwK.mjs → types-tH1v9uRm.mjs} +2 -2
- package/lib/{utils-cZX3f_Ls.mjs → utils-C_Ncya1r.mjs} +1737 -509
- package/lib/utils-D2tK38xq.mjs +34006 -0
- package/lib/{utils-I4I8azHN.mjs → utils-DrDwmNtu.mjs} +8 -3
- package/lib/{xai-oauth-CbeldUSV.mjs → xai-oauth-DLLzX6my.mjs} +4 -4
- package/lib/{xiaomi-Dl3VSs04.mjs → xiaomi-CqK-KivK.mjs} +2 -2
- package/lib/{zai-FyjGSypr.mjs → zai-DoJ2xPIH.mjs} +2 -2
- package/lib/{zip-DRrycScC.mjs → zip-DG1mUV6X.mjs} +1 -1
- package/package.json +8 -8
- package/lib/amazon-bedrock-Dx0rr9dY.mjs +0 -996
- package/lib/anthropic-ClCw0PV_.mjs +0 -3624
- package/lib/anthropic-wire-lbGAFzYb.mjs +0 -927
- package/lib/azure-openai-responses-WE_bgFWp.mjs +0 -285
- package/lib/bundled-references-DY3EJxZV.mjs +0 -56
- package/lib/cloudflare-ai-gateway-CrMa97Ap.mjs +0 -44
- package/lib/collapse-CkMNRNr7.mjs +0 -2304
- package/lib/cursor-C6jaIJDg.mjs +0 -283
- package/lib/cursor-D-XZYDf_.mjs +0 -4544
- package/lib/deterministic-id-CUEIMSqR.mjs +0 -17
- package/lib/devin-ExGIghmx.mjs +0 -69
- package/lib/devin-u0ljw5P6.mjs +0 -628
- package/lib/effort-BdtQMN-_.mjs +0 -23
- package/lib/event-stream-BKEtb45Y.mjs +0 -167
- package/lib/gemini-headers-Co9cVvex.mjs +0 -54
- package/lib/google-auth-qAN-6DMW.mjs +0 -232
- package/lib/google-gemini-cli-B2Aw1S5w.mjs +0 -844
- package/lib/google-lTxuq28n.mjs +0 -38
- package/lib/google-shared-Y01j9xOr.mjs +0 -856
- package/lib/google-validation-BEkNs-Bx.mjs +0 -18
- package/lib/google-vertex-DcM-FRC5.mjs +0 -99
- package/lib/hosts-00rjRzUD.mjs +0 -203
- package/lib/id-AL5obQzR.mjs +0 -71
- package/lib/idle-iterator-D0ZXEcUq.mjs +0 -366
- package/lib/ollama-6R0oXZks.mjs +0 -574
- package/lib/openai-codex-responses-C8bnBWOe.mjs +0 -3232
- package/lib/openai-completions-DNr3mUsn.mjs +0 -1430
- package/lib/openai-configuration-update-xMYUjaK_.mjs +0 -150
- package/lib/openai-reasoning-fallback-Ju-5pSR8.mjs +0 -380
- package/lib/openai-responses-CjpafAEr.mjs +0 -861
- package/lib/protobuf-BMgDYu_U.mjs +0 -717
- package/lib/provider-response-SqKSkkUc.mjs +0 -22
- package/lib/proxy-DxvCQOCA.mjs +0 -230
- package/lib/request-debug-BwPOqN_j.mjs +0 -183
- package/lib/sanitize-text-BCf5KmCf.mjs +0 -33
- package/lib/sse-debug-B-tkLCPW.mjs +0 -11
- package/lib/stream-markup-healing-CN3RsqG9.mjs +0 -267
- package/lib/strict-tool-validation-CBTz1dAA.mjs +0 -105
- package/lib/taxonomy-DSIM99rS.mjs +0 -15392
- package/lib/thinking-ngMwf_1Y.mjs +0 -336
- package/lib/type-guards-CttAANEx.mjs +0 -11
- package/lib/utils-CE3DSebh.mjs +0 -11763
- package/lib/vision-guard-BCpXWUj3.mjs +0 -77
|
@@ -1,336 +0,0 @@
|
|
|
1
|
-
import { installBunShim as __installBunShim } from "./bun-shim.mjs";
|
|
2
|
-
__installBunShim();
|
|
3
|
-
import { D as FencedThinkingScanner, O as partialSuffixOverlapAny } from "./utils-cZX3f_Ls.mjs";
|
|
4
|
-
//#region node_modules/.pnpm/@oh-my-pi+pi-ai@18.1.17/node_modules/@oh-my-pi/pi-ai/src/dialect/thinking.ts
|
|
5
|
-
/**
|
|
6
|
-
* Every dialect's in-band thinking section in its canonical `renderThinking`
|
|
7
|
-
* form (see the sibling `./*.ts` scanners). {@link ThinkingInbandScanner} heals
|
|
8
|
-
* reasoning a model leaked into its visible text channel back into thinking
|
|
9
|
-
* events, whichever dialect idiom the leak used.
|
|
10
|
-
*
|
|
11
|
-
* Plain (attribute-free) delimiters only — matching what `renderThinking`
|
|
12
|
-
* emits and what models leak in practice. Attributed or namespaced XML thinking
|
|
13
|
-
* tags (`<thinking signature="…">`, `antml:thinking`) are recovered by the owned
|
|
14
|
-
* anthropic-dialect parser, not this text-channel healing fallback.
|
|
15
|
-
*/
|
|
16
|
-
const TAGS = [
|
|
17
|
-
{
|
|
18
|
-
open: "<think>",
|
|
19
|
-
close: "</think>",
|
|
20
|
-
impliedOpen: true
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
open: "<thinking>",
|
|
24
|
-
close: "</thinking>"
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
open: "<scratchpad>",
|
|
28
|
-
close: "</scratchpad>"
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
open: "```thinking\n",
|
|
32
|
-
close: "```",
|
|
33
|
-
fenced: true
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
open: "<|channel>thought\n",
|
|
37
|
-
close: "<channel|>"
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
open: "<|start|>assistant<|channel|>analysis<|message|>",
|
|
41
|
-
close: "<|end|>"
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
open: "<|channel|>analysis<|message|>",
|
|
45
|
-
close: "<|end|>"
|
|
46
|
-
}
|
|
47
|
-
];
|
|
48
|
-
const OPENS = TAGS.map((tag) => tag.open);
|
|
49
|
-
const IMPLIED_OPEN_TAGS = TAGS.filter((tag) => tag.impliedOpen);
|
|
50
|
-
const IMPLIED_OPEN_DELIMITERS = [...OPENS, ...IMPLIED_OPEN_TAGS.map((tag) => tag.close)];
|
|
51
|
-
var ThinkingInbandScanner = class {
|
|
52
|
-
#impliedOpen;
|
|
53
|
-
#buffer = "";
|
|
54
|
-
#closeTag = "";
|
|
55
|
-
#thinking = "";
|
|
56
|
-
/** Fence-aware close-matcher while inside a ` ```thinking ` block; undefined otherwise. */
|
|
57
|
-
#fenced;
|
|
58
|
-
/** Backtick count that opened the Markdown code span/fence we are inside; 0 when not in code. */
|
|
59
|
-
#codeTicks = 0;
|
|
60
|
-
/** True when {@link #codeTicks} opened a fenced block (closes on a fence line), not an inline span. */
|
|
61
|
-
#codeFenced = false;
|
|
62
|
-
/**
|
|
63
|
-
* Leading-space count on the current output line, or -1 once a non-space
|
|
64
|
-
* character has appeared. Starts at 0 (line start) so a fence opening the
|
|
65
|
-
* stream — or one indented ≤3 spaces, as CommonMark allows — is recognized.
|
|
66
|
-
*/
|
|
67
|
-
#lineIndent = 0;
|
|
68
|
-
constructor(options = {}) {
|
|
69
|
-
this.#impliedOpen = options.impliedOpen === true;
|
|
70
|
-
}
|
|
71
|
-
feed(text) {
|
|
72
|
-
if (text.length === 0) return [];
|
|
73
|
-
this.#buffer += text;
|
|
74
|
-
return this.#consume(false);
|
|
75
|
-
}
|
|
76
|
-
flush() {
|
|
77
|
-
const events = this.#consume(true);
|
|
78
|
-
if (this.#buffer.length === 0) return events;
|
|
79
|
-
if (this.#closeTag) {
|
|
80
|
-
this.#emitThinking(this.#buffer, events);
|
|
81
|
-
events.push({
|
|
82
|
-
type: "thinkingEnd",
|
|
83
|
-
thinking: this.#thinking
|
|
84
|
-
});
|
|
85
|
-
} else events.push({
|
|
86
|
-
type: "text",
|
|
87
|
-
text: this.#buffer
|
|
88
|
-
});
|
|
89
|
-
this.#buffer = "";
|
|
90
|
-
this.#closeTag = "";
|
|
91
|
-
return events;
|
|
92
|
-
}
|
|
93
|
-
#consume(final) {
|
|
94
|
-
const events = [];
|
|
95
|
-
for (;;) {
|
|
96
|
-
if (this.#fenced) {
|
|
97
|
-
const result = this.#fenced.feed(this.#buffer, final);
|
|
98
|
-
this.#buffer = result.closed ? result.rest : "";
|
|
99
|
-
this.#emitThinking(result.thinking, events);
|
|
100
|
-
if (result.closed || final) {
|
|
101
|
-
events.push({
|
|
102
|
-
type: "thinkingEnd",
|
|
103
|
-
thinking: this.#thinking
|
|
104
|
-
});
|
|
105
|
-
this.#thinking = "";
|
|
106
|
-
this.#closeTag = "";
|
|
107
|
-
this.#fenced = void 0;
|
|
108
|
-
}
|
|
109
|
-
if (this.#fenced) break;
|
|
110
|
-
continue;
|
|
111
|
-
}
|
|
112
|
-
if (this.#buffer.length === 0) break;
|
|
113
|
-
if (this.#closeTag) {
|
|
114
|
-
const close = this.#buffer.indexOf(this.#closeTag);
|
|
115
|
-
if (close === -1) {
|
|
116
|
-
const hold = final ? 0 : partialSuffixOverlapAny(this.#buffer, [this.#closeTag]);
|
|
117
|
-
this.#emitThinking(this.#buffer.slice(0, this.#buffer.length - hold), events);
|
|
118
|
-
this.#buffer = this.#buffer.slice(this.#buffer.length - hold);
|
|
119
|
-
break;
|
|
120
|
-
}
|
|
121
|
-
this.#emitThinking(this.#buffer.slice(0, close), events);
|
|
122
|
-
this.#buffer = this.#buffer.slice(close + this.#closeTag.length);
|
|
123
|
-
events.push({
|
|
124
|
-
type: "thinkingEnd",
|
|
125
|
-
thinking: this.#thinking
|
|
126
|
-
});
|
|
127
|
-
this.#thinking = "";
|
|
128
|
-
this.#closeTag = "";
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
if (this.#codeTicks > 0) {
|
|
132
|
-
if (this.#emitCode(final, events)) continue;
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
const hit = scanVisible(this.#buffer, final, this.#impliedOpen);
|
|
136
|
-
if (hit.kind === "none") {
|
|
137
|
-
this.#emitText(this.#buffer, events);
|
|
138
|
-
this.#buffer = "";
|
|
139
|
-
break;
|
|
140
|
-
}
|
|
141
|
-
if (hit.index > 0) this.#emitText(this.#buffer.slice(0, hit.index), events);
|
|
142
|
-
if (hit.kind === "hold") {
|
|
143
|
-
this.#buffer = this.#buffer.slice(hit.index);
|
|
144
|
-
break;
|
|
145
|
-
}
|
|
146
|
-
if (hit.kind === "impliedClose") {
|
|
147
|
-
this.#buffer = this.#buffer.slice(hit.index + hit.tag.close.length);
|
|
148
|
-
events.push({ type: "impliedThinkingEnd" });
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
if (hit.kind === "code") {
|
|
152
|
-
const fenced = hit.ticks >= 3 && this.#lineIndent >= 0 && this.#lineIndent <= 3;
|
|
153
|
-
this.#emitText(this.#buffer.slice(hit.index, hit.index + hit.ticks), events);
|
|
154
|
-
this.#buffer = this.#buffer.slice(hit.index + hit.ticks);
|
|
155
|
-
this.#codeTicks = hit.ticks;
|
|
156
|
-
this.#codeFenced = fenced;
|
|
157
|
-
continue;
|
|
158
|
-
}
|
|
159
|
-
this.#buffer = this.#buffer.slice(hit.index + hit.tag.open.length);
|
|
160
|
-
this.#closeTag = hit.tag.close;
|
|
161
|
-
this.#thinking = "";
|
|
162
|
-
if (hit.tag.fenced) this.#fenced = new FencedThinkingScanner();
|
|
163
|
-
events.push({ type: "thinkingStart" });
|
|
164
|
-
}
|
|
165
|
-
return events;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Emit buffered content while inside a Markdown code region, suppressing
|
|
169
|
-
* reasoning-tag detection. A fenced block closes only on a fence line (a line
|
|
170
|
-
* of backticks ≥ the opener); an inline span closes on the first backtick run
|
|
171
|
-
* of exactly the opener length. Returns true when the region closed and the
|
|
172
|
-
* loop should continue, false when it held back and should break.
|
|
173
|
-
*/
|
|
174
|
-
#emitCode(final, events) {
|
|
175
|
-
if (this.#codeFenced) {
|
|
176
|
-
const end = findFenceCloseEnd(this.#buffer, this.#codeTicks, final);
|
|
177
|
-
if (end !== -1) {
|
|
178
|
-
this.#emitText(this.#buffer.slice(0, end), events);
|
|
179
|
-
this.#buffer = this.#buffer.slice(end);
|
|
180
|
-
this.#codeTicks = 0;
|
|
181
|
-
this.#codeFenced = false;
|
|
182
|
-
return true;
|
|
183
|
-
}
|
|
184
|
-
if (final) {
|
|
185
|
-
this.#emitText(this.#buffer, events);
|
|
186
|
-
this.#buffer = "";
|
|
187
|
-
this.#codeTicks = 0;
|
|
188
|
-
this.#codeFenced = false;
|
|
189
|
-
return false;
|
|
190
|
-
}
|
|
191
|
-
const lastNl = this.#buffer.lastIndexOf("\n");
|
|
192
|
-
if (lastNl !== -1) {
|
|
193
|
-
this.#emitText(this.#buffer.slice(0, lastNl + 1), events);
|
|
194
|
-
this.#buffer = this.#buffer.slice(lastNl + 1);
|
|
195
|
-
}
|
|
196
|
-
return false;
|
|
197
|
-
}
|
|
198
|
-
const close = findBacktickRun(this.#buffer, 0, this.#codeTicks);
|
|
199
|
-
if (close !== -1 && (final || close + this.#codeTicks < this.#buffer.length)) {
|
|
200
|
-
this.#emitText(this.#buffer.slice(0, close + this.#codeTicks), events);
|
|
201
|
-
this.#buffer = this.#buffer.slice(close + this.#codeTicks);
|
|
202
|
-
this.#codeTicks = 0;
|
|
203
|
-
return true;
|
|
204
|
-
}
|
|
205
|
-
const hold = final ? 0 : trailingBacktickRun(this.#buffer);
|
|
206
|
-
this.#emitText(this.#buffer.slice(0, this.#buffer.length - hold), events);
|
|
207
|
-
this.#buffer = this.#buffer.slice(this.#buffer.length - hold);
|
|
208
|
-
if (final) this.#codeTicks = 0;
|
|
209
|
-
return false;
|
|
210
|
-
}
|
|
211
|
-
#emitText(text, events) {
|
|
212
|
-
if (text.length === 0) return;
|
|
213
|
-
events.push({
|
|
214
|
-
type: "text",
|
|
215
|
-
text
|
|
216
|
-
});
|
|
217
|
-
this.#lineIndent = trailingLineIndent(text, this.#lineIndent);
|
|
218
|
-
}
|
|
219
|
-
#emitThinking(delta, events) {
|
|
220
|
-
if (delta.length === 0) return;
|
|
221
|
-
this.#thinking += delta;
|
|
222
|
-
events.push({
|
|
223
|
-
type: "thinkingDelta",
|
|
224
|
-
delta
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
};
|
|
228
|
-
/**
|
|
229
|
-
* Walk idle visible text for the earliest boundary: a leaked reasoning-tag open,
|
|
230
|
-
* a bare close of an implied-open tag (when `impliedOpen`), a Markdown
|
|
231
|
-
* code-span/fence opener (a backtick run), or — when more chunks may follow — a
|
|
232
|
-
* held partial delimiter at the buffer tail.
|
|
233
|
-
*
|
|
234
|
-
* Reasoning tags win at any position so the gemini ` ```thinking ` fence is
|
|
235
|
-
* healed instead of being read as a code fence. Backtick runs enter code mode so
|
|
236
|
-
* a literal `<think>` inside inline code or a fenced block stays visible text.
|
|
237
|
-
*/
|
|
238
|
-
function scanVisible(buffer, final, impliedOpen) {
|
|
239
|
-
const delimiters = impliedOpen ? IMPLIED_OPEN_DELIMITERS : OPENS;
|
|
240
|
-
for (let i = 0; i < buffer.length; i++) {
|
|
241
|
-
const tag = TAGS.find((candidate) => buffer.startsWith(candidate.open, i));
|
|
242
|
-
if (tag) return {
|
|
243
|
-
kind: "tag",
|
|
244
|
-
index: i,
|
|
245
|
-
tag
|
|
246
|
-
};
|
|
247
|
-
if (impliedOpen) {
|
|
248
|
-
const closed = IMPLIED_OPEN_TAGS.find((candidate) => buffer.startsWith(candidate.close, i));
|
|
249
|
-
if (closed) return {
|
|
250
|
-
kind: "impliedClose",
|
|
251
|
-
index: i,
|
|
252
|
-
tag: closed
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
if (!final) {
|
|
256
|
-
const rest = buffer.slice(i);
|
|
257
|
-
if (delimiters.some((delimiter) => delimiter.length > rest.length && delimiter.startsWith(rest))) return {
|
|
258
|
-
kind: "hold",
|
|
259
|
-
index: i
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
if (buffer[i] === "`") {
|
|
263
|
-
const ticks = backtickRun(buffer, i);
|
|
264
|
-
if (!final && i + ticks === buffer.length) return {
|
|
265
|
-
kind: "hold",
|
|
266
|
-
index: i
|
|
267
|
-
};
|
|
268
|
-
return {
|
|
269
|
-
kind: "code",
|
|
270
|
-
index: i,
|
|
271
|
-
ticks
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
return { kind: "none" };
|
|
276
|
-
}
|
|
277
|
-
/** Length of the maximal backtick run beginning at `from`. */
|
|
278
|
-
function backtickRun(buffer, from) {
|
|
279
|
-
let end = from;
|
|
280
|
-
while (end < buffer.length && buffer[end] === "`") end++;
|
|
281
|
-
return end - from;
|
|
282
|
-
}
|
|
283
|
-
/** Index of the first maximal backtick run of exactly `ticks` at/after `from`, else -1. */
|
|
284
|
-
function findBacktickRun(buffer, from, ticks) {
|
|
285
|
-
for (let i = buffer.indexOf("`", from); i !== -1; i = buffer.indexOf("`", i)) {
|
|
286
|
-
const run = backtickRun(buffer, i);
|
|
287
|
-
if (run === ticks) return i;
|
|
288
|
-
i += run;
|
|
289
|
-
}
|
|
290
|
-
return -1;
|
|
291
|
-
}
|
|
292
|
-
/** Length of a backtick run that ends at the buffer tail; 0 when the tail is not a backtick. */
|
|
293
|
-
function trailingBacktickRun(buffer) {
|
|
294
|
-
let start = buffer.length;
|
|
295
|
-
while (start > 0 && buffer[start - 1] === "`") start--;
|
|
296
|
-
return buffer.length - start;
|
|
297
|
-
}
|
|
298
|
-
/**
|
|
299
|
-
* Leading-space count of the line at the tail of `text`, continuing from the
|
|
300
|
-
* prior line's `indent` state (see {@link ThinkingInbandScanner.#lineIndent}).
|
|
301
|
-
* Returns -1 once any non-space character has appeared on the current line.
|
|
302
|
-
*/
|
|
303
|
-
function trailingLineIndent(text, prior) {
|
|
304
|
-
const lastNl = text.lastIndexOf("\n");
|
|
305
|
-
let indent = lastNl === -1 ? prior : 0;
|
|
306
|
-
for (let i = lastNl + 1; i < text.length; i++) {
|
|
307
|
-
if (indent === -1) break;
|
|
308
|
-
indent = text[i] === " " ? indent + 1 : -1;
|
|
309
|
-
}
|
|
310
|
-
return indent;
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Index just past the first closing fence line for a fenced block opened with
|
|
314
|
-
* `ticks` backticks, or -1 when none is committed yet. A closing fence is a whole
|
|
315
|
-
* line whose trimmed content is only backticks, at least `ticks` of them. A line
|
|
316
|
-
* without a terminating newline is committed only when `final` (no more input can
|
|
317
|
-
* extend it into a non-fence line).
|
|
318
|
-
*/
|
|
319
|
-
function findFenceCloseEnd(buffer, ticks, final) {
|
|
320
|
-
for (let start = 0; start <= buffer.length;) {
|
|
321
|
-
const nl = buffer.indexOf("\n", start);
|
|
322
|
-
const terminated = nl !== -1;
|
|
323
|
-
const line = buffer.slice(start, terminated ? nl : buffer.length).trim();
|
|
324
|
-
if (line.length >= ticks && isAllBackticks(line) && (terminated || final)) return terminated ? nl + 1 : buffer.length;
|
|
325
|
-
if (!terminated) break;
|
|
326
|
-
start = nl + 1;
|
|
327
|
-
}
|
|
328
|
-
return -1;
|
|
329
|
-
}
|
|
330
|
-
/** True when `text` is non-empty and every character is a backtick. */
|
|
331
|
-
function isAllBackticks(text) {
|
|
332
|
-
for (let i = 0; i < text.length; i++) if (text[i] !== "`") return false;
|
|
333
|
-
return text.length > 0;
|
|
334
|
-
}
|
|
335
|
-
//#endregion
|
|
336
|
-
export { ThinkingInbandScanner as t };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { installBunShim as __installBunShim } from "./bun-shim.mjs";
|
|
2
|
-
__installBunShim();
|
|
3
|
-
//#region node_modules/.pnpm/@oh-my-pi+pi-utils@18.1.17/node_modules/@oh-my-pi/pi-utils/src/type-guards.ts
|
|
4
|
-
function isRecord(value) {
|
|
5
|
-
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
6
|
-
}
|
|
7
|
-
function asRecord(value) {
|
|
8
|
-
return isRecord(value) ? value : null;
|
|
9
|
-
}
|
|
10
|
-
//#endregion
|
|
11
|
-
export { isRecord as n, asRecord as t };
|