farming-code 2.2.29 → 2.2.30

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 (38) hide show
  1. package/README.md +25 -66
  2. package/README.zh_cn.md +15 -66
  3. package/backend/acp-runtime.js +1 -15
  4. package/backend/acp-session-state.js +78 -88
  5. package/backend/agent-session-history.js +45 -12
  6. package/backend/codex-session-history.js +1 -1
  7. package/backend/codex-transcript.js +0 -202
  8. package/backend/config-manager.js +3 -19
  9. package/backend/farming-app-cli.js +1 -1
  10. package/backend/farming-cli.js +3 -57
  11. package/backend/index-html.js +21 -3
  12. package/backend/main-agent-skills.js +1 -18
  13. package/backend/server.js +6 -48
  14. package/backend/storage-layout.js +15 -0
  15. package/backend/update-service.js +55 -935
  16. package/config/farming.deploy.env.example +1 -1
  17. package/config/farming.install.env.example +1 -1
  18. package/dist/acp/codex-acp-1.1.4.mjs +387 -7
  19. package/dist/assets/App-Z1N7T0eM.js +695 -0
  20. package/dist/assets/{ProjectFilesSection-Cf2BEcAN.js → ProjectFilesSection-K3GHuQ4U.js} +2 -2
  21. package/dist/assets/code-dark-kLsQLvpf.css +1 -0
  22. package/dist/assets/{index-CQNaZc3l.js → index-D-zetSol.js} +2 -2
  23. package/dist/assets/main-DUTz-Rd2.css +1 -0
  24. package/dist/index.html +2 -1
  25. package/extensions/browser/backend/browser-resource-manager.js +27 -5
  26. package/extensions/browser/backend/browser-router.js +8 -0
  27. package/extensions/browser/backend/executable-discovery.js +26 -12
  28. package/extensions/browser/backend/managed-chromium-installer.js +593 -0
  29. package/extensions/browser/frontend/types.ts +8 -1
  30. package/extensions/browser/frontend/useBrowserResources.ts +8 -0
  31. package/index.html +1 -0
  32. package/package.json +1 -1
  33. package/backend/agent-memory-report.js +0 -583
  34. package/backend/bundle-update-helper.js +0 -113
  35. package/backend/codex-rollout-follower.js +0 -326
  36. package/dist/assets/App-Ex2oVVXO.js +0 -693
  37. package/dist/assets/code-dark-BEZTQwYZ.css +0 -1
  38. package/dist/assets/main-DK9Sy7-c.css +0 -1
package/backend/server.js CHANGED
@@ -48,7 +48,6 @@ const {
48
48
  } = require('../extensions/browser/backend');
49
49
  const { UsageMonitor } = require('./usage-monitor');
50
50
  const { CodexContextWindowReader } = require('./codex-context-window');
51
- const { DEFAULT_MAX_TURNS: DEFAULT_CODEX_TRANSCRIPT_MAX_TURNS, readCodexTranscript } = require('./codex-transcript');
52
51
  const { AsyncCache } = require('./async-cache');
53
52
  const { getMainAgentSkillsCatalog } = require('./main-agent-skills');
54
53
  const { discoverAgentExtensions, discoverSlashCommands } = require('./slash-command-discovery');
@@ -90,7 +89,8 @@ const tokenAuth = new TokenAuth({ basePath: BASE_PATH || '/' });
90
89
  const authEnabled = tokenAuth.isEnabled();
91
90
  const WS_PATH = routePath(BASE_PATH, '/ws');
92
91
  const encodeCookieToken = TokenAuth.encodeCookieToken;
93
- const MAX_CODEX_TRANSCRIPT_TURNS = 1000;
92
+ const DEFAULT_TRANSCRIPT_MAX_TURNS = 240;
93
+ const MAX_TRANSCRIPT_TURNS = 1000;
94
94
  const INTERACTIVE_REFRESH_CACHE_MAX_AGE_MS = 3_000;
95
95
  const execFileAsync = promisify(execFile);
96
96
 
@@ -149,7 +149,6 @@ const updateService = new FarmingUpdateService({
149
149
  platform: process.platform,
150
150
  arch: process.arch,
151
151
  packagedRuntime: Boolean(process.pkg || process.env.FARMING_PACKAGED_RUNTIME === '1'),
152
- getUpdateUrl: () => configManager.getSettings().updateUrl || '',
153
152
  });
154
153
  const usageMonitor = new UsageMonitor({
155
154
  agentManager,
@@ -1105,51 +1104,10 @@ app.get(routePath(BASE_PATH, '/api/agents/:agentId/session-view'), async (req, r
1105
1104
  res.json({ session: sessionView });
1106
1105
  });
1107
1106
 
1108
- app.get(routePath(BASE_PATH, '/api/agents/:agentId/codex-transcript'), async (req, res) => {
1109
- // Legacy JSONL transcript reader. ACP Chat uses the dedicated ACP endpoint;
1110
- // Terminal Agents stay in their terminal UI.
1111
- const providerSession = agentManager.getAgentProviderSession(req.params.agentId);
1112
- if (!providerSession) {
1113
- res.status(404).json({ error: 'Agent not found' });
1114
- return;
1115
- }
1116
- if (
1117
- providerSession.provider !== 'codex'
1118
- || providerSession.temporary
1119
- || !providerSession.sessionId
1120
- || providerSession.sessionId.startsWith('tmp_uuid')
1121
- ) {
1122
- res.json({
1123
- transcript: {
1124
- available: false,
1125
- reason: 'not-codex-provider-session',
1126
- sessionId: providerSession.sessionId || '',
1127
- turns: [],
1128
- },
1129
- });
1130
- return;
1131
- }
1132
-
1133
- try {
1134
- const requestedMaxTurns = Number.parseInt(String(req.query.maxTurns || ''), 10);
1135
- const maxTurns = Number.isFinite(requestedMaxTurns)
1136
- ? Math.min(MAX_CODEX_TRANSCRIPT_TURNS, Math.max(20, requestedMaxTurns))
1137
- : DEFAULT_CODEX_TRANSCRIPT_MAX_TURNS;
1138
- const transcript = await readCodexTranscript(providerSession.sessionId, {
1139
- maxTurns,
1140
- codexHome: providerSession.providerHomePath || '',
1141
- });
1142
- res.json({ transcript });
1143
- } catch (error) {
1144
- console.error('Failed to read Codex transcript:', error);
1145
- res.status(500).json({ error: error.message || 'Failed to read Codex transcript' });
1146
- }
1147
- });
1148
-
1149
1107
  app.get(routePath(BASE_PATH, '/api/agents/:agentId/json-cli-transcript'), async (req, res) => {
1150
1108
  try {
1151
1109
  const transcript = agentManager.getJsonCliTranscript(req.params.agentId, {
1152
- maxTurns: DEFAULT_CODEX_TRANSCRIPT_MAX_TURNS,
1110
+ maxTurns: DEFAULT_TRANSCRIPT_MAX_TURNS,
1153
1111
  });
1154
1112
  res.json({ transcript });
1155
1113
  } catch (error) {
@@ -1176,8 +1134,8 @@ app.get(routePath(BASE_PATH, '/api/agents/:agentId/acp-transcript'), async (req,
1176
1134
  try {
1177
1135
  const requestedMaxTurns = Number.parseInt(String(req.query.maxTurns || ''), 10);
1178
1136
  const maxTurns = Number.isFinite(requestedMaxTurns)
1179
- ? Math.min(MAX_CODEX_TRANSCRIPT_TURNS, Math.max(20, requestedMaxTurns))
1180
- : DEFAULT_CODEX_TRANSCRIPT_MAX_TURNS;
1137
+ ? Math.min(MAX_TRANSCRIPT_TURNS, Math.max(20, requestedMaxTurns))
1138
+ : DEFAULT_TRANSCRIPT_MAX_TURNS;
1181
1139
  const requestedRevision = Number.parseInt(String(req.query.sinceRevision || ''), 10);
1182
1140
  const externalMedia = req.query.media === 'external-v1';
1183
1141
  res.json({ transcript: agentManager.getAcpTranscript(req.params.agentId, {
@@ -2297,7 +2255,7 @@ app.post(routePath(BASE_PATH, '/api/settings'), express.json(), async (req, res)
2297
2255
  ) {
2298
2256
  res.status(400).json({
2299
2257
  error: probe.runtimeCapability?.error
2300
- || 'Install a Chromium-based browser or configure a loopback external CDP endpoint',
2258
+ || 'Install Farming-managed Chromium, choose a system Chromium browser, or configure a loopback external CDP endpoint',
2301
2259
  code: 'BROWSER_EXECUTABLE_NOT_FOUND',
2302
2260
  });
2303
2261
  return;
@@ -73,6 +73,18 @@ function runtimeDependenciesLockDir(configDir) {
73
73
  return path.join(runtimeDependenciesDir(configDir), '.prepare.lock');
74
74
  }
75
75
 
76
+ function managedChromiumRootDir(configDir) {
77
+ return path.join(runtimeDependenciesDir(configDir), 'chromium');
78
+ }
79
+
80
+ function managedChromiumVersionDir(configDir, agentBrowserVersion, platformKey) {
81
+ return path.join(managedChromiumRootDir(configDir), agentBrowserVersion, platformKey);
82
+ }
83
+
84
+ function managedChromiumInstallLockDir(configDir) {
85
+ return path.join(managedChromiumRootDir(configDir), '.install.lock');
86
+ }
87
+
76
88
  function farmingAgentBootstrapFile(configDir) {
77
89
  return path.join(configDir, 'farming-agent-bootstrap.zh_cn.md');
78
90
  }
@@ -164,6 +176,9 @@ module.exports = {
164
176
  farmingNetTrustFile,
165
177
  farmingConfigDir,
166
178
  historyDir,
179
+ managedChromiumInstallLockDir,
180
+ managedChromiumRootDir,
181
+ managedChromiumVersionDir,
167
182
  runtimeDependenciesActiveFile,
168
183
  runtimeDependenciesDir,
169
184
  runtimeDependenciesLockDir,