CodeName: Replit Agent Environment (alpha)
Email faris@repl.it to get an API key, or if you're at a hackathon find a Replit member
Example
import { getEnv } from '@replit/agent-env';
async function main() {
const env = await getEnv(process.env.TEST_SECRET as string);
/** File System */
const createDirResult = await env.fs.createDir('demo');
console.log('Create dir success? ', createDirResult.ok);
const writeResult = await env.fs.writeFile('demo/hi.txt', 'hi');
console.log('Write file success? ', writeResult.ok);
const readFileResult = await env.fs.readFile('demo/hi.txt', {
encoding: 'utf8',
}); // remove encoding to get a buffer for reading binary files
console.log(
'Read file success? ',
readFileResult.ok,
' result:',
readFileResult.ok ? readFileResult.value : readFileResult.error,
);
const readDirResult = await env.fs.readDir('demo');
console.log(
'Read dir success? ',
readDirResult.ok,
' result:',
readDirResult.ok ? readDirResult.value : readDirResult.error,
);
const deleteNodeResult = await env.fs.deleteNode('demo/hi.txt');
console.log('Delete node success? ', deleteNodeResult.ok);
const copyLocalFileResult = await env.fs.copyLocalFileToRemote('./test/demofile.txt', 'copied.txt');
console.log('Copy local file success? ', copyLocalFileResult.ok);
const readCopiedFileResult = await env.fs.readFile('copied.txt', { encoding: 'utf8' });
console.log('Read local copied file success? ', readCopiedFileResult.ok ? readCopiedFileResult.value : readCopiedFileResult);
const copyLocalDirResult = await env.fs.copyLocalDirectoryToRemote('./test/demofolder', 'copied');
console.log('Copy local dir success? ', copyLocalDirResult.ok ? true : copyLocalDirResult.error);
const readLocalCopiedDirResult = await env.fs.readDir('copied');
console.log('Read copied local dir success? ', readLocalCopiedDirResult.ok ? readLocalCopiedDirResult.value : readLocalCopiedDirResult.error);
const copyRemoteFileResult = await env.fs.copyRemoteFileToLocal('./copied.txt', './test/copied.txt');
console.log('Copy remote file success? ', copyRemoteFileResult.ok);
const copyRemoteDirResult = await env.fs.copyRemoteDirectoryToLocal('copied', './test/copied');
console.log('Copy remote dir success? ', copyRemoteDirResult.ok ? true : copyRemoteDirResult);
/** Packager */
const addPackages = await env.packager.addPackages('javascript', [
{ name: 'lodash', version: '4.17.21' },
{ name: 'left-pad' },
]);
console.log('Add packages success? ', addPackages.ok);
const removePackages = await env.packager.removePackages('javascript', [
{ name: 'left-pad' },
]);
console.log('Remove packages success? ', removePackages.ok);
// This is not so self-explanatory. Basically what it does is that it crawls the files for the language
// you specify then it tries to install the packages. Usually you just want to use `env.simpleRun`
// with the guessAndInstallPackages boolean flag set to true
await env.fs.writeFile('demo/index.js', 'require("moment")');
const guessAndInstallPackages =
await env.packager.guessAndInstallPackages('javascript');
console.log(
'Guess and install packages success? ',
guessAndInstallPackages.ok,
' result:',
guessAndInstallPackages.ok
? guessAndInstallPackages.value
: guessAndInstallPackages.error,
);
/** RUN */
await env.fs.writeFile(
'add.py',
`
import numpy
print(numpy.add(1, 2))
`,
);
const runResult = await env.simpleRun({
language: 'python',
filePath: 'add.py',
guessAndInstallPackages: true, // guessing slows things down a bit
});
console.log(
'Run success? ',
runResult.ok,
' result:',
runResult.ok ? runResult.value : runResult.error,
);
/** Secrets */
const addSecretRes = await env.secrets.addSecret('MY_SECRET', 'supersecret');
console.log('Secret write success? ', addSecretRes.ok);
const getSecretsRes = await env.secrets.getSecrets();
console.log('Secrets read success? ', getSecretsRes.ok ? getSecretsRes.value : getSecretsRes.error);
/** EXEC */
const execResult = await env.simpleExec({
env: { USER: '360NoScope' },
args: ['printenv', 'USER', 'MY_SECRET'],
});
console.log(
'Exec success? ',
execResult.ok,
' result:',
execResult.ok ? execResult.value.split('\n') : execResult.error,
);
/** Make sure to close the env after you're done so that you're not hitting limits */
env.close()
}
main();