diff --git a/packages/software-factory/package.json b/packages/software-factory/package.json index 37b27080075..128e955dc8c 100644 --- a/packages/software-factory/package.json +++ b/packages/software-factory/package.json @@ -5,7 +5,6 @@ "license": "MIT", "description": "Software Factory workspace package", "scripts": { - "boxel:pick-ticket": "NODE_NO_WARNINGS=1 ts-node --transpileOnly scripts/pick-ticket.ts", "boxel:search": "NODE_NO_WARNINGS=1 ts-node --transpileOnly scripts/boxel-search.ts", "boxel:session": "NODE_NO_WARNINGS=1 ts-node --transpileOnly scripts/boxel-session.ts", "cache:prepare": "NODE_NO_WARNINGS=1 ts-node --transpileOnly src/cli/cache-realm.ts", @@ -25,8 +24,7 @@ "lint:types": "ember-tsc --noEmit", "serve:realm": "NODE_NO_WARNINGS=1 ts-node --transpileOnly src/cli/serve-realm.ts", "serve:support": "NODE_NO_WARNINGS=1 ts-node --transpileOnly src/cli/serve-support.ts", - "smoke:realm": "NODE_NO_WARNINGS=1 ts-node --transpileOnly src/cli/smoke-realm.ts", - "smoke:test-realm": "NODE_NO_WARNINGS=1 ts-node --transpileOnly src/cli/smoke-test-realm.ts", + "smoke:test-realm": "NODE_NO_WARNINGS=1 ts-node --transpileOnly scripts/smoke-tests/smoke-test-realm.ts", "test": "NODE_NO_WARNINGS=1 ts-node --transpileOnly scripts/test.ts", "test:all": "NODE_NO_WARNINGS=1 ts-node --transpileOnly scripts/test.ts", "test:node": "NODE_NO_WARNINGS=1 ts-node --transpileOnly scripts/test.ts --node-only", diff --git a/packages/software-factory/scripts/boxel-search.ts b/packages/software-factory/scripts/boxel-search.ts index 7467cf0364e..96778ebe68d 100644 --- a/packages/software-factory/scripts/boxel-search.ts +++ b/packages/software-factory/scripts/boxel-search.ts @@ -11,7 +11,7 @@ import { searchRealm, type SearchQuery, type SearchSort, -} from './lib/boxel'; +} from '../src/boxel'; import { logger } from '../src/logger'; let log = logger('boxel-search'); diff --git a/packages/software-factory/scripts/boxel-session.ts b/packages/software-factory/scripts/boxel-session.ts index fc770ddcaac..23f285cddb9 100644 --- a/packages/software-factory/scripts/boxel-session.ts +++ b/packages/software-factory/scripts/boxel-session.ts @@ -8,7 +8,7 @@ import { matrixLogin, parseArgs, printJson, -} from './lib/boxel'; +} from '../src/boxel'; import { logger } from '../src/logger'; let log = logger('boxel-session'); diff --git a/packages/software-factory/scripts/pick-ticket.ts b/packages/software-factory/scripts/pick-ticket.ts deleted file mode 100644 index b003f6cb706..00000000000 --- a/packages/software-factory/scripts/pick-ticket.ts +++ /dev/null @@ -1,171 +0,0 @@ -// This should be first -import '../src/setup-logger'; - -import { - getAccessibleRealmTokens, - matrixLogin, - parseArgs, - printJson, - searchRealm, - type SearchResultCard, - type SearchSort, -} from './lib/boxel'; -import { logger } from '../src/logger'; - -let log = logger('pick-ticket'); - -type TicketStatus = 'backlog' | 'in_progress' | 'blocked' | 'review' | 'done'; -type TicketPriority = 'critical' | 'high' | 'medium' | 'low'; - -interface CompactTicket { - id: string; - ticketId: string | null; - summary: string | null; - status: TicketStatus | null; - priority: TicketPriority | null; - project: string | null; -} - -function cardAttribute(card: SearchResultCard, key: string): unknown { - return card.attributes?.[key]; -} - -function stringAttribute(card: SearchResultCard, key: string): string | null { - let value = cardAttribute(card, key); - return typeof value === 'string' ? value : null; -} - -function enumAttribute( - card: SearchResultCard, - key: string, - allowedValues: readonly T[], -): T | null { - let value = cardAttribute(card, key); - if (typeof value !== 'string') { - return null; - } - - return allowedValues.includes(value as T) ? (value as T) : null; -} - -function cardProjectLink(card: SearchResultCard): string | null { - let project = card.relationships?.project; - if (typeof project !== 'object' || project === null) { - return null; - } - let links = (project as { links?: unknown }).links; - if (typeof links !== 'object' || links === null) { - return null; - } - let self = (links as { self?: unknown }).self; - return typeof self === 'string' ? self : null; -} - -async function main(): Promise { - let args = parseArgs(process.argv.slice(2)); - if (typeof args.realm !== 'string') { - throw new Error( - 'Usage: npm run boxel:pick-ticket -- --realm [--module ]', - ); - } - - let realmUrl = args.realm; - let statusList = ( - typeof args.status === 'string' ? args.status : 'backlog,in_progress,review' - ) - .split(',') - .map((value) => value.trim()) - .filter(Boolean); - let moduleUrl = - typeof args.module === 'string' - ? args.module - : `${realmUrl.endsWith('/') ? realmUrl : `${realmUrl}/`}darkfactory`; - - let matrixAuth = await matrixLogin(); - let realmTokens = await getAccessibleRealmTokens(matrixAuth); - let jwt = realmTokens[realmUrl.endsWith('/') ? realmUrl : `${realmUrl}/`]; - - let query: { - filter: { - type: { module: string; name: string }; - any: Array<{ eq: { status: string } }>; - eq?: Record; - }; - sort: SearchSort[]; - } = { - filter: { - type: { - module: moduleUrl, - name: 'Ticket', - }, - any: statusList.map((status) => ({ - eq: { status }, - })), - }, - sort: [ - { - by: 'priority', - direction: 'asc', - on: { - module: moduleUrl, - name: 'Ticket', - }, - }, - { - by: 'updatedAt', - direction: 'asc', - on: { - module: moduleUrl, - name: 'Ticket', - }, - }, - ], - }; - - if (typeof args.project === 'string') { - query.filter.eq = { - ...(query.filter.eq ?? {}), - 'project.id': args.project, - }; - } - - if (typeof args.agent === 'string') { - query.filter.eq = { - ...(query.filter.eq ?? {}), - 'assignedAgent.id': args.agent, - }; - } - - let results = await searchRealm({ realmUrl, jwt, query }); - let compact: CompactTicket[] = (results.data ?? []).map((card) => ({ - id: card.id, - ticketId: stringAttribute(card, 'ticketId'), - summary: stringAttribute(card, 'summary'), - status: enumAttribute(card, 'status', [ - 'backlog', - 'in_progress', - 'blocked', - 'review', - 'done', - ]), - priority: enumAttribute(card, 'priority', [ - 'critical', - 'high', - 'medium', - 'low', - ]), - project: cardProjectLink(card), - })); - - printJson({ - count: compact.length, - tickets: compact, - }); -} - -main().catch((error: unknown) => { - let message = - error instanceof Error ? (error.stack ?? error.message) : String(error); - log.error(message); - process.exit(1); -}); diff --git a/packages/software-factory/scripts/run-realm-tests.ts b/packages/software-factory/scripts/run-realm-tests.ts index 9fdc716d4d9..26691441a27 100644 --- a/packages/software-factory/scripts/run-realm-tests.ts +++ b/packages/software-factory/scripts/run-realm-tests.ts @@ -15,8 +15,8 @@ import { import { tmpdir } from 'node:os'; import { basename, dirname, join, relative, resolve } from 'node:path'; -import { getActiveProfile, parseArgs } from './lib/boxel'; -import { ensureTrailingSlash } from './lib/realm-operations'; +import { getActiveProfile, parseArgs } from '../src/boxel'; +import { ensureTrailingSlash } from '../src/realm-operations'; type CommandOptions = { cwd?: string; diff --git a/packages/software-factory/scripts/smoke-tests/factory-agent-smoke.ts b/packages/software-factory/scripts/smoke-tests/factory-agent-smoke.ts index c381842d2e9..b583a98fb63 100644 --- a/packages/software-factory/scripts/smoke-tests/factory-agent-smoke.ts +++ b/packages/software-factory/scripts/smoke-tests/factory-agent-smoke.ts @@ -57,7 +57,7 @@ import { OpenRouterFactoryAgent, resolveFactoryModel, type AgentContext, -} from '../lib/factory-agent'; +} from '../../src/factory-agent'; let log = logger('factory-agent-smoke'); diff --git a/packages/software-factory/scripts/smoke-tests/factory-context-smoke.ts b/packages/software-factory/scripts/smoke-tests/factory-context-smoke.ts index fffa74c03f4..e572a1e9ae2 100644 --- a/packages/software-factory/scripts/smoke-tests/factory-context-smoke.ts +++ b/packages/software-factory/scripts/smoke-tests/factory-context-smoke.ts @@ -19,13 +19,13 @@ import type { KnowledgeArticle, ProjectCard, TicketCard, -} from '../lib/factory-agent'; -import { ContextBuilder } from '../lib/factory-context-builder'; +} from '../../src/factory-agent'; +import { ContextBuilder } from '../../src/factory-context-builder'; import { DefaultSkillResolver, estimateTokens, SkillLoader, -} from '../lib/factory-skill-loader'; +} from '../../src/factory-skill-loader'; // --------------------------------------------------------------------------- // Helpers diff --git a/packages/software-factory/scripts/smoke-tests/factory-loop-smoke.ts b/packages/software-factory/scripts/smoke-tests/factory-loop-smoke.ts index 942f4ad73b8..8b2142d025c 100644 --- a/packages/software-factory/scripts/smoke-tests/factory-loop-smoke.ts +++ b/packages/software-factory/scripts/smoke-tests/factory-loop-smoke.ts @@ -21,9 +21,12 @@ import type { ProjectCard, TestResult, TicketCard, -} from '../lib/factory-agent'; +} from '../../src/factory-agent'; -import type { FactoryTool, ToolCallEntry } from '../lib/factory-tool-builder'; +import type { + FactoryTool, + ToolCallEntry, +} from '../../src/factory-tool-builder'; import { runFactoryLoop, @@ -34,7 +37,7 @@ import { type FactoryLoopResult, type LoopAgent, type TestRunner, -} from '../lib/factory-loop'; +} from '../../src/factory-loop'; // --------------------------------------------------------------------------- // Helpers diff --git a/packages/software-factory/scripts/smoke-tests/factory-prompt-smoke.ts b/packages/software-factory/scripts/smoke-tests/factory-prompt-smoke.ts index e16db7520e6..455967e09bf 100644 --- a/packages/software-factory/scripts/smoke-tests/factory-prompt-smoke.ts +++ b/packages/software-factory/scripts/smoke-tests/factory-prompt-smoke.ts @@ -18,7 +18,7 @@ import '../../src/setup-logger'; import { parseArgs } from 'node:util'; import { logger } from '../../src/logger'; -import type { AgentAction, AgentContext } from '../lib/factory-agent'; +import type { AgentAction, AgentContext } from '../../src/factory-agent'; import { assembleImplementPrompt, @@ -27,7 +27,7 @@ import { assembleTestPrompt, buildOneShotMessages, FilePromptLoader, -} from '../lib/factory-prompt-loader'; +} from '../../src/factory-prompt-loader'; // --------------------------------------------------------------------------- // Sample data diff --git a/packages/software-factory/scripts/smoke-tests/factory-skill-smoke.ts b/packages/software-factory/scripts/smoke-tests/factory-skill-smoke.ts index e9238da5048..8dd2cffd4a4 100644 --- a/packages/software-factory/scripts/smoke-tests/factory-skill-smoke.ts +++ b/packages/software-factory/scripts/smoke-tests/factory-skill-smoke.ts @@ -20,8 +20,8 @@ import { SkillLoader, enforceSkillBudget, estimateTokens, -} from '../lib/factory-skill-loader'; -import type { ProjectCard, TicketCard } from '../lib/factory-agent'; +} from '../../src/factory-skill-loader'; +import type { ProjectCard, TicketCard } from '../../src/factory-agent'; const SAMPLE_TICKETS: { label: string; ticket: TicketCard }[] = [ { diff --git a/packages/software-factory/scripts/smoke-tests/factory-tools-smoke.ts b/packages/software-factory/scripts/smoke-tests/factory-tools-smoke.ts index d7c813ff67a..b882a401313 100644 --- a/packages/software-factory/scripts/smoke-tests/factory-tools-smoke.ts +++ b/packages/software-factory/scripts/smoke-tests/factory-tools-smoke.ts @@ -19,15 +19,15 @@ import { ToolExecutor, ToolNotFoundError, ToolSafetyError, -} from '../lib/factory-tool-executor'; +} from '../../src/factory-tool-executor'; import { buildFactoryTools, DONE_SIGNAL, CLARIFICATION_SIGNAL, type DoneResult, type ClarificationResult, -} from '../lib/factory-tool-builder'; -import { ToolRegistry } from '../lib/factory-tool-registry'; +} from '../../src/factory-tool-builder'; +import { ToolRegistry } from '../../src/factory-tool-registry'; // --------------------------------------------------------------------------- // Helpers diff --git a/packages/software-factory/src/cli/smoke-test-realm.ts b/packages/software-factory/scripts/smoke-tests/smoke-test-realm.ts similarity index 98% rename from packages/software-factory/src/cli/smoke-test-realm.ts rename to packages/software-factory/scripts/smoke-tests/smoke-test-realm.ts index 2dc595864b0..6b92160b2af 100644 --- a/packages/software-factory/src/cli/smoke-test-realm.ts +++ b/packages/software-factory/scripts/smoke-tests/smoke-test-realm.ts @@ -37,18 +37,14 @@ // This should be first import '../setup-logger'; -import { - getRealmServerToken, - matrixLogin, - parseArgs, -} from '../../scripts/lib/boxel'; -import { logger } from '../logger'; -import { executeTestRunFromRealm } from '../../scripts/lib/test-run-execution'; +import { getRealmServerToken, matrixLogin, parseArgs } from '../../src/boxel'; +import { logger } from '../../src/logger'; +import { executeTestRunFromRealm } from '../../src/test-run-execution'; import { createRealm, getRealmScopedAuth, writeFile, -} from '../../scripts/lib/realm-operations'; +} from '../../src/realm-operations'; // --------------------------------------------------------------------------- // Sample LLM output -- what the agent would produce in the implementation phase diff --git a/packages/software-factory/scripts/lib/boxel.ts b/packages/software-factory/src/boxel.ts similarity index 99% rename from packages/software-factory/scripts/lib/boxel.ts rename to packages/software-factory/src/boxel.ts index 02bdac1b9da..4a713813aad 100644 --- a/packages/software-factory/scripts/lib/boxel.ts +++ b/packages/software-factory/src/boxel.ts @@ -2,7 +2,7 @@ import { existsSync, readFileSync } from 'node:fs'; import { homedir } from 'node:os'; import { join } from 'node:path'; -import { formatErrorResponse } from '../../src/error-format'; +import { formatErrorResponse } from './error-format'; import { ensureTrailingSlash, SupportedMimeType } from './realm-operations'; const PROFILES_FILE = join(homedir(), '.boxel-cli', 'profiles.json'); diff --git a/packages/software-factory/src/cli/smoke-realm.ts b/packages/software-factory/src/cli/smoke-realm.ts deleted file mode 100644 index 7fce7c2682b..00000000000 --- a/packages/software-factory/src/cli/smoke-realm.ts +++ /dev/null @@ -1,45 +0,0 @@ -// This should be first -import '../setup-logger'; - -import { resolve } from 'node:path'; - -import { fetchRealmCardJson } from '../harness'; -import { readSupportContext } from '../runtime-metadata'; -import { logger } from '../logger'; - -let log = logger('smoke-realm'); - -async function main(): Promise { - let realmDir = resolve( - process.cwd(), - process.argv[2] ?? 'test-fixtures/darkfactory-adopter', - ); - let cardPath = process.argv[3] ?? 'project-demo'; - - if (!process.env.SOFTWARE_FACTORY_CONTEXT) { - let supportContext = readSupportContext(); - if (supportContext) { - process.env.SOFTWARE_FACTORY_CONTEXT = JSON.stringify(supportContext); - } - } - - let response = await fetchRealmCardJson(cardPath, { realmDir }); - log.info( - JSON.stringify( - { - realmDir, - cardPath, - status: response.status, - url: response.url, - body: JSON.parse(response.body), - }, - null, - 2, - ), - ); -} - -main().catch((error: unknown) => { - log.error(String(error)); - process.exit(1); -}); diff --git a/packages/software-factory/scripts/lib/darkfactory-schemas.ts b/packages/software-factory/src/darkfactory-schemas.ts similarity index 98% rename from packages/software-factory/scripts/lib/darkfactory-schemas.ts rename to packages/software-factory/src/darkfactory-schemas.ts index 72bc637e018..84a86ab0cb5 100644 --- a/packages/software-factory/scripts/lib/darkfactory-schemas.ts +++ b/packages/software-factory/src/darkfactory-schemas.ts @@ -7,7 +7,7 @@ * are always derived from the actual card definitions. */ -import { logger } from '../../src/logger'; +import { logger } from './logger'; import type { ResolvedCodeRef, LooseSingleCardDocument, diff --git a/packages/software-factory/scripts/lib/factory-agent-mocks.ts b/packages/software-factory/src/factory-agent-mocks.ts similarity index 100% rename from packages/software-factory/scripts/lib/factory-agent-mocks.ts rename to packages/software-factory/src/factory-agent-mocks.ts diff --git a/packages/software-factory/scripts/lib/factory-agent-tool-use.ts b/packages/software-factory/src/factory-agent-tool-use.ts similarity index 99% rename from packages/software-factory/scripts/lib/factory-agent-tool-use.ts rename to packages/software-factory/src/factory-agent-tool-use.ts index 627fcf2d9a6..51ccacc99a1 100644 --- a/packages/software-factory/scripts/lib/factory-agent-tool-use.ts +++ b/packages/software-factory/src/factory-agent-tool-use.ts @@ -12,7 +12,7 @@ import { SupportedMimeType } from '@cardstack/runtime-common/supported-mime-type const MAX_TOOL_USE_TURNS = 50; -import { createBoxelRealmFetch } from '../../src/realm-auth'; +import { createBoxelRealmFetch } from './realm-auth'; import type { AgentContext, diff --git a/packages/software-factory/scripts/lib/factory-agent-types.ts b/packages/software-factory/src/factory-agent-types.ts similarity index 100% rename from packages/software-factory/scripts/lib/factory-agent-types.ts rename to packages/software-factory/src/factory-agent-types.ts diff --git a/packages/software-factory/scripts/lib/factory-agent.ts b/packages/software-factory/src/factory-agent.ts similarity index 99% rename from packages/software-factory/scripts/lib/factory-agent.ts rename to packages/software-factory/src/factory-agent.ts index c2f24b46cf6..16e115489f0 100644 --- a/packages/software-factory/scripts/lib/factory-agent.ts +++ b/packages/software-factory/src/factory-agent.ts @@ -9,7 +9,7 @@ import { SupportedMimeType } from '@cardstack/runtime-common/supported-mime-type'; -import { createBoxelRealmFetch } from '../../src/realm-auth'; +import { createBoxelRealmFetch } from './realm-auth'; import { OPENROUTER_CHAT_URL, diff --git a/packages/software-factory/scripts/lib/factory-context-builder.ts b/packages/software-factory/src/factory-context-builder.ts similarity index 100% rename from packages/software-factory/scripts/lib/factory-context-builder.ts rename to packages/software-factory/src/factory-context-builder.ts diff --git a/packages/software-factory/src/factory-entrypoint.ts b/packages/software-factory/src/factory-entrypoint.ts index 2c3234aebfb..25e410d1975 100644 --- a/packages/software-factory/src/factory-entrypoint.ts +++ b/packages/software-factory/src/factory-entrypoint.ts @@ -11,7 +11,7 @@ import { runFactoryImplement, type ImplementConfig, type ImplementResult, -} from '../scripts/lib/factory-implement'; +} from './factory-implement'; import { bootstrapFactoryTargetRealm, resolveFactoryTargetRealm, diff --git a/packages/software-factory/scripts/lib/factory-implement.ts b/packages/software-factory/src/factory-implement.ts similarity index 99% rename from packages/software-factory/scripts/lib/factory-implement.ts rename to packages/software-factory/src/factory-implement.ts index 80ea31648ca..3ccd7e762d5 100644 --- a/packages/software-factory/scripts/lib/factory-implement.ts +++ b/packages/software-factory/src/factory-implement.ts @@ -15,7 +15,7 @@ import { resolve } from 'node:path'; -import { logger } from '../../src/logger'; +import { logger } from './logger'; import type { KnowledgeArticle, @@ -67,7 +67,7 @@ import { import { executeTestRunFromRealm } from './test-run-execution'; import { fetchCardTypeSchema } from './darkfactory-schemas'; -import type { FactoryBootstrapResult } from '../../src/factory-bootstrap'; +import type { FactoryBootstrapResult } from './factory-bootstrap'; // --------------------------------------------------------------------------- // Constants @@ -75,7 +75,7 @@ import type { FactoryBootstrapResult } from '../../src/factory-bootstrap'; let log = logger('factory-implement'); -const PACKAGE_ROOT = resolve(__dirname, '../..'); +const PACKAGE_ROOT = resolve(__dirname, '..'); // --------------------------------------------------------------------------- // Types diff --git a/packages/software-factory/scripts/lib/factory-loop.ts b/packages/software-factory/src/factory-loop.ts similarity index 100% rename from packages/software-factory/scripts/lib/factory-loop.ts rename to packages/software-factory/src/factory-loop.ts diff --git a/packages/software-factory/scripts/lib/factory-prompt-loader.ts b/packages/software-factory/src/factory-prompt-loader.ts similarity index 99% rename from packages/software-factory/scripts/lib/factory-prompt-loader.ts rename to packages/software-factory/src/factory-prompt-loader.ts index 9e8aa19ed77..7edb076522d 100644 --- a/packages/software-factory/scripts/lib/factory-prompt-loader.ts +++ b/packages/software-factory/src/factory-prompt-loader.ts @@ -15,7 +15,7 @@ import type { // Constants // --------------------------------------------------------------------------- -const PROMPTS_DIR = resolve(__dirname, '../../prompts'); +const PROMPTS_DIR = resolve(__dirname, '../prompts'); // --------------------------------------------------------------------------- // PromptLoader diff --git a/packages/software-factory/scripts/lib/factory-skill-loader.ts b/packages/software-factory/src/factory-skill-loader.ts similarity index 99% rename from packages/software-factory/scripts/lib/factory-skill-loader.ts rename to packages/software-factory/src/factory-skill-loader.ts index f316c300538..6a2e9f3289d 100644 --- a/packages/software-factory/scripts/lib/factory-skill-loader.ts +++ b/packages/software-factory/src/factory-skill-loader.ts @@ -7,7 +7,7 @@ import type { ProjectCard, ResolvedSkill, TicketCard } from './factory-agent'; // Constants // --------------------------------------------------------------------------- -const PACKAGE_ROOT = resolve(__dirname, '../..'); +const PACKAGE_ROOT = resolve(__dirname, '..'); const MONOREPO_ROOT = resolve(PACKAGE_ROOT, '../..'); const DEFAULT_SKILLS_DIR = join(PACKAGE_ROOT, '.agents', 'skills'); diff --git a/packages/software-factory/src/factory-target-realm.ts b/packages/software-factory/src/factory-target-realm.ts index fbe3553c2af..bde40dc6fe2 100644 --- a/packages/software-factory/src/factory-target-realm.ts +++ b/packages/software-factory/src/factory-target-realm.ts @@ -13,8 +13,8 @@ import { matrixLogin, type ActiveBoxelProfile, type MatrixAuth, -} from '../scripts/lib/boxel'; -import { createRealm as createRealmViaApi } from '../scripts/lib/realm-operations'; +} from './boxel'; +import { createRealm as createRealmViaApi } from './realm-operations'; import { formatErrorResponse, formatUnknownError } from './error-format'; import { FactoryEntrypointUsageError } from './factory-entrypoint-errors'; diff --git a/packages/software-factory/scripts/lib/factory-test-realm.ts b/packages/software-factory/src/factory-test-realm.ts similarity index 100% rename from packages/software-factory/scripts/lib/factory-test-realm.ts rename to packages/software-factory/src/factory-test-realm.ts diff --git a/packages/software-factory/scripts/lib/factory-tool-builder.ts b/packages/software-factory/src/factory-tool-builder.ts similarity index 99% rename from packages/software-factory/scripts/lib/factory-tool-builder.ts rename to packages/software-factory/src/factory-tool-builder.ts index d2f28697de6..a0e10975f5b 100644 --- a/packages/software-factory/scripts/lib/factory-tool-builder.ts +++ b/packages/software-factory/src/factory-tool-builder.ts @@ -7,7 +7,7 @@ * (realm protection, per-realm JWT auth, logging). */ -import { logger } from '../../src/logger'; +import { logger } from './logger'; import type { LooseSingleCardDocument, Relationship, diff --git a/packages/software-factory/scripts/lib/factory-tool-executor.ts b/packages/software-factory/src/factory-tool-executor.ts similarity index 100% rename from packages/software-factory/scripts/lib/factory-tool-executor.ts rename to packages/software-factory/src/factory-tool-executor.ts diff --git a/packages/software-factory/scripts/lib/factory-tool-registry.ts b/packages/software-factory/src/factory-tool-registry.ts similarity index 100% rename from packages/software-factory/scripts/lib/factory-tool-registry.ts rename to packages/software-factory/src/factory-tool-registry.ts diff --git a/packages/software-factory/scripts/lib/realm-operations.ts b/packages/software-factory/src/realm-operations.ts similarity index 99% rename from packages/software-factory/scripts/lib/realm-operations.ts rename to packages/software-factory/src/realm-operations.ts index 8506588b635..baf1e55c866 100644 --- a/packages/software-factory/scripts/lib/realm-operations.ts +++ b/packages/software-factory/src/realm-operations.ts @@ -8,7 +8,7 @@ import { mkdirSync, writeFileSync } from 'node:fs'; import { dirname, join } from 'node:path'; -import { logger } from '../../src/logger'; +import { logger } from './logger'; import type { LooseSingleCardDocument } from '@cardstack/runtime-common'; import { APP_BOXEL_REALMS_EVENT_TYPE } from '@cardstack/runtime-common/matrix-constants'; import { diff --git a/packages/software-factory/scripts/lib/test-run-cards.ts b/packages/software-factory/src/test-run-cards.ts similarity index 100% rename from packages/software-factory/scripts/lib/test-run-cards.ts rename to packages/software-factory/src/test-run-cards.ts diff --git a/packages/software-factory/scripts/lib/test-run-execution.ts b/packages/software-factory/src/test-run-execution.ts similarity index 99% rename from packages/software-factory/scripts/lib/test-run-execution.ts rename to packages/software-factory/src/test-run-execution.ts index cf8fa78c52e..8e29945b917 100644 --- a/packages/software-factory/scripts/lib/test-run-execution.ts +++ b/packages/software-factory/src/test-run-execution.ts @@ -2,7 +2,7 @@ import { createServer, type Server } from 'node:http'; import { readFileSync } from 'node:fs'; import { normalize, resolve } from 'node:path'; -import { logger } from '../../src/logger'; +import { logger } from './logger'; import { chromium } from '@playwright/test'; @@ -440,7 +440,7 @@ export async function executeTestRunFromRealm( try { // Locate the host app's dist directory — contains tests/index.html and assets let hostDistDir = - options.hostDistDir ?? resolve(__dirname, '../../../host/dist'); + options.hostDistDir ?? resolve(__dirname, '../../host/dist'); // Start a local server to serve both the test HTML page and the host's // dist assets. All asset references point to our server, so no external diff --git a/packages/software-factory/scripts/lib/test-run-parsing.ts b/packages/software-factory/src/test-run-parsing.ts similarity index 100% rename from packages/software-factory/scripts/lib/test-run-parsing.ts rename to packages/software-factory/src/test-run-parsing.ts diff --git a/packages/software-factory/scripts/lib/test-run-types.ts b/packages/software-factory/src/test-run-types.ts similarity index 100% rename from packages/software-factory/scripts/lib/test-run-types.ts rename to packages/software-factory/src/test-run-types.ts diff --git a/packages/software-factory/tests/factory-agent.integration.test.ts b/packages/software-factory/tests/factory-agent.integration.test.ts index 0d943107e7b..f0a02898a1a 100644 --- a/packages/software-factory/tests/factory-agent.integration.test.ts +++ b/packages/software-factory/tests/factory-agent.integration.test.ts @@ -7,7 +7,7 @@ import { OpenRouterFactoryAgent, type AgentAction, type AgentContext, -} from '../scripts/lib/factory-agent'; +} from '../src/factory-agent'; // --------------------------------------------------------------------------- // Helpers diff --git a/packages/software-factory/tests/factory-agent.test.ts b/packages/software-factory/tests/factory-agent.test.ts index 64eec32508c..ec2fad3f31b 100644 --- a/packages/software-factory/tests/factory-agent.test.ts +++ b/packages/software-factory/tests/factory-agent.test.ts @@ -15,13 +15,13 @@ import { validateAgentActions, type AgentAction, type AgentContext, -} from '../scripts/lib/factory-agent'; +} from '../src/factory-agent'; import { DONE_SIGNAL, CLARIFICATION_SIGNAL, type FactoryTool, -} from '../scripts/lib/factory-tool-builder'; +} from '../src/factory-tool-builder'; // --------------------------------------------------------------------------- // Fixtures diff --git a/packages/software-factory/tests/factory-context-builder.test.ts b/packages/software-factory/tests/factory-context-builder.test.ts index ff9db0d3991..6e427363a87 100644 --- a/packages/software-factory/tests/factory-context-builder.test.ts +++ b/packages/software-factory/tests/factory-context-builder.test.ts @@ -6,17 +6,17 @@ import type { ResolvedSkill, TestResult, TicketCard, -} from '../scripts/lib/factory-agent'; +} from '../src/factory-agent'; import { ContextBuilder, type ContextBuilderConfig, -} from '../scripts/lib/factory-context-builder'; +} from '../src/factory-context-builder'; import type { SkillLoaderInterface, SkillResolver, -} from '../scripts/lib/factory-skill-loader'; +} from '../src/factory-skill-loader'; // --------------------------------------------------------------------------- // Test doubles diff --git a/packages/software-factory/tests/factory-implement.test.ts b/packages/software-factory/tests/factory-implement.test.ts index e970e23d473..11244309f35 100644 --- a/packages/software-factory/tests/factory-implement.test.ts +++ b/packages/software-factory/tests/factory-implement.test.ts @@ -1,17 +1,14 @@ import { module, test } from 'qunit'; -import type { AgentContext } from '../scripts/lib/factory-agent'; -import type { AgentRunResult, LoopAgent } from '../scripts/lib/factory-loop'; -import type { - FactoryTool, - ToolCallEntry, -} from '../scripts/lib/factory-tool-builder'; +import type { AgentContext } from '../src/factory-agent'; +import type { AgentRunResult, LoopAgent } from '../src/factory-loop'; +import type { FactoryTool, ToolCallEntry } from '../src/factory-tool-builder'; import type { FactoryBootstrapResult } from '../src/factory-bootstrap'; import { runFactoryImplement, type ImplementConfig, -} from '../scripts/lib/factory-implement'; +} from '../src/factory-implement'; // --------------------------------------------------------------------------- // Mocks diff --git a/packages/software-factory/tests/factory-loop.test.ts b/packages/software-factory/tests/factory-loop.test.ts index 2750bbd53c0..3329db71587 100644 --- a/packages/software-factory/tests/factory-loop.test.ts +++ b/packages/software-factory/tests/factory-loop.test.ts @@ -6,12 +6,9 @@ import type { ProjectCard, TestResult, TicketCard, -} from '../scripts/lib/factory-agent'; +} from '../src/factory-agent'; -import type { - FactoryTool, - ToolCallEntry, -} from '../scripts/lib/factory-tool-builder'; +import type { FactoryTool, ToolCallEntry } from '../src/factory-tool-builder'; import { runFactoryLoop, @@ -21,7 +18,7 @@ import { type FactoryLoopConfig, type LoopAgent, type TestRunner, -} from '../scripts/lib/factory-loop'; +} from '../src/factory-loop'; // --------------------------------------------------------------------------- // Mock agent diff --git a/packages/software-factory/tests/factory-prompt-loader.test.ts b/packages/software-factory/tests/factory-prompt-loader.test.ts index 44585ee7a24..987bf527208 100644 --- a/packages/software-factory/tests/factory-prompt-loader.test.ts +++ b/packages/software-factory/tests/factory-prompt-loader.test.ts @@ -9,9 +9,9 @@ import { FilePromptLoader, interpolate, PromptTemplateNotFoundError, -} from '../scripts/lib/factory-prompt-loader'; +} from '../src/factory-prompt-loader'; -import type { AgentAction, AgentContext } from '../scripts/lib/factory-agent'; +import type { AgentAction, AgentContext } from '../src/factory-agent'; // --------------------------------------------------------------------------- // Fixtures diff --git a/packages/software-factory/tests/factory-skill-loader.test.ts b/packages/software-factory/tests/factory-skill-loader.test.ts index f46eaa03eb0..ff2c113f959 100644 --- a/packages/software-factory/tests/factory-skill-loader.test.ts +++ b/packages/software-factory/tests/factory-skill-loader.test.ts @@ -8,7 +8,7 @@ import type { ProjectCard, ResolvedSkill, TicketCard, -} from '../scripts/lib/factory-agent'; +} from '../src/factory-agent'; import { DefaultSkillResolver, SkillLoader, @@ -16,7 +16,7 @@ import { enforceSkillBudget, estimateTokens, extractTicketText, -} from '../scripts/lib/factory-skill-loader'; +} from '../src/factory-skill-loader'; // --------------------------------------------------------------------------- // Test helpers diff --git a/packages/software-factory/tests/factory-test-realm.spec.ts b/packages/software-factory/tests/factory-test-realm.spec.ts index e8bef031e64..3aa71a13138 100644 --- a/packages/software-factory/tests/factory-test-realm.spec.ts +++ b/packages/software-factory/tests/factory-test-realm.spec.ts @@ -6,12 +6,8 @@ import { createTestRun, executeTestRunFromRealm, type TestRunRealmOptions, -} from '../scripts/lib/factory-test-realm'; -import { - readFile, - waitForRealmFile, - writeFile, -} from '../scripts/lib/realm-operations'; +} from '../src/factory-test-realm'; +import { readFile, waitForRealmFile, writeFile } from '../src/realm-operations'; const fixtureRealmDir = resolve( process.cwd(), diff --git a/packages/software-factory/tests/factory-test-realm.test.ts b/packages/software-factory/tests/factory-test-realm.test.ts index 204e77713f1..632de4282a6 100644 --- a/packages/software-factory/tests/factory-test-realm.test.ts +++ b/packages/software-factory/tests/factory-test-realm.test.ts @@ -2,7 +2,7 @@ import { module, test } from 'qunit'; import { SupportedMimeType } from '@cardstack/runtime-common/supported-mime-type'; -import type { TestResult } from '../scripts/lib/factory-agent'; +import type { TestResult } from '../src/factory-agent'; import { buildTestRunCardDocument, completeTestRun, @@ -11,8 +11,8 @@ import { parseQunitResults, resolveTestRun, type TestRunAttributes, -} from '../scripts/lib/factory-test-realm'; -import { pullRealmFiles } from '../scripts/lib/realm-operations'; +} from '../src/factory-test-realm'; +import { pullRealmFiles } from '../src/realm-operations'; // --------------------------------------------------------------------------- // Shared helpers diff --git a/packages/software-factory/tests/factory-tool-builder.test.ts b/packages/software-factory/tests/factory-tool-builder.test.ts index 07e8f9494c8..c107f921c21 100644 --- a/packages/software-factory/tests/factory-tool-builder.test.ts +++ b/packages/software-factory/tests/factory-tool-builder.test.ts @@ -1,6 +1,6 @@ import { module, test } from 'qunit'; -import type { ToolResult } from '../scripts/lib/factory-agent'; +import type { ToolResult } from '../src/factory-agent'; import { buildFactoryTools, DONE_SIGNAL, @@ -9,13 +9,13 @@ import { type ToolBuilderConfig, type DoneResult, type ClarificationResult, -} from '../scripts/lib/factory-tool-builder'; -import type { ToolExecutor } from '../scripts/lib/factory-tool-executor'; -import { ToolRegistry } from '../scripts/lib/factory-tool-registry'; +} from '../src/factory-tool-builder'; +import type { ToolExecutor } from '../src/factory-tool-executor'; +import { ToolRegistry } from '../src/factory-tool-registry'; import type { ExecuteTestRunOptions, TestRunHandle, -} from '../scripts/lib/test-run-types'; +} from '../src/test-run-types'; // --------------------------------------------------------------------------- // Helpers diff --git a/packages/software-factory/tests/factory-tool-executor.integration.test.ts b/packages/software-factory/tests/factory-tool-executor.integration.test.ts index b99b7eb3de4..fd1ff10de47 100644 --- a/packages/software-factory/tests/factory-tool-executor.integration.test.ts +++ b/packages/software-factory/tests/factory-tool-executor.integration.test.ts @@ -3,8 +3,8 @@ import { module, test } from 'qunit'; import { SupportedMimeType } from '@cardstack/runtime-common/supported-mime-type'; -import { ToolExecutor } from '../scripts/lib/factory-tool-executor'; -import { ToolRegistry } from '../scripts/lib/factory-tool-registry'; +import { ToolExecutor } from '../src/factory-tool-executor'; +import { ToolRegistry } from '../src/factory-tool-registry'; // --------------------------------------------------------------------------- // Test server helpers diff --git a/packages/software-factory/tests/factory-tool-executor.spec.ts b/packages/software-factory/tests/factory-tool-executor.spec.ts index 46ff960880a..e2abe0cdb64 100644 --- a/packages/software-factory/tests/factory-tool-executor.spec.ts +++ b/packages/software-factory/tests/factory-tool-executor.spec.ts @@ -13,13 +13,10 @@ import type { LooseSingleCardDocument } from '@cardstack/runtime-common'; import { test } from './fixtures'; import { expect } from '@playwright/test'; -import { - ToolExecutor, - ToolNotFoundError, -} from '../scripts/lib/factory-tool-executor'; -import { ToolRegistry } from '../scripts/lib/factory-tool-registry'; -import { buildFactoryTools } from '../scripts/lib/factory-tool-builder'; -import { fetchCardTypeSchema } from '../scripts/lib/darkfactory-schemas'; +import { ToolExecutor, ToolNotFoundError } from '../src/factory-tool-executor'; +import { ToolRegistry } from '../src/factory-tool-registry'; +import { buildFactoryTools } from '../src/factory-tool-builder'; +import { fetchCardTypeSchema } from '../src/darkfactory-schemas'; import { baseRealmURLFor, DEFAULT_REALM_OWNER, @@ -197,7 +194,7 @@ test('unregistered tool is rejected without reaching the server', async ({ // Factory tool (card write) tests against live realm // --------------------------------------------------------------------------- -import type { FactoryTool } from '../scripts/lib/factory-tool-builder'; +import type { FactoryTool } from '../src/factory-tool-builder'; type CardWriteResult = { ok: boolean; error?: string }; type CardReadResult = { ok: boolean; document?: LooseSingleCardDocument }; diff --git a/packages/software-factory/tests/factory-tool-executor.test.ts b/packages/software-factory/tests/factory-tool-executor.test.ts index 87af5ddb5b5..c2bbb7fade9 100644 --- a/packages/software-factory/tests/factory-tool-executor.test.ts +++ b/packages/software-factory/tests/factory-tool-executor.test.ts @@ -2,7 +2,7 @@ import { module, test } from 'qunit'; import { SupportedMimeType } from '@cardstack/runtime-common/supported-mime-type'; -import type { ToolResult } from '../scripts/lib/factory-agent'; +import type { ToolResult } from '../src/factory-agent'; import { ToolExecutor, ToolNotFoundError, @@ -10,9 +10,9 @@ import { ToolTimeoutError, type ToolExecutionLogEntry, type ToolExecutorConfig, -} from '../scripts/lib/factory-tool-executor'; +} from '../src/factory-tool-executor'; import { iconURLFor } from '@cardstack/runtime-common/realm-display-defaults'; -import { ToolRegistry } from '../scripts/lib/factory-tool-registry'; +import { ToolRegistry } from '../src/factory-tool-registry'; // --------------------------------------------------------------------------- // Helpers diff --git a/packages/software-factory/tests/factory-tool-registry.test.ts b/packages/software-factory/tests/factory-tool-registry.test.ts index c80e4e418d5..29d567c677f 100644 --- a/packages/software-factory/tests/factory-tool-registry.test.ts +++ b/packages/software-factory/tests/factory-tool-registry.test.ts @@ -7,7 +7,7 @@ import { SCRIPT_TOOLS, ToolRegistry, type ToolManifest, -} from '../scripts/lib/factory-tool-registry'; +} from '../src/factory-tool-registry'; // --------------------------------------------------------------------------- // ToolRegistry construction diff --git a/packages/software-factory/tests/realm-auth.test.ts b/packages/software-factory/tests/realm-auth.test.ts index 1fc18fd0c4c..26a64e130c0 100644 --- a/packages/software-factory/tests/realm-auth.test.ts +++ b/packages/software-factory/tests/realm-auth.test.ts @@ -10,7 +10,7 @@ import { type ActiveBoxelProfile, } from '../src/realm-auth'; import { FactoryBriefError, loadFactoryBrief } from '../src/factory-brief'; -import { matrixLogin } from '../scripts/lib/boxel'; +import { matrixLogin } from '../src/boxel'; import { browserPassword, buildRealmSessionJwt, diff --git a/packages/software-factory/tests/runtime-schema.spec.ts b/packages/software-factory/tests/runtime-schema.spec.ts index 33aebcbd505..48bd8de3266 100644 --- a/packages/software-factory/tests/runtime-schema.spec.ts +++ b/packages/software-factory/tests/runtime-schema.spec.ts @@ -13,11 +13,8 @@ import { test } from './fixtures'; import { expect } from '@playwright/test'; -import { - runRealmCommand, - ensureTrailingSlash, -} from '../scripts/lib/realm-operations'; -import { fetchCardTypeSchema } from '../scripts/lib/darkfactory-schemas'; +import { runRealmCommand, ensureTrailingSlash } from '../src/realm-operations'; +import { fetchCardTypeSchema } from '../src/darkfactory-schemas'; import { sourceRealmURLFor } from '../src/harness/shared'; const GET_CARD_TYPE_SCHEMA_COMMAND =