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.
- package/README.md +25 -66
- package/README.zh_cn.md +15 -66
- package/backend/acp-runtime.js +1 -15
- package/backend/acp-session-state.js +78 -88
- package/backend/agent-session-history.js +45 -12
- package/backend/codex-session-history.js +1 -1
- package/backend/codex-transcript.js +0 -202
- package/backend/config-manager.js +3 -19
- package/backend/farming-app-cli.js +1 -1
- package/backend/farming-cli.js +3 -57
- package/backend/index-html.js +21 -3
- package/backend/main-agent-skills.js +1 -18
- package/backend/server.js +6 -48
- package/backend/storage-layout.js +15 -0
- package/backend/update-service.js +55 -935
- package/config/farming.deploy.env.example +1 -1
- package/config/farming.install.env.example +1 -1
- package/dist/acp/codex-acp-1.1.4.mjs +387 -7
- package/dist/assets/App-Z1N7T0eM.js +695 -0
- package/dist/assets/{ProjectFilesSection-Cf2BEcAN.js → ProjectFilesSection-K3GHuQ4U.js} +2 -2
- package/dist/assets/code-dark-kLsQLvpf.css +1 -0
- package/dist/assets/{index-CQNaZc3l.js → index-D-zetSol.js} +2 -2
- package/dist/assets/main-DUTz-Rd2.css +1 -0
- package/dist/index.html +2 -1
- package/extensions/browser/backend/browser-resource-manager.js +27 -5
- package/extensions/browser/backend/browser-router.js +8 -0
- package/extensions/browser/backend/executable-discovery.js +26 -12
- package/extensions/browser/backend/managed-chromium-installer.js +593 -0
- package/extensions/browser/frontend/types.ts +8 -1
- package/extensions/browser/frontend/useBrowserResources.ts +8 -0
- package/index.html +1 -0
- package/package.json +1 -1
- package/backend/agent-memory-report.js +0 -583
- package/backend/bundle-update-helper.js +0 -113
- package/backend/codex-rollout-follower.js +0 -326
- package/dist/assets/App-Ex2oVVXO.js +0 -693
- package/dist/assets/code-dark-BEZTQwYZ.css +0 -1
- 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
|
|
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:
|
|
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(
|
|
1180
|
-
:
|
|
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
|
|
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,
|