move @sourcebot/logger into the shared package

This commit is contained in:
bkellam 2025-11-02 13:56:57 -08:00
parent c8fecc02fe
commit 484c9fc6b1
62 changed files with 90 additions and 197 deletions

View file

@ -44,14 +44,12 @@ COPY ./packages/db ./packages/db
COPY ./packages/schemas ./packages/schemas COPY ./packages/schemas ./packages/schemas
COPY ./packages/crypto ./packages/crypto COPY ./packages/crypto ./packages/crypto
COPY ./packages/error ./packages/error COPY ./packages/error ./packages/error
COPY ./packages/logger ./packages/logger
COPY ./packages/shared ./packages/shared COPY ./packages/shared ./packages/shared
RUN yarn workspace @sourcebot/db install RUN yarn workspace @sourcebot/db install
RUN yarn workspace @sourcebot/schemas install RUN yarn workspace @sourcebot/schemas install
RUN yarn workspace @sourcebot/crypto install RUN yarn workspace @sourcebot/crypto install
RUN yarn workspace @sourcebot/error install RUN yarn workspace @sourcebot/error install
RUN yarn workspace @sourcebot/logger install
RUN yarn workspace @sourcebot/shared install RUN yarn workspace @sourcebot/shared install
# ------------------------------------ # ------------------------------------
@ -99,7 +97,6 @@ COPY --from=shared-libs-builder /app/packages/db ./packages/db
COPY --from=shared-libs-builder /app/packages/schemas ./packages/schemas COPY --from=shared-libs-builder /app/packages/schemas ./packages/schemas
COPY --from=shared-libs-builder /app/packages/crypto ./packages/crypto COPY --from=shared-libs-builder /app/packages/crypto ./packages/crypto
COPY --from=shared-libs-builder /app/packages/error ./packages/error COPY --from=shared-libs-builder /app/packages/error ./packages/error
COPY --from=shared-libs-builder /app/packages/logger ./packages/logger
COPY --from=shared-libs-builder /app/packages/shared ./packages/shared COPY --from=shared-libs-builder /app/packages/shared ./packages/shared
# Fixes arm64 timeouts # Fixes arm64 timeouts
@ -140,7 +137,6 @@ COPY --from=shared-libs-builder /app/packages/db ./packages/db
COPY --from=shared-libs-builder /app/packages/schemas ./packages/schemas COPY --from=shared-libs-builder /app/packages/schemas ./packages/schemas
COPY --from=shared-libs-builder /app/packages/crypto ./packages/crypto COPY --from=shared-libs-builder /app/packages/crypto ./packages/crypto
COPY --from=shared-libs-builder /app/packages/error ./packages/error COPY --from=shared-libs-builder /app/packages/error ./packages/error
COPY --from=shared-libs-builder /app/packages/logger ./packages/logger
COPY --from=shared-libs-builder /app/packages/shared ./packages/shared COPY --from=shared-libs-builder /app/packages/shared ./packages/shared
RUN yarn workspace @sourcebot/backend install RUN yarn workspace @sourcebot/backend install
RUN yarn workspace @sourcebot/backend build RUN yarn workspace @sourcebot/backend build
@ -227,7 +223,6 @@ COPY --from=shared-libs-builder /app/packages/db ./packages/db
COPY --from=shared-libs-builder /app/packages/schemas ./packages/schemas COPY --from=shared-libs-builder /app/packages/schemas ./packages/schemas
COPY --from=shared-libs-builder /app/packages/crypto ./packages/crypto COPY --from=shared-libs-builder /app/packages/crypto ./packages/crypto
COPY --from=shared-libs-builder /app/packages/error ./packages/error COPY --from=shared-libs-builder /app/packages/error ./packages/error
COPY --from=shared-libs-builder /app/packages/logger ./packages/logger
COPY --from=shared-libs-builder /app/packages/shared ./packages/shared COPY --from=shared-libs-builder /app/packages/shared ./packages/shared
# Configure dependencies # Configure dependencies

View file

@ -32,7 +32,6 @@
"@sourcebot/crypto": "workspace:*", "@sourcebot/crypto": "workspace:*",
"@sourcebot/db": "workspace:*", "@sourcebot/db": "workspace:*",
"@sourcebot/error": "workspace:*", "@sourcebot/error": "workspace:*",
"@sourcebot/logger": "workspace:*",
"@sourcebot/schemas": "workspace:*", "@sourcebot/schemas": "workspace:*",
"@sourcebot/shared": "workspace:*", "@sourcebot/shared": "workspace:*",
"@t3-oss/env-core": "^0.12.0", "@t3-oss/env-core": "^0.12.0",

View file

@ -1,5 +1,5 @@
import { AzureDevOpsConnectionConfig } from "@sourcebot/schemas/v3/azuredevops.type"; import { AzureDevOpsConnectionConfig } from "@sourcebot/schemas/v3/azuredevops.type";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { measure, fetchWithRetry } from "./utils.js"; import { measure, fetchWithRetry } from "./utils.js";
import micromatch from "micromatch"; import micromatch from "micromatch";
import { BackendException, BackendError } from "@sourcebot/error"; import { BackendException, BackendError } from "@sourcebot/error";

View file

@ -2,7 +2,7 @@ import { createBitbucketCloudClient } from "@coderabbitai/bitbucket/cloud";
import { createBitbucketServerClient } from "@coderabbitai/bitbucket/server"; import { createBitbucketServerClient } from "@coderabbitai/bitbucket/server";
import { BitbucketConnectionConfig } from "@sourcebot/schemas/v3/bitbucket.type"; import { BitbucketConnectionConfig } from "@sourcebot/schemas/v3/bitbucket.type";
import type { ClientOptions, ClientPathsWithMethod } from "openapi-fetch"; import type { ClientOptions, ClientPathsWithMethod } from "openapi-fetch";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { measure, fetchWithRetry } from "./utils.js"; import { measure, fetchWithRetry } from "./utils.js";
import * as Sentry from "@sentry/node"; import * as Sentry from "@sentry/node";
import { import {

View file

@ -1,5 +1,5 @@
import { Prisma, PrismaClient } from "@sourcebot/db"; import { Prisma, PrismaClient } from "@sourcebot/db";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { ConnectionConfig } from "@sourcebot/schemas/v3/connection.type"; import { ConnectionConfig } from "@sourcebot/schemas/v3/connection.type";
import { loadConfig } from "@sourcebot/shared"; import { loadConfig } from "@sourcebot/shared";
import chokidar, { FSWatcher } from 'chokidar'; import chokidar, { FSWatcher } from 'chokidar';

View file

@ -1,6 +1,6 @@
import * as Sentry from "@sentry/node"; import * as Sentry from "@sentry/node";
import { Connection, ConnectionSyncJobStatus, PrismaClient } from "@sourcebot/db"; import { Connection, ConnectionSyncJobStatus, PrismaClient } from "@sourcebot/db";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { ConnectionConfig } from "@sourcebot/schemas/v3/connection.type"; import { ConnectionConfig } from "@sourcebot/schemas/v3/connection.type";
import { loadConfig, env } from "@sourcebot/shared"; import { loadConfig, env } from "@sourcebot/shared";
import { Job, Queue, ReservedJob, Worker } from "groupmq"; import { Job, Queue, ReservedJob, Worker } from "groupmq";

View file

@ -1,7 +1,6 @@
import * as Sentry from "@sentry/node"; import * as Sentry from "@sentry/node";
import { PrismaClient, AccountPermissionSyncJobStatus, Account} from "@sourcebot/db"; import { PrismaClient, AccountPermissionSyncJobStatus, Account} from "@sourcebot/db";
import { createLogger } from "@sourcebot/logger"; import { env, hasEntitlement, createLogger } from "@sourcebot/shared";
import { env, hasEntitlement } from "@sourcebot/shared";
import { Job, Queue, Worker } from "bullmq"; import { Job, Queue, Worker } from "bullmq";
import { Redis } from "ioredis"; import { Redis } from "ioredis";
import { PERMISSION_SYNC_SUPPORTED_CODE_HOST_TYPES } from "../constants.js"; import { PERMISSION_SYNC_SUPPORTED_CODE_HOST_TYPES } from "../constants.js";

View file

@ -1,7 +1,7 @@
import { App } from "@octokit/app"; import { App } from "@octokit/app";
import { getTokenFromConfig } from "@sourcebot/crypto"; import { getTokenFromConfig } from "@sourcebot/crypto";
import { PrismaClient } from "@sourcebot/db"; import { PrismaClient } from "@sourcebot/db";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { GitHubAppConfig } from "@sourcebot/schemas/v3/index.type"; import { GitHubAppConfig } from "@sourcebot/schemas/v3/index.type";
import { env, loadConfig } from "@sourcebot/shared"; import { env, loadConfig } from "@sourcebot/shared";

View file

@ -1,6 +1,6 @@
import * as Sentry from "@sentry/node"; import * as Sentry from "@sentry/node";
import { PrismaClient, Repo, RepoPermissionSyncJobStatus } from "@sourcebot/db"; import { PrismaClient, Repo, RepoPermissionSyncJobStatus } from "@sourcebot/db";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { env, hasEntitlement } from "@sourcebot/shared"; import { env, hasEntitlement } from "@sourcebot/shared";
import { Job, Queue, Worker } from 'bullmq'; import { Job, Queue, Worker } from 'bullmq';
import { Redis } from 'ioredis'; import { Redis } from 'ioredis';

View file

@ -1,5 +1,5 @@
import micromatch from "micromatch"; import micromatch from "micromatch";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { PrismaClient } from "@sourcebot/db"; import { PrismaClient } from "@sourcebot/db";
import { getPlan, hasEntitlement, SOURCEBOT_SUPPORT_EMAIL } from "@sourcebot/shared"; import { getPlan, hasEntitlement, SOURCEBOT_SUPPORT_EMAIL } from "@sourcebot/shared";
import { SearchContext } from "@sourcebot/schemas/v3/index.type"; import { SearchContext } from "@sourcebot/schemas/v3/index.type";

View file

@ -1,6 +1,6 @@
import fetch from 'cross-fetch'; import fetch from 'cross-fetch';
import { GerritConnectionConfig } from "@sourcebot/schemas/v3/index.type" import { GerritConnectionConfig } from "@sourcebot/schemas/v3/index.type"
import { createLogger } from '@sourcebot/logger'; import { createLogger } from '@sourcebot/shared';
import micromatch from "micromatch"; import micromatch from "micromatch";
import { measure, fetchWithRetry } from './utils.js'; import { measure, fetchWithRetry } from './utils.js';
import { BackendError } from '@sourcebot/error'; import { BackendError } from '@sourcebot/error';

View file

@ -1,6 +1,6 @@
import * as Sentry from "@sentry/node"; import * as Sentry from "@sentry/node";
import { getTokenFromConfig } from "@sourcebot/crypto"; import { getTokenFromConfig } from "@sourcebot/crypto";
import { createLogger } from '@sourcebot/logger'; import { createLogger } from '@sourcebot/shared';
import { GiteaConnectionConfig } from '@sourcebot/schemas/v3/gitea.type'; import { GiteaConnectionConfig } from '@sourcebot/schemas/v3/gitea.type';
import { env } from "@sourcebot/shared"; import { env } from "@sourcebot/shared";
import fetch from 'cross-fetch'; import fetch from 'cross-fetch';

View file

@ -1,7 +1,7 @@
import { Octokit } from "@octokit/rest"; import { Octokit } from "@octokit/rest";
import * as Sentry from "@sentry/node"; import * as Sentry from "@sentry/node";
import { getTokenFromConfig } from "@sourcebot/crypto"; import { getTokenFromConfig } from "@sourcebot/crypto";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { GithubConnectionConfig } from "@sourcebot/schemas/v3/github.type"; import { GithubConnectionConfig } from "@sourcebot/schemas/v3/github.type";
import { env, hasEntitlement } from "@sourcebot/shared"; import { env, hasEntitlement } from "@sourcebot/shared";
import micromatch from "micromatch"; import micromatch from "micromatch";

View file

@ -1,7 +1,7 @@
import { Gitlab, ProjectSchema } from "@gitbeaker/rest"; import { Gitlab, ProjectSchema } from "@gitbeaker/rest";
import * as Sentry from "@sentry/node"; import * as Sentry from "@sentry/node";
import { getTokenFromConfig } from "@sourcebot/crypto"; import { getTokenFromConfig } from "@sourcebot/crypto";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { GitlabConnectionConfig } from "@sourcebot/schemas/v3/gitlab.type"; import { GitlabConnectionConfig } from "@sourcebot/schemas/v3/gitlab.type";
import { env } from "@sourcebot/shared"; import { env } from "@sourcebot/shared";
import micromatch from "micromatch"; import micromatch from "micromatch";

View file

@ -1,7 +1,7 @@
import "./instrument.js"; import "./instrument.js";
import { PrismaClient } from "@sourcebot/db"; import { PrismaClient } from "@sourcebot/db";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { env, getConfigSettings, hasEntitlement } from '@sourcebot/shared'; import { env, getConfigSettings, hasEntitlement } from '@sourcebot/shared';
import { existsSync } from 'fs'; import { existsSync } from 'fs';
import { mkdir } from 'fs/promises'; import { mkdir } from 'fs/promises';

View file

@ -1,5 +1,5 @@
import * as Sentry from "@sentry/node"; import * as Sentry from "@sentry/node";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { env } from "@sourcebot/shared"; import { env } from "@sourcebot/shared";
const logger = createLogger('instrument'); const logger = createLogger('instrument');

View file

@ -1,7 +1,7 @@
import express, { Request, Response } from 'express'; import express, { Request, Response } from 'express';
import { Server } from 'http'; import { Server } from 'http';
import client, { Registry, Counter, Gauge } from 'prom-client'; import client, { Registry, Counter, Gauge } from 'prom-client';
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
const logger = createLogger('prometheus-client'); const logger = createLogger('prometheus-client');

View file

@ -10,7 +10,7 @@ import { SchemaRepository as BitbucketCloudRepository } from "@coderabbitai/bitb
import { CodeHostType, Prisma } from '@sourcebot/db'; import { CodeHostType, Prisma } from '@sourcebot/db';
import { WithRequired } from "./types.js" import { WithRequired } from "./types.js"
import { marshalBool } from "./utils.js"; import { marshalBool } from "./utils.js";
import { createLogger } from '@sourcebot/logger'; import { createLogger } from '@sourcebot/shared';
import { BitbucketConnectionConfig, GerritConnectionConfig, GiteaConnectionConfig, GitlabConnectionConfig, GenericGitHostConnectionConfig, AzureDevOpsConnectionConfig } from '@sourcebot/schemas/v3/connection.type'; import { BitbucketConnectionConfig, GerritConnectionConfig, GiteaConnectionConfig, GitlabConnectionConfig, GenericGitHostConnectionConfig, AzureDevOpsConnectionConfig } from '@sourcebot/schemas/v3/connection.type';
import { ProjectVisibility } from "azure-devops-node-api/interfaces/CoreInterfaces.js"; import { ProjectVisibility } from "azure-devops-node-api/interfaces/CoreInterfaces.js";
import path from 'path'; import path from 'path';

View file

@ -1,6 +1,6 @@
import * as Sentry from '@sentry/node'; import * as Sentry from '@sentry/node';
import { PrismaClient, Repo, RepoIndexingJobStatus, RepoIndexingJobType } from "@sourcebot/db"; import { PrismaClient, Repo, RepoIndexingJobStatus, RepoIndexingJobType } from "@sourcebot/db";
import { createLogger, Logger } from "@sourcebot/logger"; import { createLogger, Logger } from "@sourcebot/shared";
import { env, RepoIndexingJobMetadata, repoIndexingJobMetadataSchema, RepoMetadata, repoMetadataSchema } from '@sourcebot/shared'; import { env, RepoIndexingJobMetadata, repoIndexingJobMetadataSchema, RepoMetadata, repoMetadataSchema } from '@sourcebot/shared';
import { existsSync } from 'fs'; import { existsSync } from 'fs';
import { readdir, rm } from 'fs/promises'; import { readdir, rm } from 'fs/promises';

View file

@ -1,5 +1,5 @@
import { Repo } from "@sourcebot/db"; import { Repo } from "@sourcebot/db";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { exec } from "child_process"; import { exec } from "child_process";
import { INDEX_CACHE_DIR } from "./constants.js"; import { INDEX_CACHE_DIR } from "./constants.js";
import { Settings } from "./types.js"; import { Settings } from "./types.js";

View file

@ -25,7 +25,6 @@
}, },
"dependencies": { "dependencies": {
"@prisma/client": "6.2.1", "@prisma/client": "6.2.1",
"@sourcebot/logger": "workspace:*",
"@types/readline-sync": "^1.4.8", "@types/readline-sync": "^1.4.8",
"readline-sync": "^1.4.10" "readline-sync": "^1.4.10"
} }

View file

@ -3,7 +3,6 @@ import { ArgumentParser } from "argparse";
import { migrateDuplicateConnections } from "./scripts/migrate-duplicate-connections"; import { migrateDuplicateConnections } from "./scripts/migrate-duplicate-connections";
import { injectAuditData } from "./scripts/inject-audit-data"; import { injectAuditData } from "./scripts/inject-audit-data";
import { confirmAction } from "./utils"; import { confirmAction } from "./utils";
import { createLogger } from "@sourcebot/logger";
import { injectRepoData } from "./scripts/inject-repo-data"; import { injectRepoData } from "./scripts/inject-repo-data";
import { testRepoQueryPerf } from "./scripts/test-repo-query-perf"; import { testRepoQueryPerf } from "./scripts/test-repo-query-perf";
@ -23,19 +22,17 @@ parser.add_argument("--url", { required: true, help: "Database URL" });
parser.add_argument("--script", { required: true, help: "Script to run" }); parser.add_argument("--script", { required: true, help: "Script to run" });
const args = parser.parse_args(); const args = parser.parse_args();
const logger = createLogger('db-script-runner');
(async () => { (async () => {
if (!(args.script in scripts)) { if (!(args.script in scripts)) {
logger.error("Invalid script"); console.error("Invalid script");
process.exit(1); process.exit(1);
} }
const selectedScript = scripts[args.script]; const selectedScript = scripts[args.script];
logger.info("\nTo confirm:"); console.log("\nTo confirm:");
logger.info(`- Database URL: ${args.url}`); console.log(`- Database URL: ${args.url}`);
logger.info(`- Script: ${args.script}`); console.log(`- Script: ${args.script}`);
confirmAction(); confirmAction();
@ -45,7 +42,7 @@ const logger = createLogger('db-script-runner');
await selectedScript.run(prisma); await selectedScript.run(prisma);
logger.info("\nDone."); console.log("\nDone.");
process.exit(0); process.exit(0);
})(); })();

View file

@ -1,9 +1,6 @@
import { Script } from "../scriptRunner"; import { Script } from "../scriptRunner";
import { PrismaClient } from "../../dist"; import { PrismaClient } from "../../dist";
import { confirmAction } from "../utils"; import { confirmAction } from "../utils";
import { createLogger } from "@sourcebot/logger";
const logger = createLogger('inject-audit-data');
// Generate realistic audit data for analytics testing // Generate realistic audit data for analytics testing
// Simulates 50 engineers with varying activity patterns // Simulates 50 engineers with varying activity patterns
@ -17,11 +14,11 @@ export const injectAuditData: Script = {
}); });
if (!org) { if (!org) {
logger.error(`Organization with id ${orgId} not found. Please create it first.`); console.error(`Organization with id ${orgId} not found. Please create it first.`);
return; return;
} }
logger.info(`Injecting audit data for organization: ${org.name} (${org.domain})`); console.log(`Injecting audit data for organization: ${org.name} (${org.domain})`);
// Generate 50 fake user IDs // Generate 50 fake user IDs
const userIds = Array.from({ length: 50 }, (_, i) => `user_${String(i + 1).padStart(3, '0')}`); const userIds = Array.from({ length: 50 }, (_, i) => `user_${String(i + 1).padStart(3, '0')}`);
@ -38,7 +35,7 @@ export const injectAuditData: Script = {
const startDate = new Date(); const startDate = new Date();
startDate.setDate(startDate.getDate() - 90); startDate.setDate(startDate.getDate() - 90);
logger.info(`Generating data from ${startDate.toISOString().split('T')[0]} to ${endDate.toISOString().split('T')[0]}`); console.log(`Generating data from ${startDate.toISOString().split('T')[0]} to ${endDate.toISOString().split('T')[0]}`);
confirmAction(); confirmAction();
@ -125,9 +122,9 @@ export const injectAuditData: Script = {
} }
} }
logger.info(`\nAudit data injection complete!`); console.log(`\nAudit data injection complete!`);
logger.info(`Users: ${userIds.length}`); console.log(`Users: ${userIds.length}`);
logger.info(`Date range: ${startDate.toISOString().split('T')[0]} to ${endDate.toISOString().split('T')[0]}`); console.log(`Date range: ${startDate.toISOString().split('T')[0]} to ${endDate.toISOString().split('T')[0]}`);
// Show some statistics // Show some statistics
const stats = await prisma.audit.groupBy({ const stats = await prisma.audit.groupBy({
@ -136,9 +133,9 @@ export const injectAuditData: Script = {
_count: { action: true } _count: { action: true }
}); });
logger.info('\nAction breakdown:'); console.log('\nAction breakdown:');
stats.forEach(stat => { stats.forEach(stat => {
logger.info(` ${stat.action}: ${stat._count.action}`); console.log(` ${stat.action}: ${stat._count.action}`);
}); });
}, },
}; };

View file

@ -1,8 +1,5 @@
import { Script } from "../scriptRunner"; import { Script } from "../scriptRunner";
import { PrismaClient } from "../../dist"; import { PrismaClient } from "../../dist";
import { createLogger } from "@sourcebot/logger";
const logger = createLogger('inject-repo-data');
const NUM_REPOS = 100000; const NUM_REPOS = 100000;
@ -35,7 +32,7 @@ export const injectRepoData: Script = {
}); });
logger.info(`Creating ${NUM_REPOS} repos...`); console.log(`Creating ${NUM_REPOS} repos...`);
for (let i = 0; i < NUM_REPOS; i++) { for (let i = 0; i < NUM_REPOS; i++) {
await prisma.repo.create({ await prisma.repo.create({
@ -59,6 +56,6 @@ export const injectRepoData: Script = {
}); });
} }
logger.info(`Created ${NUM_REPOS} repos.`); console.log(`Created ${NUM_REPOS} repos.`);
} }
}; };

View file

@ -1,9 +1,6 @@
import { Script } from "../scriptRunner"; import { Script } from "../scriptRunner";
import { PrismaClient } from "../../dist"; import { PrismaClient } from "../../dist";
import { confirmAction } from "../utils"; import { confirmAction } from "../utils";
import { createLogger } from "@sourcebot/logger";
const logger = createLogger('migrate-duplicate-connections');
// Handles duplicate connections by renaming them to be unique. // Handles duplicate connections by renaming them to be unique.
// @see: 20250320215449_unique_connection_name_constraint_within_org // @see: 20250320215449_unique_connection_name_constraint_within_org
@ -18,7 +15,7 @@ export const migrateDuplicateConnections: Script = {
}, },
})).filter(({ _count }) => _count._all > 1); })).filter(({ _count }) => _count._all > 1);
logger.info(`Found ${duplicates.reduce((acc, { _count }) => acc + _count._all, 0)} duplicate connections.`); console.log(`Found ${duplicates.reduce((acc, { _count }) => acc + _count._all, 0)} duplicate connections.`);
confirmAction(); confirmAction();
@ -40,7 +37,7 @@ export const migrateDuplicateConnections: Script = {
const connection = connections[i]; const connection = connections[i];
const newName = `${name}-${i + 1}`; const newName = `${name}-${i + 1}`;
logger.info(`Migrating connection with id ${connection.id} from name=${name} to name=${newName}`); console.log(`Migrating connection with id ${connection.id} from name=${name} to name=${newName}`);
await prisma.connection.update({ await prisma.connection.update({
where: { id: connection.id }, where: { id: connection.id },
@ -50,6 +47,6 @@ export const migrateDuplicateConnections: Script = {
} }
} }
logger.info(`Migrated ${migrated} connections.`); console.log(`Migrated ${migrated} connections.`);
}, },
}; };

View file

@ -1,8 +1,5 @@
import { Script } from "../scriptRunner"; import { Script } from "../scriptRunner";
import { PrismaClient } from "../../dist"; import { PrismaClient } from "../../dist";
import { createLogger } from "@sourcebot/logger";
const logger = createLogger('test-repo-query-perf');
export const testRepoQueryPerf: Script = { export const testRepoQueryPerf: Script = {
run: async (prisma: PrismaClient) => { run: async (prisma: PrismaClient) => {
@ -23,6 +20,6 @@ export const testRepoQueryPerf: Script = {
}); });
const durationMs = Date.now() - start; const durationMs = Date.now() - start;
logger.info(`Found ${allRepos.length} repos in ${durationMs}ms`); console.log(`Found ${allRepos.length} repos in ${durationMs}ms`);
} }
}; };

View file

@ -1,17 +1,14 @@
import readline from 'readline-sync'; import readline from 'readline-sync';
import { createLogger } from "@sourcebot/logger";
const logger = createLogger('db-utils');
export const confirmAction = (message: string = "Are you sure you want to proceed? [N/y]") => { export const confirmAction = (message: string = "Are you sure you want to proceed? [N/y]") => {
const response = readline.question(message).toLowerCase(); const response = readline.question(message).toLowerCase();
if (response !== 'y') { if (response !== 'y') {
logger.info("Aborted."); console.log("Aborted.");
process.exit(0); process.exit(0);
} }
} }
export const abort = () => { export const abort = () => {
logger.info("Aborted."); console.log("Aborted.");
process.exit(0); process.exit(0);
}; };

View file

@ -1,2 +0,0 @@
dist/
*.tsbuildinfo

View file

@ -1,24 +0,0 @@
{
"name": "@sourcebot/logger",
"version": "0.1.0",
"main": "dist/index.js",
"type": "module",
"private": true,
"scripts": {
"build": "tsc",
"postinstall": "yarn build"
},
"dependencies": {
"@logtail/node": "^0.5.2",
"@logtail/winston": "^0.5.2",
"@t3-oss/env-core": "^0.12.0",
"dotenv": "^16.4.5",
"triple-beam": "^1.4.1",
"winston": "^3.15.0",
"zod": "^3.24.3"
},
"devDependencies": {
"@types/node": "^22.7.5",
"typescript": "^5.7.3"
}
}

View file

@ -1,28 +0,0 @@
import { createEnv } from "@t3-oss/env-core";
import { z } from "zod";
import dotenv from 'dotenv';
// Booleans are specified as 'true' or 'false' strings.
const booleanSchema = z.enum(["true", "false"]);
dotenv.config({
path: './.env',
});
dotenv.config({
path: './.env.local',
override: true
});
export const env = createEnv({
server: {
SOURCEBOT_LOG_LEVEL: z.enum(["info", "debug", "warn", "error"]).default("info"),
SOURCEBOT_STRUCTURED_LOGGING_ENABLED: booleanSchema.default("false"),
SOURCEBOT_STRUCTURED_LOGGING_FILE: z.string().optional(),
LOGTAIL_TOKEN: z.string().optional(),
LOGTAIL_HOST: z.string().url().optional(),
},
runtimeEnv: process.env,
emptyStringAsUndefined: true,
skipValidation: process.env.SKIP_ENV_VALIDATION === "1",
});

View file

@ -1,23 +0,0 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "Node16",
"moduleResolution": "Node16",
"lib": ["ES2023"],
"outDir": "dist",
"rootDir": "src",
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"skipLibCheck": true,
"isolatedModules": true,
"resolveJsonModule": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}

View file

@ -9,14 +9,17 @@
"postinstall": "yarn build" "postinstall": "yarn build"
}, },
"dependencies": { "dependencies": {
"@logtail/node": "^0.5.2",
"@logtail/winston": "^0.5.2",
"@sourcebot/crypto": "workspace:*", "@sourcebot/crypto": "workspace:*",
"@sourcebot/db": "workspace:*", "@sourcebot/db": "workspace:*",
"@sourcebot/logger": "workspace:*",
"@sourcebot/schemas": "workspace:*", "@sourcebot/schemas": "workspace:*",
"@t3-oss/env-core": "^0.12.0", "@t3-oss/env-core": "^0.12.0",
"ajv": "^8.17.1", "ajv": "^8.17.1",
"micromatch": "^4.0.8", "micromatch": "^4.0.8",
"strip-json-comments": "^5.0.1", "strip-json-comments": "^5.0.1",
"triple-beam": "^1.4.1",
"winston": "^3.15.0",
"zod": "^3.24.3" "zod": "^3.24.3"
}, },
"devDependencies": { "devDependencies": {

View file

@ -1,6 +1,6 @@
import { base64Decode } from "./utils.js"; import { base64Decode } from "./utils.js";
import { z } from "zod"; import { z } from "zod";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "./logger.js";
import { verifySignature } from "@sourcebot/crypto"; import { verifySignature } from "@sourcebot/crypto";
import { env } from "./env.js"; import { env } from "./env.js";
import { SOURCEBOT_SUPPORT_EMAIL, SOURCEBOT_UNLIMITED_SEATS } from "./constants.js"; import { SOURCEBOT_SUPPORT_EMAIL, SOURCEBOT_UNLIMITED_SEATS } from "./constants.js";

View file

@ -72,16 +72,13 @@ export const env = createEnv({
FALLBACK_GITLAB_CLOUD_TOKEN: z.string().optional(), FALLBACK_GITLAB_CLOUD_TOKEN: z.string().optional(),
FALLBACK_GITEA_CLOUD_TOKEN: z.string().optional(), FALLBACK_GITEA_CLOUD_TOKEN: z.string().optional(),
REDIS_URL: z.string().url(), REDIS_URL: z.string().url().default("redis://localhost:6379"),
REDIS_REMOVE_ON_COMPLETE: numberSchema.default(0), REDIS_REMOVE_ON_COMPLETE: numberSchema.default(0),
REDIS_REMOVE_ON_FAIL: numberSchema.default(100), REDIS_REMOVE_ON_FAIL: numberSchema.default(100),
LOGTAIL_TOKEN: z.string().optional(),
LOGTAIL_HOST: z.string().url().optional(),
SOURCEBOT_LOG_LEVEL: z.enum(["info", "debug", "warn", "error"]).default("info"),
DEBUG_ENABLE_GROUPMQ_LOGGING: booleanSchema.default('false'), DEBUG_ENABLE_GROUPMQ_LOGGING: booleanSchema.default('false'),
DATABASE_URL: z.string().url(), DATABASE_URL: z.string().url().default("postgresql://postgres:postgres@localhost:5432/postgres"),
CONFIG_PATH: z.string(), CONFIG_PATH: z.string(),
CONNECTION_MANAGER_UPSERT_TIMEOUT_MS: numberSchema.default(300000), CONNECTION_MANAGER_UPSERT_TIMEOUT_MS: numberSchema.default(300000),
@ -92,6 +89,12 @@ export const env = createEnv({
EXPERIMENT_EE_PERMISSION_SYNC_ENABLED: booleanSchema.default('false'), EXPERIMENT_EE_PERMISSION_SYNC_ENABLED: booleanSchema.default('false'),
AUTH_EE_GITHUB_BASE_URL: z.string().optional(), AUTH_EE_GITHUB_BASE_URL: z.string().optional(),
AUTH_EE_GITLAB_BASE_URL: z.string().default("https://gitlab.com"), AUTH_EE_GITLAB_BASE_URL: z.string().default("https://gitlab.com"),
SOURCEBOT_LOG_LEVEL: z.enum(["info", "debug", "warn", "error"]).default("info"),
SOURCEBOT_STRUCTURED_LOGGING_ENABLED: booleanSchema.default("false"),
SOURCEBOT_STRUCTURED_LOGGING_FILE: z.string().optional(),
LOGTAIL_TOKEN: z.string().optional(),
LOGTAIL_HOST: z.string().url().optional(),
}, },
client: { client: {
NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT: z.enum(SOURCEBOT_CLOUD_ENVIRONMENT).optional(), NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT: z.enum(SOURCEBOT_CLOUD_ENVIRONMENT).optional(),

View file

@ -28,3 +28,9 @@ export * from "./constants.js";
export { export {
env env
} from "./env.js"; } from "./env.js";
export {
createLogger,
} from "./logger.js";
export type {
Logger,
} from "./logger.js";

View file

@ -16,7 +16,7 @@ import { env } from './env.js';
* - Logs will be formatted as: "timestamp level: [label] message" * - Logs will be formatted as: "timestamp level: [label] message"
*/ */
const { combine, colorize, timestamp, prettyPrint, errors, printf, label: labelFn, json } = format; const { combine, colorize, timestamp, errors, printf, label: labelFn, json } = format;
const datadogFormat = format((info) => { const datadogFormat = format((info) => {
info.status = info.level.toLowerCase(); info.status = info.level.toLowerCase();

View file

@ -93,7 +93,6 @@
"@sourcebot/crypto": "workspace:*", "@sourcebot/crypto": "workspace:*",
"@sourcebot/db": "workspace:*", "@sourcebot/db": "workspace:*",
"@sourcebot/error": "workspace:*", "@sourcebot/error": "workspace:*",
"@sourcebot/logger": "workspace:*",
"@sourcebot/schemas": "workspace:*", "@sourcebot/schemas": "workspace:*",
"@sourcebot/shared": "workspace:*", "@sourcebot/shared": "workspace:*",
"@ssddanbrown/codemirror-lang-twig": "^1.0.0", "@ssddanbrown/codemirror-lang-twig": "^1.0.0",

View file

@ -3,7 +3,7 @@
// https://docs.sentry.io/platforms/javascript/guides/nextjs/ // https://docs.sentry.io/platforms/javascript/guides/nextjs/
import * as Sentry from "@sentry/nextjs"; import * as Sentry from "@sentry/nextjs";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
const logger = createLogger('sentry-server-config'); const logger = createLogger('sentry-server-config');

View file

@ -11,7 +11,7 @@ import { render } from "@react-email/components";
import * as Sentry from '@sentry/nextjs'; import * as Sentry from '@sentry/nextjs';
import { generateApiKey, getTokenFromConfig, hashSecret } from "@sourcebot/crypto"; import { generateApiKey, getTokenFromConfig, hashSecret } from "@sourcebot/crypto";
import { ApiKey, ConnectionSyncJobStatus, Org, OrgRole, Prisma, RepoIndexingJobStatus, RepoIndexingJobType, StripeSubscriptionStatus } from "@sourcebot/db"; import { ApiKey, ConnectionSyncJobStatus, Org, OrgRole, Prisma, RepoIndexingJobStatus, RepoIndexingJobType, StripeSubscriptionStatus } from "@sourcebot/db";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { GiteaConnectionConfig } from "@sourcebot/schemas/v3/gitea.type"; import { GiteaConnectionConfig } from "@sourcebot/schemas/v3/gitea.type";
import { GithubConnectionConfig } from "@sourcebot/schemas/v3/github.type"; import { GithubConnectionConfig } from "@sourcebot/schemas/v3/github.type";
import { GitlabConnectionConfig } from "@sourcebot/schemas/v3/gitlab.type"; import { GitlabConnectionConfig } from "@sourcebot/schemas/v3/gitlab.type";

View file

@ -10,7 +10,7 @@ import { prisma } from "@/prisma";
import { LanguageModelV2 as AISDKLanguageModelV2 } from "@ai-sdk/provider"; import { LanguageModelV2 as AISDKLanguageModelV2 } from "@ai-sdk/provider";
import * as Sentry from "@sentry/nextjs"; import * as Sentry from "@sentry/nextjs";
import { OrgRole } from "@sourcebot/db"; import { OrgRole } from "@sourcebot/db";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { import {
createUIMessageStream, createUIMessageStream,
createUIMessageStreamResponse, createUIMessageStreamResponse,

View file

@ -4,7 +4,7 @@ import { withAuthV2, withMinimumOrgRole } from "@/withAuthV2";
import { OrgRole } from "@sourcebot/db"; import { OrgRole } from "@sourcebot/db";
import { isServiceError } from "@/lib/utils"; import { isServiceError } from "@/lib/utils";
import { serviceErrorResponse, missingQueryParam, notFound } from "@/lib/serviceError"; import { serviceErrorResponse, missingQueryParam, notFound } from "@/lib/serviceError";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { NextRequest } from "next/server"; import { NextRequest } from "next/server";
import { StatusCodes } from "http-status-codes"; import { StatusCodes } from "http-status-codes";
import { ErrorCode } from "@/lib/errorCodes"; import { ErrorCode } from "@/lib/errorCodes";

View file

@ -4,7 +4,7 @@ import { withAuthV2, withMinimumOrgRole } from "@/withAuthV2";
import { OrgRole } from "@sourcebot/db"; import { OrgRole } from "@sourcebot/db";
import { isServiceError } from "@/lib/utils"; import { isServiceError } from "@/lib/utils";
import { serviceErrorResponse } from "@/lib/serviceError"; import { serviceErrorResponse } from "@/lib/serviceError";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { getAuditService } from "@/ee/features/audit/factory"; import { getAuditService } from "@/ee/features/audit/factory";
const logger = createLogger('ee-users-api'); const logger = createLogger('ee-users-api');

View file

@ -1,6 +1,6 @@
'use server'; 'use server';
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
const logger = createLogger('health-check'); const logger = createLogger('health-check');

View file

@ -5,7 +5,7 @@ import { prisma } from '@/prisma';
import { StripeSubscriptionStatus } from '@sourcebot/db'; import { StripeSubscriptionStatus } from '@sourcebot/db';
import { stripeClient } from '@/ee/features/billing/stripe'; import { stripeClient } from '@/ee/features/billing/stripe';
import { env } from '@/env.mjs'; import { env } from '@/env.mjs';
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
const logger = createLogger('stripe-webhook'); const logger = createLogger('stripe-webhook');

View file

@ -9,7 +9,7 @@ import { processGitHubPullRequest } from "@/features/agents/review-agent/app";
import { throttling } from "@octokit/plugin-throttling"; import { throttling } from "@octokit/plugin-throttling";
import fs from "fs"; import fs from "fs";
import { GitHubPullRequest } from "@/features/agents/review-agent/types"; import { GitHubPullRequest } from "@/features/agents/review-agent/types";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
const logger = createLogger('github-webhook'); const logger = createLogger('github-webhook');

View file

@ -2,8 +2,9 @@ import { auth } from "@/auth";
import { LoginForm } from "../login/components/loginForm"; import { LoginForm } from "../login/components/loginForm";
import { redirect } from "next/navigation"; import { redirect } from "next/navigation";
import { Footer } from "@/app/components/footer"; import { Footer } from "@/app/components/footer";
import { createLogger } from "@sourcebot/logger";
import { getIdentityProviderMetadata } from "@/lib/identityProviders"; import { getIdentityProviderMetadata } from "@/lib/identityProviders";
import { createLogger } from "@sourcebot/shared";
import { getAuthProviders } from "@/lib/authProviders";
import { getOrgFromDomain } from "@/data/org"; import { getOrgFromDomain } from "@/data/org";
import { SINGLE_TENANT_ORG_DOMAIN } from "@/lib/constants"; import { SINGLE_TENANT_ORG_DOMAIN } from "@/lib/constants";

View file

@ -5,7 +5,7 @@ import { ErrorCode } from "@/lib/errorCodes";
import { StatusCodes } from "http-status-codes"; import { StatusCodes } from "http-status-codes";
import { sew, withAuth, withOrgMembership } from "@/actions"; import { sew, withAuth, withOrgMembership } from "@/actions";
import { OrgRole } from "@sourcebot/db"; import { OrgRole } from "@sourcebot/db";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { ServiceError } from "@/lib/serviceError"; import { ServiceError } from "@/lib/serviceError";
import { getAuditService } from "@/ee/features/audit/factory"; import { getAuditService } from "@/ee/features/audit/factory";
import { AuditEvent } from "./types"; import { AuditEvent } from "./types";

View file

@ -1,7 +1,7 @@
import { IAuditService, AuditEvent } from '@/ee/features/audit/types'; import { IAuditService, AuditEvent } from '@/ee/features/audit/types';
import { prisma } from '@/prisma'; import { prisma } from '@/prisma';
import { Audit } from '@prisma/client'; import { Audit } from '@prisma/client';
import { createLogger } from '@sourcebot/logger'; import { createLogger } from '@sourcebot/shared';
const logger = createLogger('audit-service'); const logger = createLogger('audit-service');

View file

@ -12,7 +12,7 @@ import { StatusCodes } from "http-status-codes";
import { ErrorCode } from "@/lib/errorCodes"; import { ErrorCode } from "@/lib/errorCodes";
import { headers } from "next/headers"; import { headers } from "next/headers";
import { getSubscriptionForOrg } from "./serverUtils"; import { getSubscriptionForOrg } from "./serverUtils";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
const logger = createLogger('billing-actions'); const logger = createLogger('billing-actions');

View file

@ -11,11 +11,11 @@ import Credentials from "next-auth/providers/credentials";
import type { User as AuthJsUser } from "next-auth"; import type { User as AuthJsUser } from "next-auth";
import type { Provider } from "next-auth/providers"; import type { Provider } from "next-auth/providers";
import { onCreateUser } from "@/lib/authUtils"; import { onCreateUser } from "@/lib/authUtils";
import { createLogger } from "@sourcebot/logger";
import { hasEntitlement, loadConfig } from "@sourcebot/shared"; import { hasEntitlement, loadConfig } from "@sourcebot/shared";
import { getTokenFromConfig } from "@sourcebot/crypto"; import { getTokenFromConfig } from "@sourcebot/crypto";
import type { IdentityProvider } from "@/auth"; import type { IdentityProvider } from "@/auth";
import { GCPIAPIdentityProviderConfig, GitHubIdentityProviderConfig, GitLabIdentityProviderConfig, GoogleIdentityProviderConfig, KeycloakIdentityProviderConfig, MicrosoftEntraIDIdentityProviderConfig, OktaIdentityProviderConfig } from "@sourcebot/schemas/v3/index.type"; import { GCPIAPIdentityProviderConfig, GitHubIdentityProviderConfig, GitLabIdentityProviderConfig, GoogleIdentityProviderConfig, KeycloakIdentityProviderConfig, MicrosoftEntraIDIdentityProviderConfig, OktaIdentityProviderConfig } from "@sourcebot/schemas/v3/index.type";
import { createLogger } from "@sourcebot/shared";
const logger = createLogger('web-sso'); const logger = createLogger('web-sso');

View file

@ -6,7 +6,7 @@ import { env } from "@/env.mjs";
import { GitHubPullRequest } from "@/features/agents/review-agent/types"; import { GitHubPullRequest } from "@/features/agents/review-agent/types";
import path from "path"; import path from "path";
import fs from "fs"; import fs from "fs";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
const rules = [ const rules = [
"Do NOT provide general feedback, summaries, explanations of changes, or praises for making good additions.", "Do NOT provide general feedback, summaries, explanations of changes, or praises for making good additions.",

View file

@ -2,7 +2,7 @@ import { sourcebot_context, sourcebot_pr_payload } from "@/features/agents/revie
import { getFileSource } from "@/features/search/fileSourceApi"; import { getFileSource } from "@/features/search/fileSourceApi";
import { fileSourceResponseSchema } from "@/features/search/schemas"; import { fileSourceResponseSchema } from "@/features/search/schemas";
import { isServiceError } from "@/lib/utils"; import { isServiceError } from "@/lib/utils";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
const logger = createLogger('fetch-file-content'); const logger = createLogger('fetch-file-content');

View file

@ -1,6 +1,6 @@
import { sourcebot_diff, sourcebot_context, sourcebot_file_diff_review_schema } from "@/features/agents/review-agent/types"; import { sourcebot_diff, sourcebot_context, sourcebot_file_diff_review_schema } from "@/features/agents/review-agent/types";
import { zodToJsonSchema } from "zod-to-json-schema"; import { zodToJsonSchema } from "zod-to-json-schema";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
const logger = createLogger('generate-diff-review-prompt'); const logger = createLogger('generate-diff-review-prompt');

View file

@ -2,7 +2,7 @@ import { sourcebot_pr_payload, sourcebot_diff_review, sourcebot_file_diff_review
import { generateDiffReviewPrompt } from "@/features/agents/review-agent/nodes/generateDiffReviewPrompt"; import { generateDiffReviewPrompt } from "@/features/agents/review-agent/nodes/generateDiffReviewPrompt";
import { invokeDiffReviewLlm } from "@/features/agents/review-agent/nodes/invokeDiffReviewLlm"; import { invokeDiffReviewLlm } from "@/features/agents/review-agent/nodes/invokeDiffReviewLlm";
import { fetchFileContent } from "@/features/agents/review-agent/nodes/fetchFileContent"; import { fetchFileContent } from "@/features/agents/review-agent/nodes/fetchFileContent";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
const logger = createLogger('generate-pr-review'); const logger = createLogger('generate-pr-review');

View file

@ -2,7 +2,7 @@ import { sourcebot_pr_payload, sourcebot_file_diff, sourcebot_diff } from "@/fea
import parse from "parse-diff"; import parse from "parse-diff";
import { Octokit } from "octokit"; import { Octokit } from "octokit";
import { GitHubPullRequest } from "@/features/agents/review-agent/types"; import { GitHubPullRequest } from "@/features/agents/review-agent/types";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
const logger = createLogger('github-pr-parser'); const logger = createLogger('github-pr-parser');

View file

@ -1,6 +1,6 @@
import { Octokit } from "octokit"; import { Octokit } from "octokit";
import { sourcebot_pr_payload, sourcebot_file_diff_review } from "@/features/agents/review-agent/types"; import { sourcebot_pr_payload, sourcebot_file_diff_review } from "@/features/agents/review-agent/types";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
const logger = createLogger('github-push-pr-reviews'); const logger = createLogger('github-push-pr-reviews');

View file

@ -2,7 +2,7 @@ import OpenAI from "openai";
import { sourcebot_file_diff_review, sourcebot_file_diff_review_schema } from "@/features/agents/review-agent/types"; import { sourcebot_file_diff_review, sourcebot_file_diff_review_schema } from "@/features/agents/review-agent/types";
import { env } from "@/env.mjs"; import { env } from "@/env.mjs";
import fs from "fs"; import fs from "fs";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
const logger = createLogger('invoke-diff-review-llm'); const logger = createLogger('invoke-diff-review-llm');

View file

@ -2,7 +2,7 @@ import { env } from "@/env.mjs";
import { getFileSource } from "@/features/search/fileSourceApi"; import { getFileSource } from "@/features/search/fileSourceApi";
import { isServiceError } from "@/lib/utils"; import { isServiceError } from "@/lib/utils";
import { ProviderOptions } from "@ai-sdk/provider-utils"; import { ProviderOptions } from "@ai-sdk/provider-utils";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { LanguageModel, ModelMessage, StopCondition, streamText } from "ai"; import { LanguageModel, ModelMessage, StopCondition, streamText } from "ai";
import { ANSWER_TAG, FILE_REFERENCE_PREFIX, toolNames } from "./constants"; import { ANSWER_TAG, FILE_REFERENCE_PREFIX, toolNames } from "./constants";
import { createCodeSearchTool, findSymbolDefinitionsTool, findSymbolReferencesTool, readFilesTool, searchReposTool, listAllReposTool } from "./tools"; import { createCodeSearchTool, findSymbolDefinitionsTool, findSymbolReferencesTool, readFilesTool, searchReposTool, listAllReposTool } from "./tools";

View file

@ -5,7 +5,7 @@ import { env } from '@/env.mjs';
import { notFound, unexpectedError } from '@/lib/serviceError'; import { notFound, unexpectedError } from '@/lib/serviceError';
import { withOptionalAuthV2 } from '@/withAuthV2'; import { withOptionalAuthV2 } from '@/withAuthV2';
import { Repo } from '@sourcebot/db'; import { Repo } from '@sourcebot/db';
import { createLogger } from '@sourcebot/logger'; import { createLogger } from '@sourcebot/shared';
import path from 'path'; import path from 'path';
import { simpleGit } from 'simple-git'; import { simpleGit } from 'simple-git';

View file

@ -2,7 +2,7 @@ import { createGuestUser } from '@/lib/authUtils';
import { SOURCEBOT_SUPPORT_EMAIL } from "@/lib/constants"; import { SOURCEBOT_SUPPORT_EMAIL } from "@/lib/constants";
import { prisma } from "@/prisma"; import { prisma } from "@/prisma";
import { OrgRole } from '@sourcebot/db'; import { OrgRole } from '@sourcebot/db';
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { hasEntitlement, loadConfig } from '@sourcebot/shared'; import { hasEntitlement, loadConfig } from '@sourcebot/shared';
import { getOrgFromDomain } from './data/org'; import { getOrgFromDomain } from './data/org';
import { env } from './env.mjs'; import { env } from './env.mjs';

View file

@ -5,7 +5,7 @@ import { SINGLE_TENANT_ORG_ID, SOURCEBOT_GUEST_USER_EMAIL, SOURCEBOT_GUEST_USER_
import { getPlan, getSeats, hasEntitlement, SOURCEBOT_UNLIMITED_SEATS } from "@sourcebot/shared"; import { getPlan, getSeats, hasEntitlement, SOURCEBOT_UNLIMITED_SEATS } from "@sourcebot/shared";
import { isServiceError } from "@/lib/utils"; import { isServiceError } from "@/lib/utils";
import { orgNotFound, ServiceError, userNotFound } from "@/lib/serviceError"; import { orgNotFound, ServiceError, userNotFound } from "@/lib/serviceError";
import { createLogger } from "@sourcebot/logger"; import { createLogger } from "@sourcebot/shared";
import { getAuditService } from "@/ee/features/audit/factory"; import { getAuditService } from "@/ee/features/audit/factory";
import { StatusCodes } from "http-status-codes"; import { StatusCodes } from "http-status-codes";
import { ErrorCode } from "./errorCodes"; import { ErrorCode } from "./errorCodes";

View file

@ -7896,7 +7896,6 @@ __metadata:
"@sourcebot/crypto": "workspace:*" "@sourcebot/crypto": "workspace:*"
"@sourcebot/db": "workspace:*" "@sourcebot/db": "workspace:*"
"@sourcebot/error": "workspace:*" "@sourcebot/error": "workspace:*"
"@sourcebot/logger": "workspace:*"
"@sourcebot/schemas": "workspace:*" "@sourcebot/schemas": "workspace:*"
"@sourcebot/shared": "workspace:*" "@sourcebot/shared": "workspace:*"
"@t3-oss/env-core": "npm:^0.12.0" "@t3-oss/env-core": "npm:^0.12.0"
@ -7964,7 +7963,6 @@ __metadata:
resolution: "@sourcebot/db@workspace:packages/db" resolution: "@sourcebot/db@workspace:packages/db"
dependencies: dependencies:
"@prisma/client": "npm:6.2.1" "@prisma/client": "npm:6.2.1"
"@sourcebot/logger": "workspace:*"
"@types/argparse": "npm:^2.0.16" "@types/argparse": "npm:^2.0.16"
"@types/readline-sync": "npm:^1.4.8" "@types/readline-sync": "npm:^1.4.8"
argparse: "npm:^2.0.1" argparse: "npm:^2.0.1"
@ -7984,22 +7982,6 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"@sourcebot/logger@workspace:*, @sourcebot/logger@workspace:packages/logger":
version: 0.0.0-use.local
resolution: "@sourcebot/logger@workspace:packages/logger"
dependencies:
"@logtail/node": "npm:^0.5.2"
"@logtail/winston": "npm:^0.5.2"
"@t3-oss/env-core": "npm:^0.12.0"
"@types/node": "npm:^22.7.5"
dotenv: "npm:^16.4.5"
triple-beam: "npm:^1.4.1"
typescript: "npm:^5.7.3"
winston: "npm:^3.15.0"
zod: "npm:^3.24.3"
languageName: unknown
linkType: soft
"@sourcebot/mcp@workspace:packages/mcp": "@sourcebot/mcp@workspace:packages/mcp":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@sourcebot/mcp@workspace:packages/mcp" resolution: "@sourcebot/mcp@workspace:packages/mcp"
@ -8036,9 +8018,10 @@ __metadata:
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@sourcebot/shared@workspace:packages/shared" resolution: "@sourcebot/shared@workspace:packages/shared"
dependencies: dependencies:
"@logtail/node": "npm:^0.5.2"
"@logtail/winston": "npm:^0.5.2"
"@sourcebot/crypto": "workspace:*" "@sourcebot/crypto": "workspace:*"
"@sourcebot/db": "workspace:*" "@sourcebot/db": "workspace:*"
"@sourcebot/logger": "workspace:*"
"@sourcebot/schemas": "workspace:*" "@sourcebot/schemas": "workspace:*"
"@t3-oss/env-core": "npm:^0.12.0" "@t3-oss/env-core": "npm:^0.12.0"
"@types/micromatch": "npm:^4.0.9" "@types/micromatch": "npm:^4.0.9"
@ -8046,8 +8029,10 @@ __metadata:
ajv: "npm:^8.17.1" ajv: "npm:^8.17.1"
micromatch: "npm:^4.0.8" micromatch: "npm:^4.0.8"
strip-json-comments: "npm:^5.0.1" strip-json-comments: "npm:^5.0.1"
triple-beam: "npm:^1.4.1"
tsc-watch: "npm:6.2.1" tsc-watch: "npm:6.2.1"
typescript: "npm:^5.7.3" typescript: "npm:^5.7.3"
winston: "npm:^3.15.0"
zod: "npm:^3.24.3" zod: "npm:^3.24.3"
languageName: unknown languageName: unknown
linkType: soft linkType: soft
@ -8138,7 +8123,6 @@ __metadata:
"@sourcebot/crypto": "workspace:*" "@sourcebot/crypto": "workspace:*"
"@sourcebot/db": "workspace:*" "@sourcebot/db": "workspace:*"
"@sourcebot/error": "workspace:*" "@sourcebot/error": "workspace:*"
"@sourcebot/logger": "workspace:*"
"@sourcebot/schemas": "workspace:*" "@sourcebot/schemas": "workspace:*"
"@sourcebot/shared": "workspace:*" "@sourcebot/shared": "workspace:*"
"@ssddanbrown/codemirror-lang-twig": "npm:^1.0.0" "@ssddanbrown/codemirror-lang-twig": "npm:^1.0.0"