@chrryai/waffles 2.4.42 → 2.4.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +100 -1
- package/dist/index.d.ts +100 -1
- package/dist/index.js +351 -20
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +330 -21
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -2
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api/client.ts","../src/fixtures/api/scheduledJobs.ts","../src/agent/chopstickExpert.ts","../src/index.ts"],"names":["config"],"mappings":"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","file":"index.mjs","sourcesContent":["import { type APIRequestContext, request } from \"@playwright/test\"\n\nexport class APIClient {\n private context: APIRequestContext | null = null\n private baseURL: string\n private token?: string\n\n constructor(baseURL: string) {\n this.baseURL = baseURL\n }\n\n async init() {\n this.context = await request.newContext({\n baseURL: this.baseURL,\n })\n }\n\n async authenticate(email: string, password: string) {\n if (!this.context) {\n throw new Error(\"Client not initialized. Call init() first.\")\n }\n\n const response = await this.context.post(\"/api/auth/signin/password\", {\n data: { email, password },\n })\n\n if (!response.ok()) {\n const error = await response.text()\n throw new Error(`Authentication failed: ${error}`)\n }\n\n const data = await response.json()\n this.token = data.token\n return data\n }\n\n async get(path: string, options?: { params?: Record<string, string> }) {\n if (!this.context) {\n throw new Error(\"Client not initialized. Call init() first.\")\n }\n\n return this.context.get(path, {\n headers: this.token ? { Authorization: `Bearer ${this.token}` } : {},\n params: options?.params,\n })\n }\n\n async post(path: string, data?: unknown) {\n if (!this.context) {\n throw new Error(\"Client not initialized. Call init() first.\")\n }\n\n return this.context.post(path, {\n data,\n headers: this.token\n ? {\n Authorization: `Bearer ${this.token}`,\n \"Content-Type\": \"application/json\",\n }\n : { \"Content-Type\": \"application/json\" },\n })\n }\n\n async patch(path: string, data: unknown) {\n if (!this.context) {\n throw new Error(\"Client not initialized. Call init() first.\")\n }\n\n return this.context.patch(path, {\n data,\n headers: this.token\n ? {\n Authorization: `Bearer ${this.token}`,\n \"Content-Type\": \"application/json\",\n }\n : { \"Content-Type\": \"application/json\" },\n })\n }\n\n async delete(path: string) {\n if (!this.context) {\n throw new Error(\"Client not initialized. Call init() first.\")\n }\n\n return this.context.delete(path, {\n headers: this.token ? { Authorization: `Bearer ${this.token}` } : {},\n })\n }\n\n async dispose() {\n if (this.context) {\n await this.context.dispose()\n this.context = null\n }\n }\n}\n","import { faker } from \"@faker-js/faker\"\n\n/**\n * Tribe Schedule Fixture\n * Matches tribeScheduleSchema from @chrryai/chrry/schemas/tribeScheduleSchema\n */\n\n// Alias for backward compatibility\nexport type ScheduledJob = TribeScheduleInput\n\nexport interface TribeScheduleInput {\n sessionId?: string\n appId?: string\n schedule: Array<{\n time: string\n postType: string\n model: string\n charLimit: number\n credits: number\n intervalMinutes?: number\n generateImage?: boolean\n generateVideo?: boolean\n fetchNews?: boolean\n }>\n frequency: \"once\" | \"daily\" | \"weekly\" | \"custom\"\n startDate: string // ISO date string\n endDate?: string // ISO date string\n contentTemplate?: string\n contentRules?: {\n tone?: string\n length?: string\n topics?: string[]\n hashtags?: string[]\n }\n totalCredits: number\n totalPrice: number\n timezone: string\n}\n\nexport const scheduledJobFactory = {\n build(overrides?: Partial<TribeScheduleInput>): TribeScheduleInput {\n const startDate = new Date()\n const endDate = new Date(startDate)\n endDate.setDate(endDate.getDate() + 7)\n\n return {\n // Required fields per tribeScheduleSchema\n frequency: \"daily\",\n schedule: [\n {\n time: \"09:00\",\n postType: \"post\",\n model: \"sushi\",\n charLimit: 500,\n credits: 10,\n intervalMinutes: 60,\n },\n ],\n timezone: \"Europe/Istanbul\",\n startDate: startDate.toISOString(),\n endDate: endDate.toISOString(),\n totalCredits: 10,\n totalPrice: 500, // Minimum €5 (500 cents)\n\n // Optional fields\n appId: undefined,\n contentTemplate: faker.lorem.paragraph(),\n contentRules: {\n tone: \"friendly\",\n length: \"medium\",\n topics: [\"tech\", \"ai\"],\n hashtags: [\"#test\"],\n },\n\n ...overrides,\n }\n },\n\n buildMany(\n count: number,\n overrides?: Partial<TribeScheduleInput>,\n ): TribeScheduleInput[] {\n return Array.from({ length: count }, () => this.build(overrides))\n },\n}\n","/**\n * ChopStick Expert - Payload Optimizer\n *\n * Senkron, deterministik payload optimizasyonu.\n * JSON çıktı - AI her şeyi görsün.\n */\n\n// ramen tipi - chopStick payload'i için\ntype JoinConfig = {\n memories?: { user?: number; app?: number; dna?: number; thread?: number }\n instructions?: { user?: number; app?: number; dna?: number; thread?: number }\n characterProfile?: {\n user?: number\n app?: number\n dna?: number\n thread?: number\n }\n placeholders?: { user?: number; app?: number; dna?: number; thread?: number }\n}\n\ntype Ramen = {\n id?: string\n slug?: string\n join?: JoinConfig\n depth?: number\n [key: string]: any\n}\n\n// =============================================================================\n// MODEL PRICING & CAPABILITIES\n// =============================================================================\n\nexport const modelPricing = {\n \"deepseek/deepseek-v3.2\": {\n input: 0.28,\n output: 0.4,\n tools: true,\n analyze: false,\n },\n \"deepseek/deepseek-chat\": {\n input: 0.15,\n output: 0.45,\n tools: true,\n analyze: false,\n },\n \"anthropic/claude-sonnet-4-6\": {\n input: 3.0,\n output: 15.0,\n tools: true,\n analyze: true,\n },\n \"google/gemini-3.1-pro-preview\": {\n input: 0.35,\n output: 1.05,\n tools: true,\n analyze: true,\n },\n \"deepseek/deepseek-v3.2-thinking\": {\n input: 0.28,\n output: 0.4,\n tools: true,\n analyze: false,\n },\n \"qwen/qwen3.6-plus\": { input: 0.3, output: 0.8, tools: true, analyze: true },\n \"minimax/minimax-m2.5\": {\n input: 0.3,\n output: 1.1,\n tools: true,\n analyze: false,\n },\n \"minimax/minimax-m2.7\": {\n input: 0.3,\n output: 1.2,\n tools: true,\n analyze: false,\n },\n \"x-ai/grok-4.1-fast\": { input: 0.5, output: 2.0, tools: true, analyze: true },\n \"perplexity/sonar-pro\": {\n input: 2.0,\n output: 8.0,\n tools: false,\n analyze: false,\n },\n \"openrouter/free\": { input: 0.0, output: 0.0, tools: false, analyze: false },\n \"openai/gpt-oss-120b:free\": {\n input: 0.0,\n output: 0.073,\n tools: false,\n analyze: true,\n },\n \"nvidia/nemotron-3-super-120b-a12b:free\": {\n input: 0.0,\n output: 0.0,\n tools: true,\n analyze: false,\n },\n \"gpt-4o\": { input: 2.5, output: 10.0, tools: true, analyze: true },\n \"gpt-4o-mini\": { input: 0.15, output: 0.6, tools: true, analyze: true },\n \"openai/gpt-5.4\": { input: 2.5, output: 15.0, tools: true, analyze: true },\n} as const\n\nexport type ModelId = keyof typeof modelPricing\n\nexport interface ModelInfo {\n modelId: string\n inputPrice: number\n outputPrice: number\n hasTools: boolean\n canAnalyze: boolean\n reason: string\n}\n\n// =============================================================================\n// JOIN WEIGHTS\n// =============================================================================\n\nexport interface JoinWeights {\n memories: { user: number; app: number; dna: number; thread: number }\n instructions: { user: number; app: number; dna: number; thread: number }\n characterProfile: { user: number; app: number; dna: number; thread: number }\n placeholders: { user: number; app: number; dna: number; thread: number }\n}\n\nexport interface ChopStickDecision {\n join: JoinWeights\n depth: number\n model: ModelInfo\n reasoning: string[]\n}\n\n// =============================================================================\n// STORE APPS KNOWLEDGE BASE - JSON OUTPUT\n// =============================================================================\n\nexport interface StoreAppKnowledge {\n /** App temel bilgileri */\n app: {\n id: string\n name: string\n slug: string\n description?: string\n systemPrompt?: string\n }\n /** Context configuration */\n context: {\n join: JoinWeights\n depth: number\n isMainApp: boolean\n }\n /** Ne kadar data çekilecek */\n limits: {\n memories: number\n instructions: number\n messages: number\n }\n}\n\nexport interface StoreKnowledgeBase {\n /** Tüm store apps */\n apps: StoreAppKnowledge[]\n /** Ana app (mevcut request) */\n mainApp: StoreAppKnowledge\n /** Diğer apps (context için) */\n contextApps: StoreAppKnowledge[]\n /** Toplam context boyutu tahmini */\n estimatedTokens: number\n /** Configuration metadata */\n meta: {\n totalApps: number\n reasoning: string[]\n timestamp: string\n }\n /** DNA Artifacts for context */\n artifacts?: Array<{\n id: string\n content: string\n type: string\n createdAt: string\n }>\n /** DNA Memories for context */\n memories?: Array<{\n id: string\n content: string\n type: string\n createdAt: string\n }>\n /** Current task info */\n task?: {\n id: string\n title: string\n description?: string\n status: string\n }\n /** Task messages/work history */\n messages?: {\n messages: Array<{\n id: string\n content: string\n role: string\n createdAt: string\n mood?: {\n type: string\n }\n }>\n }\n}\n\n// =============================================================================\n// CONTEXT INPUT\n// =============================================================================\n\nexport interface ChopStickContext {\n appType?:\n | \"chat\"\n | \"tribe\"\n | \"kanban\"\n | \"retro\"\n | \"swarm\"\n | \"focus\"\n | \"default\"\n messageCount?: number\n hasTimer?: boolean\n hasDNA?: boolean\n hasKanban?: boolean\n hasRetro?: boolean\n memoriesCount?: number\n instructionsCount?: number\n isBackgroundJob?: boolean\n\n // Admin/Sato mode\n isAdmin?: boolean\n isSatoMode?: boolean\n\n // Model selection\n defaultModelId?: string\n allowsModelSwap?: boolean\n needsTools?: boolean\n needsAnalysis?: boolean\n preferFree?: boolean\n creditsLeft?: number\n\n // Store apps\n storeAppIds?: string[]\n mainAppId?: string\n}\n\n// =============================================================================\n// PRESETS\n// =============================================================================\n\nexport const presets: Record<string, ChopStickDecision> = {\n minimal: {\n join: {\n memories: { user: 1, app: 1, dna: 0, thread: 1 },\n instructions: { user: 1, app: 1, dna: 0, thread: 1 },\n characterProfile: { user: 0, app: 0, dna: 0, thread: 0 },\n placeholders: { user: 1, app: 1, dna: 0, thread: 1 },\n },\n depth: 0,\n model: {\n modelId: \"nvidia/nemotron-3-super-120b-a12b:free\",\n inputPrice: 0,\n outputPrice: 0,\n hasTools: true,\n canAnalyze: false,\n reason: \"Free model, minimal context\",\n },\n reasoning: [\"Minimal preset\"],\n },\n\n balanced: {\n join: {\n memories: { user: 3, app: 2, dna: 1, thread: 3 },\n instructions: { user: 2, app: 2, dna: 1, thread: 2 },\n characterProfile: { user: 1, app: 1, dna: 0, thread: 1 },\n placeholders: { user: 2, app: 2, dna: 1, thread: 2 },\n },\n depth: 1,\n model: {\n modelId: \"deepseek/deepseek-chat\",\n inputPrice: 0.15,\n outputPrice: 0.45,\n hasTools: true,\n canAnalyze: false,\n reason: \"Balanced cost/performance\",\n },\n reasoning: [\"Balanced preset\"],\n },\n\n rich: {\n join: {\n memories: { user: 8, app: 5, dna: 3, thread: 6 },\n instructions: { user: 5, app: 4, dna: 2, thread: 4 },\n characterProfile: { user: 2, app: 2, dna: 1, thread: 2 },\n placeholders: { user: 3, app: 3, dna: 2, thread: 3 },\n },\n depth: 2,\n model: {\n modelId: \"deepseek/deepseek-v3.2\",\n inputPrice: 0.28,\n outputPrice: 0.4,\n hasTools: true,\n canAnalyze: false,\n reason: \"Rich context\",\n },\n reasoning: [\"Rich preset\"],\n },\n\n /** Admin/Sato mode - maximum user context */\n admin: {\n join: {\n memories: { user: 15, app: 5, dna: 3, thread: 8 },\n instructions: { user: 10, app: 4, dna: 2, thread: 5 },\n characterProfile: { user: 3, app: 2, dna: 1, thread: 2 },\n placeholders: { user: 5, app: 3, dna: 2, thread: 4 },\n },\n depth: 2,\n model: {\n modelId: \"anthropic/claude-sonnet-4-6\",\n inputPrice: 3.0,\n outputPrice: 15.0,\n hasTools: true,\n canAnalyze: true,\n reason: \"Admin mode: maximum context for Sato reports\",\n },\n reasoning: [\"Admin preset: Sato mode activated\"],\n },\n\n kanban: {\n join: {\n memories: { user: 4, app: 6, dna: 2, thread: 3 },\n instructions: { user: 3, app: 6, dna: 1, thread: 3 },\n characterProfile: { user: 1, app: 2, dna: 1, thread: 1 },\n placeholders: { user: 2, app: 4, dna: 1, thread: 2 },\n },\n depth: 1,\n model: {\n modelId: \"deepseek/deepseek-chat\",\n inputPrice: 0.15,\n outputPrice: 0.45,\n hasTools: true,\n canAnalyze: false,\n reason: \"Kanban needs tools\",\n },\n reasoning: [\"Kanban preset\"],\n },\n\n tribe: {\n join: {\n memories: { user: 5, app: 3, dna: 2, thread: 8 },\n instructions: { user: 4, app: 3, dna: 1, thread: 6 },\n characterProfile: { user: 2, app: 2, dna: 1, thread: 2 },\n placeholders: { user: 3, app: 3, dna: 1, thread: 4 },\n },\n depth: 2,\n model: {\n modelId: \"deepseek/deepseek-v3.2\",\n inputPrice: 0.28,\n outputPrice: 0.4,\n hasTools: true,\n canAnalyze: false,\n reason: \"Tribe needs thread context\",\n },\n reasoning: [\"Tribe preset\"],\n },\n\n retro: {\n join: {\n memories: { user: 8, app: 2, dna: 1, thread: 5 },\n instructions: { user: 6, app: 2, dna: 1, thread: 4 },\n characterProfile: { user: 3, app: 1, dna: 0, thread: 2 },\n placeholders: { user: 4, app: 2, dna: 1, thread: 3 },\n },\n depth: 1,\n model: {\n modelId: \"anthropic/claude-sonnet-4-6\",\n inputPrice: 3.0,\n outputPrice: 15.0,\n hasTools: true,\n canAnalyze: true,\n reason: \"Retro benefits from quality\",\n },\n reasoning: [\"Retro preset\"],\n },\n\n background: {\n join: {\n memories: { user: 8, app: 5, dna: 3, thread: 6 },\n instructions: { user: 5, app: 4, dna: 2, thread: 4 },\n characterProfile: { user: 2, app: 2, dna: 1, thread: 2 },\n placeholders: { user: 3, app: 3, dna: 2, thread: 3 },\n },\n depth: 2,\n model: {\n modelId: \"deepseek/deepseek-v3.2\",\n inputPrice: 0.28,\n outputPrice: 0.4,\n hasTools: true,\n canAnalyze: false,\n reason: \"Background job: more context\",\n },\n reasoning: [\"Background preset\"],\n },\n\n free: {\n join: {\n memories: { user: 2, app: 1, dna: 0, thread: 2 },\n instructions: { user: 1, app: 1, dna: 0, thread: 1 },\n characterProfile: { user: 0, app: 0, dna: 0, thread: 0 },\n placeholders: { user: 1, app: 1, dna: 0, thread: 1 },\n },\n depth: 0,\n model: {\n modelId: \"nvidia/nemotron-3-super-120b-a12b:free\",\n inputPrice: 0,\n outputPrice: 0,\n hasTools: true,\n canAnalyze: false,\n reason: \"Zero cost\",\n },\n reasoning: [\"Free preset\"],\n },\n}\n\nexport type PresetName = keyof typeof presets\n\n// =============================================================================\n// MODEL SWAP\n// =============================================================================\n\nconst sushiSwaps: Record<string, string> = {\n \"deepseek/deepseek-v3.2\": \"nvidia/nemotron-3-super-120b-a12b:free\",\n \"deepseek/deepseek-r1\": \"qwen/qwen3.6-plus\",\n \"minimax/minimax-m2.5\": \"qwen/qwen3.6-plus\",\n \"minimax/minimax-m2.7\": \"qwen/qwen3.6-plus\",\n}\n\nfunction swapModel(\n modelId: string,\n preferFree: boolean,\n): { modelId: string; swapped: boolean } {\n if (preferFree) {\n return {\n modelId: \"nvidia/nemotron-3-super-120b-a12b:free\",\n swapped: modelId !== \"nvidia/nemotron-3-super-120b-a12b:free\",\n }\n }\n const swapped = sushiSwaps[modelId]\n return swapped\n ? { modelId: swapped, swapped: true }\n : { modelId, swapped: false }\n}\n\n// =============================================================================\n// OPTIMIZE - Main Function\n// =============================================================================\n\nexport function optimizeChopStick(ctx: ChopStickContext): ChopStickDecision {\n const reasoning: string[] = []\n\n // 1. Base preset seç - default balanced\n let base: ChopStickDecision = presets.balanced!\n\n // Admin/Sato mode öncelikli\n if (ctx.isAdmin || ctx.isSatoMode) {\n base = presets.admin!\n reasoning.push(\"Admin/Sato mode: maximum user context\")\n } else if (ctx.isBackgroundJob) {\n base = presets.background!\n } else if (ctx.hasRetro) {\n base = presets.retro!\n } else if (ctx.appType === \"kanban\" || ctx.hasKanban) {\n base = presets.kanban!\n } else if (ctx.appType === \"tribe\") {\n base = presets.tribe!\n }\n\n // 2. Düşük kredi = free\n if ((ctx.creditsLeft ?? 10) < 3) {\n base = presets.free!\n reasoning.push(`Low credits: ${ctx.creditsLeft}`)\n }\n\n // 3. Derin thread\n let depth = base.depth\n if ((ctx.messageCount ?? 0) > 50) {\n depth = 2\n reasoning.push(`Deep thread: ${ctx.messageCount}`)\n }\n\n // 4. DNA boost\n const join = { ...base.join }\n if (ctx.hasDNA) {\n join.memories.dna = Math.min(5, join.memories.dna + 2)\n join.instructions.dna = Math.min(3, join.instructions.dna + 1)\n reasoning.push(\"DNA boost\")\n }\n\n // 5. Timer boost\n if (ctx.hasTimer) {\n join.memories.app = Math.min(10, join.memories.app + 1)\n reasoning.push(\"Timer boost\")\n }\n\n // 6. Model seçimi\n let modelId = ctx.defaultModelId || base.model.modelId\n\n if (ctx.needsTools && !modelPricing[modelId as ModelId]?.tools) {\n modelId = \"deepseek/deepseek-chat\"\n reasoning.push(\"Tool requirement\")\n }\n\n if (ctx.needsAnalysis && !modelPricing[modelId as ModelId]?.analyze) {\n modelId = \"anthropic/claude-sonnet-4-6\"\n reasoning.push(\"Analysis requirement\")\n }\n\n if (ctx.allowsModelSwap) {\n const swap = swapModel(\n modelId,\n ctx.preferFree || (ctx.creditsLeft ?? 10) < 5,\n )\n if (swap.swapped) {\n modelId = swap.modelId\n reasoning.push(`Sushi swap`)\n }\n }\n\n const pricing = modelPricing[modelId as ModelId]\n\n return {\n join,\n depth,\n model: {\n modelId,\n inputPrice: pricing?.input ?? 1,\n outputPrice: pricing?.output ?? 2,\n hasTools: pricing?.tools ?? true,\n canAnalyze: pricing?.analyze ?? false,\n reason: reasoning.join(\", \") || \"Default\",\n },\n reasoning: [...base.reasoning, ...reasoning],\n }\n}\n\n// =============================================================================\n// STORE KNOWLEDGE BASE BUILDER - JSON OUTPUT\n// =============================================================================\n\n/**\n * Store apps için knowledge base oluştur - JSON output\n *\n * @example\n * ```ts\n * const kb = buildStoreKnowledgeBase({\n * mainAppId: \"app-123\",\n * storeAppIds: [\"app-123\", \"app-456\", \"app-789\"],\n * appType: \"kanban\",\n * hasDNA: true,\n * })\n *\n * // Direkt JSON olarak kullan\n * return Response.json(kb)\n * ```\n */\nexport function buildStoreKnowledgeBase(ctx: {\n mainAppId: string\n storeAppIds: string[]\n appType?: ChopStickContext[\"appType\"]\n hasDNA?: boolean\n hasTimer?: boolean\n hasKanban?: boolean\n messageCount?: number\n isBackgroundJob?: boolean\n}): StoreKnowledgeBase {\n const reasoning: string[] = []\n\n // Main app için zengin context\n const mainConfig = optimizeChopStick({\n appType: ctx.appType,\n hasDNA: ctx.hasDNA,\n hasTimer: ctx.hasTimer,\n hasKanban: ctx.hasKanban,\n messageCount: ctx.messageCount,\n isBackgroundJob: ctx.isBackgroundJob,\n })\n\n // Context apps için lighter context\n const contextConfig = optimizeChopStick({\n appType: \"default\",\n isBackgroundJob: true, // lighter\n })\n\n // Build apps array\n const apps: StoreAppKnowledge[] = ctx.storeAppIds.map((id, index) => {\n const isMain = id === ctx.mainAppId\n const config = isMain ? mainConfig : contextConfig\n\n // Her app için limitler\n const limits = isMain\n ? { memories: 15, instructions: 10, messages: 10 }\n : { memories: 5, instructions: 3, messages: 3 }\n\n return {\n app: {\n id,\n name: `App-${index + 1}`, // Caller doldurur\n slug: `app-${id.slice(0, 6)}`,\n },\n context: {\n join: config.join,\n depth: config.depth,\n isMainApp: isMain,\n },\n limits,\n }\n })\n\n const mainApp = apps.find((a) => a.app.id === ctx.mainAppId) || apps[0]!\n const contextApps = apps.filter((a) => a.app.id !== ctx.mainAppId)\n\n // Token estimate (rough)\n const estimatedTokens = apps.reduce((sum, app) => {\n const memTokens = app.limits.memories * 100\n const instTokens = app.limits.instructions * 200\n const msgTokens = app.limits.messages * 150\n return sum + memTokens + instTokens + msgTokens\n }, 0)\n\n if (ctx.hasDNA) reasoning.push(\"DNA context included\")\n if (ctx.hasTimer) reasoning.push(\"Timer context included\")\n if (ctx.hasKanban) reasoning.push(\"Kanban context included\")\n\n return {\n apps,\n mainApp,\n contextApps,\n estimatedTokens,\n meta: {\n totalApps: apps.length,\n reasoning,\n timestamp: new Date().toISOString(),\n },\n }\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\n/** Preset al */\nexport function getPreset(name: PresetName): ChopStickDecision {\n return presets[name] ?? presets.balanced!\n}\n\n/** Sadece join weights */\nexport function getJoinWeights(ctx: ChopStickContext): JoinWeights {\n return optimizeChopStick(ctx).join\n}\n\n/** Ramen payload builder */\nexport function buildRamenPayload(\n base: Omit<Ramen, \"join\" | \"depth\">,\n ctx: ChopStickContext,\n): Ramen & {\n _meta: { modelId: string; estimatedCost: number; reasoning: string[] }\n} {\n const opt = optimizeChopStick(ctx)\n const estimatedCost = 2 * (opt.model.inputPrice + opt.model.outputPrice) // ~2k tokens\n\n return {\n ...base,\n join: opt.join,\n depth: opt.depth,\n _meta: {\n modelId: opt.model.modelId,\n estimatedCost: Math.round(estimatedCost * 1000) / 1000,\n reasoning: opt.reasoning,\n },\n }\n}\n","import type { Page } from \"@playwright/test\"\nimport * as dotenv from \"dotenv\"\n\ndotenv.config()\n\n// API Test Utilitiels\nexport { APIClient } from \"./api/client\"\nexport type { ScheduledJob } from \"./fixtures/api/scheduledJobs\"\nexport { scheduledJobFactory } from \"./fixtures/api/scheduledJobs\"\n\nexport type modelName = \"chatGPT\" | \"claude\" | \"gemini\" | \"sushi\" | \"perplexity\"\n\nexport const TEST_GUEST_FINGERPRINTS = (\n process.env.TEST_GUEST_FINGERPRINTS?.split(\",\") || []\n).filter((fp) => fp)\nexport const TEST_MEMBER_FINGERPRINTS = (\n process.env.TEST_MEMBER_FINGERPRINTS?.split(\",\") || []\n).filter((fp) => fp)\nexport const TEST_MEMBER_EMAILS = (\n process.env.TEST_MEMBER_EMAILS?.split(\",\") || []\n).filter((email) => email)\n\nexport const VEX_TEST_EMAIL = process.env.VEX_TEST_EMAIL!\n\nexport const VEX_TEST_PASSWORD = process.env.VEX_TEST_PASSWORD!\nexport const VEX_TEST_FINGERPRINT = TEST_MEMBER_FINGERPRINTS?.[0] || \"\"\nexport const VEX_TEST_EMAIL_2 = process.env.VEX_TEST_EMAIL_2!\nexport const VEX_TEST_PASSWORD_2 = process.env.VEX_TEST_PASSWORD_2!\nexport const VEX_TEST_FINGERPRINT_2 = TEST_MEMBER_FINGERPRINTS?.[1] || \"\"\nexport const VEX_TEST_EMAIL_3 = process.env.VEX_TEST_EMAIL_3!\nexport const VEX_TEST_PASSWORD_3 = process.env.VEX_TEST_PASSWORD_3!\nexport const VEX_TEST_PASSWORD_4 = process.env.VEX_TEST_PASSWORD_4!\n\nexport const VEX_TEST_EMAIL_4 = process.env.VEX_TEST_EMAIL_4!\n\nexport const VEX_TEST_FINGERPRINT_3 = TEST_MEMBER_FINGERPRINTS?.[2] || \"\"\nexport const VEX_TEST_FINGERPRINT_4 = TEST_MEMBER_FINGERPRINTS?.[3] || \"\"\n\nexport const VEX_LIVE_FINGERPRINTS = (\n process.env.VEX_LIVE_FINGERPRINTS?.split(\",\") || []\n).filter((fp) => fp)\n\nexport const VEX_LIVE_FINGERPRINT = VEX_LIVE_FINGERPRINTS[0] || \"\"\nexport const VEX_LIVE_FINGERPRINT_2 = VEX_LIVE_FINGERPRINTS[1] || \"\"\nexport const VEX_LIVE_FINGERPRINT_3 = VEX_LIVE_FINGERPRINTS[2] || \"\"\n\nexport const TEST_URL =\n process.env.TEST_URL! || process.env.PLAYWRIGHT_BASE_URL!\n\nexport const wait = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms))\nexport const isCI = process.env.VITE_CI || process.env.CI\n\nconst getURL = (\n {\n isLive = false,\n isMember = false,\n path = \"\",\n fingerprint = \"\",\n app = \"\",\n }: {\n isLive?: boolean\n isMember?: boolean\n path?: string\n fingerprint?: string\n app?: string\n } = {\n isLive: false,\n isMember: false,\n path: \"\",\n fingerprint: \"\",\n app: \"\",\n },\n) => {\n const base = TEST_URL\n const fp = isMember\n ? isLive\n ? VEX_LIVE_FINGERPRINT_2\n : fingerprint || TEST_MEMBER_FINGERPRINTS[0] || \"\"\n : isLive\n ? VEX_LIVE_FINGERPRINT\n : fingerprint || TEST_GUEST_FINGERPRINTS[0] || \"\"\n\n const appParam = app ? `&app=${app}` : \"\"\n const url = `${base}${path}?fp=${fp}${appParam}`\n\n return url\n}\n\nexport const getModelCredits = (model: string) =>\n model === \"chatGPT\" || model === \"gemini\"\n ? 4\n : model === \"claude\" || model === \"perplexity\"\n ? 3\n : 2\n\nexport const storeApps = [\n \"vex\",\n \"chrry\",\n \"atlas\",\n \"vault\",\n \"claude\",\n \"search\",\n \"sushi\",\n \"zarathustra\",\n \"popcorn\",\n]\n\nconst simulateInputPaste = async (page: Page, text: string) => {\n await page.evaluate((content) => {\n const textarea = document.querySelector(\n 'textarea[data-testid=\"chat-textarea\"]',\n ) as HTMLTextAreaElement\n if (!textarea) return\n\n // Create a basic event\n const pasteEvent = new Event(\"paste\", {\n bubbles: true,\n cancelable: true,\n })\n\n // Add clipboardData getter\n Object.defineProperty(pasteEvent, \"clipboardData\", {\n value: {\n getData: () => content,\n types: [\"text/plain\"],\n files: [],\n items: [\n {\n kind: \"string\",\n type: \"text/plain\",\n getAsString: (callback: (text: string) => void) =>\n callback(content),\n },\n ],\n },\n writable: false,\n })\n\n // Dispatch the event\n textarea.dispatchEvent(pasteEvent)\n\n // Set the value directly after the paste event\n textarea.value = content\n\n // Trigger input event to simulate actual typing\n const inputEvent = new Event(\"input\", { bubbles: true })\n textarea.dispatchEvent(inputEvent)\n }, text)\n}\n\nconst simulatePaste = async (page: Page, text: string) => {\n // Use Playwright's built-in clipboard API\n await page.evaluate(async (content) => {\n // Write to clipboard\n await navigator.clipboard.writeText(content)\n\n // Find the paste button and click it\n const pasteButton = document.querySelector(\n '[data-testid*=\"artifacts-paste-button\"]',\n ) as HTMLButtonElement\n if (pasteButton) {\n pasteButton.click()\n }\n }, text)\n}\n\nfunction capitalizeFirstLetter(val: string) {\n return String(val).charAt(0).toUpperCase() + String(val).slice(1)\n}\n\nconst logs = new Map<string, number>() // msg → timestamp\nexport const log = ({ page }: { page: Page }) => {\n page.on(\"console\", (msg) => {\n const now = Date.now()\n const lastSeen = logs.get(msg.text())\n\n // Only skip if seen within last 5 seconds\n if (lastSeen && now - lastSeen < 5000) return\n\n msg.type() !== \"warning\" &&\n !msg.text().includes(\"token\") &&\n !msg.text().includes(\"fp\") &&\n console.log(`[browser][${msg.type()}] ${msg.text()}`)\n logs.set(msg.text(), now)\n })\n}\n\n// 🤖 ChopStick Expert - Payload & Model Optimizer\nexport {\n buildRamenPayload,\n buildStoreKnowledgeBase,\n type ChopStickContext,\n type ChopStickDecision,\n getJoinWeights,\n getPreset,\n type JoinWeights,\n type ModelInfo,\n modelPricing,\n optimizeChopStick,\n type PresetName,\n presets,\n type StoreAppKnowledge,\n type StoreKnowledgeBase,\n} from \"./agent/chopstickExpert\"\n\nexport { capitalizeFirstLetter, getURL, simulateInputPaste, simulatePaste }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/api/client.ts","../src/fixtures/api/scheduledJobs.ts","../src/agent/branchContext.ts","../src/agent/chopstickExpert.ts","../src/agent/goldenRatio.ts","../src/index.ts"],"names":["config"],"mappings":"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","file":"index.mjs","sourcesContent":["import { type APIRequestContext, request } from \"@playwright/test\"\n\nexport class APIClient {\n private context: APIRequestContext | null = null\n private baseURL: string\n private token?: string\n\n constructor(baseURL: string) {\n this.baseURL = baseURL\n }\n\n async init() {\n this.context = await request.newContext({\n baseURL: this.baseURL,\n })\n }\n\n async authenticate(email: string, password: string) {\n if (!this.context) {\n throw new Error(\"Client not initialized. Call init() first.\")\n }\n\n const response = await this.context.post(\"/api/auth/signin/password\", {\n data: { email, password },\n })\n\n if (!response.ok()) {\n const error = await response.text()\n throw new Error(`Authentication failed: ${error}`)\n }\n\n const data = await response.json()\n this.token = data.token\n return data\n }\n\n async get(path: string, options?: { params?: Record<string, string> }) {\n if (!this.context) {\n throw new Error(\"Client not initialized. Call init() first.\")\n }\n\n return this.context.get(path, {\n headers: this.token ? { Authorization: `Bearer ${this.token}` } : {},\n params: options?.params,\n })\n }\n\n async post(path: string, data?: unknown) {\n if (!this.context) {\n throw new Error(\"Client not initialized. Call init() first.\")\n }\n\n return this.context.post(path, {\n data,\n headers: this.token\n ? {\n Authorization: `Bearer ${this.token}`,\n \"Content-Type\": \"application/json\",\n }\n : { \"Content-Type\": \"application/json\" },\n })\n }\n\n async patch(path: string, data: unknown) {\n if (!this.context) {\n throw new Error(\"Client not initialized. Call init() first.\")\n }\n\n return this.context.patch(path, {\n data,\n headers: this.token\n ? {\n Authorization: `Bearer ${this.token}`,\n \"Content-Type\": \"application/json\",\n }\n : { \"Content-Type\": \"application/json\" },\n })\n }\n\n async delete(path: string) {\n if (!this.context) {\n throw new Error(\"Client not initialized. Call init() first.\")\n }\n\n return this.context.delete(path, {\n headers: this.token ? { Authorization: `Bearer ${this.token}` } : {},\n })\n }\n\n async dispose() {\n if (this.context) {\n await this.context.dispose()\n this.context = null\n }\n }\n}\n","import { faker } from \"@faker-js/faker\"\n\n/**\n * Tribe Schedule Fixture\n * Matches tribeScheduleSchema from @chrryai/chrry/schemas/tribeScheduleSchema\n */\n\n// Alias for backward compatibility\nexport type ScheduledJob = TribeScheduleInput\n\nexport interface TribeScheduleInput {\n sessionId?: string\n appId?: string\n schedule: Array<{\n time: string\n postType: string\n model: string\n charLimit: number\n credits: number\n intervalMinutes?: number\n generateImage?: boolean\n generateVideo?: boolean\n fetchNews?: boolean\n }>\n frequency: \"once\" | \"daily\" | \"weekly\" | \"custom\"\n startDate: string // ISO date string\n endDate?: string // ISO date string\n contentTemplate?: string\n contentRules?: {\n tone?: string\n length?: string\n topics?: string[]\n hashtags?: string[]\n }\n totalCredits: number\n totalPrice: number\n timezone: string\n}\n\nexport const scheduledJobFactory = {\n build(overrides?: Partial<TribeScheduleInput>): TribeScheduleInput {\n const startDate = new Date()\n const endDate = new Date(startDate)\n endDate.setDate(endDate.getDate() + 7)\n\n return {\n // Required fields per tribeScheduleSchema\n frequency: \"daily\",\n schedule: [\n {\n time: \"09:00\",\n postType: \"post\",\n model: \"sushi\",\n charLimit: 500,\n credits: 10,\n intervalMinutes: 60,\n },\n ],\n timezone: \"Europe/Istanbul\",\n startDate: startDate.toISOString(),\n endDate: endDate.toISOString(),\n totalCredits: 10,\n totalPrice: 500, // Minimum €5 (500 cents)\n\n // Optional fields\n appId: undefined,\n contentTemplate: faker.lorem.paragraph(),\n contentRules: {\n tone: \"friendly\",\n length: \"medium\",\n topics: [\"tech\", \"ai\"],\n hashtags: [\"#test\"],\n },\n\n ...overrides,\n }\n },\n\n buildMany(\n count: number,\n overrides?: Partial<TribeScheduleInput>,\n ): TribeScheduleInput[] {\n return Array.from({ length: count }, () => this.build(overrides))\n },\n}\n","/**\n * Branch-Based AI Agent Context System\n *\n * Every git branch becomes an isolated agent workspace.\n * Branch switch = agent context switch (spatial Z-axis navigation).\n */\n\nimport { execSync } from \"node:child_process\"\nimport { randomUUID } from \"node:crypto\"\nimport { Effect } from \"effect\"\n\nexport interface BranchAgentWorkspace {\n id: string\n namespace: string\n branchName: string\n fullBranchName: string\n agentId: string\n systemPrompt?: string\n instructions: any[]\n memories: any[]\n characterProfile?: any\n evolutionScore: number\n lastCommitSha?: string\n metadata: Record<string, any>\n createdOn: string\n updatedOn: string\n}\n\nexport interface BranchContext {\n currentBranch: string\n namespace: string\n branchName: string\n workspace?: BranchAgentWorkspace\n previousBranch?: string\n}\n\nconst BRANCH_STORAGE_KEY = \"chrry-branch-agents\"\n\nfunction getStorage(): Record<string, BranchAgentWorkspace> {\n if (typeof globalThis === \"undefined\") return {}\n try {\n const raw = (globalThis as any)[BRANCH_STORAGE_KEY]\n if (raw) return JSON.parse(raw)\n } catch {}\n return {}\n}\n\nfunction setStorage(data: Record<string, BranchAgentWorkspace>) {\n if (typeof globalThis !== \"undefined\") {\n ;(globalThis as any)[BRANCH_STORAGE_KEY] = JSON.stringify(data)\n }\n}\n\nfunction fileStoragePath(): string | undefined {\n try {\n const cwd = process.cwd()\n return `${cwd}/.chrry/branch-agents.json`\n } catch {\n return undefined\n }\n}\n\nfunction loadFileStorage(): Record<string, BranchAgentWorkspace> {\n const path = fileStoragePath()\n if (!path) return {}\n try {\n const fs = require(\"node:fs\")\n if (fs.existsSync(path)) {\n return JSON.parse(fs.readFileSync(path, \"utf-8\"))\n }\n } catch {}\n return {}\n}\n\nfunction saveFileStorage(data: Record<string, BranchAgentWorkspace>) {\n const path = fileStoragePath()\n if (!path) return\n try {\n const fs = require(\"node:fs\")\n const dir = path.replace(\"/branch-agents.json\", \"\")\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true })\n }\n fs.writeFileSync(path, JSON.stringify(data, null, 2))\n } catch {}\n}\n\nfunction getAllWorkspaces(): Record<string, BranchAgentWorkspace> {\n const mem = getStorage()\n const file = loadFileStorage()\n return { ...file, ...mem }\n}\n\nfunction setAllWorkspaces(data: Record<string, BranchAgentWorkspace>) {\n setStorage(data)\n saveFileStorage(data)\n}\n\nexport function getCurrentBranch(): string | undefined {\n // 1. Environment override (CI, hooks)\n const envBranch =\n process.env.CHRRY_BRANCH ||\n process.env.GIT_BRANCH ||\n process.env.GITHUB_HEAD_REF ||\n process.env.CF_PAGES_BRANCH\n if (envBranch) return envBranch\n\n // 2. Git command\n try {\n const branch = execSync(\"git branch --show-current\", {\n encoding: \"utf-8\",\n stdio: [\"pipe\", \"pipe\", \"ignore\"],\n }).trim()\n if (branch) return branch\n } catch {}\n\n // 3. Fallback for detached HEAD\n try {\n const desc = execSync(\"git describe --all --contains HEAD\", {\n encoding: \"utf-8\",\n stdio: [\"pipe\", \"pipe\", \"ignore\"],\n }).trim()\n if (desc) return desc.replace(/^heads\\//, \"\")\n } catch {}\n\n return undefined\n}\n\nexport function parseBranchName(fullBranch: string): {\n namespace: string\n branchName: string\n} {\n const parts = fullBranch.split(\"/\")\n if (parts.length >= 2) {\n return {\n namespace: parts.slice(0, -1).join(\"/\"),\n branchName: parts[parts.length - 1]!,\n }\n }\n return {\n namespace: \"default\",\n branchName: fullBranch,\n }\n}\n\nexport function generateAgentId(namespace: string, branchName: string): string {\n return `agent-${namespace}-${branchName}-${randomUUID().slice(0, 8)}`\n}\n\nexport function createBranchWorkspace(\n fullBranchName: string,\n overrides?: Partial<BranchAgentWorkspace>,\n): BranchAgentWorkspace {\n const { namespace, branchName } = parseBranchName(fullBranchName)\n const now = new Date().toISOString()\n return {\n id: randomUUID(),\n namespace,\n branchName,\n fullBranchName,\n agentId: overrides?.agentId || generateAgentId(namespace, branchName),\n systemPrompt:\n overrides?.systemPrompt || defaultSystemPrompt(namespace, branchName),\n instructions: overrides?.instructions || [],\n memories: overrides?.memories || [],\n characterProfile: overrides?.characterProfile,\n evolutionScore: overrides?.evolutionScore ?? 0,\n lastCommitSha: overrides?.lastCommitSha,\n metadata: overrides?.metadata || {\n createdBy: \"branch-agent-system\",\n version: \"1.0\",\n },\n createdOn: overrides?.createdOn || now,\n updatedOn: now,\n }\n}\n\nfunction defaultSystemPrompt(namespace: string, branchName: string): string {\n return `You are the AI agent for the branch \"${namespace}/${branchName}\".\nYour knowledge, memories, and behavior are isolated to this branch.\nWhen switching branches, save your current context and load the new one.\nCollaborate with other branch agents via @namespace/branch mentions.`\n}\n\nexport function loadBranchWorkspace(\n fullBranchName: string,\n): BranchAgentWorkspace | undefined {\n const workspaces = getAllWorkspaces()\n return workspaces[fullBranchName]\n}\n\nexport function saveBranchWorkspace(\n workspace: BranchAgentWorkspace,\n): BranchAgentWorkspace {\n const workspaces = getAllWorkspaces()\n workspace.updatedOn = new Date().toISOString()\n workspaces[workspace.fullBranchName] = workspace\n setAllWorkspaces(workspaces)\n return workspace\n}\n\nexport function getOrCreateBranchWorkspace(\n fullBranchName: string,\n): BranchAgentWorkspace {\n const existing = loadBranchWorkspace(fullBranchName)\n if (existing) return existing\n const created = createBranchWorkspace(fullBranchName)\n return saveBranchWorkspace(created)\n}\n\nexport function switchBranchContext(\n newBranch: string,\n previousBranch?: string,\n): BranchContext {\n const { namespace, branchName } = parseBranchName(newBranch)\n\n // Save previous if exists\n if (previousBranch) {\n const prevWorkspace = loadBranchWorkspace(previousBranch)\n if (prevWorkspace) {\n saveBranchWorkspace(prevWorkspace)\n }\n }\n\n // Load or create new workspace\n const workspace = getOrCreateBranchWorkspace(newBranch)\n\n return {\n currentBranch: newBranch,\n namespace,\n branchName,\n workspace,\n previousBranch,\n }\n}\n\nexport function autoDetectAndSwitch(\n previousBranch?: string,\n): BranchContext | undefined {\n const current = getCurrentBranch()\n if (!current) return undefined\n if (current === previousBranch) {\n return {\n currentBranch: current,\n ...parseBranchName(current),\n workspace: loadBranchWorkspace(current),\n previousBranch,\n }\n }\n return switchBranchContext(current, previousBranch)\n}\n\nexport function listBranchWorkspaces(): BranchAgentWorkspace[] {\n return Object.values(getAllWorkspaces())\n}\n\nexport function deleteBranchWorkspace(fullBranchName: string): boolean {\n const workspaces = getAllWorkspaces()\n if (!workspaces[fullBranchName]) return false\n delete workspaces[fullBranchName]\n setAllWorkspaces(workspaces)\n return true\n}\n\nexport function updateBranchMetadata(\n fullBranchName: string,\n metadata: Record<string, any>,\n): BranchAgentWorkspace | undefined {\n const workspace = loadBranchWorkspace(fullBranchName)\n if (!workspace) return undefined\n workspace.metadata = { ...workspace.metadata, ...metadata }\n return saveBranchWorkspace(workspace)\n}\n\nexport function recordMutation(\n fullBranchName: string,\n mutation: { type: string; description: string; success?: boolean },\n): BranchAgentWorkspace | undefined {\n const workspace = loadBranchWorkspace(fullBranchName)\n if (!workspace) return undefined\n\n const mutations = (workspace.metadata.mutations || []) as any[]\n mutations.push({\n ...mutation,\n timestamp: new Date().toISOString(),\n })\n\n // Update evolution score with simple EWMA\n const successCount = mutations.filter((m) => m.success).length\n workspace.evolutionScore =\n mutations.length > 0 ? successCount / mutations.length : 0\n\n workspace.metadata.mutations = mutations.slice(-100) // keep last 100\n return saveBranchWorkspace(workspace)\n}\n\n// Effect.js wrappers for robust error tracking\nexport function getCurrentBranchSafe() {\n return Effect.sync(() => getCurrentBranch()).pipe(\n Effect.catchAll((e) => Effect.succeed(undefined)),\n )\n}\n\nexport function switchBranchContextSafe(\n newBranch: string,\n previousBranch?: string,\n) {\n return Effect.sync(() => switchBranchContext(newBranch, previousBranch)).pipe(\n Effect.catchAll((e) => Effect.fail(String(e))),\n )\n}\n\nexport function autoDetectAndSwitchSafe(previousBranch?: string) {\n return Effect.sync(() => autoDetectAndSwitch(previousBranch)).pipe(\n Effect.catchAll((e) => Effect.fail(String(e))),\n )\n}\n","/**\n * ChopStick Expert - Payload Optimizer\n *\n * Senkron, deterministik payload optimizasyonu.\n * JSON çıktı - AI her şeyi görsün.\n */\n\n// ramen tipi - chopStick payload'i için\ntype JoinConfig = {\n memories?: { user?: number; app?: number; dna?: number; thread?: number }\n instructions?: { user?: number; app?: number; dna?: number; thread?: number }\n characterProfile?: {\n user?: number\n app?: number\n dna?: number\n thread?: number\n }\n placeholders?: { user?: number; app?: number; dna?: number; thread?: number }\n}\n\ntype Ramen = {\n id?: string\n slug?: string\n join?: JoinConfig\n depth?: number\n [key: string]: any\n}\n\n// =============================================================================\n// MODEL PRICING & CAPABILITIES\n// =============================================================================\n\nexport const modelPricing = {\n \"deepseek/deepseek-v3.2\": {\n input: 0.28,\n output: 0.4,\n tools: true,\n analyze: false,\n },\n \"deepseek/deepseek-chat\": {\n input: 0.15,\n output: 0.45,\n tools: true,\n analyze: false,\n },\n \"anthropic/claude-sonnet-4-6\": {\n input: 3.0,\n output: 15.0,\n tools: true,\n analyze: true,\n },\n \"google/gemini-3.1-pro-preview\": {\n input: 0.35,\n output: 1.05,\n tools: true,\n analyze: true,\n },\n \"deepseek/deepseek-v3.2-thinking\": {\n input: 0.28,\n output: 0.4,\n tools: true,\n analyze: false,\n },\n \"qwen/qwen3.6-plus\": { input: 0.3, output: 0.8, tools: true, analyze: true },\n \"minimax/minimax-m2.5\": {\n input: 0.3,\n output: 1.1,\n tools: true,\n analyze: false,\n },\n \"minimax/minimax-m2.7\": {\n input: 0.3,\n output: 1.2,\n tools: true,\n analyze: false,\n },\n \"x-ai/grok-4.1-fast\": { input: 0.5, output: 2.0, tools: true, analyze: true },\n \"perplexity/sonar-pro\": {\n input: 2.0,\n output: 8.0,\n tools: false,\n analyze: false,\n },\n \"openrouter/free\": { input: 0.0, output: 0.0, tools: false, analyze: false },\n \"openai/gpt-oss-120b:free\": {\n input: 0.0,\n output: 0.073,\n tools: false,\n analyze: true,\n },\n \"nvidia/nemotron-3-super-120b-a12b:free\": {\n input: 0.0,\n output: 0.0,\n tools: true,\n analyze: false,\n },\n \"gpt-4o\": { input: 2.5, output: 10.0, tools: true, analyze: true },\n \"gpt-4o-mini\": { input: 0.15, output: 0.6, tools: true, analyze: true },\n \"openai/gpt-5.4\": { input: 2.5, output: 15.0, tools: true, analyze: true },\n} as const\n\nexport type ModelId = keyof typeof modelPricing\n\nexport interface ModelInfo {\n modelId: string\n inputPrice: number\n outputPrice: number\n hasTools: boolean\n canAnalyze: boolean\n reason: string\n}\n\n// =============================================================================\n// JOIN WEIGHTS\n// =============================================================================\n\nexport interface JoinWeights {\n memories: { user: number; app: number; dna: number; thread: number }\n instructions: { user: number; app: number; dna: number; thread: number }\n characterProfile: { user: number; app: number; dna: number; thread: number }\n placeholders: { user: number; app: number; dna: number; thread: number }\n}\n\nexport interface ChopStickDecision {\n join: JoinWeights\n depth: number\n model: ModelInfo\n reasoning: string[]\n}\n\n// =============================================================================\n// STORE APPS KNOWLEDGE BASE - JSON OUTPUT\n// =============================================================================\n\nexport interface StoreAppKnowledge {\n /** App temel bilgileri */\n app: {\n id: string\n name: string\n slug: string\n description?: string\n systemPrompt?: string\n }\n /** Context configuration */\n context: {\n join: JoinWeights\n depth: number\n isMainApp: boolean\n }\n /** Ne kadar data çekilecek */\n limits: {\n memories: number\n instructions: number\n messages: number\n }\n}\n\nexport interface StoreKnowledgeBase {\n /** Tüm store apps */\n apps: StoreAppKnowledge[]\n /** Ana app (mevcut request) */\n mainApp: StoreAppKnowledge\n /** Diğer apps (context için) */\n contextApps: StoreAppKnowledge[]\n /** Toplam context boyutu tahmini */\n estimatedTokens: number\n /** Configuration metadata */\n meta: {\n totalApps: number\n reasoning: string[]\n timestamp: string\n }\n /** DNA Artifacts for context */\n artifacts?: Array<{\n id: string\n content: string\n type: string\n createdAt: string\n }>\n /** DNA Memories for context */\n memories?: Array<{\n id: string\n content: string\n type: string\n createdAt: string\n }>\n /** Current task info */\n task?: {\n id: string\n title: string\n description?: string\n status: string\n }\n /** Task messages/work history */\n messages?: {\n messages: Array<{\n id: string\n content: string\n role: string\n createdAt: string\n mood?: {\n type: string\n }\n }>\n }\n}\n\n// =============================================================================\n// CONTEXT INPUT\n// =============================================================================\n\nexport interface ChopStickContext {\n appType?:\n | \"chat\"\n | \"tribe\"\n | \"kanban\"\n | \"retro\"\n | \"swarm\"\n | \"focus\"\n | \"default\"\n messageCount?: number\n hasTimer?: boolean\n hasDNA?: boolean\n hasKanban?: boolean\n hasRetro?: boolean\n memoriesCount?: number\n instructionsCount?: number\n isBackgroundJob?: boolean\n\n // Admin/Sato mode\n isAdmin?: boolean\n isSatoMode?: boolean\n\n // Model selection\n defaultModelId?: string\n allowsModelSwap?: boolean\n needsTools?: boolean\n needsAnalysis?: boolean\n preferFree?: boolean\n creditsLeft?: number\n\n // Store apps\n storeAppIds?: string[]\n mainAppId?: string\n}\n\n// =============================================================================\n// PRESETS\n// =============================================================================\n\nexport const presets: Record<string, ChopStickDecision> = {\n minimal: {\n join: {\n memories: { user: 1, app: 1, dna: 0, thread: 1 },\n instructions: { user: 1, app: 1, dna: 0, thread: 1 },\n characterProfile: { user: 0, app: 0, dna: 0, thread: 0 },\n placeholders: { user: 1, app: 1, dna: 0, thread: 1 },\n },\n depth: 0,\n model: {\n modelId: \"nvidia/nemotron-3-super-120b-a12b:free\",\n inputPrice: 0,\n outputPrice: 0,\n hasTools: true,\n canAnalyze: false,\n reason: \"Free model, minimal context\",\n },\n reasoning: [\"Minimal preset\"],\n },\n\n balanced: {\n join: {\n memories: { user: 3, app: 2, dna: 1, thread: 3 },\n instructions: { user: 2, app: 2, dna: 1, thread: 2 },\n characterProfile: { user: 1, app: 1, dna: 0, thread: 1 },\n placeholders: { user: 2, app: 2, dna: 1, thread: 2 },\n },\n depth: 1,\n model: {\n modelId: \"deepseek/deepseek-chat\",\n inputPrice: 0.15,\n outputPrice: 0.45,\n hasTools: true,\n canAnalyze: false,\n reason: \"Balanced cost/performance\",\n },\n reasoning: [\"Balanced preset\"],\n },\n\n rich: {\n join: {\n memories: { user: 8, app: 5, dna: 3, thread: 6 },\n instructions: { user: 5, app: 4, dna: 2, thread: 4 },\n characterProfile: { user: 2, app: 2, dna: 1, thread: 2 },\n placeholders: { user: 3, app: 3, dna: 2, thread: 3 },\n },\n depth: 2,\n model: {\n modelId: \"deepseek/deepseek-v3.2\",\n inputPrice: 0.28,\n outputPrice: 0.4,\n hasTools: true,\n canAnalyze: false,\n reason: \"Rich context\",\n },\n reasoning: [\"Rich preset\"],\n },\n\n /** Admin/Sato mode - maximum user context */\n admin: {\n join: {\n memories: { user: 15, app: 5, dna: 3, thread: 8 },\n instructions: { user: 10, app: 4, dna: 2, thread: 5 },\n characterProfile: { user: 3, app: 2, dna: 1, thread: 2 },\n placeholders: { user: 5, app: 3, dna: 2, thread: 4 },\n },\n depth: 2,\n model: {\n modelId: \"anthropic/claude-sonnet-4-6\",\n inputPrice: 3.0,\n outputPrice: 15.0,\n hasTools: true,\n canAnalyze: true,\n reason: \"Admin mode: maximum context for Sato reports\",\n },\n reasoning: [\"Admin preset: Sato mode activated\"],\n },\n\n kanban: {\n join: {\n memories: { user: 4, app: 6, dna: 2, thread: 3 },\n instructions: { user: 3, app: 6, dna: 1, thread: 3 },\n characterProfile: { user: 1, app: 2, dna: 1, thread: 1 },\n placeholders: { user: 2, app: 4, dna: 1, thread: 2 },\n },\n depth: 1,\n model: {\n modelId: \"deepseek/deepseek-chat\",\n inputPrice: 0.15,\n outputPrice: 0.45,\n hasTools: true,\n canAnalyze: false,\n reason: \"Kanban needs tools\",\n },\n reasoning: [\"Kanban preset\"],\n },\n\n tribe: {\n join: {\n memories: { user: 5, app: 3, dna: 2, thread: 8 },\n instructions: { user: 4, app: 3, dna: 1, thread: 6 },\n characterProfile: { user: 2, app: 2, dna: 1, thread: 2 },\n placeholders: { user: 3, app: 3, dna: 1, thread: 4 },\n },\n depth: 2,\n model: {\n modelId: \"deepseek/deepseek-v3.2\",\n inputPrice: 0.28,\n outputPrice: 0.4,\n hasTools: true,\n canAnalyze: false,\n reason: \"Tribe needs thread context\",\n },\n reasoning: [\"Tribe preset\"],\n },\n\n retro: {\n join: {\n memories: { user: 8, app: 2, dna: 1, thread: 5 },\n instructions: { user: 6, app: 2, dna: 1, thread: 4 },\n characterProfile: { user: 3, app: 1, dna: 0, thread: 2 },\n placeholders: { user: 4, app: 2, dna: 1, thread: 3 },\n },\n depth: 1,\n model: {\n modelId: \"anthropic/claude-sonnet-4-6\",\n inputPrice: 3.0,\n outputPrice: 15.0,\n hasTools: true,\n canAnalyze: true,\n reason: \"Retro benefits from quality\",\n },\n reasoning: [\"Retro preset\"],\n },\n\n background: {\n join: {\n memories: { user: 8, app: 5, dna: 3, thread: 6 },\n instructions: { user: 5, app: 4, dna: 2, thread: 4 },\n characterProfile: { user: 2, app: 2, dna: 1, thread: 2 },\n placeholders: { user: 3, app: 3, dna: 2, thread: 3 },\n },\n depth: 2,\n model: {\n modelId: \"deepseek/deepseek-v3.2\",\n inputPrice: 0.28,\n outputPrice: 0.4,\n hasTools: true,\n canAnalyze: false,\n reason: \"Background job: more context\",\n },\n reasoning: [\"Background preset\"],\n },\n\n free: {\n join: {\n memories: { user: 2, app: 1, dna: 0, thread: 2 },\n instructions: { user: 1, app: 1, dna: 0, thread: 1 },\n characterProfile: { user: 0, app: 0, dna: 0, thread: 0 },\n placeholders: { user: 1, app: 1, dna: 0, thread: 1 },\n },\n depth: 0,\n model: {\n modelId: \"nvidia/nemotron-3-super-120b-a12b:free\",\n inputPrice: 0,\n outputPrice: 0,\n hasTools: true,\n canAnalyze: false,\n reason: \"Zero cost\",\n },\n reasoning: [\"Free preset\"],\n },\n}\n\nexport type PresetName = keyof typeof presets\n\n// =============================================================================\n// MODEL SWAP\n// =============================================================================\n\nconst sushiSwaps: Record<string, string> = {\n \"deepseek/deepseek-v3.2\": \"nvidia/nemotron-3-super-120b-a12b:free\",\n \"deepseek/deepseek-r1\": \"qwen/qwen3.6-plus\",\n \"minimax/minimax-m2.5\": \"qwen/qwen3.6-plus\",\n \"minimax/minimax-m2.7\": \"qwen/qwen3.6-plus\",\n}\n\nfunction swapModel(\n modelId: string,\n preferFree: boolean,\n): { modelId: string; swapped: boolean } {\n return { modelId, swapped: false }\n // if (preferFree) {\n // return {\n // modelId: \"nvidia/nemotron-3-super-120b-a12b:free\",\n // swapped: modelId !== \"nvidia/nemotron-3-super-120b-a12b:free\",\n // }\n // }\n // const swapped = sushiSwaps[modelId]\n // return swapped\n // ? { modelId: swapped, swapped: true }\n // : { modelId, swapped: false }\n}\n\n// =============================================================================\n// OPTIMIZE - Main Function\n// =============================================================================\n\nexport function optimizeChopStick(ctx: ChopStickContext): ChopStickDecision {\n const reasoning: string[] = []\n\n // 1. Base preset seç - default balanced\n let base: ChopStickDecision = presets.balanced!\n\n // Admin/Sato mode öncelikli\n if (ctx.isAdmin || ctx.isSatoMode) {\n base = presets.admin!\n reasoning.push(\"Admin/Sato mode: maximum user context\")\n } else if (ctx.isBackgroundJob) {\n base = presets.background!\n } else if (ctx.hasRetro) {\n base = presets.retro!\n } else if (ctx.appType === \"kanban\" || ctx.hasKanban) {\n base = presets.kanban!\n } else if (ctx.appType === \"tribe\") {\n base = presets.tribe!\n }\n\n // 2. Düşük kredi = free\n if ((ctx.creditsLeft ?? 10) < 3) {\n base = presets.free!\n reasoning.push(`Low credits: ${ctx.creditsLeft}`)\n }\n\n // 3. Derin thread\n let depth = base.depth\n if ((ctx.messageCount ?? 0) > 50) {\n depth = 2\n reasoning.push(`Deep thread: ${ctx.messageCount}`)\n }\n\n // 4. DNA boost\n const join = { ...base.join }\n if (ctx.hasDNA) {\n join.memories.dna = Math.min(5, join.memories.dna + 2)\n join.instructions.dna = Math.min(3, join.instructions.dna + 1)\n reasoning.push(\"DNA boost\")\n }\n\n // 5. Timer boost\n if (ctx.hasTimer) {\n join.memories.app = Math.min(10, join.memories.app + 1)\n reasoning.push(\"Timer boost\")\n }\n\n // 6. Model seçimi\n let modelId = ctx.defaultModelId || base.model.modelId\n\n if (ctx.needsTools && !modelPricing[modelId as ModelId]?.tools) {\n modelId = \"deepseek/deepseek-chat\"\n reasoning.push(\"Tool requirement\")\n }\n\n if (ctx.needsAnalysis && !modelPricing[modelId as ModelId]?.analyze) {\n modelId = \"anthropic/claude-sonnet-4-6\"\n reasoning.push(\"Analysis requirement\")\n }\n\n if (ctx.allowsModelSwap) {\n const swap = swapModel(\n modelId,\n ctx.preferFree || (ctx.creditsLeft ?? 10) < 5,\n )\n if (swap.swapped) {\n modelId = swap.modelId\n reasoning.push(`Sushi swap`)\n }\n }\n\n const pricing = modelPricing[modelId as ModelId]\n\n return {\n join,\n depth,\n model: {\n modelId,\n inputPrice: pricing?.input ?? 1,\n outputPrice: pricing?.output ?? 2,\n hasTools: pricing?.tools ?? true,\n canAnalyze: pricing?.analyze ?? false,\n reason: reasoning.join(\", \") || \"Default\",\n },\n reasoning: [...base.reasoning, ...reasoning],\n }\n}\n\n// =============================================================================\n// STORE KNOWLEDGE BASE BUILDER - JSON OUTPUT\n// =============================================================================\n\n/**\n * Store apps için knowledge base oluştur - JSON output\n *\n * @example\n * ```ts\n * const kb = buildStoreKnowledgeBase({\n * mainAppId: \"app-123\",\n * storeAppIds: [\"app-123\", \"app-456\", \"app-789\"],\n * appType: \"kanban\",\n * hasDNA: true,\n * })\n *\n * // Direkt JSON olarak kullan\n * return Response.json(kb)\n * ```\n */\nexport function buildStoreKnowledgeBase(ctx: {\n mainAppId: string\n storeAppIds: string[]\n appType?: ChopStickContext[\"appType\"]\n hasDNA?: boolean\n hasTimer?: boolean\n hasKanban?: boolean\n messageCount?: number\n isBackgroundJob?: boolean\n}): StoreKnowledgeBase {\n const reasoning: string[] = []\n\n // Main app için zengin context\n const mainConfig = optimizeChopStick({\n appType: ctx.appType,\n hasDNA: ctx.hasDNA,\n hasTimer: ctx.hasTimer,\n hasKanban: ctx.hasKanban,\n messageCount: ctx.messageCount,\n isBackgroundJob: ctx.isBackgroundJob,\n })\n\n // Context apps için lighter context\n const contextConfig = optimizeChopStick({\n appType: \"default\",\n isBackgroundJob: true, // lighter\n })\n\n // Build apps array\n const apps: StoreAppKnowledge[] = ctx.storeAppIds.map((id, index) => {\n const isMain = id === ctx.mainAppId\n const config = isMain ? mainConfig : contextConfig\n\n // Her app için limitler\n const limits = isMain\n ? { memories: 15, instructions: 10, messages: 10 }\n : { memories: 5, instructions: 3, messages: 3 }\n\n return {\n app: {\n id,\n name: `App-${index + 1}`, // Caller doldurur\n slug: `app-${id.slice(0, 6)}`,\n },\n context: {\n join: config.join,\n depth: config.depth,\n isMainApp: isMain,\n },\n limits,\n }\n })\n\n const mainApp = apps.find((a) => a.app.id === ctx.mainAppId) || apps[0]!\n const contextApps = apps.filter((a) => a.app.id !== ctx.mainAppId)\n\n // Token estimate (rough)\n const estimatedTokens = apps.reduce((sum, app) => {\n const memTokens = app.limits.memories * 100\n const instTokens = app.limits.instructions * 200\n const msgTokens = app.limits.messages * 150\n return sum + memTokens + instTokens + msgTokens\n }, 0)\n\n if (ctx.hasDNA) reasoning.push(\"DNA context included\")\n if (ctx.hasTimer) reasoning.push(\"Timer context included\")\n if (ctx.hasKanban) reasoning.push(\"Kanban context included\")\n\n return {\n apps,\n mainApp,\n contextApps,\n estimatedTokens,\n meta: {\n totalApps: apps.length,\n reasoning,\n timestamp: new Date().toISOString(),\n },\n }\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\n/** Preset al */\nexport function getPreset(name: PresetName): ChopStickDecision {\n return presets[name] ?? presets.balanced!\n}\n\n/** Sadece join weights */\nexport function getJoinWeights(ctx: ChopStickContext): JoinWeights {\n return optimizeChopStick(ctx).join\n}\n\n/** Ramen payload builder */\nexport function buildRamenPayload(\n base: Omit<Ramen, \"join\" | \"depth\">,\n ctx: ChopStickContext,\n): Ramen & {\n _meta: { modelId: string; estimatedCost: number; reasoning: string[] }\n} {\n const opt = optimizeChopStick(ctx)\n const estimatedCost = 2 * (opt.model.inputPrice + opt.model.outputPrice) // ~2k tokens\n\n return {\n ...base,\n join: opt.join,\n depth: opt.depth,\n _meta: {\n modelId: opt.model.modelId,\n estimatedCost: Math.round(estimatedCost * 1000) / 1000,\n reasoning: opt.reasoning,\n },\n }\n}\n","/**\n * Golden Ratio Adaptive Trigger System (φ-Engine)\n *\n * Progressive feature unlock mechanism based on Fibonacci thresholds.\n * AI capabilities awaken dynamically as users create threads and accumulate messages.\n */\n\nexport const FIBONACCI = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]\n\nexport type GoldenFeature =\n | \"memory\"\n | \"kanban\"\n | \"characterProfile\"\n | \"instructions\"\n | \"placeholders\"\n | \"vectorEmbed\"\n\nexport interface GoldenTrigger {\n feature: GoldenFeature\n homeApp: \"hippo\" | \"focus\" | \"sushi\" | \"grape\"\n threadThreshold: number\n messageThreshold: number\n}\n\nexport interface GoldenTriggerConfig {\n threadThreshold: number\n messageThreshold: number\n enabled: boolean\n}\n\nexport type GoldenRatioConfig = Partial<\n Record<GoldenFeature, GoldenTriggerConfig>\n>\n\nexport const DEFAULT_TRIGGERS: GoldenTrigger[] = [\n {\n feature: \"memory\",\n homeApp: \"hippo\",\n threadThreshold: 3,\n messageThreshold: 2,\n },\n {\n feature: \"kanban\",\n homeApp: \"focus\",\n threadThreshold: 5,\n messageThreshold: 3,\n },\n {\n feature: \"characterProfile\",\n homeApp: \"hippo\",\n threadThreshold: 5,\n messageThreshold: 5,\n },\n {\n feature: \"placeholders\",\n homeApp: \"hippo\",\n threadThreshold: 8,\n messageThreshold: 5,\n },\n {\n feature: \"instructions\",\n homeApp: \"sushi\",\n threadThreshold: 8,\n messageThreshold: 8,\n },\n {\n feature: \"vectorEmbed\",\n homeApp: \"grape\",\n threadThreshold: 13,\n messageThreshold: 8,\n },\n]\n\nexport function getDefaultTriggers(): GoldenTrigger[] {\n return DEFAULT_TRIGGERS.map((t) => ({ ...t }))\n}\n\nexport function getUserGoldenRatioConfig(\n userConfig?: GoldenRatioConfig | null,\n): Record<GoldenFeature, GoldenTriggerConfig> {\n const defaults = Object.fromEntries(\n DEFAULT_TRIGGERS.map((t) => [\n t.feature,\n {\n threadThreshold: t.threadThreshold,\n messageThreshold: t.messageThreshold,\n enabled: true,\n },\n ]),\n ) as Record<GoldenFeature, GoldenTriggerConfig>\n\n if (!userConfig) return defaults\n\n for (const key of Object.keys(userConfig) as GoldenFeature[]) {\n const cfg = userConfig[key]\n if (!cfg) continue\n defaults[key] = {\n threadThreshold: cfg.threadThreshold ?? defaults[key].threadThreshold,\n messageThreshold: cfg.messageThreshold ?? defaults[key].messageThreshold,\n enabled: cfg.enabled ?? true,\n }\n }\n\n return defaults\n}\n\nexport interface GoldenRatioEvaluation {\n feature: GoldenFeature\n homeApp: GoldenTrigger[\"homeApp\"]\n triggered: boolean\n alreadyTriggered: boolean\n threadThreshold: number\n messageThreshold: number\n userThreadCount: number\n threadMessageCount: number\n}\n\nexport function evaluateGoldenRatio(\n userThreadCount: number,\n threadMessageCount: number,\n lastTriggeredFeatures: GoldenFeature[],\n userConfig?: GoldenRatioConfig | null,\n): GoldenRatioEvaluation[] {\n const config = getUserGoldenRatioConfig(userConfig)\n const triggeredSet = new Set(lastTriggeredFeatures)\n\n return DEFAULT_TRIGGERS.map((trigger) => {\n const cfg = config[trigger.feature]\n const isTriggered =\n cfg.enabled &&\n userThreadCount >= cfg.threadThreshold &&\n threadMessageCount >= cfg.messageThreshold\n\n return {\n feature: trigger.feature,\n homeApp: trigger.homeApp,\n triggered: isTriggered,\n alreadyTriggered: triggeredSet.has(trigger.feature),\n threadThreshold: cfg.threadThreshold,\n messageThreshold: cfg.messageThreshold,\n userThreadCount,\n threadMessageCount,\n }\n })\n}\n\nexport function getNewlyTriggeredFeatures(\n userThreadCount: number,\n threadMessageCount: number,\n lastTriggeredFeatures: GoldenFeature[],\n userConfig?: GoldenRatioConfig | null,\n): GoldenRatioEvaluation[] {\n return evaluateGoldenRatio(\n userThreadCount,\n threadMessageCount,\n lastTriggeredFeatures,\n userConfig,\n ).filter((e) => e.triggered && !e.alreadyTriggered)\n}\n\nexport function getNextFibonacciThreshold(value: number): number {\n const next = FIBONACCI.find((f) => f > value)\n return next ?? FIBONACCI[FIBONACCI.length - 1]!\n}\n\nexport function formatFibonacciPreview(\n userThreadCount: number,\n threadMessageCount: number,\n userConfig?: GoldenRatioConfig | null,\n): {\n feature: GoldenFeature\n homeApp: string\n progressThread: number\n progressMessage: number\n ready: boolean\n nextThresholdThread: number\n nextThresholdMessage: number\n}[] {\n const config = getUserGoldenRatioConfig(userConfig)\n\n return DEFAULT_TRIGGERS.map((trigger) => {\n const cfg = config[trigger.feature]\n const ready =\n cfg.enabled &&\n userThreadCount >= cfg.threadThreshold &&\n threadMessageCount >= cfg.messageThreshold\n\n return {\n feature: trigger.feature,\n homeApp: trigger.homeApp,\n progressThread: Math.min(1, userThreadCount / cfg.threadThreshold),\n progressMessage: Math.min(1, threadMessageCount / cfg.messageThreshold),\n ready,\n nextThresholdThread: cfg.threadThreshold,\n nextThresholdMessage: cfg.messageThreshold,\n }\n })\n}\n\n/**\n * Maps a triggered feature to the ChopStick join weight key\n * so that generateAIContent can dynamically boost context.\n */\nexport function featureToJoinBoost(feature: GoldenFeature):\n | {\n key: \"memories\" | \"instructions\" | \"placeholders\" | \"characterProfile\"\n boost: number\n }\n | undefined {\n switch (feature) {\n case \"memory\":\n return { key: \"memories\", boost: 3 }\n case \"instructions\":\n return { key: \"instructions\", boost: 3 }\n case \"placeholders\":\n return { key: \"placeholders\", boost: 3 }\n case \"characterProfile\":\n return { key: \"characterProfile\", boost: 2 }\n default:\n return undefined\n }\n}\n","import type { Page } from \"@playwright/test\"\nimport * as dotenv from \"dotenv\"\n\ndotenv.config()\n\n// API Test Utilitiels\nexport { APIClient } from \"./api/client\"\nexport type { ScheduledJob } from \"./fixtures/api/scheduledJobs\"\nexport { scheduledJobFactory } from \"./fixtures/api/scheduledJobs\"\n\nexport type modelName = \"chatGPT\" | \"claude\" | \"gemini\" | \"sushi\" | \"perplexity\"\n\nexport const TEST_GUEST_FINGERPRINTS = (\n process.env.TEST_GUEST_FINGERPRINTS?.split(\",\") || []\n).filter((fp) => fp)\nexport const TEST_MEMBER_FINGERPRINTS = (\n process.env.TEST_MEMBER_FINGERPRINTS?.split(\",\") || []\n).filter((fp) => fp)\nexport const TEST_MEMBER_EMAILS = (\n process.env.TEST_MEMBER_EMAILS?.split(\",\") || []\n).filter((email) => email)\n\nexport const VEX_TEST_EMAIL = process.env.VEX_TEST_EMAIL!\n\nexport const VEX_TEST_PASSWORD = process.env.VEX_TEST_PASSWORD!\nexport const VEX_TEST_FINGERPRINT = TEST_MEMBER_FINGERPRINTS?.[0] || \"\"\nexport const VEX_TEST_EMAIL_2 = process.env.VEX_TEST_EMAIL_2!\nexport const VEX_TEST_PASSWORD_2 = process.env.VEX_TEST_PASSWORD_2!\nexport const VEX_TEST_FINGERPRINT_2 = TEST_MEMBER_FINGERPRINTS?.[1] || \"\"\nexport const VEX_TEST_EMAIL_3 = process.env.VEX_TEST_EMAIL_3!\nexport const VEX_TEST_PASSWORD_3 = process.env.VEX_TEST_PASSWORD_3!\nexport const VEX_TEST_PASSWORD_4 = process.env.VEX_TEST_PASSWORD_4!\n\nexport const VEX_TEST_EMAIL_4 = process.env.VEX_TEST_EMAIL_4!\n\nexport const VEX_TEST_FINGERPRINT_3 = TEST_MEMBER_FINGERPRINTS?.[2] || \"\"\nexport const VEX_TEST_FINGERPRINT_4 = TEST_MEMBER_FINGERPRINTS?.[3] || \"\"\n\nexport const VEX_LIVE_FINGERPRINTS = (\n process.env.VEX_LIVE_FINGERPRINTS?.split(\",\") || []\n).filter((fp) => fp)\n\nexport const VEX_LIVE_FINGERPRINT = VEX_LIVE_FINGERPRINTS[0] || \"\"\nexport const VEX_LIVE_FINGERPRINT_2 = VEX_LIVE_FINGERPRINTS[1] || \"\"\nexport const VEX_LIVE_FINGERPRINT_3 = VEX_LIVE_FINGERPRINTS[2] || \"\"\n\nexport const TEST_URL =\n process.env.TEST_URL! || process.env.PLAYWRIGHT_BASE_URL!\n\nexport const wait = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms))\nexport const isCI = process.env.VITE_CI || process.env.CI\n\nconst getURL = (\n {\n isLive = false,\n isMember = false,\n path = \"\",\n fingerprint = \"\",\n app = \"\",\n }: {\n isLive?: boolean\n isMember?: boolean\n path?: string\n fingerprint?: string\n app?: string\n } = {\n isLive: false,\n isMember: false,\n path: \"\",\n fingerprint: \"\",\n app: \"\",\n },\n) => {\n const base = TEST_URL\n const fp = isMember\n ? isLive\n ? VEX_LIVE_FINGERPRINT_2\n : fingerprint || TEST_MEMBER_FINGERPRINTS[0] || \"\"\n : isLive\n ? VEX_LIVE_FINGERPRINT\n : fingerprint || TEST_GUEST_FINGERPRINTS[0] || \"\"\n\n const appParam = app ? `&app=${app}` : \"\"\n const url = `${base}${path}?fp=${fp}${appParam}`\n\n return url\n}\n\nexport const getModelCredits = (model: string) =>\n model === \"chatGPT\" || model === \"gemini\"\n ? 4\n : model === \"claude\" || model === \"perplexity\"\n ? 3\n : 2\n\nexport const storeApps = [\n \"vex\",\n \"chrry\",\n \"atlas\",\n \"vault\",\n \"claude\",\n \"search\",\n \"sushi\",\n \"zarathustra\",\n \"popcorn\",\n]\n\nconst simulateInputPaste = async (page: Page, text: string) => {\n await page.evaluate((content) => {\n const textarea = document.querySelector(\n 'textarea[data-testid=\"chat-textarea\"]',\n ) as HTMLTextAreaElement\n if (!textarea) return\n\n // Create a basic event\n const pasteEvent = new Event(\"paste\", {\n bubbles: true,\n cancelable: true,\n })\n\n // Add clipboardData getter\n Object.defineProperty(pasteEvent, \"clipboardData\", {\n value: {\n getData: () => content,\n types: [\"text/plain\"],\n files: [],\n items: [\n {\n kind: \"string\",\n type: \"text/plain\",\n getAsString: (callback: (text: string) => void) =>\n callback(content),\n },\n ],\n },\n writable: false,\n })\n\n // Dispatch the event\n textarea.dispatchEvent(pasteEvent)\n\n // Set the value directly after the paste event\n textarea.value = content\n\n // Trigger input event to simulate actual typing\n const inputEvent = new Event(\"input\", { bubbles: true })\n textarea.dispatchEvent(inputEvent)\n }, text)\n}\n\nconst simulatePaste = async (page: Page, text: string) => {\n // Use Playwright's built-in clipboard API\n await page.evaluate(async (content) => {\n // Write to clipboard\n await navigator.clipboard.writeText(content)\n\n // Find the paste button and click it\n const pasteButton = document.querySelector(\n '[data-testid*=\"artifacts-paste-button\"]',\n ) as HTMLButtonElement\n if (pasteButton) {\n pasteButton.click()\n }\n }, text)\n}\n\nfunction capitalizeFirstLetter(val: string) {\n return String(val).charAt(0).toUpperCase() + String(val).slice(1)\n}\n\nconst logs = new Map<string, number>() // msg → timestamp\nexport const log = ({ page }: { page: Page }) => {\n page.on(\"console\", (msg) => {\n const now = Date.now()\n const lastSeen = logs.get(msg.text())\n\n // Only skip if seen within last 5 seconds\n if (lastSeen && now - lastSeen < 5000) return\n\n msg.type() !== \"warning\" &&\n !msg.text().includes(\"token\") &&\n !msg.text().includes(\"fp\") &&\n console.log(`[browser][${msg.type()}] ${msg.text()}`)\n logs.set(msg.text(), now)\n })\n}\n\n// 🌿 Branch-Based AI Agents\nexport {\n autoDetectAndSwitch,\n autoDetectAndSwitchSafe,\n type BranchAgentWorkspace,\n type BranchContext,\n createBranchWorkspace,\n deleteBranchWorkspace,\n generateAgentId,\n getCurrentBranch,\n getCurrentBranchSafe,\n getOrCreateBranchWorkspace,\n loadBranchWorkspace,\n parseBranchName,\n recordMutation,\n saveBranchWorkspace,\n switchBranchContext,\n switchBranchContextSafe,\n} from \"./agent/branchContext\"\n// 🤖 ChopStick Expert - Payload & Model Optimizer\nexport {\n buildRamenPayload,\n buildStoreKnowledgeBase,\n type ChopStickContext,\n type ChopStickDecision,\n getJoinWeights,\n getPreset,\n type JoinWeights,\n type ModelInfo,\n modelPricing,\n optimizeChopStick,\n type PresetName,\n presets,\n type StoreAppKnowledge,\n type StoreKnowledgeBase,\n} from \"./agent/chopstickExpert\"\n\n// 🌟 Golden Ratio φ-Engine\nexport {\n DEFAULT_TRIGGERS,\n evaluateGoldenRatio,\n FIBONACCI,\n formatFibonacciPreview,\n type GoldenFeature,\n type GoldenRatioConfig,\n type GoldenTrigger,\n type GoldenTriggerConfig,\n getDefaultTriggers,\n getNewlyTriggeredFeatures,\n getNextFibonacciThreshold,\n getUserGoldenRatioConfig,\n} from \"./agent/goldenRatio\"\nexport { capitalizeFirstLetter, getURL, simulateInputPaste, simulatePaste }\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chrryai/waffles",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.46",
|
|
4
4
|
"description": "Production-ready Playwright testing utilities and helpers for modern web apps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"automation",
|
|
@@ -53,7 +53,9 @@
|
|
|
53
53
|
"test:coverage": "vitest run --coverage",
|
|
54
54
|
"test:integration": "vitest run src/__tests__/integration --testTimeout 60000",
|
|
55
55
|
"test:tauri": "TEST_URL=http://localhost:5173 playwright test --project tauri-macos",
|
|
56
|
-
"test:unit": "vitest run src/__tests__/unit"
|
|
56
|
+
"test:unit": "vitest run src/__tests__/unit",
|
|
57
|
+
"test:phi:unit": "npx tsx src/__tests__/unit/goldenRatio.node-test.ts",
|
|
58
|
+
"test:phi:integration": "cd ../db && pnpm exec tsx scripts/test-golden-ratio.ts"
|
|
57
59
|
},
|
|
58
60
|
"dependencies": {
|
|
59
61
|
"@chrryai/machine": "workspace:*",
|
|
@@ -68,6 +70,7 @@
|
|
|
68
70
|
"uuid": "^13.0.0"
|
|
69
71
|
},
|
|
70
72
|
"devDependencies": {
|
|
73
|
+
"@repo/db": "workspace:*",
|
|
71
74
|
"@typescript-eslint/parser": "^8.0.0",
|
|
72
75
|
"eslint": "^9.0.0",
|
|
73
76
|
"tsup": "^8.0.0",
|