Skip to content

feat(llm): delegate model calls to application SDK boundaries - #2879

Merged
kang-heewon merged 2 commits into
trunkfrom
breaking/2832-sdk-call-boundary
Sep 23, 2026
Merged

kang-heewon merged 2 commits into
trunkfrom
breaking/2832-sdk-call-boundary

Conversation

@kang-heewon

@kang-heewon kang-heewon commented Sep 22, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Delegate model execution to tenant-scoped vendor SDK clients in generated AI SaaS applications instead of a framework-owned generic LLM execution layer.
  • Preserve SDK-independent pricing, quota, usage, receipt, telemetry, and recovery contracts through @croco/ai-usage.
  • Distinguish retryable, persistence-uncertain, delivery-pending, rejected, and completed metering states so recovery does not repeat model inference or double-apply quota.

Reviewer context

  • Removes @croco/llm-core, @croco/llm-openai, and @croco/llm-metering; existing llm.* meter identifiers remain stable for stored-usage compatibility.
  • Generated AI SaaS applications own the official OpenAI client boundary with bounded retries, cancellation, tenant isolation, redacted governance evidence, and a deterministic zero-credential demo.
  • Persistence-uncertain recovery replays idempotent UsageStorage persistence while delivery recovery resumes the durable receipt without recording quota again.

Validation

  • pnpm check — 27/28 passed, one not applicable
  • Normal pre-push test and typecheck gates — 239/239 tasks passed for each gate
  • Gitleaks exact-HEAD history scan — 1,667 commits scanned, no leaks found
  • Package catalog, Problem Registry, changeset coverage, and first-success contracts passed after rebasing onto trunk
  • Generated API documentation drift check — 118/118 render tasks passed
  • @croco/metering-core — 335 tests passed; real Redis integration — 23 tests passed
  • @croco/ai-usage — 84 tests passed
  • create-croco-app — 194 tests passed
  • Quick-start Lambda install, build, replay, status, and runtime smoke passed

Integration

  • Head: f729b554f32b9cb8031bc71c4b859213a6cf0938
  • Merge base: 555d5fed217df88beb54972fee529d1548ad5e57; current trunk: 555d5fed217df88beb54972fee529d1548ad5e57
  • The branch is rebased onto the current trunk and includes regenerated package catalog, Problem Registry, API documentation, public API, and test inventory artifacts.

Visual evidence

  • MeteringRecordStatus — persistence-uncertain state, 1280×720.

    MeteringRecordStatus includes the persistence-uncertain state at 1280x720

  • IdempotencyManager — markMeteringPersistenceStarted, 1280×720.

    IdempotencyManager markMeteringPersistenceStarted API at 1280x720

  • MeteringService — getRecordStatus, 1280×720.

    MeteringService getRecordStatus API at 1280x720

  • @croco/ai-usage — package API, 1280×720.

    AI usage package API at 1280x720

  • @croco/ai-usage — recovery contracts, 1280×720.

    AI usage recovery contracts at 1280x720

  • AI extension matrix — direct SDK ownership, 1280×720.

    AI extension matrix direct SDK ownership at 1280x720

All affected pages were checked without console warnings or errors and without horizontal overflow. This is a documentation-only visual output change, so no interaction recording is required.

Closes #2832

Copilot AI lite review requested due to automatic review settings September 22, 2026 15:51

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai

coderabbitai Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 312 files, which is 212 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 5bc00b7b-eb3b-43d1-9efd-a2eaa65e7be9

📥 Commits

Reviewing files that changed from the base of the PR and between 555d5fe and f729b55.

⛔ Files ignored due to path filters (2)
  • packages/problems-core/src/generated/problem-code-registry.ts is excluded by !**/generated/**
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (312)
  • .changeset/181ded8b.md
  • .changeset/7bcaa8a2.md
  • .changeset/audited-package-side-effects.md
  • .changeset/bounded-provider-retries.md
  • .changeset/cancellable-llm-operations.md
  • .changeset/clean-peer-graph.md
  • .changeset/direct-sdk-ai-usage.md
  • .changeset/fast-tests-stay-deterministic.md
  • .changeset/meter-abandoned-llm-streams.md
  • .changeset/normalize-export-condition-order.md
  • .changeset/preserve-decorator-metadata.md
  • .changeset/publishable-packages-apache-license.md
  • .changeset/recover-llm-completions.md
  • .changeset/reject-incomplete-openai-responses.md
  • .changeset/reject-malformed-openai-function-calls.md
  • .changeset/safe-problem-extensions.md
  • .changeset/scoped-ai-metering.md
  • .changeset/scoped-llm-service-resolution.md
  • .changeset/strict-metering-usage-values.md
  • .changeset/tidy-llm-invocations.md
  • .changeset/use-ai-metering-extractors.md
  • .github/workflows/ci.yml
  • .github/workflows/live-tests.yml
  • README.md
  • ci-reports/bundle-size/baseline.json
  • config/live-test-resources.json
  • croco.arch.json
  • docs/llm-governance.md
  • docs/package-catalog.json
  • docs/package-docs-report.md
  • docs/problem-code-registry.json
  • docs/release/silent-success-audit.json
  • examples/quick-start-lambda/src/integrations/inMemoryMetering.ts
  • examples/saas-billing-golden-path/vitest.config.ts
  • packages/ai-usage/LICENSE
  • packages/ai-usage/README.md
  • packages/ai-usage/package.json
  • packages/ai-usage/src/index.ts
  • packages/ai-usage/src/libs/AiPricingTable.ts
  • packages/ai-usage/src/libs/AiTelemetryBridge.ts
  • packages/ai-usage/src/libs/AiUsageIngestService.ts
  • packages/ai-usage/src/libs/events/AiCostBudgetExceededEvent.ts
  • packages/ai-usage/src/libs/events/AiUsageRecordedEvent.ts
  • packages/ai-usage/src/libs/problems/AiUsageProblems.ts
  • packages/ai-usage/src/libs/types.ts
  • packages/ai-usage/src/tests/AiPricingTable.spec.ts
  • packages/ai-usage/src/tests/AiTelemetry.spec.ts
  • packages/ai-usage/src/tests/AiUsageEvents.spec.ts
  • packages/ai-usage/src/tests/AiUsageIngestService.spec.ts
  • packages/ai-usage/src/tests/AiUsageProblems.spec.ts
  • packages/ai-usage/src/tests/AiUsageTypes.spec.ts
  • packages/ai-usage/tsconfig.json
  • packages/ai-usage/vitest.config.ts
  • packages/billing-polar/tsconfig.json
  • packages/billing-polar/vitest.config.ts
  • packages/create-croco-app/src/data/package-roles.json
  • packages/create-croco-app/src/helpers/croco-ranges.ts
  • packages/create-croco-app/src/tests/E2E.spec.ts
  • packages/create-croco-app/src/tests/templates-build.spec.ts
  • packages/create-croco-app/templates/ai-saas/README.md.hbs
  • packages/create-croco-app/templates/ai-saas/apps/api-server/package.json.hbs
  • packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiGenerate.ts
  • packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts
  • packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiSaas.ts
  • packages/create-croco-app/templates/ai-saas/apps/api-server/src/controllers/aiSchemas.ts
  • packages/create-croco-app/templates/ai-saas/apps/api-server/src/demo/aiSmokeContract.ts
  • packages/create-croco-app/templates/ai-saas/apps/api-server/src/tests/AiGenerate.spec.ts
  • packages/create-croco-app/templates/ai-saas/apps/api-server/src/tests/AiReceipts.spec.ts
  • packages/create-croco-app/templates/ai-saas/apps/api-server/src/tests/AiSaas.spec.ts
  • packages/create-croco-app/templates/saas/apps/api-server/package.json.hbs
  • packages/create-croco-app/templates/saas/apps/api-server/src/demo/failure-drill-smoke.ts
  • packages/create-croco-app/templates/saas/apps/api-server/src/demo/saasSmokeContract.ts
  • packages/create-croco-app/templates/saas/apps/api-server/src/demo/scenario.ts
  • packages/create-croco-app/templates/saas/apps/api-server/src/inMemoryAdapters.ts
  • packages/create-croco-app/templates/saas/apps/api-server/src/saasDemo.ts
  • packages/create-croco-app/templates/saas/apps/api-server/src/tests/SaasDemo.spec.ts
  • packages/docs/api-docs.config.mjs
  • packages/docs/package.json
  • packages/docs/src/content/docs/api/ai-usage/src/classes/AiCostBudgetExceededEvent.md
  • packages/docs/src/content/docs/api/ai-usage/src/classes/AiCostLimitExceededProblem.md
  • packages/docs/src/content/docs/api/ai-usage/src/classes/AiPricingNotFoundProblem.md
  • packages/docs/src/content/docs/api/ai-usage/src/classes/AiPricingRegistryConflictProblem.md
  • packages/docs/src/content/docs/api/ai-usage/src/classes/AiPricingTable.md
  • packages/docs/src/content/docs/api/ai-usage/src/classes/AiTelemetryBridge.md
  • packages/docs/src/content/docs/api/ai-usage/src/classes/AiUsageIngestService.md
  • packages/docs/src/content/docs/api/ai-usage/src/classes/AiUsageQuotaExceededProblem.md
  • packages/docs/src/content/docs/api/ai-usage/src/classes/AiUsageRecordFailedProblem.md
  • packages/docs/src/content/docs/api/ai-usage/src/classes/AiUsageRecordedEvent.md
  • packages/docs/src/content/docs/api/ai-usage/src/interfaces/AiTelemetrySpanAdapter.md
  • packages/docs/src/content/docs/api/ai-usage/src/interfaces/AiUsageQuotaPolicy.md
  • packages/docs/src/content/docs/api/ai-usage/src/interfaces/PricingRegistryEntry.md
  • packages/docs/src/content/docs/api/ai-usage/src/type-aliases/AiCostBudget.md
  • packages/docs/src/content/docs/api/ai-usage/src/type-aliases/AiCostRecord.md
  • packages/docs/src/content/docs/api/ai-usage/src/type-aliases/AiEmbeddingUsageRecord.md
  • packages/docs/src/content/docs/api/ai-usage/src/type-aliases/AiMeterId.md
  • packages/docs/src/content/docs/api/ai-usage/src/type-aliases/AiMeterUsageDelta.md
  • packages/docs/src/content/docs/api/ai-usage/src/type-aliases/AiUsage.md
  • packages/docs/src/content/docs/api/ai-usage/src/type-aliases/AiUsageEvent.md
  • packages/docs/src/content/docs/api/ai-usage/src/type-aliases/AiUsageFailurePolicy.md
  • packages/docs/src/content/docs/api/ai-usage/src/type-aliases/AiUsageIngestServiceOptions.md
  • packages/docs/src/content/docs/api/ai-usage/src/type-aliases/AiUsageQuotaPolicyContext.md
  • packages/docs/src/content/docs/api/ai-usage/src/type-aliases/AiUsageRecord.md
  • packages/docs/src/content/docs/api/ai-usage/src/type-aliases/ModelPricing.md
  • packages/docs/src/content/docs/api/ai-usage/src/type-aliases/PricingRegistryDefinition.md
  • packages/docs/src/content/docs/api/ai-usage/src/type-aliases/UsageAccuracy.md
  • packages/docs/src/content/docs/api/ai-usage/src/variables/AI_COST_USD_NANOS.md
  • packages/docs/src/content/docs/api/ai-usage/src/variables/AI_EMBEDDING_TOKENS.md
  • packages/docs/src/content/docs/api/ai-usage/src/variables/AI_INPUT_TOKENS.md
  • packages/docs/src/content/docs/api/ai-usage/src/variables/AI_OUTPUT_TOKENS.md
  • packages/docs/src/content/docs/api/ai-usage/src/variables/defaultAiPricingTable.md
  • packages/docs/src/content/docs/api/ai-usage/src/variables/samplePricingRegistry.md
  • packages/docs/src/content/docs/api/events-core/src/classes/DomainEvent.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/EmbeddingError.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/GenerationError.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/InMemoryLlmModel.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/InMemoryLlmRegistry.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/InvalidLlmPromptProblem.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/InvalidLlmResponseProblem.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmCompletionEventPublicationProblem.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmGeneratedEvent.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmModel.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmOperationAbortedProblem.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmProblem.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmProviderNotFoundProblem.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmRateLimitProblem.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmRegistry.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmService.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmServiceNotInitializedProblem.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmServiceProblem.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmStreamCompletedEvent.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmStructuredOutputProblem.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmTokenLimitExceededProblem.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmToolCalledEvent.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmToolExecutionProblem.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/LlmUsageRecordedEvent.md
  • packages/docs/src/content/docs/api/llm-core/src/classes/ModelNotFoundError.md
  • packages/docs/src/content/docs/api/llm-core/src/functions/Llm.md
  • packages/docs/src/content/docs/api/llm-core/src/functions/clearLlmService.md
  • packages/docs/src/content/docs/api/llm-core/src/functions/getLlmMetadata.md
  • packages/docs/src/content/docs/api/llm-core/src/functions/getLlmService.md
  • packages/docs/src/content/docs/api/llm-core/src/functions/runWithLlmService.md
  • packages/docs/src/content/docs/api/llm-core/src/functions/setLlmService.md
  • packages/docs/src/content/docs/api/llm-core/src/interfaces/LlmCompletionEventIntentStore.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/CancellableRequestOptions.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/EmbedManyParams.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/EmbedManyResult.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/EmbedParams.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/EmbedResult.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/GenerateObjectParams.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/GenerateParams.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/GenerateResult.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmCapabilities.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmCompletion.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmCompletionEvent.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmCompletionEventDeliveryClaim.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmCompletionEventDeliveryState.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmCompletionEventFailureStage.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmCompletionEventIntent.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmGenerateCompletion.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmInvocationOptions.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmMetadata.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmMethodMetadata.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmModelConfig.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmOptions.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmServiceOptions.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmStreamCompletion.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/LlmUsage.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/StreamChunk.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/StreamParams.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/ToolCall.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/ToolCallParams.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/ToolCallResult.md
  • packages/docs/src/content/docs/api/llm-core/src/type-aliases/ToolDefinition.md
  • packages/docs/src/content/docs/api/llm-metering/src/classes/LlmMeteringRecordFailedProblem.md
  • packages/docs/src/content/docs/api/llm-metering/src/classes/LlmMeteringServiceRequiredProblem.md
  • packages/docs/src/content/docs/api/llm-metering/src/classes/PricingRegistryConflictProblem.md
  • packages/docs/src/content/docs/api/llm-metering/src/functions/AiMetered.md
  • packages/docs/src/content/docs/api/llm-metering/src/functions/createMeteredAsyncIterable.md
  • packages/docs/src/content/docs/api/llm-metering/src/functions/extractUsageFromChunk.md
  • packages/docs/src/content/docs/api/llm-metering/src/functions/getAiMeteredMetadata.md
  • packages/docs/src/content/docs/api/llm-metering/src/functions/getLlmMeteringService.md
  • packages/docs/src/content/docs/api/llm-metering/src/functions/isAsyncIterable.md
  • packages/docs/src/content/docs/api/llm-metering/src/functions/runWithLlmMeteringService.md
  • packages/docs/src/content/docs/api/llm-metering/src/functions/setLlmMeteringService.md
  • packages/docs/src/content/docs/api/llm-metering/src/type-aliases/AiMeteredMetadata.md
  • packages/docs/src/content/docs/api/llm-metering/src/type-aliases/AiMeteredOptions.md
  • packages/docs/src/content/docs/api/llm-metering/src/type-aliases/LlmMeterId.md
  • packages/docs/src/content/docs/api/llm-metering/src/type-aliases/LlmMeteringFailurePolicy.md
  • packages/docs/src/content/docs/api/llm-metering/src/type-aliases/UsageAccuracy.md
  • packages/docs/src/content/docs/api/llm-metering/src/type-aliases/UsageWithModelInfo.md
  • packages/docs/src/content/docs/api/llm-metering/src/variables/COMPLETION_TOKENS.md
  • packages/docs/src/content/docs/api/llm-metering/src/variables/COST_USD.md
  • packages/docs/src/content/docs/api/llm-metering/src/variables/COST_USD_NANOS.md
  • packages/docs/src/content/docs/api/llm-metering/src/variables/EMBEDDING_TOKENS.md
  • packages/docs/src/content/docs/api/llm-metering/src/variables/PROMPT_TOKENS.md
  • packages/docs/src/content/docs/api/llm-metering/src/variables/defaultPricingTable.md
  • packages/docs/src/content/docs/api/llm-openai/src/classes/OpenAiAuthenticationProblem.md
  • packages/docs/src/content/docs/api/llm-openai/src/classes/OpenAiInvalidResponseProblem.md
  • packages/docs/src/content/docs/api/llm-openai/src/classes/OpenAiLlmModel.md
  • packages/docs/src/content/docs/api/llm-openai/src/classes/OpenAiRateLimitProblem.md
  • packages/docs/src/content/docs/api/llm-openai/src/classes/OpenAiRetryableUpstreamProblem.md
  • packages/docs/src/content/docs/api/llm-openai/src/classes/OpenAiTerminalUpstreamProblem.md
  • packages/docs/src/content/docs/api/llm-openai/src/classes/OpenAiValidationProblem.md
  • packages/docs/src/content/docs/api/llm-openai/src/functions/createOpenAiSdkTransport.md
  • packages/docs/src/content/docs/api/llm-openai/src/functions/normalizeOpenAiError.md
  • packages/docs/src/content/docs/api/llm-openai/src/type-aliases/OpenAiEmbeddingRequest.md
  • packages/docs/src/content/docs/api/llm-openai/src/type-aliases/OpenAiEmbeddingResponse.md
  • packages/docs/src/content/docs/api/llm-openai/src/type-aliases/OpenAiEnvironment.md
  • packages/docs/src/content/docs/api/llm-openai/src/type-aliases/OpenAiInputMessage.md
  • packages/docs/src/content/docs/api/llm-openai/src/type-aliases/OpenAiLlmModelConfig.md
  • packages/docs/src/content/docs/api/llm-openai/src/type-aliases/OpenAiRequestOptions.md
  • packages/docs/src/content/docs/api/llm-openai/src/type-aliases/OpenAiResponse.md
  • packages/docs/src/content/docs/api/llm-openai/src/type-aliases/OpenAiResponseRequest.md
  • packages/docs/src/content/docs/api/llm-openai/src/type-aliases/OpenAiSdkTransportOptions.md
  • packages/docs/src/content/docs/api/llm-openai/src/type-aliases/OpenAiStreamEvent.md
  • packages/docs/src/content/docs/api/llm-openai/src/type-aliases/OpenAiTransport.md
  • packages/docs/src/content/docs/api/llm-openai/src/type-aliases/OpenAiUsage.md
  • packages/docs/src/content/docs/api/metering-core/src/classes/IdempotencyManager.md
  • packages/docs/src/content/docs/api/metering-core/src/classes/MeteringService.md
  • packages/docs/src/content/docs/api/metering-core/src/type-aliases/MeteringRecordStatus.md
  • packages/docs/src/content/docs/api/problems-core/src/classes/Problem.md
  • packages/docs/src/content/docs/api/problems-core/src/variables/CROCO_PROBLEM_CODE_REGISTRY.md
  • packages/docs/src/content/docs/api/testing/src/functions/createLlmProviderConformanceSuite.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/LlmProviderConformanceCase.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/LlmProviderConformanceOptions.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/LlmProviderConformancePromptSet.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/LlmProviderConformanceSuite.md
  • packages/docs/src/content/docs/en/guides/getting-started.mdx
  • packages/docs/src/content/docs/en/index.mdx
  • packages/docs/src/content/docs/en/reference/extension-matrix.md
  • packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md
  • packages/llm-core/CHANGELOG.md
  • packages/llm-core/README.md
  • packages/llm-core/package.json
  • packages/llm-core/src/index.ts
  • packages/llm-core/src/libs/InMemoryLlmModel.ts
  • packages/llm-core/src/libs/InMemoryLlmRegistry.ts
  • packages/llm-core/src/libs/LlmCompletionEvents.ts
  • packages/llm-core/src/libs/LlmModel.ts
  • packages/llm-core/src/libs/LlmRegistry.ts
  • packages/llm-core/src/libs/LlmService.ts
  • packages/llm-core/src/libs/decorators/Llm.ts
  • packages/llm-core/src/libs/events/LlmGeneratedEvent.ts
  • packages/llm-core/src/libs/events/LlmStreamCompletedEvent.ts
  • packages/llm-core/src/libs/events/LlmToolCalledEvent.ts
  • packages/llm-core/src/libs/events/LlmUsageRecordedEvent.ts
  • packages/llm-core/src/libs/problems/LlmProblems.ts
  • packages/llm-core/src/libs/problems/LlmServiceProblem.ts
  • packages/llm-core/src/libs/types.ts
  • packages/llm-core/src/tests/AiSdkCompatibility.spec.ts
  • packages/llm-core/src/tests/InMemoryLlmModel.spec.ts
  • packages/llm-core/src/tests/LlmModel.spec.ts
  • packages/llm-core/src/tests/LlmService.spec.ts
  • packages/llm-core/src/tests/LlmTypes.spec.ts
  • packages/llm-core/src/tests/decorators/Llm.spec.ts
  • packages/llm-core/src/tests/events/LlmEvents.spec.ts
  • packages/llm-core/src/tests/problems/LlmProblems.spec.ts
  • packages/llm-core/tsconfig.json
  • packages/llm-core/vitest.config.ts
  • packages/llm-metering/CHANGELOG.md
  • packages/llm-metering/LICENSE
  • packages/llm-metering/README.md
  • packages/llm-metering/src/index.ts
  • packages/llm-metering/src/libs/decorators/AiMetered.ts
  • packages/llm-metering/src/libs/events/LlmUsageRecordedEvent.ts
  • packages/llm-metering/src/libs/streamMetering.ts
  • packages/llm-metering/src/tests/decorators/AiMetered.spec.ts
  • packages/llm-openai/CHANGELOG.md
  • packages/llm-openai/LICENSE
  • packages/llm-openai/README.md
  • packages/llm-openai/package.json
  • packages/llm-openai/src/index.ts
  • packages/llm-openai/src/libs/OpenAiLlmModel.ts
  • packages/llm-openai/src/libs/OpenAiSdkTransport.ts
  • packages/llm-openai/src/libs/problems/OpenAiProblems.ts
  • packages/llm-openai/src/libs/types.ts
  • packages/llm-openai/src/tests/OpenAiLiveSmoke.spec.ts
  • packages/llm-openai/src/tests/OpenAiLlmModel.spec.ts
  • packages/llm-openai/src/tests/OpenAiProblems.spec.ts
  • packages/llm-openai/src/tests/OpenAiSdkTransport.spec.ts
  • packages/llm-openai/tsconfig.json
  • packages/llm-openai/vitest.config.ts
  • packages/metering-core/src/index.ts
  • packages/metering-core/src/libs/IdempotencyManager.ts
  • packages/metering-core/src/libs/MeteringService.ts
  • packages/metering-core/src/tests/IdempotencyManager.spec.ts
  • packages/metering-core/src/tests/MeteringService.spec.ts
  • packages/metering-core/src/tests/RedisMetering.integration.spec.ts
  • packages/testing-resources/tsconfig.json
  • packages/testing-resources/vitest.config.ts
  • packages/testing/README.md
  • packages/testing/package.json
  • packages/testing/src/index.ts
  • packages/testing/src/libs/llm-provider-conformance.ts
  • packages/testing/src/tests/ConformanceContract.spec.ts
  • packages/testing/src/tests/testing.spec.ts
  • packages/testing/tsconfig.json
  • packages/testing/vitest.config.ts
  • public-api-surface.snapshot.json
  • scripts/changeset-required-check.mts
  • scripts/create-croco-app-generated-smoke.mts
  • scripts/package-entrypoint-smoke.mts
  • scripts/problem-registry.mts
  • scripts/quick-start-lambda-smoke.mts
  • scripts/tests/api-docs-pipeline.spec.ts
  • scripts/tests/changeset-required-check.spec.ts
  • scripts/tests/ci-cacheable-lane-runner.spec.ts
  • scripts/tests/package-entrypoint-smoke.spec.ts
  • scripts/tests/problem-registry.spec.ts
  • scripts/tests/test-evidence-reconcile.spec.ts
  • scripts/tests/verification-manifest.spec.ts
  • test-inventory.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

📊 Benchmark Results

✅ All benchmarks passed

Benchmark p75 Threshold Baseline vs Baseline Status Notes
CrocoApp constructor 25.7μs 30.0ms 8.2μs +214.7% ❌ -
CrocoApp lambdaHandler (10 controllers) 1.0ms 50.0ms 258.4μs +294.6% ❌ -
Lambda cold-start simulation 854.3μs 80.0ms 418.1μs +104.3% ❌ -
Lambda cold-start with headers 834.1μs 80.0ms 369.7μs +125.7% ❌ -
Lambda cold-start with binary body 791.5μs 80.0ms 339.1μs +133.4% ❌ -
Lambda cold-start with query params 820.6μs 80.0ms 301.3μs +172.4% ❌ -
Lambda cold-start with authorizer context 760.8μs 80.0ms 299.8μs +153.7% ❌ -
Lambda cold-start realistic scenario 724.1μs 80.0ms 299.2μs +142.0% ❌ -
EventBusConfig.start (10 handlers) 1.0μs 10.0ms 1.4μs -28.1% ✅ -
EventPublisher.publishNow single event 1.2μs 2.0ms 1.7μs -31.6% ✅ -
DefaultHandlerResolver.resolve × 10 0.0μs 5.0ms 0.1μs -37.5% ✅ -
Container.get singleton (cold) 34.3μs 5.0ms 70.3μs -51.2% ✅ -
Container.register × 50 components 1.7ms 10.0ms 3.2ms -46.5% ✅ -
Container.validate (50 components) 2.0ms 20.0ms 3.4ms -40.8% ✅ -
Container.get singleton (warm) 0.7μs 500.0μs 1.6μs -55.8% ✅ -
TelemetryRuntime.init (lambda preset) 6.7μs 200.0ms 1.1ms -99.4% ✅ -
lambdaPreset config creation 0.7μs 2.0ms 1.4μs -50.0% ✅ -

Updated: 2026-09-23T00:53:55.310Z · Commit: f729b55

@kang-heewon
kang-heewon force-pushed the breaking/2832-sdk-call-boundary branch from e42d44a to f729b55 Compare September 23, 2026 00:37
@kang-heewon
kang-heewon merged commit fd16580 into trunk Sep 23, 2026
21 checks passed
@kang-heewon
kang-heewon deleted the breaking/2832-sdk-call-boundary branch September 23, 2026 03:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[breaking][llm] 범용 LLM 엔진·모델 레지스트리·데코레이터를 제거하고 SDK 호출 경계로 대체한다

2 participants