@codestrap/larry-sdk
v0.0.1-4
Published
TypeScript SDK for interacting with the Larry-as-a-Service API. It handles generator discovery, AI-assisted schema extraction via a streaming chat conversation, and code generation.
Readme
larry-sdk
TypeScript SDK for interacting with the Larry-as-a-Service API. It handles generator discovery, AI-assisted schema extraction via a streaming chat conversation, and code generation.
Usage
The SDK requires an API key. Provide it via the constructor or the LARRY_API_KEY environment variable.
import { LarrySDK } from '@codestrap/larry-sdk';
const sdk = new LarrySDK({
apiKey: 'your-api-key', // or set LARRY_API_KEY env var
apiUrl: 'https://...', // optional, defaults to https://larry-as-a-service.vercel.app
rootDir: '/path/to/workspace', // optional, defaults to Nx workspaceRoot. It will be used to discover `package.json` of your project and adding missing dependencies required by generators
});API
getGenerators(): Promise<Generator[]>
Fetches the list of available generators from the registry.
const generators = await sdk.getGenerators();
// [{ id, description, type, package, schema, exampleSchema }, ...]generateCode(generatorId, schemaData, outputPath, onEmit)
Runs a generator against the in-memory file tree.
await sdk.generateCode(
'ReactComponentGenerator',
{ name: 'Button', ui: 'shadcn' },
'src/components/Button',
(type: string, payload: Record<string, unknown>) =>
console.log([type, payload]),
);| Parameter | Type | Description |
| ------------- | ----------------------------------------------------------- | --------------------------------------- |
| generatorId | keyof typeof generators | ID of the generator to run |
| schemaData | string \| Record<string, unknown> | Schema input for the generator |
| outputPath | string | Output path written into the file tree |
| onEmit | (type: string, payload?: Record<string, unknown>) => void | Callback for generator lifecycle events |
spawnExtractSchemaConversation(generator, onChunk?)
Opens a multi-turn chat conversation that helps a user describe what they want to generate. When the model determines it has enough information, it automatically extracts a structured schema and closes the conversation.
Returns an object with a single sendMessage(msg) method.
const convo = sdk.spawnExtractSchemaConversation(generator, (delta) => {
process.stdout.write(delta); // stream response tokens
});
const first = await convo.sendMessage('I want to generate a Button component');
// { hasFinished: false, response: '...' }
const second = await convo.sendMessage(
'It should accept a label and onClick prop',
);
// { hasFinished: false, response: '...' }
// — or —
// { hasFinished: true, response: '...', generatedSchema: { ... } }Once hasFinished is true, the generatedSchema field contains the extracted schema ready to pass to generateCode. Calling sendMessage again after the conversation finishes throws an error.
getFsTree(): FsTree
Returns the current in-memory Nx file tree. Use this to inspect or flush generated files.
const tree = sdk.getFsTree();createFsTree(root, isDryRun, ...)
Replaces the current file tree with a new FsTree instance. Accepts the same arguments as the FsTree constructor.
sdk.createFsTree('/some/other/root', false);Environment Variables
| Variable | Description |
| --------------- | --------------------------------------------------- |
| LARRY_API_KEY | API key (required if not passed to the constructor) |
| LARRY_API_URL | API base URL (optional, overrides the default) |
