npm package: @replit/agent-env
Description: [API docs](https://agent-substrate-util.replit.app/).
Latest version: 0.0.3

# CodeName: Replit Agent Environment (alpha)

[API docs](https://agent-substrate-util.replit.app/).

Email faris@repl.it to get an API key, or if you're at a hackathon find a Replit member

Example
```ts
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();
```