Generative UI SDK for React
This report summarizes scanner evidence for tambo-ai/tambo, a TypeScript project with 11,220 GitHub stars. SynthScan examined 266,457 lines of code across 1529 source files, recording 363 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 2.1 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 313 finding(s).
Are imports declared and package/API names verified? 45 finding(s).
Are wrappers, guards, and repeated structures necessary? 191 finding(s).
Which changes need focused human review? 363 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 363 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plans/implement-react-sdk-v1-api-support.md | 431 | function isTextMessageContentEvent( | CODE |
| LOW | …eference/react-ui-base/_demos/thread-dropdown-demo.tsx | 41 | export function ThreadDropdownDemoPreview() { | CODE |
| LOW | cli/src/types/components.d.ts | 531 | export function useThreadContainerContext(): { | CODE |
| LOW | cli/src/__fixtures__/mock-fs-setup.ts | 79 | export function createMockComponentConfig( | CODE |
| LOW | cli/src/__fixtures__/mock-fs-setup.ts | 99 | export function createBasicProjectStructure(options: { | CODE |
| LOW | cli/src/__fixtures__/mock-fs-setup.ts | 223 | export function createProjectWithTamboSDK(): Record<string, string | null> { | CODE |
| LOW | cli/src/__fixtures__/mock-fs-setup.ts | 239 | export function createNextProjectWithTamboSDK(): Record<string, string | null> { | CODE |
| LOW | cli/src/__fixtures__/mock-fs-setup.ts | 269 | export function createProjectWithBothEnvFiles( | CODE |
| LOW | cli/src/__fixtures__/mock-fs-setup.ts | 448 | export function createProjectWithTamboSDKAndRegistry( | CODE |
| LOW | cli/src/utils/dependency-resolution.ts | 27 | export async function resolveComponentDependencies( | CODE |
| LOW | cli/src/utils/dependency-resolution.ts | 70 | export async function resolveDependenciesForComponents( | CODE |
| LOW | cli/src/utils/dependency-resolution.ts | 165 | export async function expandComponentsWithDependencies( | CODE |
| LOW | cli/src/commands/init.ts | 175 | function displaySelfHostInstructions(): void { | CODE |
| LOW | cli/src/commands/init.ts | 380 | async function createProjectAndGenerateKey( | CODE |
| LOW | cli/src/commands/init.ts | 409 | async function useExistingProjectAndGenerateKey( | CODE |
| LOW | cli/src/commands/init.ts | 649 | async function handleHostingChoiceAndAuth(): Promise<boolean> { | CODE |
| LOW | cli/src/commands/init.ts | 900 | function displayFullSendInstructions(selectedComponents: string[] = []): void { | CODE |
| LOW | cli/src/commands/upgrade/llm-rules.ts | 25 | export async function upgradeAgentDocsAndRemoveCursorRules( | CODE |
| LOW | cli/src/commands/upgrade/components.ts | 54 | async function prepareFinalComponentList( | CODE |
| LOW | cli/src/commands/upgrade/utils.ts | 134 | export async function migrateComponentsDuringUpgrade( | CODE |
| LOW | cli/src/commands/shared/path-utils.ts | 14 | export function getComponentDirectoryPath( | CODE |
| LOW | cli/src/commands/shared/path-utils.ts | 49 | export function getLegacyComponentDirectoryPath( | CODE |
| LOW | cli/src/commands/shared/component-utils.ts | 96 | export async function detectCrossLocationDependencies( | CODE |
| LOW | cli/src/commands/shared/component-utils.ts | 195 | export async function handleDependencyInconsistencies( | CODE |
| LOW | cli/src/commands/add/utils.ts | 257 | export function getComponentNpmDependencies(componentNames: string[]): { | CODE |
| LOW | cli/src/commands/add/tailwind/css/extraction.ts | 84 | export function extractUtilitiesFromLayer(cssFilePath: string): postcss.Rule[] { | CODE |
| LOW | cli/src/commands/add/tailwind/v4/toolchain-setup.ts | 319 | function printManualViteInstructions(projectRoot: string): void { | CODE |
| LOW | …dk/src/v1/providers/tambo-v1-thread-input-provider.tsx | 43 | function stagedImageToResourceContent( | CODE |
| LOW | react-sdk/src/v1/utils/tool-executor.test.ts | 270 | function createTrackerWithToolCall( | CODE |
| LOW | react-sdk/src/v1/utils/tool-executor.test.ts | 437 | function createTrackerWithToolCall( | CODE |
| LOW | react-sdk/src/v1/utils/tool-call-tracker.test.ts | 24 | function createTrackerWithToolCall( | CODE |
| LOW | react-sdk/src/v1/utils/component-renderer.tsx | 77 | export function useComponentContentOptional(): ComponentContentContext | null { | CODE |
| LOW | …ct-sdk/src/v1/hooks/use-tambo-v1-send-message.test.tsx | 815 | function TestWrapperWithoutRegistry({ | CODE |
| LOW | react-sdk/src/v1/hooks/use-tambo-v1.test.tsx | 111 | function createWrapperWithRealReducer( | CODE |
| LOW | react-sdk/src/v1/hooks/use-tambo-current-message.tsx | 75 | export function wrapWithTamboMessageProvider( | CODE |
| LOW | …ct-sdk/src/v1/hooks/use-tambo-v1-thread-input.test.tsx | 551 | function createDynamicThreadWrapper(initialThreadId: string) { | CODE |
| LOW | react-sdk/src/util/registry-validators.ts | 178 | export function validateAndPrepareComponent(component: TamboComponent): { | CODE |
| LOW | react-sdk/src/util/registry-validators.ts | 178 | export function validateAndPrepareComponent(component: TamboComponent): { | CODE |
| LOW | …dk/src/providers/tambo-context-attachment-provider.tsx | 71 | export function TamboContextAttachmentProvider({ | CODE |
| LOW | …dk/src/providers/tambo-context-attachment-provider.tsx | 185 | export function useTamboContextAttachment() { | CODE |
| LOW | packages/core/src/json.ts | 54 | export function stringifyJsonForMarkupText(value: unknown): string { | CODE |
| LOW | packages/core/src/memory-budget.ts | 16 | export function selectMemoriesWithinBudget( | CODE |
| LOW | packages/core/src/thread-message-validation.ts | 89 | export function validateUnsavedThreadMessage( | CODE |
| LOW | packages/core/src/encrypt.ts | 14 | export function extractProviderNameAndKey(decrypted: string): { | CODE |
| LOW | packages/core/src/strictness/json-schema.ts | 11 | function looksLikeTypeAlternatives( | CODE |
| LOW | packages/core/src/strictness/json-schema.ts | 42 | export function strictifyJSONSchemaProperties( | CODE |
| LOW | packages/core/src/strictness/json-schema.ts | 134 | export function strictifyJSONSchemaProperty( | CODE |
| LOW | packages/core/src/strictness/tool-call-strict.ts | 12 | export function unstrictifyToolCallRequest( | CODE |
| LOW | packages/core/src/strictness/tool-call-strict.ts | 55 | function unstrictifyToolCallParams( | CODE |
| LOW | packages/core/src/resend/audience.ts | 16 | export async function isResendEmailUnsubscribed( | CODE |
| LOW | packages/backend/src/util/resource-transformation.ts | 47 | export function extractServerKeyFromResource(resource: Resource): string { | CODE |
| LOW | packages/backend/src/util/resource-transformation.ts | 174 | function applyCachedContentToMessages( | CODE |
| LOW | packages/backend/src/util/resource-transformation.ts | 232 | export async function prefetchAndCacheResources( | CODE |
| LOW | packages/backend/src/util/resource-transformation.ts | 241 | function convertResourceToContentParts( | CODE |
| LOW | packages/backend/src/util/resource-transformation.ts | 274 | export function extractResourcesFromMessages( | CODE |
| LOW | packages/backend/src/util/tambo-custom-events.ts | 233 | export function createComponentStartEvent( | CODE |
| LOW | packages/backend/src/util/tambo-custom-events.ts | 247 | export function createComponentPropsDeltaEvent( | CODE |
| LOW | packages/backend/src/util/tambo-custom-events.ts | 261 | export function createComponentStateDeltaEvent( | CODE |
| LOW | packages/backend/src/util/tambo-custom-events.ts | 289 | export function createRunAwaitingInputEvent( | CODE |
| LOW | packages/backend/src/util/tools.ts | 48 | export function generateAdditionalContext(message: ThreadMessage) { | CODE |
| 126 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plans/2026-01-26-feat-react-ui-base-plan.md | 268 | ### Step 1: In-Place Component Refactoring (Preparation) | COMMENT |
| LOW | plans/2026-01-26-feat-react-ui-base-plan.md | 358 | ### Step 2: Create Package Scaffolding | COMMENT |
| LOW | plans/2026-01-26-feat-react-ui-base-plan.md | 381 | ### Step 3: Extract Shared Utilities | COMMENT |
| LOW | plans/2026-01-26-feat-react-ui-base-plan.md | 455 | ### Step 4: Simple Stateless Hooks | COMMENT |
| LOW | plans/2026-01-26-feat-react-ui-base-plan.md | 510 | ### Step 5: Stateful Resource/Prompt Hooks | COMMENT |
| LOW | plans/2026-01-26-feat-react-ui-base-plan.md | 563 | ### Step 6: Auto-Scroll Hook | COMMENT |
| LOW | plans/2026-01-26-feat-react-ui-base-plan.md | 622 | ### Step 7: Message Input State Hook | COMMENT |
| LOW | plans/2026-01-26-feat-react-ui-base-plan.md | 695 | ### Step 8: Thread Management & Suggestion Hooks | COMMENT |
| LOW | plans/2026-01-26-feat-react-ui-base-plan.md | 753 | ### Step 9: Move Hooks to @tambo-ai/react-ui-base | COMMENT |
| LOW | plans/2026-01-26-feat-react-ui-base-plan.md | 792 | ### Step 10: Testing and Validation | COMMENT |
| LOW⚡ | plans/agent-friendly-cli.md | 821 | # Step 1: Add the marketplace (one time) | COMMENT |
| LOW⚡ | plans/agent-friendly-cli.md | 824 | # Step 2: Install the plugin | COMMENT |
| LOW⚡ | plans/agent-friendly-cli.md | 827 | # Step 3: Use skills | COMMENT |
| LOW | plugins/tambo/skills/building-with-tambo/SKILL.md | 33 | ## Step 1: Detect Tech Stack | COMMENT |
| LOW | plugins/tambo/skills/building-with-tambo/SKILL.md | 99 | ## Step 2: Confirm with User | COMMENT |
| LOW | plugins/tambo/skills/building-with-tambo/SKILL.md | 119 | ## Step 3: Install Dependencies | COMMENT |
| LOW | plugins/tambo/skills/building-with-tambo/SKILL.md | 142 | ## Step 4: Create Provider Setup | COMMENT |
| LOW | plugins/tambo/skills/building-with-tambo/SKILL.md | 221 | ## Step 5: Create Component Registry | COMMENT |
| LOW | plugins/tambo/skills/building-with-tambo/SKILL.md | 232 | ## Step 6: Add Chat UI | COMMENT |
| LOW | …ng-with-tambo/references/add-components-to-registry.md | 35 | ## Step 1: Analyze Component | COMMENT |
| LOW | …ng-with-tambo/references/add-components-to-registry.md | 77 | ## Step 2: Generate Zod Schema | COMMENT |
| LOW | …ng-with-tambo/references/add-components-to-registry.md | 106 | ## Step 3: Write Description | COMMENT |
| LOW | …ng-with-tambo/references/add-components-to-registry.md | 118 | ## Step 4: Add to Registry | COMMENT |
| LOW | plugins/tambo/skills/generative-ui/SKILL.md | 27 | ### Step 1: Gather All Non-Sensitive Preferences (Single AskUserQuestion Call) | COMMENT |
| LOW | plugins/tambo/skills/generative-ui/SKILL.md | 48 | ### Step 2: Execute Everything (No Stopping) | COMMENT |
| LOW | plugins/tambo/skills/generative-ui/SKILL.md | 161 | ### Step 3: Summary | COMMENT |
| LOW | …/solutions/documentation/react-ui-base-demo-pattern.md | 148 | // Step 1: Declare controls | COMMENT |
| LOW | …/solutions/documentation/react-ui-base-demo-pattern.md | 155 | // Step 2: Use controlled values in memoized data | COMMENT |
| LOW | …/solutions/documentation/react-ui-base-demo-pattern.md | 170 | // Step 3: Render component with controlled state | COMMENT |
| LOW | …/solutions/documentation/react-ui-base-demo-pattern.md | 182 | // Step 4: Define code shown in panel | COMMENT |
| LOW | …solutions/build-errors/release-please-lockfile-sync.md | 61 | ### Step 1: Add node-workspace Plugin | COMMENT |
| LOW | …solutions/build-errors/release-please-lockfile-sync.md | 74 | ### Step 2: Add Backup Sync Workflow | COMMENT |
| LOW | …solutions/build-errors/release-please-lockfile-sync.md | 85 | ### Step 3: Remove CI Workaround | COMMENT |
| LOW⚡ | .claude/skills/creating-styled-wrappers/SKILL.md | 58 | ### Step 1: Identify Duplicated Logic | COMMENT |
| LOW⚡ | .claude/skills/creating-styled-wrappers/SKILL.md | 67 | ### Step 2: Import Base Components | COMMENT |
| LOW⚡ | .claude/skills/creating-styled-wrappers/SKILL.md | 73 | ### Step 3: Wrap with Base Root | COMMENT |
| LOW | .claude/skills/creating-styled-wrappers/SKILL.md | 95 | ### Step 4: Apply State-Based Styling and Behavior | COMMENT |
| LOW | .claude/skills/creating-styled-wrappers/SKILL.md | 153 | ### Step 5: Wrap Sub-Components | COMMENT |
| LOW | .claude/skills/creating-styled-wrappers/SKILL.md | 182 | ### Step 6: Final Verification | COMMENT |
| LOW | .claude/skills/compound-components/SKILL.md | 106 | ### Step 1: Create context file | COMMENT |
| LOW | .claude/skills/compound-components/SKILL.md | 136 | ### Step 2: Create Root component | COMMENT |
| LOW | .claude/skills/compound-components/SKILL.md | 162 | ### Step 3: Create consumer components | COMMENT |
| LOW | .claude/skills/compound-components/SKILL.md | 212 | ### Step 4: Create namespace export | COMMENT |
| LOW | .claude/skills/compound-components/SKILL.md | 227 | ### Step 5: Verify guidelines | COMMENT |
| LOW | .claude/skills/ai-sdk-model-manager/SKILL.md | 39 | ### Step 1: Update AI SDK Packages | COMMENT |
| LOW | .claude/skills/ai-sdk-model-manager/SKILL.md | 49 | ### Step 2: Identify Missing Models | COMMENT |
| LOW | .claude/skills/ai-sdk-model-manager/SKILL.md | 68 | ### Step 3: Research New Models | COMMENT |
| LOW | .claude/skills/ai-sdk-model-manager/SKILL.md | 84 | ### Step 4: Prompt User | COMMENT |
| LOW | .claude/skills/ai-sdk-model-manager/SKILL.md | 103 | ### Step 5: Add Selected Models | COMMENT |
| LOW | .claude/skills/ai-sdk-model-manager/SKILL.md | 137 | ### Step 6: Verify TypeScript | COMMENT |
| LOW | .claude/skills/ai-sdk-model-manager/SKILL.md | 148 | ### Step 7: Update Documentation | COMMENT |
| LOW | .claude/skills/ai-sdk-model-manager/SKILL.md | 162 | ### Step 8: Run Quality Checks | COMMENT |
| LOW | .claude/skills/ai-sdk-model-manager/SKILL.md | 173 | ### Step 9: Create Pull Request | COMMENT |
| LOW⚡ | docs/AGENTS.md | 242 | ### Step 1: Clear action | COMMENT |
| LOW⚡ | docs/AGENTS.md | 244 | ### Step 2: Clear action | COMMENT |
| LOW⚡ | docs/AGENTS.md | 246 | ### Step 3: Clear action | COMMENT |
| LOW | cli/src/lib/device-auth.ts | 71 | // Step 1: Initiate the device auth flow | COMMENT |
| LOW | cli/src/lib/device-auth.ts | 82 | // Step 2: Display instructions to user | COMMENT |
| LOW | cli/src/lib/device-auth.ts | 124 | // Step 3: Poll for completion | COMMENT |
| LOW | …t-sdk/src/v1/hooks/use-tambo-v1-stream-status.test.tsx | 323 | // Step 1: Start with streaming, props empty | COMMENT |
| 6 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | react-sdk/src/v1/utils/event-accumulator.test.ts | 2007 | messages: state.threadMap.thread_1.thread.messages.map((m) => ({ | CODE |
| CRITICAL | react-sdk/src/v1/utils/event-accumulator.test.ts | 2100 | messages: state.threadMap.thread_1.thread.messages.map((m) => ({ | CODE |
| CRITICAL | react-sdk/src/v1/utils/event-accumulator.test.ts | 2174 | messages: state.threadMap.thread_1.thread.messages.map((m) => ({ | CODE |
| CRITICAL | react-sdk/src/v1/utils/event-accumulator.test.ts | 2591 | messages: state.threadMap.thread_1.thread.messages.map((m) => ({ | CODE |
| CRITICAL | packages/client/src/tambo-client.ts | 661 | const response = await this.sdkClient.beta.threads.suggestions.list( | CODE |
| CRITICAL | packages/client/src/tambo-client.ts | 681 | const response = await this.sdkClient.beta.threads.suggestions.generate( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/src/commands/init.test.ts | 516 | user: { id: "u1", email: "test@test.com", name: "Test" }, | CODE |
| LOW | cli/src/commands/init.test.ts | 555 | user: { id: "u1", email: "test@test.com", name: "Test" }, | CODE |
| LOW | …-sdk/src/v1/providers/tambo-v1-stream-context.test.tsx | 79 | expect(result.current.currentThreadId).toBe("placeholder"); | CODE |
| LOW | …-sdk/src/v1/providers/tambo-v1-stream-context.test.tsx | 82 | "placeholder", | CODE |
| LOW | …-sdk/src/v1/providers/tambo-v1-stream-context.test.tsx | 273 | expect(tempId!).toBe("placeholder"); | CODE |
| LOW | …-sdk/src/v1/providers/tambo-v1-stream-context.test.tsx | 274 | expect(result.current.state.currentThreadId).toBe("placeholder"); | CODE |
| LOW | react-sdk/src/v1/providers/tambo-v1-provider.test.tsx | 125 | expect(result.current.currentThreadId).toBe("placeholder"); | CODE |
| LOW | react-sdk/src/v1/providers/tambo-v1-provider.test.tsx | 143 | expect(result.current.state.currentThreadId).toBe("placeholder"); | CODE |
| LOW | react-sdk/src/v1/hooks/use-tambo-v1.test.tsx | 177 | expect(result.current.thread?.thread.id).toBe("placeholder"); | CODE |
| LOW | react-sdk/src/v1/hooks/use-tambo-v1.test.tsx | 249 | expect(result.current.currentThreadId).toBe("placeholder"); | CODE |
| LOW | react-sdk/src/v1/hooks/use-tambo-v1.test.tsx | 251 | expect(result.current.thread?.thread.id).toBe("placeholder"); | CODE |
| LOW | react-sdk/src/v1/hooks/use-tambo-v1.test.tsx | 276 | expect(newThreadId!).toBe("placeholder"); | CODE |
| LOW | react-sdk/src/v1/hooks/use-tambo-v1.test.tsx | 586 | id: "placeholder", | CODE |
| LOW | react-sdk/src/v1/hooks/use-tambo-v1.test.tsx | 608 | currentThreadId: "placeholder", | CODE |
| LOW | react-sdk/src/v1/hooks/use-tambo-v1.test.tsx | 1128 | id: "placeholder", | CODE |
| LOW | react-sdk/src/v1/hooks/use-tambo-v1.test.tsx | 1139 | currentThreadId: "placeholder", | CODE |
| LOW | react-sdk/src/v1/hooks/use-tambo-v1.test.tsx | 1274 | currentThreadId: "placeholder", | CODE |
| LOW | …act-sdk/src/v1/hooks/use-tambo-v1-suggestions.test.tsx | 161 | currentThreadId: "placeholder", | CODE |
| LOW | …sdk/src/v1/hooks/use-tambo-v1-component-state.test.tsx | 392 | currentThreadId: "placeholder", | CODE |
| LOW | …ct-sdk/src/v1/hooks/use-tambo-v1-thread-input.test.tsx | 465 | expect(result.current.threadId).toBe("placeholder"); | CODE |
| LOW | react-sdk/src/v1/hooks/use-tambo-v1.ts | 112 | * Current thread ID (always available - uses "placeholder" for new threads) | COMMENT |
| LOW | packages/core/src/strictness/tool-call-strict.test.ts | 160 | name: "John Doe", | CODE |
| LOW | packages/core/src/strictness/tool-call-strict.test.ts | 174 | name: "John Doe", | CODE |
| LOW | packages/core/src/auth/email-domain.test.ts | 7 | email: "user@example.com", | CODE |
| LOW | packages/core/src/auth/email-domain.test.ts | 17 | email: "user@example.com", | CODE |
| LOW | packages/client/src/utils/event-accumulator.ts | 218 | export const PLACEHOLDER_THREAD_ID = "placeholder"; | CODE |
| LOW | .github/workflows/ci.yml | 155 | DATABASE_URL: "postgresql://dummy-user:dummy-password@dummy-host:5432/dummy-database" | CODE |
| LOW | stainless/openapi.json | 2718 | "parameterValue": "John Doe" | CODE |
| LOW | …e/src/components/generative/EditWithTamboInterface.tsx | 128 | placeholder="John Doe" | CODE |
| LOW | …d)/internal/smoketest/components/linear-issue.test.tsx | 26 | assignee: { name: "Jane Doe", email: "jane@example.com" }, | CODE |
| LOW | …d)/internal/smoketest/components/linear-issue.test.tsx | 84 | expect(screen.getByText("Jane Doe")).toBeInTheDocument(); | CODE |
| LOW | apps/web/lib/slack.test.ts | 6 | SLACK_OAUTH_TOKEN: "initial-dummy-token", | CODE |
| LOW | apps/api/src/common/utils/oauth.test.ts | 757 | JSON.stringify({ email: "user@example.com", name: "Test" }), | CODE |
| LOW | apps/api/src/threads/dto/component-decision.dto.ts | 51 | parameters: [{ parameterName: "name", parameterValue: "John Doe" }], | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conductor-setup.sh | 6 | # Check if npm is available | COMMENT |
| LOW⚡ | scripts/cloud/tambo-psql.sh | 16 | # Check if docker.env exists | COMMENT |
| LOW⚡ | scripts/cloud/tambo-psql.sh | 23 | # Check if Docker is running | COMMENT |
| LOW⚡ | scripts/cloud/tambo-psql.sh | 28 | # Check if PostgreSQL container is running | COMMENT |
| LOW⚡ | scripts/cloud/tambo-build.sh | 16 | # Check if docker.env exists | COMMENT |
| LOW⚡ | scripts/cloud/tambo-build.sh | 23 | # Check if Docker is running | COMMENT |
| LOW⚡ | scripts/cloud/tambo-build.sh | 31 | # Check if running in GitHub Actions | COMMENT |
| LOW | scripts/cloud/tambo-logs.sh | 13 | # Check if docker.env exists | COMMENT |
| LOW | scripts/cloud/tambo-logs.sh | 39 | # Check if help requested | COMMENT |
| LOW | scripts/cloud/tambo-start.sh | 16 | # Check if docker.env exists | COMMENT |
| LOW | scripts/cloud/tambo-start.sh | 23 | # Check if Docker is running | COMMENT |
| LOW | scripts/cloud/tambo-start.sh | 48 | # Check if PostgreSQL is healthy | COMMENT |
| LOW | scripts/cloud/tambo-start.sh | 56 | # Check if postgres container is healthy | COMMENT |
| LOW⚡ | scripts/cloud/tambo-setup.sh | 18 | # Check if Docker is installed | COMMENT |
| LOW⚡ | scripts/cloud/tambo-setup.sh | 25 | # Check if Docker Compose is installed (robust) | COMMENT |
| LOW | scripts/cloud/tambo-stop.sh | 13 | # Check if docker.env exists | COMMENT |
| LOW | .github/workflows/docker.yml | 192 | # Check if database tables were created | COMMENT |
| LOW | .github/workflows/docker.yml | 196 | # Check if migrations were applied | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | devdocs/STORAGE_SETUP.md | 94 | -H "x-api-key: YOUR_API_KEY" \ | CODE |
| HIGH | cli/README.md | 134 | NEXT_PUBLIC_TAMBO_API_KEY=your-api-key | CODE |
| HIGH | packages/core/src/llm-config-types.ts | 84 | example: { Authorization: "Bearer <your-api-key>" }, | CODE |
| HIGH | packages/client/README.md | 20 | const client = new TamboClient({ apiKey: "your-api-key" }); | CODE |
| HIGH | packages/client/src/tambo-client.ts | 140 | * const client = new TamboClient({ apiKey: "your-api-key" }); | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plans/fix-fork-pr-labeling.md | 161 | COMMENT | |
| LOW | supabase/config.toml | 61 | # Port to use for Supabase Studio. | COMMENT |
| LOW | supabase/config.toml | 101 | # The base URL of your website. Used as an allow-list for redirects and for constructing URLs used | COMMENT |
| LOW | supabase/config.toml | 141 | # Number of seconds before the email OTP expires (defaults to 1 hour). | COMMENT |
| LOW | supabase/config.toml | 161 | enable_signup = false | COMMENT |
| LOW | supabase/config.toml | 261 | # Configure one of the supported request policies: `oneshot`, `per_worker`. | COMMENT |
| LOW | scripts/cloud/_cloud-helpers.sh | 1 | #!/usr/bin/env sh | COMMENT |
| LOW | packages/backend/src/services/llm/ai-sdk-client.ts | 541 | if (accumulatedMessage.length > 0 && textMessageId) { | COMMENT |
| LOW | packages/backend/src/services/llm/ai-sdk-client.ts | 801 | // If we were not streaming tool calls, this is how we would handle the | COMMENT |
| LOW | packages/backend/src/services/llm/ai-sdk-client.ts | 821 | // id: call.toolCallId, | COMMENT |
| LOW | packages/db/src/index.ts | 21 | // Uncomment to debug connection pool issues | COMMENT |
| LOW | .github/workflows/stlc-generate.yml | 1 | name: Generate TypeScript SDK with stlc | COMMENT |
| LOW | apps/api/jest.config.ts | 61 | // dependencyExtractor: undefined, | COMMENT |
| LOW | apps/api/jest.config.ts | 81 | // globals: {}, | COMMENT |
| LOW | apps/api/jest.config.ts | 121 | COMMENT | |
| LOW | apps/api/jest.config.ts | 141 | rootDir: "src", | COMMENT |
| LOW | apps/api/jest.config.ts | 161 | // snapshotSerializers: [], | COMMENT |
| LOW | apps/api/src/test/jest.setup.ts | 1 | import { Logger } from "@nestjs/common"; | COMMENT |
| LOW | apps/api/src/common/utils/oauth.test.ts | 381 | // TODO: Fix mocking of createRemoteJWKSet to avoid network requests | COMMENT |
| LOW | apps/api/src/common/utils/oauth.test.ts | 401 | // | COMMENT |
| LOW | apps/api/src/common/utils/oauth.test.ts | 421 | // | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | showcase/AGENTS.md | 28 | │ │ ├── (generative)/ # AI-generated UI (forms, graphs, maps) | CODE |
| HIGH | apps/web/server/api/routers/tools.ts | 120 | // Normalize minor whitespace only (preserve original casing as requested) | COMMENT |
| HIGH | apps/web/server/api/routers/tools.ts | 295 | // Normalize minor whitespace only (preserve original casing as requested) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/src/lib/device-auth.ts | 71 | // Step 1: Initiate the device auth flow | COMMENT |
| LOW | cli/src/lib/device-auth.ts | 82 | // Step 2: Display instructions to user | COMMENT |
| LOW | cli/src/lib/device-auth.ts | 124 | // Step 3: Poll for completion | COMMENT |
| LOW | …t-sdk/src/v1/hooks/use-tambo-v1-stream-status.test.tsx | 323 | // Step 1: Start with streaming, props empty | COMMENT |
| LOW⚡ | …t-sdk/src/v1/hooks/use-tambo-v1-stream-status.test.tsx | 336 | // Step 2: Simulate streaming in title | COMMENT |
| LOW⚡ | …t-sdk/src/v1/hooks/use-tambo-v1-stream-status.test.tsx | 346 | // Step 3: Simulate streaming in body | COMMENT |
| LOW⚡ | …t-sdk/src/v1/hooks/use-tambo-v1-stream-status.test.tsx | 356 | // Step 4: Component streaming done | COMMENT |
| LOW⚡ | packages/backend/src/services/tool/tool-service.test.ts | 297 | // Step 1: Simulate client-side parameter extraction | COMMENT |
| LOW⚡ | packages/backend/src/services/tool/tool-service.test.ts | 300 | // Step 2: Build metadata (same as mapTamboToolToContextTool) | COMMENT |
| LOW⚡ | packages/backend/src/services/tool/tool-service.test.ts | 307 | // Step 3: Convert to OpenAI tool (what the LLM actually sees) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | cli/src/lib/device-auth.test.ts | 10 | // ── Mock state ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cli/src/lib/device-auth.test.ts | 21 | // ── Mocks ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cli/src/lib/device-auth.test.ts | 125 | // ── Import after mocks ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cli/src/lib/device-auth.test.ts | 129 | // ── Capture console output ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cli/src/lib/device-auth.test.ts | 165 | // ── Tests ─────────────────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | cli/src/templates/tambo-template.ts | 50 | // Import your custom components that utilize the Tambo SDK | COMMENT |
| MEDIUM⚡ | scripts/cloud/tambo-setup.sh | 25 | # Check if Docker Compose is installed (robust) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | apps/api/README.md | 32 | ├── ai/ # LLM orchestration + tool runners | CODE |
| MEDIUM | apps/api/AGENTS.md | 34 | ├── ai/ # AI orchestration services (LLM + tool routing) | CODE |
| MEDIUM | apps/api/AGENTS.md | 42 | ├── scheduler/ # Cron + background job orchestration | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/core/src/mcp-client.ts | 331 | // Example usage: | COMMENT |
| LOW | packages/client/src/mcp/mcp-client.ts | 353 | // Example usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | stainless/openapi.stainless.yml | 252 | # README.md of various SDKs. In particular, you can change the `headline` | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | cli/src/cli.ts | 328 | `$ ${chalk.cyan("tambo skills add my-skill.md")} # Create a skill`, | CODE |