openfox 1.6.20 → 1.6.21

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 (34) hide show
  1. package/dist/{auto-compaction-NFLWKJAO.js → auto-compaction-U75EINMB.js} +3 -3
  2. package/dist/{chat-handler-2RVTVNPF.js → chat-handler-JEMPI5UF.js} +5 -5
  3. package/dist/{chunk-IN5EP4ZB.js → chunk-6NPMZFMP.js} +2 -2
  4. package/dist/{chunk-U3KMU3UE.js → chunk-AU33PQAB.js} +2 -2
  5. package/dist/{chunk-QY7BMXWT.js → chunk-B7E3BICY.js} +6 -2
  6. package/dist/{chunk-OVLFEBRR.js → chunk-FX4SUY2S.js} +27 -373
  7. package/dist/{chunk-LTPZ4GTW.js → chunk-HWOYZ245.js} +6 -6
  8. package/dist/{chunk-KOBGCNUE.js → chunk-HZP2V5Z6.js} +62 -14
  9. package/dist/{chunk-R7UAGXQW.js → chunk-SJVEX2NR.js} +42 -24
  10. package/dist/{chunk-KOUMYBYM.js → chunk-WINI5HX7.js} +54 -3
  11. package/dist/{chunk-ZDNXCVW4.js → chunk-XRGMFOVG.js} +11 -5
  12. package/dist/chunk-XYD5JXRM.js +483 -0
  13. package/dist/cli/dev.js +1 -1
  14. package/dist/cli/index.js +1 -1
  15. package/dist/{config-67AX6CNS.js → config-SWDAJMQ3.js} +5 -5
  16. package/dist/{orchestrator-ZICQ5NIZ.js → orchestrator-T2IPRZ7B.js} +4 -4
  17. package/dist/package.json +1 -1
  18. package/dist/{processor-MPSYT534.js → processor-VKFEOK46.js} +2 -2
  19. package/dist/{protocol-I7rn7Msg.d.ts → protocol-BYM6rZvW.d.ts} +12 -0
  20. package/dist/{provider-DKGBQHUS.js → provider-CDM4LQAC.js} +9 -8
  21. package/dist/{serve-B5A52252.js → serve-X3PKC27B.js} +10 -10
  22. package/dist/server/index.d.ts +24 -1
  23. package/dist/server/index.js +8 -8
  24. package/dist/shared/index.d.ts +2 -2
  25. package/dist/shared/index.js +1 -1
  26. package/dist/{tools-ERJ3QRQU.js → tools-4ODVFMW7.js} +3 -3
  27. package/dist/{vision-fallback-ADYRFFD4.js → vision-fallback-VXGCQKLA.js} +2 -2
  28. package/dist/web/assets/{index-vBklayFL.css → index-B9-lT3Kc.css} +1 -1
  29. package/dist/web/assets/index-DHP3d5Cl.js +151 -0
  30. package/dist/web/index.html +2 -2
  31. package/dist/web/sw.js +1 -1
  32. package/package.json +1 -1
  33. package/dist/chunk-55N6FAAZ.js +0 -117
  34. package/dist/web/assets/index-vOba1XKB.js +0 -151
@@ -5,8 +5,8 @@
5
5
  <link rel="icon" type="image/png" href="/assets/openfox.png" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>OpenFox</title>
8
- <script type="module" crossorigin src="/assets/index-vOba1XKB.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-vBklayFL.css">
8
+ <script type="module" crossorigin src="/assets/index-DHP3d5Cl.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-B9-lT3Kc.css">
10
10
  <link rel="manifest" href="/manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="/registerSW.js"></script></head>
11
11
  <body class="bg-bg-primary text-text-primary font-mono">
12
12
  <div id="root"></div>
package/dist/web/sw.js CHANGED
@@ -1 +1 @@
1
- if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,r)=>{const t=e||("document"in self?document.currentScript.src:"")||location.href;if(s[t])return;let o={};const l=e=>i(e,t),d={module:{uri:t},exports:o,require:l};s[t]=Promise.all(n.map(e=>d[e]||l(e))).then(e=>(r(...e),o))}}define(["./workbox-8c29f6e4"],function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"index.html",revision:"7af4ad0da6fd82b2c8ee5fa41626cddd"},{url:"assets/index-vOba1XKB.js",revision:null},{url:"assets/index-vBklayFL.css",revision:null},{url:"assets/html2canvas.esm-QH1iLAAe.js",revision:null},{url:"assets/openfox-192.png",revision:"79feeb86d692c274854e37959a7dae67"},{url:"assets/openfox-512.png",revision:"fee24b214220594b4f595a467e73036e"},{url:"manifest.webmanifest",revision:"c25f372c782e623ab1e768a8dfe350ca"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))});
1
+ if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,r)=>{const t=e||("document"in self?document.currentScript.src:"")||location.href;if(s[t])return;let o={};const l=e=>i(e,t),c={module:{uri:t},exports:o,require:l};s[t]=Promise.all(n.map(e=>c[e]||l(e))).then(e=>(r(...e),o))}}define(["./workbox-8c29f6e4"],function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"index.html",revision:"58b7c159cdead16fb32bae45822a2588"},{url:"assets/index-DHP3d5Cl.js",revision:null},{url:"assets/index-B9-lT3Kc.css",revision:null},{url:"assets/html2canvas.esm-QH1iLAAe.js",revision:null},{url:"assets/openfox-192.png",revision:"79feeb86d692c274854e37959a7dae67"},{url:"assets/openfox-512.png",revision:"fee24b214220594b4f595a467e73036e"},{url:"manifest.webmanifest",revision:"c25f372c782e623ab1e768a8dfe350ca"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "1.6.20",
3
+ "version": "1.6.21",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,117 +0,0 @@
1
- // src/server/llm/streaming.ts
2
- var XML_TOOL_PATTERNS = ["<tool_call>", "<function=", "</tool_call>", "<parameter="];
3
- function hasXmlToolPattern(text) {
4
- return XML_TOOL_PATTERNS.some((p) => text.includes(p));
5
- }
6
- async function* streamWithSegments(client, request) {
7
- const xmlAbortController = new AbortController();
8
- const combinedSignal = request.signal ? AbortSignal.any([request.signal, xmlAbortController.signal]) : xmlAbortController.signal;
9
- let content = "";
10
- let thinkingContent = "";
11
- let response = null;
12
- const segments = [];
13
- let currentTextSegment = "";
14
- let currentThinkingSegment = "";
15
- const startTime = performance.now();
16
- let firstTokenTime = null;
17
- const flushText = () => {
18
- if (currentTextSegment.trim()) {
19
- segments.push({ type: "text", content: currentTextSegment });
20
- }
21
- currentTextSegment = "";
22
- };
23
- const flushThinking = () => {
24
- if (currentThinkingSegment.trim()) {
25
- segments.push({ type: "thinking", content: currentThinkingSegment });
26
- }
27
- currentThinkingSegment = "";
28
- };
29
- try {
30
- for await (const event of client.stream({ ...request, signal: combinedSignal })) {
31
- switch (event.type) {
32
- case "text_delta":
33
- if (firstTokenTime === null) {
34
- firstTokenTime = performance.now();
35
- }
36
- flushThinking();
37
- content += event.content;
38
- currentTextSegment += event.content;
39
- if (hasXmlToolPattern(content)) {
40
- xmlAbortController.abort();
41
- yield { type: "xml_tool_abort" };
42
- return null;
43
- }
44
- yield { type: "text_delta", content: event.content };
45
- break;
46
- case "thinking_delta":
47
- if (firstTokenTime === null) {
48
- firstTokenTime = performance.now();
49
- }
50
- flushText();
51
- thinkingContent += event.content;
52
- currentThinkingSegment += event.content;
53
- if (hasXmlToolPattern(thinkingContent)) {
54
- xmlAbortController.abort();
55
- yield { type: "xml_tool_abort" };
56
- return null;
57
- }
58
- yield { type: "thinking_delta", content: event.content };
59
- break;
60
- case "tool_call_delta":
61
- yield {
62
- type: "tool_call_delta",
63
- index: event.index,
64
- ...event.id !== void 0 ? { id: event.id } : {},
65
- ...event.name !== void 0 ? { name: event.name } : {},
66
- ...event.arguments !== void 0 ? { arguments: event.arguments } : {}
67
- };
68
- break;
69
- case "done":
70
- flushThinking();
71
- flushText();
72
- response = event.response;
73
- yield { type: "done", response: event.response };
74
- break;
75
- case "error":
76
- yield { type: "error", error: event.error };
77
- return null;
78
- }
79
- }
80
- } catch (error) {
81
- if (error instanceof Error && error.name === "AbortError") {
82
- return null;
83
- }
84
- yield { type: "error", error: error instanceof Error ? error.message : "Unknown error" };
85
- return null;
86
- }
87
- if (!response) {
88
- return null;
89
- }
90
- const toolCalls = response.toolCalls ?? [];
91
- for (const tc of toolCalls) {
92
- segments.push({ type: "tool_call", toolCallId: tc.id });
93
- }
94
- const endTime = performance.now();
95
- const ttft = ((firstTokenTime ?? endTime) - startTime) / 1e3;
96
- const completionTime = (endTime - (firstTokenTime ?? startTime)) / 1e3;
97
- const { promptTokens, completionTokens } = response.usage;
98
- const effectiveThinkingContent = thinkingContent || content === "" && response.reasoning_content || "";
99
- return {
100
- content,
101
- thinkingContent: effectiveThinkingContent,
102
- toolCalls,
103
- response,
104
- segments,
105
- timing: {
106
- ttft,
107
- completionTime,
108
- tps: completionTime > 0 ? completionTokens / completionTime : 0,
109
- prefillTps: ttft > 0 ? promptTokens / ttft : 0
110
- }
111
- };
112
- }
113
-
114
- export {
115
- streamWithSegments
116
- };
117
- //# sourceMappingURL=chunk-55N6FAAZ.js.map