@basemachina/agentic-browser-cli 0.3.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/harness/ai-model.ts","../../../src/harness/ai-metrics.ts"],"sourcesContent":["/**\n * orchestrator/ai-model --- 共有AIモデル設定\n *\n * 全AI呼び出しで使用するモデルインスタンスを管理する。\n * 起動時に initModel() を呼び出し、以降は getModel(purpose?) で取得する。\n *\n * 用途別オーバーライド:\n * initModel() に modelOverrides を渡すと、特定用途のみ別モデルを使用できる。\n * 例: セレクタ解決は Haiku、それ以外は Sonnet\n */\n\nimport { anthropic } from \"@ai-sdk/anthropic\";\nimport { APICallError, Output, generateText, type LanguageModel } from \"ai\";\nimport { getActiveMetricsCollector } from \"./ai-metrics\";\n\nexport const DEFAULT_MODEL_ID = \"claude-sonnet-4-6\";\nexport const DEFAULT_PROVIDER = \"anthropic\" as const;\n\n/** 用途別デフォルトモデルID(未指定 purpose はデフォルトモデルを使用) */\nexport const DEFAULT_PURPOSE_MODELS: Partial<Record<ModelPurpose, string>> = {\n selector: \"claude-haiku-4-5-20251001\",\n extraction: \"claude-haiku-4-5-20251001\",\n \"exploration-light\": \"claude-haiku-4-5-20251001\",\n};\n\nexport type ModelProvider =\n | \"anthropic\"\n | \"openai\"\n | \"openai-compatible\"\n | \"google\"\n | \"azure\"\n | \"bedrock\"\n | \"vertex\";\n\n/** AI 呼び出しの用途カテゴリ */\nexport type ModelPurpose =\n | \"exploration\" // 探索ループ(tool-calling)\n | \"exploration-light\" // 探索ループのルーティンステップ(安価モデル)\n | \"selector\" // セレクタ解決(高頻度)\n | \"extraction\" // データ抽出・値抽出(高頻度)\n | \"review\" // レビュー・修正提案・YAMLパッチ\n | \"fallback\" // Agent Fallback\n | \"vision\"; // Vision Fallback(スクリーンショットベースのセレクタ解決)\n\nexport interface AIModelConfig {\n /** モデルID (e.g., \"claude-sonnet-4-6\", \"gpt-4o\", \"anthropic.claude-sonnet-4-6-v1\") */\n modelId: string;\n /** プロバイダー種別 */\n provider: ModelProvider;\n /** OpenAI互換エンドポイントのベースURL */\n baseURL?: string;\n /** OpenAI互換エンドポイントのAPIキー */\n apiKey?: string;\n /** Bedrock: AWS リージョン */\n bedrockRegion?: string;\n /** Bedrock: AWS アクセスキーID */\n bedrockAccessKeyId?: string;\n /** Bedrock: AWS シークレットアクセスキー */\n bedrockSecretAccessKey?: string;\n /** Bedrock: AWS セッショントークン(一時クレデンシャル用) */\n bedrockSessionToken?: string;\n /** Vertex: Google Cloud プロジェクトID */\n vertexProject?: string;\n /** Vertex: Google Cloud リージョン */\n vertexLocation?: string;\n /** Azure: リソース名(URL組み立て: https://{resourceName}.openai.azure.com/...) */\n azureResourceName?: string;\n /** Azure: API バージョン */\n azureApiVersion?: string;\n /** 用途別モデルIDオーバーライド(プロバイダーはデフォルトと共通) */\n modelOverrides?: Partial<Record<ModelPurpose, string>>;\n}\n\nlet currentModelId: string = DEFAULT_MODEL_ID;\nlet currentProvider: string = DEFAULT_PROVIDER;\nlet currentOverrides: Partial<Record<ModelPurpose, string>> = {};\nlet cachedModel: LanguageModel | null = null;\n/** 用途別オーバーライドモデルのキャッシュ */\nconst overrideModelCache = new Map<ModelPurpose, LanguageModel>();\n/** initModel で確定したモデル生成関数(プロバイダー固有ロジックをキャッシュ) */\nlet modelFactory: ((modelId: string) => LanguageModel) | null = null;\n\n/**\n * プロバイダーに応じたモデルインスタンスを生成する。\n * 各エントリポイントの main() で parseArgs() 直後に1回呼び出す。\n */\nexport async function initModel(config?: AIModelConfig): Promise<void> {\n const modelId = config?.modelId ?? DEFAULT_MODEL_ID;\n const provider = config?.provider ?? DEFAULT_PROVIDER;\n\n currentModelId = modelId;\n currentProvider = provider;\n currentOverrides = config?.modelOverrides ?? {};\n overrideModelCache.clear();\n\n switch (provider) {\n case \"openai\": {\n const { createOpenAI } = await import(\"@ai-sdk/openai\");\n const apiKey = config?.apiKey ?? process.env.OPENAI_API_KEY;\n const openai = createOpenAI({\n ...(apiKey ? { apiKey } : {}),\n ...(config?.baseURL ? { baseURL: config.baseURL } : {}),\n });\n modelFactory = (id) => openai(id);\n cachedModel = openai(modelId);\n break;\n }\n\n case \"google\": {\n const { createGoogleGenerativeAI } = await import(\"@ai-sdk/google\");\n const apiKey = config?.apiKey ?? process.env.GOOGLE_GENERATIVE_AI_API_KEY;\n if (!apiKey) {\n throw new Error(\n \"google プロバイダーには GOOGLE_GENERATIVE_AI_API_KEY 環境変数または apiKey が必要です\",\n );\n }\n const google = createGoogleGenerativeAI({\n apiKey,\n ...(config?.baseURL ? { baseURL: config.baseURL } : {}),\n });\n modelFactory = (id) => google(id);\n cachedModel = google(modelId);\n break;\n }\n\n case \"azure\": {\n const { createAzure } = await import(\"@ai-sdk/azure\");\n const apiKey = config?.apiKey ?? process.env.AZURE_API_KEY;\n const resourceName = config?.azureResourceName ?? process.env.AZURE_RESOURCE_NAME;\n const apiVersion = config?.azureApiVersion ?? process.env.AZURE_API_VERSION;\n if (!resourceName && !config?.baseURL) {\n throw new Error(\n \"azure プロバイダーには AZURE_RESOURCE_NAME 環境変数(または --model-base-url)が必要です\",\n );\n }\n const azure = createAzure({\n ...(resourceName ? { resourceName } : {}),\n ...(apiKey ? { apiKey } : {}),\n ...(apiVersion ? { apiVersion } : {}),\n ...(config?.baseURL ? { baseURL: config.baseURL } : {}),\n });\n modelFactory = (id) => azure(id);\n cachedModel = azure(modelId);\n break;\n }\n\n case \"openai-compatible\": {\n const { createOpenAICompatible } = await import(\"@ai-sdk/openai-compatible\");\n const baseURL = config?.baseURL ?? process.env.OPENAI_COMPATIBLE_BASE_URL;\n if (!baseURL) {\n throw new Error(\n \"openai-compatible プロバイダーには OPENAI_COMPATIBLE_BASE_URL 環境変数または --model-base-url が必要です\",\n );\n }\n const apiKey = config?.apiKey ?? process.env.OPENAI_COMPATIBLE_API_KEY ?? \"\";\n const openaiCompatible = createOpenAICompatible({\n name: \"openai-compatible\",\n baseURL,\n apiKey,\n });\n modelFactory = (id) => openaiCompatible(id);\n cachedModel = openaiCompatible(modelId);\n break;\n }\n\n case \"bedrock\": {\n const { createAmazonBedrock } = await import(\"@ai-sdk/amazon-bedrock\");\n const region = config?.bedrockRegion ?? process.env.AWS_REGION;\n if (!region) {\n throw new Error(\n \"bedrock プロバイダーには AWS_REGION 環境変数が必要です\",\n );\n }\n const accessKeyId = config?.bedrockAccessKeyId ?? process.env.AWS_ACCESS_KEY_ID;\n const secretAccessKey = config?.bedrockSecretAccessKey ?? process.env.AWS_SECRET_ACCESS_KEY;\n const sessionToken = config?.bedrockSessionToken ?? process.env.AWS_SESSION_TOKEN;\n const bedrock = createAmazonBedrock({\n region,\n ...(accessKeyId && secretAccessKey\n ? { accessKeyId, secretAccessKey, ...(sessionToken ? { sessionToken } : {}) }\n : {}),\n });\n modelFactory = (id) => bedrock(id);\n cachedModel = bedrock(modelId);\n break;\n }\n\n case \"vertex\": {\n const { createVertex } = await import(\"@ai-sdk/google-vertex\");\n const project = config?.vertexProject ?? process.env.GOOGLE_VERTEX_PROJECT;\n const location = config?.vertexLocation ?? process.env.GOOGLE_VERTEX_LOCATION;\n if (!project) {\n throw new Error(\n \"vertex プロバイダーには GOOGLE_VERTEX_PROJECT 環境変数が必要です\",\n );\n }\n if (!location) {\n throw new Error(\n \"vertex プロバイダーには GOOGLE_VERTEX_LOCATION 環境変数が必要です\",\n );\n }\n const vertex = createVertex({ project, location });\n modelFactory = (id) => vertex(id);\n cachedModel = vertex(modelId);\n break;\n }\n\n case \"anthropic\":\n default:\n modelFactory = (id) => anthropic(id);\n cachedModel = anthropic(modelId);\n break;\n }\n}\n\n/**\n * SDK 用: process.env を一切参照しないモデル初期化。\n * config に必要な値が不足していれば Error をスロー。\n *\n * Anthropic の場合は apiKey を渡せば環境変数より優先される。\n * Bedrock / Vertex は IAM ロール / ADC での自動認証に対応するため、\n * 明示的な認証情報は optional。\n */\nexport async function initModelExplicit(config: AIModelConfig): Promise<void> {\n const modelId = config.modelId;\n const provider = config.provider;\n\n currentModelId = modelId;\n currentProvider = provider;\n currentOverrides = config.modelOverrides ?? {};\n overrideModelCache.clear();\n\n switch (provider) {\n case \"openai\": {\n const { createOpenAI } = await import(\"@ai-sdk/openai\");\n const openai = createOpenAI({\n ...(config.apiKey ? { apiKey: config.apiKey } : {}),\n ...(config.baseURL ? { baseURL: config.baseURL } : {}),\n });\n modelFactory = (id) => openai(id);\n cachedModel = openai(modelId);\n break;\n }\n\n case \"google\": {\n if (!config.apiKey) {\n throw new Error(\"apiKey is required for google provider in SDK mode\");\n }\n const { createGoogleGenerativeAI } = await import(\"@ai-sdk/google\");\n const google = createGoogleGenerativeAI({\n apiKey: config.apiKey,\n ...(config.baseURL ? { baseURL: config.baseURL } : {}),\n });\n modelFactory = (id) => google(id);\n cachedModel = google(modelId);\n break;\n }\n\n case \"azure\": {\n if (!config.azureResourceName && !config.baseURL) {\n throw new Error(\"azureResourceName or baseURL is required for azure provider in SDK mode\");\n }\n const { createAzure } = await import(\"@ai-sdk/azure\");\n const azure = createAzure({\n ...(config.azureResourceName ? { resourceName: config.azureResourceName } : {}),\n ...(config.apiKey ? { apiKey: config.apiKey } : {}),\n ...(config.azureApiVersion ? { apiVersion: config.azureApiVersion } : {}),\n ...(config.baseURL ? { baseURL: config.baseURL } : {}),\n });\n modelFactory = (id) => azure(id);\n cachedModel = azure(modelId);\n break;\n }\n\n case \"openai-compatible\": {\n if (!config.baseURL) {\n throw new Error(\"baseURL is required for openai-compatible provider in SDK mode\");\n }\n if (!config.apiKey) {\n throw new Error(\"apiKey is required for openai-compatible provider in SDK mode\");\n }\n const { createOpenAICompatible } = await import(\"@ai-sdk/openai-compatible\");\n const openaiCompatible = createOpenAICompatible({\n name: \"openai-compatible\",\n baseURL: config.baseURL,\n apiKey: config.apiKey,\n });\n modelFactory = (id) => openaiCompatible(id);\n cachedModel = openaiCompatible(modelId);\n break;\n }\n\n case \"bedrock\": {\n if (!config.bedrockRegion) {\n throw new Error(\"bedrockRegion is required for bedrock provider in SDK mode\");\n }\n const { createAmazonBedrock } = await import(\"@ai-sdk/amazon-bedrock\");\n const bedrock = createAmazonBedrock({\n region: config.bedrockRegion,\n ...(config.bedrockAccessKeyId && config.bedrockSecretAccessKey\n ? {\n accessKeyId: config.bedrockAccessKeyId,\n secretAccessKey: config.bedrockSecretAccessKey,\n ...(config.bedrockSessionToken ? { sessionToken: config.bedrockSessionToken } : {}),\n }\n : {}),\n });\n modelFactory = (id) => bedrock(id);\n cachedModel = bedrock(modelId);\n break;\n }\n\n case \"vertex\": {\n if (!config.vertexProject) {\n throw new Error(\"vertexProject is required for vertex provider in SDK mode\");\n }\n if (!config.vertexLocation) {\n throw new Error(\"vertexLocation is required for vertex provider in SDK mode\");\n }\n const { createVertex } = await import(\"@ai-sdk/google-vertex\");\n const vertex = createVertex({\n project: config.vertexProject,\n location: config.vertexLocation,\n });\n modelFactory = (id) => vertex(id);\n cachedModel = vertex(modelId);\n break;\n }\n\n case \"anthropic\":\n default: {\n if (config.apiKey) {\n // apiKey が明示的に渡された場合、環境変数を使わずに直接渡す\n const { createAnthropic } = await import(\"@ai-sdk/anthropic\");\n const client = createAnthropic({ apiKey: config.apiKey });\n modelFactory = (id) => client(id);\n cachedModel = client(modelId);\n } else {\n // apiKey 未指定の場合は @ai-sdk/anthropic のデフォルト動作\n // (ANTHROPIC_API_KEY 環境変数を参照する SDK 側の仕様)\n modelFactory = (id) => anthropic(id);\n cachedModel = anthropic(modelId);\n }\n break;\n }\n }\n}\n\n/**\n * 用途に応じたモデルを取得する。\n * purpose 省略時はデフォルトモデル。\n * 用途別オーバーライドが設定されていればそのモデルを返す。\n * 未初期化時はデフォルトで自動初期化(後方互換性)。\n */\nexport function getModel(purpose?: ModelPurpose): LanguageModel {\n if (purpose) {\n // 明示的オーバーライド → 用途別デフォルト の優先順で確認\n const overrideId = currentOverrides[purpose] ?? DEFAULT_PURPOSE_MODELS[purpose];\n if (overrideId && overrideId !== currentModelId) {\n const cached = overrideModelCache.get(purpose);\n if (cached) return cached;\n\n const factory = modelFactory ?? ((id: string) => anthropic(id));\n const model = factory(overrideId);\n overrideModelCache.set(purpose, model);\n return model;\n }\n }\n\n // デフォルトモデル\n if (!cachedModel) {\n cachedModel = anthropic(DEFAULT_MODEL_ID);\n }\n return cachedModel;\n}\n\n/** 用途に応じた実際のモデルIDを返す(ログ・レポート用) */\nexport function getModelId(purpose?: ModelPurpose): string {\n if (purpose) {\n const overrideId = currentOverrides[purpose] ?? DEFAULT_PURPOSE_MODELS[purpose];\n if (overrideId) return overrideId;\n }\n return currentModelId;\n}\n\n/** 現在のプロバイダー名(レポート・ログ用) */\nexport function getModelProvider(): string {\n return currentProvider;\n}\n\n/** 現在のオーバーライド設定を返す(レポート用) */\nexport function getModelOverrides(): Partial<Record<ModelPurpose, string>> {\n return { ...currentOverrides };\n}\n\n// ── メトリクス付き AI 呼び出しラッパー ──\n\n/** usage オブジェクトの共通型 */\ninterface UsageLike {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n /** @deprecated AI SDK v6 で inputTokenDetails.cacheReadTokens に移行 */\n cachedInputTokens?: number;\n inputTokenDetails?: {\n noCacheTokens?: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n };\n}\n\n/**\n * usage オブジェクトからキャッシュ済みトークン数を安全に取得する。\n * AI SDK v6 の inputTokenDetails.cacheReadTokens を優先し、\n * フォールバックとして deprecated な cachedInputTokens を参照する。\n */\nfunction extractCachedTokens(usage: UsageLike): number {\n return usage.inputTokenDetails?.cacheReadTokens ?? usage.cachedInputTokens ?? 0;\n}\n\n/** usage から cacheWriteTokens を取得する(providerMetadata 不要な場合用) */\nfunction extractCacheCreationTokensFromUsage(usage: UsageLike): number {\n return usage.inputTokenDetails?.cacheWriteTokens ?? 0;\n}\n\n/**\n * AI SDK v6 の usage から非キャッシュ入力トークン数を取得する。\n *\n * AI SDK v6 では usage.inputTokens = total(noCache + cacheRead + cacheWrite)。\n * AICallMetric.inputTokens は非キャッシュ部分のみを期待するため、\n * inputTokenDetails.noCacheTokens を優先し、フォールバックとして total から差し引く。\n */\nfunction extractNonCachedInputTokens(usage: UsageLike): number {\n if (usage.inputTokenDetails?.noCacheTokens != null) {\n return usage.inputTokenDetails.noCacheTokens;\n }\n // フォールバック: total - cacheRead - cacheWrite\n const total = usage.inputTokens ?? 0;\n const cached = extractCachedTokens(usage);\n const cacheCreation = extractCacheCreationTokensFromUsage(usage);\n return Math.max(0, total - cached - cacheCreation);\n}\n\n/** usage を持つ AI 呼び出し結果からメトリクスを記録する共通ヘルパー */\nfunction recordMetrics(\n purpose: ModelPurpose,\n usage: UsageLike,\n durationMs: number,\n cacheCreationTokens?: number,\n rawProviderUsage?: Record<string, unknown>,\n): void {\n getActiveMetricsCollector().record({\n timestamp: new Date().toISOString(),\n purpose,\n modelId: getModelId(purpose),\n inputTokens: extractNonCachedInputTokens(usage),\n outputTokens: usage.outputTokens ?? 0,\n cachedInputTokens: extractCachedTokens(usage),\n cacheCreationTokens: cacheCreationTokens ?? 0,\n durationMs: Math.round(durationMs),\n rawProviderUsage,\n });\n}\n\n/**\n * AI SDK の result から providerMetadata.anthropic.cacheCreationInputTokens を取得する。\n * multi-step (tool-calling loop) の場合は各ステップの値を合算する。\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractCacheCreationTokens(result: any): number {\n // multi-step の場合: steps 配列の各 providerMetadata を合算\n if (Array.isArray(result.steps) && result.steps.length > 0) {\n let total = 0;\n for (const step of result.steps) {\n total += step.providerMetadata?.anthropic?.cacheCreationInputTokens ?? 0;\n }\n return total;\n }\n // single-step の場合\n return result.providerMetadata?.anthropic?.cacheCreationInputTokens ?? 0;\n}\n\n/**\n * 構造化出力のメトリクス計測ラッパー。\n * AI SDK v6 の generateText + Output.object を使用して構造化データを生成する。\n *\n * generateObject は v6 で deprecated(v7 で削除予定)のため、\n * generateText + Output.object に移行。呼び出し側の互換性のため\n * result.object プロパティも維持する。\n *\n * 型パラメータを正確に保つため、params は any で受け取る。\n * 呼び出し側はスキーマ定義で型安全性を担保している。\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function trackedGenerateObject(purpose: ModelPurpose, params: any): Promise<any> {\n const start = performance.now();\n const { schema, ...rest } = params;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let result: any;\n try {\n result = await generateText({\n ...rest,\n maxRetries: 0, // AI SDK 内部リトライを無効化、withAIRetry に委譲\n output: Output.object({ schema }),\n });\n } catch (error) {\n // エラー時: 最低限の呼び出し記録(トークン数 0)\n getActiveMetricsCollector().record({\n timestamp: new Date().toISOString(),\n purpose,\n modelId: getModelId(purpose),\n inputTokens: 0,\n outputTokens: 0,\n cachedInputTokens: 0,\n cacheCreationTokens: 0,\n durationMs: Math.round(performance.now() - start),\n });\n throw error;\n }\n const step = result.steps?.[0];\n const rawUsage = (step?.providerMetadata?.anthropic ?? result.providerMetadata?.anthropic) as Record<string, unknown> | undefined;\n recordMetrics(purpose, result.usage, performance.now() - start, extractCacheCreationTokens(result), rawUsage);\n // output → object エイリアスで後方互換性を維持\n return { ...result, object: result.output };\n}\n\n/**\n * generateText のメトリクス計測ラッパー。\n *\n * onStepFinish コールバックを使い、各ステップ完了時にリアルタイムでメトリクスを記録する。\n * これにより、マルチステップ(tool-calling ループ)が途中で失敗しても、\n * 完了済みステップのトークン消費量は正確に記録される。\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function trackedGenerateText(purpose: ModelPurpose, params: any): Promise<any> {\n const start = performance.now();\n let lastStepTime = start;\n let stepsRecorded = 0;\n\n // onStepFinish: 各ステップ完了時にリアルタイムでメトリクスを記録\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const onStepFinish = (stepResult: any) => {\n const now = performance.now();\n const stepDuration = now - lastStepTime;\n lastStepTime = now;\n\n const modelId = stepResult.response?.modelId || getModelId(purpose);\n const rawUsage = stepResult.providerMetadata?.anthropic as Record<string, unknown> | undefined;\n\n getActiveMetricsCollector().record({\n timestamp: new Date().toISOString(),\n purpose,\n modelId,\n inputTokens: extractNonCachedInputTokens(stepResult.usage ?? {}),\n outputTokens: stepResult.usage?.outputTokens ?? 0,\n cachedInputTokens: extractCachedTokens(stepResult.usage ?? {}),\n cacheCreationTokens: Number(stepResult.providerMetadata?.anthropic?.cacheCreationInputTokens ?? 0),\n durationMs: Math.round(stepDuration),\n rawProviderUsage: rawUsage,\n });\n stepsRecorded++;\n };\n\n try {\n const result = await generateText({\n ...params,\n maxRetries: 0, // AI SDK 内部リトライを無効化、withAIRetry に委譲\n onStepFinish,\n });\n // onStepFinish で全ステップ記録済み — 追加記録不要\n return result;\n } catch (error) {\n // onStepFinish が 1 回も呼ばれなかった場合のみ 0 トークン記録\n // (API 接続前のエラー等)\n if (stepsRecorded === 0) {\n getActiveMetricsCollector().record({\n timestamp: new Date().toISOString(),\n purpose,\n modelId: getModelId(purpose),\n inputTokens: 0,\n outputTokens: 0,\n cachedInputTokens: 0,\n cacheCreationTokens: 0,\n durationMs: Math.round(performance.now() - start),\n });\n }\n throw error;\n }\n}\n\n// ── リトライ可能エラー判定 + リトライラッパー ──\n\n/**\n * リトライ可能な一時的エラーかどうかを判定する。\n * - 429 (Rate Limit)\n * - 529 (Overloaded)\n * - 5xx (Server Error)\n * - ネットワークエラー(ECONNRESET, ETIMEDOUT 等)\n */\nexport function isRetryableError(error: unknown): boolean {\n // AI SDK の構造化エラー\n if (APICallError.isInstance(error)) {\n if (error.isRetryable) return true;\n const code = error.statusCode;\n if (code !== undefined) {\n if (code === 429 || code === 529) return true;\n if (code >= 500 && code < 600) return true;\n }\n }\n\n // ネットワークエラー + メッセージベースのフォールバック\n if (error instanceof Error) {\n const msg = error.message.toLowerCase();\n if (\n msg.includes(\"econnreset\") ||\n msg.includes(\"etimedout\") ||\n msg.includes(\"econnrefused\") ||\n msg.includes(\"fetch failed\") ||\n msg.includes(\"socket hang up\")\n ) {\n return true;\n }\n if (msg.includes(\"rate limit\") || msg.includes(\"rate_limit\")) return true;\n if (msg.includes(\"overloaded\")) return true;\n if (/\\b(429|529)\\b/.test(msg)) return true;\n if (/\\b5\\d{2}\\b/.test(error.message)) return true;\n }\n\n return false;\n}\n\n/**\n * AI 呼び出しのリトライラッパー。\n * リトライ可能なエラー時のみ指数バックオフでリトライする。\n * スキーマ不一致などの致命的エラーはリトライせず即座に throw する。\n */\nexport async function withAIRetry<T>(\n fn: () => Promise<T>,\n opts?: { maxRetries?: number; label?: string },\n): Promise<T> {\n const maxRetries = opts?.maxRetries ?? 2;\n for (let attempt = 0; ; attempt++) {\n try {\n return await fn();\n } catch (error) {\n if (attempt < maxRetries && isRetryableError(error)) {\n const delay = Math.pow(2, attempt) * 1000; // 1s, 2s, 4s\n await new Promise((resolve) => setTimeout(resolve, delay));\n continue;\n }\n throw error;\n }\n }\n}\n","/**\n * ai-metrics --- AI 呼び出しのメトリクス収集・集計\n *\n * 各 AI 呼び出しのトークン消費量・コスト・レイテンシを集計する。\n * グローバルシングルトン `globalMetrics` を通じて全呼び出しのメトリクスを蓄積し、\n * 実行完了時にサマリーを取得する。\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { ModelPurpose } from \"./ai-model\";\n\nexport interface AICallMetric {\n /** 呼び出し時刻 */\n timestamp: string;\n /** 用途カテゴリ */\n purpose: ModelPurpose;\n /** 使用モデル ID */\n modelId: string;\n /** 入力トークン数(非キャッシュ部分のみ。Anthropic API の input_tokens に対応) */\n inputTokens: number;\n /** 出力トークン数 */\n outputTokens: number;\n /** キャッシュ読み取りトークン数 */\n cachedInputTokens: number;\n /** キャッシュ書き込みトークン数 */\n cacheCreationTokens: number;\n /** レイテンシ (ms) */\n durationMs: number;\n /** Anthropic API の生レスポンス usage(デバッグ用・コスト検証用) */\n rawProviderUsage?: Record<string, unknown>;\n}\n\nexport interface PurposeBreakdown {\n calls: number;\n inputTokens: number;\n outputTokens: number;\n cachedInputTokens: number;\n cacheCreationTokens: number;\n durationMs: number;\n}\n\nexport interface ModelBreakdown {\n calls: number;\n inputTokens: number;\n outputTokens: number;\n cachedInputTokens: number;\n cacheCreationTokens: number;\n durationMs: number;\n estimatedCostUsd: number;\n}\n\nexport interface LatencyPercentiles {\n p50: number;\n p95: number;\n p99: number;\n}\n\nexport interface AIMetricsSummary {\n totalCalls: number;\n totalInputTokens: number;\n totalOutputTokens: number;\n totalCachedInputTokens: number;\n totalCacheCreationTokens: number;\n /** キャッシュヒット率 = cachedInputTokens / totalRealInput */\n cacheHitRate: number;\n /** 推定コスト (USD) */\n estimatedCostUsd: number;\n totalDurationMs: number;\n /** AI 呼び出しレイテンシのパーセンタイル (ms) */\n latencyPercentiles?: LatencyPercentiles;\n /** 用途別の内訳 */\n byPurpose: Record<string, PurposeBreakdown>;\n /** モデル別の内訳 */\n byModel: Record<string, ModelBreakdown>;\n}\n\n/** モデル別の料金テーブル (USD / 1M tokens) */\nexport interface PricingEntry {\n input: number;\n output: number;\n cacheRead: number;\n /** キャッシュ書き込み料金。0 の場合はプロバイダーが追加課金しない */\n cacheWrite: number;\n}\n\nconst PRICING_TABLE: Record<string, PricingEntry> = {\n // Anthropic — cacheWrite = input × 1.25, cacheRead = input × 0.10\n \"claude-sonnet-4-6\": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },\n \"claude-sonnet-4-5\": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },\n \"claude-sonnet-4\": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },\n \"claude-haiku-4-5\": { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 },\n \"claude-haiku-3-5\": { input: 0.8, output: 4, cacheRead: 0.08, cacheWrite: 1 },\n \"claude-opus-4-6\": { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },\n \"claude-opus-4-5\": { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },\n \"claude-opus-4-1\": { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 },\n \"claude-opus-4\": { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 },\n // OpenAI (Azure OpenAI も同名モデルのため部分一致で対応) — キャッシュ書き込み追加課金なし\n \"gpt-4o\": { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 },\n \"gpt-4o-mini\": { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 },\n \"gpt-4.1\": { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 },\n \"gpt-4.1-mini\": { input: 0.4, output: 1.6, cacheRead: 0.1, cacheWrite: 0 },\n \"gpt-4.1-nano\": { input: 0.1, output: 0.4, cacheRead: 0.025, cacheWrite: 0 },\n \"o3\": { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 },\n \"o4-mini\": { input: 1.1, output: 4.4, cacheRead: 0.55, cacheWrite: 0 },\n // Google Gemini — キャッシュ書き込み追加課金なし\n \"gemini-2.5-pro\": { input: 1.25, output: 10, cacheRead: 0.315, cacheWrite: 0 },\n \"gemini-2.5-flash\": { input: 0.15, output: 0.6, cacheRead: 0.0375, cacheWrite: 0 },\n \"gemini-2.0-flash\": { input: 0.1, output: 0.4, cacheRead: 0.025, cacheWrite: 0 },\n};\n\n/** デフォルト料金(未知のモデル用、Sonnet 相当) */\nconst DEFAULT_PRICING: PricingEntry = { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 };\n\nexport function getPricing(modelId: string): PricingEntry {\n // 完全一致\n if (PRICING_TABLE[modelId]) return PRICING_TABLE[modelId];\n\n // 部分一致(Bedrock/Vertex のモデル ID 対応)\n for (const [key, pricing] of Object.entries(PRICING_TABLE)) {\n if (modelId.includes(key)) return pricing;\n }\n\n return DEFAULT_PRICING;\n}\n\n/**\n * 単一メトリクスのコスト計算。\n *\n * Anthropic API では inputTokens は非キャッシュ・非キャッシュ書き込み部分のみ。\n * 総入力 = inputTokens + cachedInputTokens + cacheCreationTokens\n */\nexport function calculateCost(metric: AICallMetric): number {\n const pricing = getPricing(metric.modelId);\n return (\n (metric.inputTokens * pricing.input) / 1_000_000 +\n (metric.cachedInputTokens * pricing.cacheRead) / 1_000_000 +\n (metric.cacheCreationTokens * pricing.cacheWrite) / 1_000_000 +\n (metric.outputTokens * pricing.output) / 1_000_000\n );\n}\n\n/** 料金テーブルの読み取り専用コピーを返す(テスト・検証用) */\nexport function getPricingTable(): Readonly<Record<string, PricingEntry>> {\n return PRICING_TABLE;\n}\n\n/**\n * トークンカウントから実際の総入力トークン数を計算する。\n *\n * AICallMetric / PurposeBreakdown / ModelBreakdown(inputTokens 系)と\n * AIMetricsSummary / AggregatedMetrics(totalInputTokens 系)の両方を受け付ける。\n */\nexport function computeTotalRealInput(tokens: {\n inputTokens?: number;\n cachedInputTokens?: number;\n cacheCreationTokens?: number;\n totalInputTokens?: number;\n totalCachedInputTokens?: number;\n totalCacheCreationTokens?: number;\n}): number {\n const input = tokens.totalInputTokens ?? tokens.inputTokens ?? 0;\n const cached = tokens.totalCachedInputTokens ?? tokens.cachedInputTokens ?? 0;\n const creation = tokens.totalCacheCreationTokens ?? tokens.cacheCreationTokens ?? 0;\n return input + cached + creation;\n}\n\n/**\n * トークンカウントからキャッシュヒット率を計算する(0〜1)。\n *\n * computeTotalRealInput と同じ命名規則を受け付ける。\n */\nexport function computeCacheRate(tokens: {\n inputTokens?: number;\n cachedInputTokens?: number;\n cacheCreationTokens?: number;\n totalInputTokens?: number;\n totalCachedInputTokens?: number;\n totalCacheCreationTokens?: number;\n}): number {\n const total = computeTotalRealInput(tokens);\n const cached = tokens.totalCachedInputTokens ?? tokens.cachedInputTokens ?? 0;\n return total > 0 ? cached / total : 0;\n}\n\nexport class AIMetricsCollector {\n private metrics: AICallMetric[] = [];\n\n record(metric: AICallMetric): void {\n this.metrics.push(metric);\n }\n\n getSummary(): AIMetricsSummary {\n const totalCalls = this.metrics.length;\n let totalInputTokens = 0;\n let totalOutputTokens = 0;\n let totalCachedInputTokens = 0;\n let totalCacheCreationTokens = 0;\n let totalDurationMs = 0;\n let estimatedCostUsd = 0;\n const byPurpose: Record<string, PurposeBreakdown> = {};\n const byModel: Record<string, ModelBreakdown> = {};\n\n for (const m of this.metrics) {\n totalInputTokens += m.inputTokens;\n totalOutputTokens += m.outputTokens;\n totalCachedInputTokens += m.cachedInputTokens;\n totalCacheCreationTokens += m.cacheCreationTokens;\n totalDurationMs += m.durationMs;\n const cost = calculateCost(m);\n estimatedCostUsd += cost;\n\n const bp = byPurpose[m.purpose] ??= {\n calls: 0,\n inputTokens: 0,\n outputTokens: 0,\n cachedInputTokens: 0,\n cacheCreationTokens: 0,\n durationMs: 0,\n };\n bp.calls++;\n bp.inputTokens += m.inputTokens;\n bp.outputTokens += m.outputTokens;\n bp.cachedInputTokens += m.cachedInputTokens;\n bp.cacheCreationTokens += m.cacheCreationTokens;\n bp.durationMs += m.durationMs;\n\n const bm = byModel[m.modelId] ??= {\n calls: 0,\n inputTokens: 0,\n outputTokens: 0,\n cachedInputTokens: 0,\n cacheCreationTokens: 0,\n durationMs: 0,\n estimatedCostUsd: 0,\n };\n bm.calls++;\n bm.inputTokens += m.inputTokens;\n bm.outputTokens += m.outputTokens;\n bm.cachedInputTokens += m.cachedInputTokens;\n bm.cacheCreationTokens += m.cacheCreationTokens;\n bm.durationMs += m.durationMs;\n bm.estimatedCostUsd += cost;\n }\n\n const cacheHitRate = computeCacheRate({\n inputTokens: totalInputTokens,\n cachedInputTokens: totalCachedInputTokens,\n cacheCreationTokens: totalCacheCreationTokens,\n });\n\n // レイテンシパーセンタイル算出\n let latencyPercentiles: LatencyPercentiles | undefined;\n if (this.metrics.length > 0) {\n const sorted = this.metrics.map((m) => m.durationMs).sort((a, b) => a - b);\n const percentile = (p: number): number => {\n const idx = Math.ceil((p / 100) * sorted.length) - 1;\n return sorted[Math.max(0, Math.min(idx, sorted.length - 1))];\n };\n latencyPercentiles = {\n p50: Math.round(percentile(50)),\n p95: Math.round(percentile(95)),\n p99: Math.round(percentile(99)),\n };\n }\n\n return {\n totalCalls,\n totalInputTokens,\n totalOutputTokens,\n totalCachedInputTokens,\n totalCacheCreationTokens,\n cacheHitRate,\n estimatedCostUsd: Math.round(estimatedCostUsd * 1_000_000) / 1_000_000,\n totalDurationMs,\n latencyPercentiles,\n byPurpose,\n byModel,\n };\n }\n\n /** メトリクスをリセットする(eval ケース間で使用) */\n reset(): void {\n this.metrics = [];\n }\n\n /** 蓄積済みの個別メトリクスを返す(デバッグ用) */\n getMetrics(): readonly AICallMetric[] {\n return this.metrics;\n }\n\n /** 蓄積済みメトリクスの件数 */\n get count(): number {\n return this.metrics.length;\n }\n}\n\n/** グローバルシングルトン */\nexport const globalMetrics = new AIMetricsCollector();\n\n/**\n * アクティブなメトリクスコレクターの切替機構。\n *\n * 並列実行時は AsyncLocalStorage を使用してスコープ付きコレクターを分離する。\n * CLI の単一スレッド実行では legacy な activeCollector 変数にフォールバック。\n */\nconst metricsStorage = new AsyncLocalStorage<AIMetricsCollector>();\nlet activeCollector: AIMetricsCollector = globalMetrics;\n\n/**\n * 指定のコレクターをスコープ付きで実行する。\n * AsyncLocalStorage を使用し、並列実行でも安全にメトリクスを分離する。\n */\nexport function runWithMetricsCollector<T>(\n collector: AIMetricsCollector,\n fn: () => Promise<T>,\n): Promise<T> {\n return metricsStorage.run(collector, fn);\n}\n\n/**\n * アクティブなコレクターを設定する。\n * @deprecated 並列実行では runWithMetricsCollector() を使用してください。\n * この関数はグローバル変数を書き換えるため、並列実行時にレースコンディションが発生します。\n */\nexport function setActiveMetricsCollector(collector: AIMetricsCollector): void {\n activeCollector = collector;\n}\n\n/** アクティブなコレクターを取得する(AsyncLocalStorage → legacy activeCollector の優先順) */\nexport function getActiveMetricsCollector(): AIMetricsCollector {\n return metricsStorage.getStore() ?? activeCollector;\n}\n\n/**\n * アクティブなコレクターを globalMetrics にリセットする。\n * @deprecated 並列実行では runWithMetricsCollector() を使用してください。\n */\nexport function resetActiveMetricsCollector(): void {\n activeCollector = globalMetrics;\n}\n\n// ── テナント別メトリクス(Phase 3 で Activity 内から呼び出す) ──\n\nconst tenantCollectors = new Map<string, AIMetricsCollector>();\n\n/** テナント専用の AIMetricsCollector を取得する(同一 tenantId は同一インスタンス) */\nexport function getMetricsForTenant(tenantId: string): AIMetricsCollector {\n let collector = tenantCollectors.get(tenantId);\n if (!collector) {\n collector = new AIMetricsCollector();\n tenantCollectors.set(tenantId, collector);\n }\n return collector;\n}\n\n/** 指定テナントのメトリクスを削除する */\nexport function clearTenantMetrics(tenantId: string): void {\n tenantCollectors.delete(tenantId);\n}\n\n/** 全テナントのメトリクスを削除する */\nexport function clearAllTenantMetrics(): void {\n tenantCollectors.clear();\n}\n"],"mappings":"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","names":[]}
package/dist/cli.js ADDED
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/cli-entry.ts
4
+ var command = process.argv[2];
5
+ process.argv = [process.argv[0], process.argv[1], ...process.argv.slice(3)];
6
+ switch (command) {
7
+ case "generate":
8
+ await import("./instruction-generator-5RPRYTVR.js");
9
+ break;
10
+ case "execute":
11
+ await import("./instruction-executor-M5Q6HYSM.js");
12
+ break;
13
+ case "fix-instruction":
14
+ await import("./fix-instruction-JLCLTXAN.js");
15
+ break;
16
+ case "compose":
17
+ await import("./compose-EHDWVF7N.js");
18
+ break;
19
+ case "--version":
20
+ case "-v": {
21
+ const { readFileSync } = await import("fs");
22
+ const { join, dirname } = await import("path");
23
+ const { fileURLToPath } = await import("url");
24
+ const pkgPath = join(
25
+ dirname(fileURLToPath(import.meta.url)),
26
+ "..",
27
+ "package.json"
28
+ );
29
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
30
+ console.log(pkg.version);
31
+ break;
32
+ }
33
+ case "--help":
34
+ case "-h":
35
+ case void 0:
36
+ console.log(`Usage: agentic-browser <command> [options]
37
+
38
+ Commands:
39
+ generate \u6307\u793A\u66F8 YAML \u3092\u30D6\u30E9\u30A6\u30B6\u63A2\u7D22\u304B\u3089\u751F\u6210
40
+ execute \u6307\u793A\u66F8 YAML \u3092\u5B9F\u884C
41
+ fix-instruction \u30EC\u30DD\u30FC\u30C8\u304B\u3089\u4FEE\u6B63\u63D0\u6848\u3092\u62BD\u51FA\u3057\u6307\u793A\u66F8\u306B\u9069\u7528
42
+ compose \u8907\u6570\u306E\u6307\u793A\u66F8\u3092\u5206\u5C90\u4ED8\u304D\u6307\u793A\u66F8\u306B\u5408\u6210
43
+
44
+ Options:
45
+ --version, -v \u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u8868\u793A
46
+ --help, -h \u3053\u306E\u30D8\u30EB\u30D7\u3092\u8868\u793A
47
+
48
+ Run 'agentic-browser <command> --help' for command-specific help.`);
49
+ break;
50
+ default:
51
+ console.error(`\u4E0D\u660E\u306A\u30B3\u30DE\u30F3\u30C9: ${command}`);
52
+ console.error("'agentic-browser --help' \u3067\u5229\u7528\u53EF\u80FD\u306A\u30B3\u30DE\u30F3\u30C9\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
53
+ process.exit(1);
54
+ }
55
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cli-entry.ts"],"sourcesContent":["/**\n * 統合 CLI エントリポイント — npx @basemachina/agentic-browser <command> で実行\n *\n * サブコマンドを argv から除去し、下流の parseArgs が正しく動作するようにルーティングする。\n */\n\nconst command = process.argv[2];\n\n// サブコマンドを除去して下流に渡す\nprocess.argv = [process.argv[0], process.argv[1], ...process.argv.slice(3)];\n\nswitch (command) {\n case \"generate\":\n await import(\"./instruction-generator/index.js\");\n break;\n\n case \"execute\":\n await import(\"./instruction-executor/index.js\");\n break;\n\n case \"fix-instruction\":\n await import(\"./fix-instruction/index.js\");\n break;\n\n case \"compose\":\n await import(\"./compose/index.js\");\n break;\n\n case \"--version\":\n case \"-v\": {\n const { readFileSync } = await import(\"node:fs\");\n const { join, dirname } = await import(\"node:path\");\n const { fileURLToPath } = await import(\"node:url\");\n const pkgPath = join(\n dirname(fileURLToPath(import.meta.url)),\n \"..\",\n \"package.json\",\n );\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n console.log(pkg.version);\n break;\n }\n\n case \"--help\":\n case \"-h\":\n case undefined:\n console.log(`Usage: agentic-browser <command> [options]\n\nCommands:\n generate 指示書 YAML をブラウザ探索から生成\n execute 指示書 YAML を実行\n fix-instruction レポートから修正提案を抽出し指示書に適用\n compose 複数の指示書を分岐付き指示書に合成\n\nOptions:\n --version, -v バージョンを表示\n --help, -h このヘルプを表示\n\nRun 'agentic-browser <command> --help' for command-specific help.`);\n break;\n\n default:\n console.error(`不明なコマンド: ${command}`);\n console.error(\"'agentic-browser --help' で利用可能なコマンドを確認してください。\");\n process.exit(1);\n}\n"],"mappings":";;;AAMA,IAAM,UAAU,QAAQ,KAAK,CAAC;AAG9B,QAAQ,OAAO,CAAC,QAAQ,KAAK,CAAC,GAAG,QAAQ,KAAK,CAAC,GAAG,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC;AAE1E,QAAQ,SAAS;AAAA,EACf,KAAK;AACH,UAAM,OAAO,qCAAkC;AAC/C;AAAA,EAEF,KAAK;AACH,UAAM,OAAO,oCAAiC;AAC9C;AAAA,EAEF,KAAK;AACH,UAAM,OAAO,+BAA4B;AACzC;AAAA,EAEF,KAAK;AACH,UAAM,OAAO,uBAAoB;AACjC;AAAA,EAEF,KAAK;AAAA,EACL,KAAK,MAAM;AACT,UAAM,EAAE,aAAa,IAAI,MAAM,OAAO,IAAS;AAC/C,UAAM,EAAE,MAAM,QAAQ,IAAI,MAAM,OAAO,MAAW;AAClD,UAAM,EAAE,cAAc,IAAI,MAAM,OAAO,KAAU;AACjD,UAAM,UAAU;AAAA,MACd,QAAQ,cAAc,YAAY,GAAG,CAAC;AAAA,MACtC;AAAA,MACA;AAAA,IACF;AACA,UAAM,MAAM,KAAK,MAAM,aAAa,SAAS,OAAO,CAAC;AACrD,YAAQ,IAAI,IAAI,OAAO;AACvB;AAAA,EACF;AAAA,EAEA,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACH,YAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kEAYkD;AAC9D;AAAA,EAEF;AACE,YAAQ,MAAM,+CAAY,OAAO,EAAE;AACnC,YAAQ,MAAM,mJAA+C;AAC7D,YAAQ,KAAK,CAAC;AAClB;","names":[]}