@replit/agent-substrate
TypeScript icon, indicating that this package has built-in type declarations

0.0.3 • Public • Published

CodeName: Replit Agent Execution

API docs

Docs

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();

Readme

Keywords

Package Sidebar

Install

npm i @replit/agent-substrate

Weekly Downloads

5

Version

0.0.3

License

Apache-2.0

Unpacked Size

15.4 MB

Total Files

8

Last publish

Collaborators

  • krishatreplit
  • mikewesthad
  • motzyball
  • juan.replit
  • ahulbert-replit
  • james-addison-replit
  • replitdstewart
  • ryanweingast
  • harryatreplit
  • theflowingsky
  • jonesit-replit
  • szymon_k
  • cdmistman
  • jackyzha0
  • jamesaustinreplit
  • lopezhoracio
  • bradymaddenreplit
  • ryantm
  • alexisreplit
  • ink404
  • brianpool
  • tobyho
  • brenoafb
  • masad-frost
  • lincolnreplit
  • stkenned
  • replitmatt
  • cbrewster
  • ltazmin_replit
  • moudy
  • schestakov
  • lhchavez
  • slmjkdbtl
  • lunaroyster