AgentAPI can now save and restore conversation state across workspace restarts. The module exports env vars (AGENTAPI_STATE_FILE, AGENTAPI_SAVE_STATE, AGENTAPI_LOAD_STATE, AGENTAPI_PID_FILE) that the binary reads directly. No consumer module changes needed. New variables: enable_state_persistence (default false), state_file_path, pid_file_path. State and PID files default to $HOME/<module_dir_name>/. Requires agentapi >= v0.12.0. A shared version_at_least function in lib.sh gates the env var exports and SIGUSR1 in the shutdown script. Old binaries get a warning and graceful skip. Shutdown script now does SIGUSR1 (state save), log snapshot capture (existing, now fault-tolerant via subshell), then SIGTERM with wait. Closes coder/internal#1257 Refs coder/internal#1256 Refs #696
54 lines
1.2 KiB
JavaScript
54 lines
1.2 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
const http = require("http");
|
|
const fs = require("fs");
|
|
const args = process.argv.slice(2);
|
|
const portIdx = args.findIndex((arg) => arg === "--port") + 1;
|
|
const port = portIdx ? args[portIdx] : 3284;
|
|
|
|
if (args.includes("--version")) {
|
|
console.log("agentapi version 99.99.99");
|
|
process.exit(0);
|
|
}
|
|
|
|
console.log(`starting server on port ${port}`);
|
|
fs.writeFileSync(
|
|
"/home/coder/agentapi-mock.log",
|
|
`AGENTAPI_ALLOWED_HOSTS: ${process.env.AGENTAPI_ALLOWED_HOSTS}`,
|
|
);
|
|
|
|
// Log state persistence env vars.
|
|
for (const v of [
|
|
"AGENTAPI_STATE_FILE",
|
|
"AGENTAPI_PID_FILE",
|
|
"AGENTAPI_SAVE_STATE",
|
|
"AGENTAPI_LOAD_STATE",
|
|
]) {
|
|
if (process.env[v]) {
|
|
fs.appendFileSync(
|
|
"/home/coder/agentapi-mock.log",
|
|
`\n${v}: ${process.env[v]}`,
|
|
);
|
|
}
|
|
}
|
|
|
|
// Write PID file for shutdown script.
|
|
if (process.env.AGENTAPI_PID_FILE) {
|
|
const path = require("path");
|
|
fs.mkdirSync(path.dirname(process.env.AGENTAPI_PID_FILE), {
|
|
recursive: true,
|
|
});
|
|
fs.writeFileSync(process.env.AGENTAPI_PID_FILE, String(process.pid));
|
|
}
|
|
|
|
http
|
|
.createServer(function (_request, response) {
|
|
response.writeHead(200);
|
|
response.end(
|
|
JSON.stringify({
|
|
status: "stable",
|
|
}),
|
|
);
|
|
})
|
|
.listen(port);
|