npm package: @replit/agent-substrate
Description: [API docs](https://agent-substrate.util.repl.co/modules.html)
Latest version: 0.0.3

# CodeName: Replit Agent Execution

[API docs](https://agent-substrate.util.repl.co/modules.html)

Docs
```ts
import { getSubstrate } from '@replit/agent-substrate';

async function main() {
  const substrate = await getSubstrate(process.env.TEST_SECRET);

  /** File System */
  const createDirResult = await substrate.fs.createDir('demo');
  console.log('Create dir success? ', createDirResult.ok);

  const writeResult = await substrate.fs.writeFile('demo/hi.txt', 'hi');
  console.log('Write file success? ', writeResult.ok);

  const readFileResult = await substrate.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 substrate.fs.readDir('demo');
  console.log(
    'Read dir success? ',
    readDirResult.ok,
    ' result:',
    readDirResult.ok ? readDirResult.value : readDirResult.error,
  );

  const deleteNodeResult = await substrate.fs.deleteNode('demo/hi.txt');
  console.log('Delete node success? ', deleteNodeResult.ok);

  /** Packager */
  const addPackages = await substrate.packager.addPackages('javascript', [
    { name: 'lodash', version: '4.17.21' },
    { name: 'left-pad' },
  ]);
  console.log('Add packages success? ', addPackages.ok);

  const removePackages = await substrate.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 `substrate.simpleRun`
  // with the guessAndInstallPackages boolean flag set to true
  await substrate.fs.writeFile('demo/index.js', 'require("moment")');
  const guessAndInstallPackages =
    await substrate.packager.guessAndInstallPackages('javascript');
  console.log(
    'Guess and install packages success? ',
    guessAndInstallPackages.ok,
    ' result:',
    guessAndInstallPackages.ok
      ? guessAndInstallPackages.value
      : guessAndInstallPackages.error,
  );

  /** RUN */
  await substrate.fs.writeFile(
    'add.py',
    `
import numpy

print(numpy.add(1, 2))
`,
  );

  const runResult = await substrate.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 substrate.secrets.addSecret('MY_SECRET', 'supersecret');

  console.log('Secret write success? ', addSecretRes.ok);

  const getSecretsRes = await substrate.secrets.getSecrets();

  console.log('Secrets read success? ', getSecretsRes.ok ? getSecretsRes.value : getSecretsRes.error);

  /** EXEC */
  const execResult = await substrate.simpleExec({
    env: { USER: '360NoScope' },
    args: ['printenv', 'USER', 'MY_SECRET'],
  });
  console.log(
    'Exec success? ',
    execResult.ok,
    ' result:',
    execResult.ok ? execResult.value : execResult.error,
  );


  /** Make sure to close the substrate after you're done so that you're not hitting limits */
  substrate.close()
}

main();
```