Skip to content

Latest commit

History

History
103 lines (77 loc) · 2.58 KB

File metadata and controls

103 lines (77 loc) · 2.58 KB
  • To regenerate the JavaScript SDK, run ./packages/sdk/js/script/build.ts.
  • ALWAYS USE PARALLEL TOOLS WHEN APPLICABLE.
  • The default branch in this repo is dev.
  • Local main ref may not exist; use dev or origin/dev for diffs.
  • Prefer automation: execute requested actions without confirmation unless blocked by missing info or safety/irreversibility.

Style Guide

General Principles

  • Keep things in one function unless composable or reusable
  • Avoid try/catch where possible
  • Avoid using the any type
  • Use Bun APIs when possible, like Bun.file()
  • Rely on type inference when possible; avoid explicit type annotations or interfaces unless necessary for exports or clarity
  • Prefer functional array methods (flatMap, filter, map) over for loops; use type guards on filter to maintain type inference downstream
  • In src/config, follow the existing self-export pattern at the top of the file (for example export * as ConfigAgent from "./agent") when adding a new config module.

Reduce total variable count by inlining when a value is only used once.

// Goodconstjournal=awaitBun.file(path.join(dir,"journal.json")).json()// BadconstjournalPath=path.join(dir,"journal.json")constjournal=awaitBun.file(journalPath).json()

Destructuring

Avoid unnecessary destructuring. Use dot notation to preserve context.

// Goodobj.aobj.b// Badconst{ a, b }=obj

Variables

Prefer const over let. Use ternaries or early returns instead of reassignment.

// Goodconstfoo=condition ? 1 : 2// Badletfooif(condition)foo=1elsefoo=2

Control Flow

Avoid else statements. Prefer early returns.

// Goodfunctionfoo(){if(condition)return1return2}// Badfunctionfoo(){if(condition)return1elsereturn2}

Schema Definitions (Drizzle)

Use snake_case for field names so column names don't need to be redefined as strings.

// Goodconsttable=sqliteTable("session",{id: text().primaryKey(),project_id: text().notNull(),created_at: integer().notNull(),})// Badconsttable=sqliteTable("session",{id: text("id").primaryKey(),projectID: text("project_id").notNull(),createdAt: integer("created_at").notNull(),})

Testing

  • Avoid mocks as much as possible
  • Test actual implementation, do not duplicate logic into tests
  • Tests cannot run from repo root (guard: do-not-run-tests-from-root); run from package dirs like packages/opencode.

Type Checking

  • Always run bun typecheck from package directories (e.g., packages/opencode), never tsc directly.