openfox 2.0.129 → 2.0.130

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 (101) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +2 -0
  3. package/dist/CHANGELOG.md +32 -0
  4. package/dist/auth-D3WLIBTG.js +19 -0
  5. package/dist/{auto-config-454YE6KC.js → auto-config-5VSNLVNI.js} +6 -5
  6. package/dist/{backend-4YPEC3J2.js → backend-NDBY3DAQ.js} +4 -2
  7. package/dist/{chat-handler-TH6JBO6G.js → chat-handler-4WCKNCQV.js} +32 -32
  8. package/dist/chunk-25DAVVTP.js +395 -0
  9. package/dist/{chunk-ISE55FOR.js → chunk-2AI7VYPN.js} +11 -1
  10. package/dist/{chunk-2COZT3YI.js → chunk-2OMXXCJJ.js} +24 -24
  11. package/dist/{chunk-OHTBWA7L.js → chunk-35GQEIH2.js} +13 -13
  12. package/dist/{chunk-N2Q3KYWM.js → chunk-3DZSHRXE.js} +7 -2
  13. package/dist/chunk-3OBZ55SX.js +7 -0
  14. package/dist/{chunk-ZIL6VKLU.js → chunk-64N4CZFT.js} +2 -2
  15. package/dist/{chunk-66MG44TF.js → chunk-6QZVAOSA.js} +2 -2
  16. package/dist/{chunk-6LX43YRA.js → chunk-7ET46SNE.js} +4 -4
  17. package/dist/{chunk-YJD5A375.js → chunk-AYCB32NI.js} +5 -5
  18. package/dist/{chunk-GIJUWPRQ.js → chunk-CGCEAKG5.js} +2 -2
  19. package/dist/{auth-GTGIGX5X.js → chunk-CQGJ5RWB.js} +4 -4
  20. package/dist/{chunk-JQMQ4DGC.js → chunk-CYQUM42E.js} +76 -32
  21. package/dist/{chunk-P6GTPKE5.js → chunk-DHDIKVRT.js} +278 -16
  22. package/dist/{chunk-ZXWJ6JTL.js → chunk-DI5GTIAU.js} +1154 -196
  23. package/dist/chunk-DQTN4B33.js +235 -0
  24. package/dist/{chunk-RV5G7QQU.js → chunk-DQTXXHD2.js} +3 -3
  25. package/dist/{chunk-MYNNMV75.js → chunk-DYIDDGMN.js} +54 -36
  26. package/dist/{chunk-DABWCAXS.js → chunk-EUOWCVU6.js} +19 -6
  27. package/dist/{chunk-7RIEI2TE.js → chunk-EVVWDRM5.js} +45 -16
  28. package/dist/{chunk-ATWOXI52.js → chunk-HCYSGLY2.js} +1 -1
  29. package/dist/{chunk-KBESUA3W.js → chunk-JHA2SPCU.js} +2 -2
  30. package/dist/{chunk-ZIYETXOW.js → chunk-JKRMMNUR.js} +4 -4
  31. package/dist/{chunk-H6YIVK67.js → chunk-JSONBGSY.js} +24 -4
  32. package/dist/{chunk-HO7A7TMF.js → chunk-KHKRHGA6.js} +15 -5
  33. package/dist/{chunk-K2QKX4ZJ.js → chunk-OA2FURC3.js} +8 -2
  34. package/dist/{chunk-ZFNBATE3.js → chunk-OXMOKQPW.js} +3 -2
  35. package/dist/{chunk-567L5OJ6.js → chunk-P57IBMK4.js} +2 -2
  36. package/dist/{session-status-6Q5B5PEN.js → chunk-T3S5MTMD.js} +2 -3
  37. package/dist/{chunk-7ZMOP5LS.js → chunk-TS5WKTFB.js} +18 -1
  38. package/dist/{chunk-PBFGJFGC.js → chunk-UV6IH6HK.js} +32 -10
  39. package/dist/{chunk-26WS7AH6.js → chunk-VJNA5AOB.js} +39 -7
  40. package/dist/{chunk-IJFKJ5D6.js → chunk-VUIXQ6X4.js} +4 -4
  41. package/dist/{chunk-L24A6GZ7.js → chunk-X24XN2M2.js} +84 -56
  42. package/dist/{chunk-AQBRI7TM.js → chunk-X3FHIDLT.js} +2 -2
  43. package/dist/chunk-YNMP647F.js +24 -0
  44. package/dist/{chunk-7YP4O4XE.js → chunk-ZRCRGPGT.js} +2 -2
  45. package/dist/cli/dev.js +1 -1
  46. package/dist/cli/index.js +1 -1
  47. package/dist/client-26RSMUAX.js +16 -0
  48. package/dist/{client-pure-GU2SV3DD.js → client-pure-FLKP6PTI.js} +2 -2
  49. package/dist/{compactor-WKFNTUXL.js → compactor-HYBSSFKP.js} +14 -14
  50. package/dist/dynamic-context-2VLACYK4.js +50 -0
  51. package/dist/{events-GMHRX4LF.js → events-D33QXGSX.js} +7 -7
  52. package/dist/{folding-7K2GRPF4.js → folding-QOKBKUU6.js} +5 -5
  53. package/dist/{http-client-ROVNSHF6.js → http-client-MGAJTGPR.js} +3 -3
  54. package/dist/launch-KFENN5GS.js +53 -0
  55. package/dist/{manager-NOKJQTTF.js → manager-VRHX7BVI.js} +4 -4
  56. package/dist/mcp-YU7AM3UV.js +120 -0
  57. package/dist/{model-catalog-ZLOWTQA7.js → model-catalog-2PCKTYGW.js} +2 -2
  58. package/dist/{oauth-provider-DGBC2YM6.js → oauth-provider-VHUS2KEG.js} +8 -2
  59. package/dist/{orchestrator-E6GIZGEN.js → orchestrator-PLTAEOMR.js} +30 -30
  60. package/dist/package.json +1 -1
  61. package/dist/{path-security-UDZ7UVWK.js → path-security-4WQJGU3Z.js} +11 -11
  62. package/dist/{platform-EMKWQTZX.js → platform-MWWJ6OKV.js} +3 -3
  63. package/dist/plugins-registry.json +12 -0
  64. package/dist/{processor-7RDR675X.js → processor-K4WHZKE6.js} +31 -31
  65. package/dist/{profiles-HXGJIPF2.js → profiles-EBCVFYG7.js} +2 -2
  66. package/dist/{protocol-DMneA8mx.d.ts → protocol-BMUoqwYH.d.ts} +2 -1
  67. package/dist/{protocol-TS3GVTT3.js → protocol-Y7MRKRUO.js} +3 -3
  68. package/dist/provider/index.d.ts +4 -4
  69. package/dist/{provider-DXEICEIE.js → provider-CVM33XHW.js} +10 -10
  70. package/dist/{provider-manager-PU7RS2TK.js → provider-manager-7NL5EQLG.js} +10 -10
  71. package/dist/{registry-Z4GVYFTV.js → registry-KFFZFIZT.js} +3 -3
  72. package/dist/{serve-Z5ITDPCQ.js → serve-KQAPXO5X.js} +42 -40
  73. package/dist/server/index.d.ts +18 -3
  74. package/dist/server/index.js +39 -37
  75. package/dist/server-RPKVKMDD.js +56 -0
  76. package/dist/{service-INQWTYY2.js → service-7TLOSFAO.js} +12 -12
  77. package/dist/{session-overrides-4WAD3X5Q.js → session-overrides-U573CU2V.js} +5 -5
  78. package/dist/session-status-UFO5IFI7.js +10 -0
  79. package/dist/{sessions-D7VRCHQY.js → sessions-LUVWWRFO.js} +4 -4
  80. package/dist/{settings-VOWWO4VG.js → settings-LMAMF2X7.js} +2 -2
  81. package/dist/shared/index.d.ts +3 -3
  82. package/dist/shared/index.js +1 -1
  83. package/dist/skill-defaults/browser/SKILL.md +20 -1
  84. package/dist/{tasks-SE3DOPVP.js → tasks-FA6Z52H2.js} +12 -12
  85. package/dist/{tools-6XUSIJN2.js → tools-SSPC3UQZ.js} +34 -34
  86. package/dist/{types-PAKlAzp9.d.ts → types-BIkpxjaj.d.ts} +11 -2
  87. package/dist/{types-BWuVnaBw.d.ts → types-CoY8Ka1C.d.ts} +1 -1
  88. package/dist/{update-EJUI6PSV.js → update-QRGK67DB.js} +2 -2
  89. package/dist/web/assets/{index-CGKd7WLQ.js → index-0PVQNOfW.js} +88 -88
  90. package/dist/web/assets/{index-CbX8veVW.css → index-Ds94aclE.css} +1 -1
  91. package/dist/web/index.html +2 -2
  92. package/dist/web/sw.js +1 -1
  93. package/package.json +1 -1
  94. package/plugins-registry.json +12 -0
  95. package/dist/chunk-HIRDDCPD.js +0 -7
  96. package/dist/chunk-PHP7PLFX.js +0 -151
  97. package/dist/chunk-RSB4AR2A.js +0 -108
  98. package/dist/client-RZGGDGUA.js +0 -16
  99. package/dist/dynamic-context-ZVE733UI.js +0 -28
  100. package/dist/launch-5ARSU7EM.js +0 -53
  101. package/dist/server-MUJ7EHEI.js +0 -56
@@ -0,0 +1,120 @@
1
+ import {
2
+ cancel,
3
+ isCancel,
4
+ password
5
+ } from "./chunk-AGXJ5O63.js";
6
+ import {
7
+ buildOpenFoxMcpBootstrap
8
+ } from "./chunk-YNMP647F.js";
9
+ import {
10
+ loadAuthConfig
11
+ } from "./chunk-CQGJ5RWB.js";
12
+ import {
13
+ loadGlobalConfig
14
+ } from "./chunk-R5FAEKXQ.js";
15
+ import {
16
+ getAuthKeyPath
17
+ } from "./chunk-CQGTEGKL.js";
18
+ import "./chunk-YLJ4XMA6.js";
19
+
20
+ // src/cli/mcp.ts
21
+ import { readFile } from "fs/promises";
22
+ import { createHash, createSign, privateDecrypt } from "crypto";
23
+ var MODE_DEFAULT_PORTS = { production: 10369, development: 10469, test: 10369 };
24
+ var WILDCARD_HOSTS = /* @__PURE__ */ new Set(["0.0.0.0", "::", "*"]);
25
+ var PROBE_INCREMENT = 15;
26
+ function probeHost(host) {
27
+ return WILDCARD_HOSTS.has(host) ? "127.0.0.1" : host;
28
+ }
29
+ function portCandidates(preferred, fallback) {
30
+ const candidates = [preferred, fallback];
31
+ for (let i = 1; i <= PROBE_INCREMENT; i++) {
32
+ candidates.push(preferred + i);
33
+ candidates.push(fallback + i);
34
+ }
35
+ return [...new Set(candidates)];
36
+ }
37
+ async function findLivePort(host, candidates) {
38
+ for (const port of candidates) {
39
+ try {
40
+ const res = await fetch(`http://${host}:${port}/api/health`, { signal: AbortSignal.timeout(400) });
41
+ if (res.ok) return port;
42
+ } catch {
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ function verifyPassword(encryptedPassword, privateKey, entered) {
48
+ try {
49
+ const decrypted = privateDecrypt({ key: privateKey, padding: 1 }, Buffer.from(encryptedPassword, "base64"));
50
+ return decrypted.toString() === entered;
51
+ } catch {
52
+ return false;
53
+ }
54
+ }
55
+ function signSessionToken(privateKey, passwordValue) {
56
+ const passwordHash = createHash("sha256").update(passwordValue).digest("hex");
57
+ const sign = createSign("SHA256");
58
+ sign.update(passwordHash);
59
+ sign.end();
60
+ return sign.sign(privateKey, "base64");
61
+ }
62
+ function renderMcpClientConfig(bootstrap) {
63
+ const server = { url: bootstrap.url };
64
+ if (bootstrap.headers) {
65
+ server["headers"] = bootstrap.headers;
66
+ }
67
+ return JSON.stringify({ mcpServers: { [bootstrap.name]: server } }, null, 2);
68
+ }
69
+ async function runMcpCommand(mode, options = {}) {
70
+ const config = await loadGlobalConfig(mode);
71
+ const auth = await loadAuthConfig(mode);
72
+ const host = config.server?.host ?? "127.0.0.1";
73
+ const configuredPort = config.server?.port ?? MODE_DEFAULT_PORTS[mode];
74
+ const requestedPort = options.port ?? configuredPort;
75
+ const livePort = await findLivePort(probeHost(host), portCandidates(MODE_DEFAULT_PORTS[mode], requestedPort));
76
+ const port = livePort ?? requestedPort;
77
+ if (!livePort) {
78
+ console.warn(
79
+ `
80
+ \u26A0 No running OpenFox server detected near port ${requestedPort} \u2014 the config below assumes it will start there.`
81
+ );
82
+ }
83
+ const authRequired = auth?.strategy === "network" && auth.encryptedPassword != null && auth.encryptedPassword.length > 0;
84
+ let sessionToken = null;
85
+ if (authRequired) {
86
+ const privateKey = await readFile(getAuthKeyPath(mode), "utf-8");
87
+ let entered = options.password;
88
+ if (entered == null) {
89
+ const pwd = await password({ message: "OpenFox password:" });
90
+ if (isCancel(pwd)) {
91
+ cancel();
92
+ process.exit(1);
93
+ }
94
+ entered = typeof pwd === "string" ? pwd : "";
95
+ }
96
+ if (!verifyPassword(auth.encryptedPassword, privateKey, entered)) {
97
+ console.error("Invalid password");
98
+ process.exit(1);
99
+ }
100
+ sessionToken = signSessionToken(privateKey, entered);
101
+ }
102
+ const bootstrap = buildOpenFoxMcpBootstrap({ host, port, authRequired, sessionToken });
103
+ console.log("OpenFox MCP client config");
104
+ console.log("=========================");
105
+ console.log();
106
+ console.log(`Endpoint: ${bootstrap.url}`);
107
+ console.log();
108
+ console.log("Paste into your MCP client (Claude Desktop, Cursor, ...):");
109
+ console.log();
110
+ console.log(renderMcpClientConfig(bootstrap));
111
+ }
112
+ export {
113
+ findLivePort,
114
+ portCandidates,
115
+ renderMcpClientConfig,
116
+ runMcpCommand,
117
+ signSessionToken,
118
+ verifyPassword
119
+ };
120
+ //# sourceMappingURL=mcp-YU7AM3UV.js.map
@@ -3,7 +3,7 @@ import {
3
3
  getCatalogDefaultEffort,
4
4
  getCatalogEntry,
5
5
  isReasoningEffortValue
6
- } from "./chunk-ISE55FOR.js";
6
+ } from "./chunk-2AI7VYPN.js";
7
7
  import "./chunk-YLJ4XMA6.js";
8
8
  export {
9
9
  REASONING_EFFORT_VALUES,
@@ -11,4 +11,4 @@ export {
11
11
  getCatalogEntry,
12
12
  isReasoningEffortValue
13
13
  };
14
- //# sourceMappingURL=model-catalog-ZLOWTQA7.js.map
14
+ //# sourceMappingURL=model-catalog-2PCKTYGW.js.map
@@ -1,15 +1,21 @@
1
1
  import {
2
2
  McpOAuthProvider,
3
+ buildOAuthProbeUrl,
3
4
  getMcpOAuthRedirectUri,
5
+ rejectStaleOAuthClient,
6
+ resetProbeCache,
4
7
  setMcpOAuthServerPort
5
- } from "./chunk-RSB4AR2A.js";
8
+ } from "./chunk-DQTN4B33.js";
6
9
  import "./chunk-IJ53Y77N.js";
7
10
  import "./chunk-K44MW7JJ.js";
8
11
  import "./chunk-CQGTEGKL.js";
9
12
  import "./chunk-YLJ4XMA6.js";
10
13
  export {
11
14
  McpOAuthProvider,
15
+ buildOAuthProbeUrl,
12
16
  getMcpOAuthRedirectUri,
17
+ rejectStaleOAuthClient,
18
+ resetProbeCache,
13
19
  setMcpOAuthServerPort
14
20
  };
15
- //# sourceMappingURL=oauth-provider-DGBC2YM6.js.map
21
+ //# sourceMappingURL=oauth-provider-VHUS2KEG.js.map
@@ -1,10 +1,12 @@
1
1
  import {
2
2
  runAgentTurn,
3
3
  runChatTurn
4
- } from "./chunk-7RIEI2TE.js";
5
- import "./chunk-L24A6GZ7.js";
6
- import "./chunk-PHP7PLFX.js";
7
- import "./chunk-ZIL6VKLU.js";
4
+ } from "./chunk-EVVWDRM5.js";
5
+ import "./chunk-X24XN2M2.js";
6
+ import "./chunk-Y3BSBKHY.js";
7
+ import "./chunk-J7GAZGZT.js";
8
+ import "./chunk-JSONBGSY.js";
9
+ import "./chunk-ZRCRGPGT.js";
8
10
  import {
9
11
  TurnMetrics,
10
12
  createChatDoneEvent,
@@ -12,42 +14,40 @@ import {
12
14
  createMessageStartEvent,
13
15
  createToolCallEvent,
14
16
  createToolResultEvent
15
- } from "./chunk-6LX43YRA.js";
16
- import "./chunk-GIJUWPRQ.js";
17
+ } from "./chunk-7ET46SNE.js";
17
18
  import "./chunk-EHFIUXWZ.js";
18
- import "./chunk-RV5G7QQU.js";
19
+ import "./chunk-DQTXXHD2.js";
19
20
  import "./chunk-I72ACQ6R.js";
20
21
  import "./chunk-JE7LW7Y6.js";
21
22
  import "./chunk-OAN4BXEW.js";
22
- import "./chunk-Y3BSBKHY.js";
23
- import "./chunk-J7GAZGZT.js";
24
- import "./chunk-H6YIVK67.js";
25
- import "./chunk-7YP4O4XE.js";
26
- import "./chunk-26WS7AH6.js";
27
- import "./chunk-YJD5A375.js";
28
- import "./chunk-ZIYETXOW.js";
29
- import "./chunk-AQBRI7TM.js";
30
- import "./chunk-567L5OJ6.js";
31
- import "./chunk-66MG44TF.js";
23
+ import "./chunk-25DAVVTP.js";
24
+ import "./chunk-64N4CZFT.js";
25
+ import "./chunk-CGCEAKG5.js";
32
26
  import "./chunk-JURM3RPZ.js";
27
+ import "./chunk-VJNA5AOB.js";
28
+ import "./chunk-AYCB32NI.js";
29
+ import "./chunk-JKRMMNUR.js";
30
+ import "./chunk-X3FHIDLT.js";
31
+ import "./chunk-JHA2SPCU.js";
32
+ import "./chunk-OSXPQSLW.js";
33
+ import "./chunk-P57IBMK4.js";
33
34
  import "./chunk-LCLH6ZUL.js";
34
- import "./chunk-JQMQ4DGC.js";
35
- import "./chunk-K2QKX4ZJ.js";
35
+ import "./chunk-6QZVAOSA.js";
36
+ import "./chunk-CYQUM42E.js";
37
+ import "./chunk-OA2FURC3.js";
36
38
  import "./chunk-J2GP3J3X.js";
37
- import "./chunk-KBESUA3W.js";
38
- import "./chunk-OSXPQSLW.js";
39
39
  import "./chunk-3B232XG4.js";
40
- import "./chunk-P6GTPKE5.js";
41
- import "./chunk-7ZMOP5LS.js";
42
- import "./chunk-PBFGJFGC.js";
40
+ import "./chunk-DHDIKVRT.js";
41
+ import "./chunk-TS5WKTFB.js";
42
+ import "./chunk-UV6IH6HK.js";
43
43
  import "./chunk-HNCM3D7Y.js";
44
- import "./chunk-DABWCAXS.js";
45
- import "./chunk-ZFNBATE3.js";
46
- import "./chunk-N2Q3KYWM.js";
44
+ import "./chunk-EUOWCVU6.js";
45
+ import "./chunk-OXMOKQPW.js";
46
+ import "./chunk-3DZSHRXE.js";
47
47
  import "./chunk-OYBUJIC3.js";
48
- import "./chunk-ISE55FOR.js";
48
+ import "./chunk-2AI7VYPN.js";
49
49
  import "./chunk-K44MW7JJ.js";
50
- import "./chunk-ATWOXI52.js";
50
+ import "./chunk-HCYSGLY2.js";
51
51
  import "./chunk-R5FAEKXQ.js";
52
52
  import "./chunk-CQGTEGKL.js";
53
53
  import "./chunk-YLJ4XMA6.js";
@@ -61,4 +61,4 @@ export {
61
61
  runAgentTurn,
62
62
  runChatTurn
63
63
  };
64
- //# sourceMappingURL=orchestrator-E6GIZGEN.js.map
64
+ //# sourceMappingURL=orchestrator-PLTAEOMR.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.129",
3
+ "version": "2.0.130",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -20,20 +20,20 @@ import {
20
20
  registerPathConfirmation,
21
21
  requestPathAccess,
22
22
  resolveRelativeTraversals
23
- } from "./chunk-26WS7AH6.js";
24
- import "./chunk-YJD5A375.js";
25
- import "./chunk-ZIYETXOW.js";
26
- import "./chunk-AQBRI7TM.js";
27
- import "./chunk-567L5OJ6.js";
28
- import "./chunk-66MG44TF.js";
29
- import "./chunk-LCLH6ZUL.js";
30
- import "./chunk-KBESUA3W.js";
23
+ } from "./chunk-VJNA5AOB.js";
24
+ import "./chunk-AYCB32NI.js";
25
+ import "./chunk-JKRMMNUR.js";
26
+ import "./chunk-X3FHIDLT.js";
27
+ import "./chunk-JHA2SPCU.js";
31
28
  import "./chunk-OSXPQSLW.js";
29
+ import "./chunk-P57IBMK4.js";
30
+ import "./chunk-LCLH6ZUL.js";
31
+ import "./chunk-6QZVAOSA.js";
32
32
  import "./chunk-3B232XG4.js";
33
- import "./chunk-N2Q3KYWM.js";
33
+ import "./chunk-3DZSHRXE.js";
34
34
  import "./chunk-OYBUJIC3.js";
35
35
  import "./chunk-K44MW7JJ.js";
36
- import "./chunk-ATWOXI52.js";
36
+ import "./chunk-HCYSGLY2.js";
37
37
  import "./chunk-CQGTEGKL.js";
38
38
  import "./chunk-YLJ4XMA6.js";
39
39
  export {
@@ -59,4 +59,4 @@ export {
59
59
  requestPathAccess,
60
60
  resolveRelativeTraversals
61
61
  };
62
- //# sourceMappingURL=path-security-UDZ7UVWK.js.map
62
+ //# sourceMappingURL=path-security-4WQJGU3Z.js.map
@@ -5,8 +5,8 @@ import {
5
5
  isAbsolutePath,
6
6
  isWindowsPath,
7
7
  listAvailableShells
8
- } from "./chunk-66MG44TF.js";
9
- import "./chunk-N2Q3KYWM.js";
8
+ } from "./chunk-6QZVAOSA.js";
9
+ import "./chunk-3DZSHRXE.js";
10
10
  import "./chunk-OYBUJIC3.js";
11
11
  import "./chunk-K44MW7JJ.js";
12
12
  import "./chunk-YLJ4XMA6.js";
@@ -18,4 +18,4 @@ export {
18
18
  isWindowsPath,
19
19
  listAvailableShells
20
20
  };
21
- //# sourceMappingURL=platform-EMKWQTZX.js.map
21
+ //# sourceMappingURL=platform-MWWJ6OKV.js.map
@@ -22,5 +22,17 @@
22
22
  "displayName": "xAI Grok (SuperGrok)",
23
23
  "description": "Authenticate with an X (xAI) SuperGrok subscription via OAuth. No API key required. | ⚠️ Using this plugin may violate xAI's Terms of Service.",
24
24
  "githubUrl": "https://github.com/Olgean-Group/openfox-xai-supergrok"
25
+ },
26
+ {
27
+ "name": "openfox-openrouter-free",
28
+ "displayName": "OpenRouter (Free Models)",
29
+ "description": "OpenRouter provider filtered to include only free plans, with automatic hourly updates (once per hour) and 1-Click OAuth / API key authentication.",
30
+ "githubUrl": "https://github.com/JamesDAdams/openfox-openrouter-free"
31
+ },
32
+ {
33
+ "name": "openfox-opencode-free",
34
+ "displayName": "OpenCode (Free Models)",
35
+ "description": "OpenCode provider filtered to free models only (-free suffix), with automatic hourly model updates (1x/hour) and API key auth.",
36
+ "githubUrl": "https://github.com/JamesDAdams/openfox-opencode-free"
25
37
  }
26
38
  ]
@@ -2,52 +2,52 @@ import {
2
2
  buildRunChatTurnParams,
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
- } from "./chunk-OHTBWA7L.js";
6
- import "./chunk-L24A6GZ7.js";
7
- import "./chunk-ZIL6VKLU.js";
8
- import "./chunk-6LX43YRA.js";
9
- import "./chunk-GIJUWPRQ.js";
5
+ } from "./chunk-35GQEIH2.js";
6
+ import "./chunk-X24XN2M2.js";
7
+ import "./chunk-Y3BSBKHY.js";
8
+ import "./chunk-J7GAZGZT.js";
9
+ import "./chunk-JSONBGSY.js";
10
+ import "./chunk-ZRCRGPGT.js";
11
+ import "./chunk-7ET46SNE.js";
10
12
  import "./chunk-EHFIUXWZ.js";
11
- import "./chunk-RV5G7QQU.js";
13
+ import "./chunk-DQTXXHD2.js";
12
14
  import "./chunk-I72ACQ6R.js";
13
15
  import "./chunk-JE7LW7Y6.js";
14
16
  import "./chunk-OAN4BXEW.js";
15
- import "./chunk-Y3BSBKHY.js";
16
- import "./chunk-J7GAZGZT.js";
17
- import "./chunk-H6YIVK67.js";
18
- import "./chunk-7YP4O4XE.js";
19
- import "./chunk-26WS7AH6.js";
17
+ import "./chunk-64N4CZFT.js";
18
+ import "./chunk-CGCEAKG5.js";
19
+ import "./chunk-JURM3RPZ.js";
20
+ import "./chunk-VJNA5AOB.js";
20
21
  import {
21
22
  getEventStore
22
- } from "./chunk-YJD5A375.js";
23
- import "./chunk-ZIYETXOW.js";
24
- import "./chunk-AQBRI7TM.js";
23
+ } from "./chunk-AYCB32NI.js";
24
+ import "./chunk-JKRMMNUR.js";
25
+ import "./chunk-X3FHIDLT.js";
26
+ import "./chunk-JHA2SPCU.js";
27
+ import "./chunk-OSXPQSLW.js";
25
28
  import {
26
29
  createChatMessageMessage,
27
30
  createSessionRunningMessage
28
- } from "./chunk-567L5OJ6.js";
29
- import "./chunk-66MG44TF.js";
30
- import "./chunk-JURM3RPZ.js";
31
+ } from "./chunk-P57IBMK4.js";
31
32
  import "./chunk-LCLH6ZUL.js";
32
- import "./chunk-JQMQ4DGC.js";
33
- import "./chunk-K2QKX4ZJ.js";
33
+ import "./chunk-6QZVAOSA.js";
34
+ import "./chunk-CYQUM42E.js";
35
+ import "./chunk-OA2FURC3.js";
34
36
  import "./chunk-J2GP3J3X.js";
35
- import "./chunk-KBESUA3W.js";
36
- import "./chunk-OSXPQSLW.js";
37
37
  import "./chunk-3B232XG4.js";
38
- import "./chunk-P6GTPKE5.js";
39
- import "./chunk-7ZMOP5LS.js";
40
- import "./chunk-PBFGJFGC.js";
38
+ import "./chunk-DHDIKVRT.js";
39
+ import "./chunk-TS5WKTFB.js";
40
+ import "./chunk-UV6IH6HK.js";
41
41
  import "./chunk-HNCM3D7Y.js";
42
- import "./chunk-DABWCAXS.js";
43
- import "./chunk-ZFNBATE3.js";
44
- import "./chunk-N2Q3KYWM.js";
42
+ import "./chunk-EUOWCVU6.js";
43
+ import "./chunk-OXMOKQPW.js";
44
+ import "./chunk-3DZSHRXE.js";
45
45
  import "./chunk-OYBUJIC3.js";
46
- import "./chunk-ISE55FOR.js";
46
+ import "./chunk-2AI7VYPN.js";
47
47
  import {
48
48
  logger
49
49
  } from "./chunk-K44MW7JJ.js";
50
- import "./chunk-ATWOXI52.js";
50
+ import "./chunk-HCYSGLY2.js";
51
51
  import "./chunk-R5FAEKXQ.js";
52
52
  import "./chunk-CQGTEGKL.js";
53
53
  import "./chunk-YLJ4XMA6.js";
@@ -207,7 +207,7 @@ var QueueProcessor = class {
207
207
  model: sessionClient.getModel(),
208
208
  ...sessionEffort ? { reasoningEffort: sessionEffort } : {}
209
209
  };
210
- const { runChatTurn } = await import("./orchestrator-E6GIZGEN.js");
210
+ const { runChatTurn } = await import("./orchestrator-PLTAEOMR.js");
211
211
  const runChatTurnParams = buildRunChatTurnParams({
212
212
  sessionManager,
213
213
  sessionId,
@@ -256,4 +256,4 @@ var QueueProcessor = class {
256
256
  export {
257
257
  QueueProcessor
258
258
  };
259
- //# sourceMappingURL=processor-7RDR675X.js.map
259
+ //# sourceMappingURL=processor-K4WHZKE6.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  getModelProfile,
3
3
  modelSupportsVision
4
- } from "./chunk-7ZMOP5LS.js";
4
+ } from "./chunk-TS5WKTFB.js";
5
5
  import "./chunk-YLJ4XMA6.js";
6
6
  export {
7
7
  getModelProfile,
8
8
  modelSupportsVision
9
9
  };
10
- //# sourceMappingURL=profiles-HXGJIPF2.js.map
10
+ //# sourceMappingURL=profiles-EBCVFYG7.js.map
@@ -1,4 +1,4 @@
1
- import { A as Attachment, Z as ToolMode, $ as ToolResult, a as Message, q as MessageStats, Y as Todo, c as ContextState, e as Criterion, i as Diagnostic, r as MetadataEntry, G as SessionMode, H as SessionPhase, t as Project, J as SessionSummary, z as Session, a2 as WorkflowExecution, u as ProjectTask, w as ProjectTaskSettings, v as ProjectTaskCounts, U as TaskGateConfig } from './types-PAKlAzp9.js';
1
+ import { A as Attachment, Z as ToolMode, $ as ToolResult, a as Message, q as MessageStats, Y as Todo, c as ContextState, e as Criterion, i as Diagnostic, r as MetadataEntry, G as SessionMode, H as SessionPhase, t as Project, J as SessionSummary, z as Session, a2 as WorkflowExecution, u as ProjectTask, w as ProjectTaskSettings, v as ProjectTaskCounts, U as TaskGateConfig } from './types-BIkpxjaj.js';
2
2
 
3
3
  type ClientMessageType = 'session.load' | 'context.compact' | 'context.checkDynamic' | 'context.applyDynamic' | 'context.applyDynamic.preview' | 'runner.launch' | 'workflow.exit' | 'chat.retry' | 'chat.llm_retry_now' | 'path.confirm' | 'ask.answer';
4
4
  interface ClientMessage<T = unknown> {
@@ -254,6 +254,7 @@ interface ContextPreviewPayload {
254
254
  oldHash?: string;
255
255
  newHash: string;
256
256
  diff: DiffLine[];
257
+ toolDiff?: DiffLine[];
257
258
  }
258
259
  interface ProviderChangedPayload {
259
260
  providerId: string;
@@ -38,9 +38,9 @@ import {
38
38
  parseClientMessage,
39
39
  serializeServerMessage,
40
40
  storedEventToServerMessage
41
- } from "./chunk-567L5OJ6.js";
41
+ } from "./chunk-P57IBMK4.js";
42
42
  import "./chunk-LCLH6ZUL.js";
43
- import "./chunk-ATWOXI52.js";
43
+ import "./chunk-HCYSGLY2.js";
44
44
  import "./chunk-YLJ4XMA6.js";
45
45
  export {
46
46
  createChatAskUserMessage,
@@ -83,4 +83,4 @@ export {
83
83
  serializeServerMessage,
84
84
  storedEventToServerMessage
85
85
  };
86
- //# sourceMappingURL=protocol-TS3GVTT3.js.map
86
+ //# sourceMappingURL=protocol-Y7MRKRUO.js.map
@@ -1,7 +1,7 @@
1
- import { M as ModelConfig } from '../types-PAKlAzp9.js';
2
- export { T as ToolCall } from '../types-PAKlAzp9.js';
3
- import { L as LLMCompletionRequest, a as LLMCompletionResponse, b as LLMStreamEvent } from '../types-BWuVnaBw.js';
4
- export { c as LLMMessage, d as LLMToolDefinition } from '../types-BWuVnaBw.js';
1
+ import { M as ModelConfig } from '../types-BIkpxjaj.js';
2
+ export { T as ToolCall } from '../types-BIkpxjaj.js';
3
+ import { L as LLMCompletionRequest, a as LLMCompletionResponse, b as LLMStreamEvent } from '../types-CoY8Ka1C.js';
4
+ export { c as LLMMessage, d as LLMToolDefinition } from '../types-CoY8Ka1C.js';
5
5
 
6
6
  type ProviderAuthState = 'disconnected' | 'pending' | 'connected' | 'expired' | 'error';
7
7
  interface ProviderAuthStatus {
@@ -11,18 +11,18 @@ import {
11
11
  import {
12
12
  detectModel,
13
13
  fetchAvailableModelsFromBackend
14
- } from "./chunk-JQMQ4DGC.js";
15
- import "./chunk-K2QKX4ZJ.js";
14
+ } from "./chunk-CYQUM42E.js";
15
+ import "./chunk-OA2FURC3.js";
16
16
  import "./chunk-J2GP3J3X.js";
17
- import "./chunk-P6GTPKE5.js";
18
- import "./chunk-7ZMOP5LS.js";
19
- import "./chunk-PBFGJFGC.js";
17
+ import "./chunk-DHDIKVRT.js";
18
+ import "./chunk-TS5WKTFB.js";
19
+ import "./chunk-UV6IH6HK.js";
20
20
  import "./chunk-HNCM3D7Y.js";
21
- import "./chunk-DABWCAXS.js";
22
- import "./chunk-ZFNBATE3.js";
23
- import "./chunk-N2Q3KYWM.js";
21
+ import "./chunk-EUOWCVU6.js";
22
+ import "./chunk-OXMOKQPW.js";
23
+ import "./chunk-3DZSHRXE.js";
24
24
  import "./chunk-OYBUJIC3.js";
25
- import "./chunk-ISE55FOR.js";
25
+ import "./chunk-2AI7VYPN.js";
26
26
  import "./chunk-K44MW7JJ.js";
27
27
  import {
28
28
  activateProvider,
@@ -400,4 +400,4 @@ export {
400
400
  runProviderRemove,
401
401
  runProviderUse
402
402
  };
403
- //# sourceMappingURL=provider-DXEICEIE.js.map
403
+ //# sourceMappingURL=provider-CVM33XHW.js.map
@@ -3,18 +3,18 @@ import {
3
3
  fetchAvailableModelsFromBackend,
4
4
  fetchModelsWithContext,
5
5
  parseDefaultModelSelection
6
- } from "./chunk-JQMQ4DGC.js";
7
- import "./chunk-K2QKX4ZJ.js";
6
+ } from "./chunk-CYQUM42E.js";
7
+ import "./chunk-OA2FURC3.js";
8
8
  import "./chunk-J2GP3J3X.js";
9
- import "./chunk-P6GTPKE5.js";
10
- import "./chunk-7ZMOP5LS.js";
11
- import "./chunk-PBFGJFGC.js";
9
+ import "./chunk-DHDIKVRT.js";
10
+ import "./chunk-TS5WKTFB.js";
11
+ import "./chunk-UV6IH6HK.js";
12
12
  import "./chunk-HNCM3D7Y.js";
13
- import "./chunk-DABWCAXS.js";
14
- import "./chunk-ZFNBATE3.js";
15
- import "./chunk-N2Q3KYWM.js";
13
+ import "./chunk-EUOWCVU6.js";
14
+ import "./chunk-OXMOKQPW.js";
15
+ import "./chunk-3DZSHRXE.js";
16
16
  import "./chunk-OYBUJIC3.js";
17
- import "./chunk-ISE55FOR.js";
17
+ import "./chunk-2AI7VYPN.js";
18
18
  import "./chunk-K44MW7JJ.js";
19
19
  import "./chunk-YLJ4XMA6.js";
20
20
  export {
@@ -23,4 +23,4 @@ export {
23
23
  fetchModelsWithContext,
24
24
  parseDefaultModelSelection
25
25
  };
26
- //# sourceMappingURL=provider-manager-PU7RS2TK.js.map
26
+ //# sourceMappingURL=provider-manager-7NL5EQLG.js.map
@@ -17,10 +17,10 @@ import {
17
17
  resolveDefaultAgentId,
18
18
  saveAgent,
19
19
  saveAgentToProject
20
- } from "./chunk-KBESUA3W.js";
20
+ } from "./chunk-JHA2SPCU.js";
21
21
  import "./chunk-OSXPQSLW.js";
22
22
  import "./chunk-3B232XG4.js";
23
- import "./chunk-N2Q3KYWM.js";
23
+ import "./chunk-3DZSHRXE.js";
24
24
  import "./chunk-OYBUJIC3.js";
25
25
  import "./chunk-K44MW7JJ.js";
26
26
  import "./chunk-CQGTEGKL.js";
@@ -45,4 +45,4 @@ export {
45
45
  saveAgent,
46
46
  saveAgentToProject
47
47
  };
48
- //# sourceMappingURL=registry-Z4GVYFTV.js.map
48
+ //# sourceMappingURL=registry-KFFZFIZT.js.map