import { installScarb } from '../actions/installScarb.js';
import { compileContract } from '../actions/buildProgram.js';
import { executeProgram } from '../actions/executeProgram.js';
import { proveProgram } from '../actions/proveProgram.js';
import { verifyProgram } from '../actions/verifyProgram.js';
import {
executeProgramSchema,
proveProgramSchema,
verifyProgramSchema,
installScarbSchema,
compileContractSchema,
} from '../schema/schema.js';
import { logger, StarknetTool } from '@snakagent/core';
import { scarb } from '@snakagent/database/queries';
export const registerTools = async (SnakToolRegistry: StarknetTool[]) => {
try {
await scarb.init();
} catch (error) {
logger.error('Failed to initialize scarb db: ', error);
throw error;
}
SnakToolRegistry.push({
name: 'scarb_install',
description: 'Install the latest version of Scarb if not already installed',
plugins: 'scarb',
schema: installScarbSchema,
execute: installScarb,
});
SnakToolRegistry.push({
name: 'scarb_compile_contract',
description: `
DESCRIPTION: Compile contracts or program of an existing project using Scarb.
TRIGGER: Only call when the user explicitly asks to compile contracts or program.
PARAMETERS: Requires a project name.
SUCCESS: After successful compilation, consider this task complete.
FAILURE: After 2 failed attempts, report the error and stop retrying.
`,
plugins: 'scarb',
schema: compileContractSchema,
execute: compileContract,
});
SnakToolRegistry.push({
name: 'scarb_execute_program',
description: `
DESCRIPTION: Execute a Cairo program function of an existing project using Scarb.
TRIGGER: Only call when the user explicitly asks to execute a Cairo program function.
PARAMETERS: Requires a project name and a program name.
SUCCESS: After successful execution, consider this task complete.
FAILURE: After 2 failed attempts, report the error and stop retrying.
`,
plugins: 'scarb',
schema: executeProgramSchema,
execute: executeProgram,
});
SnakToolRegistry.push({
name: 'scarb_prove_program',
description: `
DESCRIPTION: Generate a proof for a Cairo program execution of an existing project using Scarb.
TRIGGER: Only call when the user explicitly asks to generate a proof for a Cairo program execution.
PARAMETERS: Requires a project name and a program name.
SUCCESS: After successful proof generation, consider this task complete.
FAILURE: After 2 failed attempts, report the error and stop retrying.
`,
plugins: 'scarb',
schema: proveProgramSchema,
execute: proveProgram,
});
SnakToolRegistry.push({
name: 'scarb_verify_program',
description: `
DESCRIPTION: Verify a proof for a Cairo program execution of a project using Scarb.
TRIGGER: Only call when the user explicitly asks to verify a proof for a Cairo program execution.
PARAMETERS: Requires a project name and a program name.
SUCCESS: After successful verification, consider this task complete.
FAILURE: After 2 failed attempts, report the error and stop retrying.
`,
plugins: 'scarb',
schema: verifyProgramSchema,
execute: verifyProgram,
});
};