From 2fe5b665f79f047e861ca32272126c8ce9003a5f Mon Sep 17 00:00:00 2001 From: Jesse Turner Date: Tue, 10 Mar 2026 16:16:07 -0400 Subject: [PATCH] fix: default srcDir to project root instead of non-existent src/ subdirectory The package command failed with "Required project file not found: .../src" because resolveProjectPaths defaulted srcDir to 'src' relative to the agent code directory. Agent templates place source files directly in the agent directory (e.g. app/MyAgent/main.py), not in a src/ subdirectory. Fixes #311 Co-Authored-By: Claude Opus 4.6 --- src/lib/packaging/__tests__/helpers.test.ts | 6 +++--- src/lib/packaging/helpers.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lib/packaging/__tests__/helpers.test.ts b/src/lib/packaging/__tests__/helpers.test.ts index b02e7ed0..efb8e88c 100644 --- a/src/lib/packaging/__tests__/helpers.test.ts +++ b/src/lib/packaging/__tests__/helpers.test.ts @@ -247,9 +247,9 @@ describe('resolveProjectPaths', () => { beforeAll(() => { root = mkdtempSync(join(tmpdir(), 'helpers-resolve-')); - // Create a minimal project structure with pyproject.toml + // Create a minimal project structure with pyproject.toml (source files live alongside it) writeFileSync(join(root, 'pyproject.toml'), '[project]\nname = "test"'); - mkdirSync(join(root, 'src'), { recursive: true }); + writeFileSync(join(root, 'main.py'), 'print("hello")'); }); afterAll(() => { @@ -260,7 +260,7 @@ describe('resolveProjectPaths', () => { const paths = await resolveProjectPaths({ projectRoot: root }); expect(paths.projectRoot).toBe(root); expect(paths.pyprojectPath).toBe(join(root, 'pyproject.toml')); - expect(paths.srcDir).toBe(join(root, 'src')); + expect(paths.srcDir).toBe(root); }); it('uses agent name for build directory', async () => { diff --git a/src/lib/packaging/helpers.ts b/src/lib/packaging/helpers.ts index 100a373f..b2a2fe90 100644 --- a/src/lib/packaging/helpers.ts +++ b/src/lib/packaging/helpers.ts @@ -122,7 +122,7 @@ export async function resolveProjectPaths(options: PackageOptions = {}, agentNam const pyprojectPath = candidatePyproject; const projectRoot = options.projectRoot ? resolve(options.projectRoot) : dirname(pyprojectPath); - const srcDir = resolve(projectRoot, options.srcDir ?? 'src'); + const srcDir = resolve(projectRoot, options.srcDir ?? '.'); const artifactDir = resolve(options.artifactDir ?? join(projectRoot, CONFIG_DIR)); // Simplified staging structure: //staging @@ -261,7 +261,7 @@ export function resolveProjectPathsSync(options: PackageOptions = {}, agentName? const pyprojectPath = candidatePyproject; const projectRoot = options.projectRoot ? resolve(options.projectRoot) : dirname(pyprojectPath); - const srcDir = resolve(projectRoot, options.srcDir ?? 'src'); + const srcDir = resolve(projectRoot, options.srcDir ?? '.'); const artifactDir = resolve(options.artifactDir ?? join(projectRoot, CONFIG_DIR)); // Simplified staging structure: //staging