commit 2c0505f16fc085b37bded4a6ce57197a59200261 Author: naudachu Date: Fri Feb 13 15:21:30 2026 +0500 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a3e5aab --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +references/docs \ No newline at end of file diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..f791317 --- /dev/null +++ b/SKILL.md @@ -0,0 +1,760 @@ +--- +name: coda-pack-dev +description: Use when the user asks about building Coda Packs, creating formulas, sync tables, actions, authentication, schemas, parameters, or any Coda Pack SDK questions. +--- + +# Coda Pack Development Expert + +Expert assistance for building Coda Packs using the Coda Pack SDK. Provides guidance on formulas, sync tables, actions, authentication, and best practices. + +## What Are Coda Packs? + +Coda Packs are extensions that add new capabilities to Coda documents. They're built using TypeScript/JavaScript and run on Coda's servers as serverless applications. + +### Four Core Extension Types + +1. **Formulas** - Custom functions for calculations or data retrieval +2. **Actions** - Special formulas that modify external applications (used in buttons/automations) +3. **Column Formats** - Control how values display in tables +4. **Sync Tables** - Automated tables that pull data from external sources + +## Pack Structure + +### Basic pack.ts Template + +```typescript +import * as coda from "@codahq/packs-sdk"; + +export const pack = coda.newPack(); + +// Add network domains your pack will access +pack.addNetworkDomain("api.example.com"); + +// Add formulas, sync tables, etc. +``` + +## Creating Formulas + +### Formula Anatomy + +```typescript +pack.addFormula({ + name: "FormulaName", // Upper camel case, letters/numbers/underscores only + description: "What it does", + parameters: [ // Array of parameters + coda.makeParameter({ + type: coda.ParameterType.String, + name: "paramName", + description: "What this param does", + optional: false, // Optional: mark as optional param + }), + ], + resultType: coda.ValueType.String, // Return type + isAction: false, // Set true for actions (buttons/automations) + execute: async function(args, context) { + // Your code here + return result; + }, +}); +``` + +### Parameter Types + +Common parameter types: +- `ParameterType.String` - Text values +- `ParameterType.Number` - Numeric values +- `ParameterType.Boolean` - True/false +- `ParameterType.Date` - Date values +- `ParameterType.StringArray` - Array of strings +- `ParameterType.NumberArray` - Array of numbers +- `ParameterType.Html` - HTML content +- `ParameterType.Image` - Image URL or data + +### Result Types + +Common result types: +- `ValueType.String` - Text +- `ValueType.Number` - Numbers +- `ValueType.Boolean` - True/false +- `ValueType.Array` - Array of values +- `ValueType.Object` - Structured object (requires schema) + +### Formula Naming Best Practices + +- **Data sources**: Use plural nouns (`Tasks`, `Users`) +- **Transformations**: Use verbs (`Reverse`, `Truncate`) +- **Multiple words**: Upper camel case (`BugReport`, `DeletedFiles`) +- **Avoid prefixes**: Skip "Get", "Lookup", "Query" +- **Unique names**: Must be unique within pack + +⚠️ **Warning**: Renaming formulas breaks existing documents using them! + +### Making HTTP Requests + +```typescript +execute: async function([param1, param2], context) { + let response = await context.fetcher.fetch({ + method: "POST", + url: "https://api.example.com/endpoint", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + key: "value", + }), + }); + + // Check status + if (response.status !== 200) { + throw new coda.UserVisibleError("API request failed"); + } + + // Access response body + let data = response.body; + return data.result; +} +``` + +## Actions vs Regular Formulas + +**Actions** (`isAction: true`) are formulas designed for buttons and automations: +- Can modify external systems (create, update, delete) +- Show differently in the formula picker +- Used in button formulas and automations + +**Regular formulas** are for calculations and data retrieval: +- Should be idempotent (same inputs = same output) +- Cached for performance +- Used in table columns and document calculations + +## Sync Tables + +### Basic Sync Table Structure + +```typescript +// 1. Define schema +const ItemSchema = coda.makeObjectSchema({ + properties: { + id: { + type: coda.ValueType.Number, + fromKey: "id", + required: true, + }, + name: { + type: coda.ValueType.String, + fromKey: "name", + required: true, + }, + url: { + type: coda.ValueType.String, + fromKey: "url", + codaType: coda.ValueHintType.Url, + }, + }, + displayProperty: "name", // Primary column + idProperty: "id", // Unique identifier + featuredProperties: ["name", "url"], // Show by default +}); + +// 2. Add sync table +pack.addSyncTable({ + name: "Items", + identityName: "Item", // Singular form + schema: ItemSchema, + formula: { + name: "SyncItems", + description: "Sync items from API", + parameters: [ + // Optional filter parameters + ], + execute: async function(args, context) { + let response = await context.fetcher.fetch({ + method: "GET", + url: "https://api.example.com/items", + }); + + let items = response.body.items; + + return { + result: items, // Array of objects matching schema + }; + }, + }, +}); +``` + +### Sync Table Key Concepts + +**Identity**: Every sync table needs `identityName` (singular form of table name) + +**Schema Properties**: Define the structure of each row +- Use `fromKey` to map API field names to schema properties +- Set `required: true` for mandatory fields +- Use `displayProperty` for the primary column +- Use `idProperty` for unique identification + +**Row Limits**: +- Default: 1,000 rows +- Maximum: 10,000 rows + +**Continuations**: For paginated results exceeding 60s timeout: + +```typescript +execute: async function(args, context) { + let url = context.sync.continuation?.nextUrl || "https://api.example.com/items"; + + let response = await context.fetcher.fetch({ method: "GET", url }); + + let continuation; + if (response.body.next_page) { + continuation = { + nextUrl: response.body.next_page, + }; + } + + return { + result: response.body.items, + continuation: continuation, + }; +} +``` + +### Dynamic Sync Tables + +For APIs with multiple similar endpoints: + +```typescript +pack.addDynamicSyncTable({ + name: "DynamicTable", + getName: async function(context) { + // Return table name based on context + }, + getSchema: async function(context) { + // Return schema based on selected entity + }, + getDisplayUrl: async function(context) { + // Return URL to view the data + }, + listDynamicUrls: async function(context) { + // Return list of available tables + }, + formula: { + // Same as regular sync table + }, +}); +``` + +**See [Advanced Sync Tables](references/advanced-sync-tables.md) for:** +- Complete dynamic sync table implementation guide +- Two-way sync (editable sync tables) +- Property options and dynamic dropdowns +- Folder organization, search, and manual URL entry + +### Two-Way Sync Tables + +Enable users to edit synced data and push changes back to external sources. Mark columns as editable with `mutable: true` and implement an `executeUpdate` function: + +```typescript +const TaskSchema = coda.makeObjectSchema({ + properties: { + id: { type: coda.ValueType.Number, required: true }, + name: { + type: coda.ValueType.String, + mutable: true, // Editable column + }, + status: { + type: coda.ValueType.String, + codaType: coda.ValueHintType.SelectList, + options: ["Todo", "In Progress", "Done"], + mutable: true, + }, + }, + displayProperty: "name", + idProperty: "id", +}); + +pack.addSyncTable({ + name: "Tasks", + identityName: "Task", + schema: TaskSchema, + formula: { + name: "SyncTasks", + description: "Sync tasks", + parameters: [], + execute: async function([], context) { + // Fetch data from API + let response = await context.fetcher.fetch({ + method: "GET", + url: "https://api.example.com/tasks", + }); + return { result: response.body.tasks }; + }, + executeUpdate: async function([], context, updates) { + // Push changes back to API + let results = []; + for (let update of updates) { + let response = await context.fetcher.fetch({ + method: "PATCH", + url: `https://api.example.com/tasks/${update.previousValue.id}`, + body: JSON.stringify({ + name: update.newValue.name, + status: update.newValue.status, + }), + }); + results.push(response.body); + } + return { result: results }; + }, + }, +}); +``` + +**See [Advanced Sync Tables](references/advanced-sync-tables.md) for:** +- Property options (static and dynamic) +- Batch updates with `maxUpdateBatchSize` +- Error handling in updates +- OAuth incremental authorization + +## Authentication + +### Setting Up Authentication + +```typescript +// User authentication (most common) +pack.setUserAuthentication({ + type: coda.AuthenticationType.HeaderBearerToken, + instructionsUrl: "https://example.com/get-api-key", +}); + +// Or system authentication (shared credentials) +pack.setSystemAuthentication({ + type: coda.AuthenticationType.HeaderBearerToken, +}); +``` + +### Authentication Types + +- **HeaderBearerToken** - Bearer token in Authorization header +- **CustomHeaderToken** - Custom header name +- **QueryParamToken** - Token in query string +- **WebBasic** - Username and password +- **OAuth2** - OAuth 2.0 flow +- **CodaApiHeaderBearerToken** - For Coda API +- **AWSAccessKey** - AWS Signature v4 + +### OAuth2 Authentication + +```typescript +pack.setUserAuthentication({ + type: coda.AuthenticationType.OAuth2, + authorizationUrl: "https://example.com/oauth/authorize", + tokenUrl: "https://example.com/oauth/token", + scopes: ["read", "write"], + + // Get account name for the connection + getConnectionName: async function(context) { + let response = await context.fetcher.fetch({ + method: "GET", + url: "https://api.example.com/me", + }); + return response.body.username; + }, +}); +``` + +### Per-Account Endpoints + +For services with account-specific domains: + +```typescript +pack.setUserAuthentication({ + type: coda.AuthenticationType.HeaderBearerToken, + + // Prompt user for their account URL + getConnectionName: async function(context) { + return context.endpoint || "Unknown"; + }, + + endpointDomain: async function(context) { + return context.endpoint; + }, + + networkDomain: "example.com", +}); + +// Access endpoint in formulas +execute: async function(args, context) { + let url = `https://${context.endpoint}/api/endpoint`; + // ... +} +``` + +## Schemas + +### Object Schema + +```typescript +const PersonSchema = coda.makeObjectSchema({ + properties: { + id: { type: coda.ValueType.Number }, + name: { type: coda.ValueType.String }, + email: { + type: coda.ValueType.String, + codaType: coda.ValueHintType.Email, + }, + joinDate: { + type: coda.ValueType.String, + codaType: coda.ValueHintType.Date, + }, + avatar: { + type: coda.ValueType.String, + codaType: coda.ValueHintType.ImageReference, + }, + isActive: { type: coda.ValueType.Boolean }, + }, + displayProperty: "name", + idProperty: "id", + featuredProperties: ["name", "email"], +}); +``` + +### Value Hints (codaType) + +Make data more interactive: +- `ValueHintType.Url` - Clickable links +- `ValueHintType.Email` - Email addresses +- `ValueHintType.Date` - Date formatting +- `ValueHintType.DateTime` - Date and time +- `ValueHintType.ImageReference` - Display images +- `ValueHintType.ImageAttachment` - Inline images +- `ValueHintType.Markdown` - Render markdown +- `ValueHintType.Html` - Render HTML + +### Array Schemas + +```typescript +// Array of objects +const resultType = coda.ValueType.Array; +const schema = coda.makeSchema({ + type: coda.ValueType.Array, + items: PersonSchema, // Schema for each item +}); +``` + +## Network Domains + +Whitelist domains your pack will access: + +```typescript +pack.addNetworkDomain("api.example.com"); +pack.addNetworkDomain("cdn.example.com"); + +// Support subdomains +pack.addNetworkDomain("example.com"); // Allows *.example.com +``` + +## Error Handling + +### User-Visible Errors + +```typescript +execute: async function(args, context) { + if (!args[0]) { + throw new coda.UserVisibleError("Parameter is required"); + } + + let response = await context.fetcher.fetch({...}); + + if (response.status === 404) { + throw new coda.UserVisibleError("Item not found"); + } + + if (response.status !== 200) { + throw new coda.UserVisibleError( + `API error: ${response.status} - ${response.body.message}` + ); + } + + return response.body; +} +``` + +### Status Code Error + +```typescript +// Automatically throw error for non-2xx responses +let response = await context.fetcher.fetch({ + method: "GET", + url: "https://api.example.com/endpoint", + cacheTtlSecs: 0, // Disable caching + throwOnError: true, // Throw on non-2xx status +}); +``` + +## Caching + +### Cache Control + +```typescript +// Set cache TTL (time-to-live in seconds) +let response = await context.fetcher.fetch({ + method: "GET", + url: "https://api.example.com/data", + cacheTtlSecs: 300, // Cache for 5 minutes +}); + +// Disable caching +cacheTtlSecs: 0 +``` + +### When to Cache + +- ✅ Reference data (countries, categories) +- ✅ Slowly changing data (user profiles) +- ❌ Real-time data (stock prices, live scores) +- ❌ User-specific data that changes frequently + +## Best Practices + +### Formula Development + +1. **Descriptive names**: Clear, concise, descriptive names +2. **Good descriptions**: Explain what the formula does and when to use it +3. **Parameter validation**: Check required parameters early +4. **Error messages**: Clear, actionable error messages +5. **Examples**: Add examples to aid documentation + +```typescript +pack.addFormula({ + name: "ConvertCurrency", + description: "Convert amount from one currency to another using current exchange rates", + parameters: [ + coda.makeParameter({ + type: coda.ParameterType.Number, + name: "amount", + description: "The amount to convert", + }), + coda.makeParameter({ + type: coda.ParameterType.String, + name: "from", + description: "Source currency code (e.g., USD, EUR)", + }), + coda.makeParameter({ + type: coda.ParameterType.String, + name: "to", + description: "Target currency code (e.g., USD, EUR)", + }), + ], + resultType: coda.ValueType.Number, + examples: [ + { params: [100, "USD", "EUR"], result: 85.50 }, + { params: [50, "GBP", "USD"], result: 65.75 }, + ], + execute: async function([amount, from, to], context) { + // Implementation + }, +}); +``` + +### Sync Table Best Practices + +1. **Identity**: Always set `identityName` and `idProperty` +2. **Display property**: Choose the most meaningful column +3. **Featured properties**: Show 3-5 most important columns by default +4. **Continuations**: Handle pagination for large datasets +5. **Parameters**: Add filter parameters to reduce API calls + +### API Integration + +1. **Rate limits**: Respect API rate limits +2. **Pagination**: Handle paginated responses properly +3. **Error handling**: Graceful handling of API errors +4. **Authentication**: Use appropriate auth type +5. **Caching**: Cache when appropriate to reduce API calls + +### Performance + +1. **Minimize API calls**: Batch requests when possible +2. **Use caching**: Cache stable data +3. **Optimize schemas**: Only include needed properties +4. **Continuations**: Use for large datasets +5. **Timeout awareness**: 60-second execution limit + +## Common Patterns + +### Handling API Pagination + +```typescript +execute: async function(args, context) { + let page = context.sync.continuation?.page || 1; + let allItems = context.sync.continuation?.items || []; + + let response = await context.fetcher.fetch({ + method: "GET", + url: `https://api.example.com/items?page=${page}`, + }); + + allItems = allItems.concat(response.body.items); + + let continuation; + if (response.body.has_more) { + continuation = { + page: page + 1, + items: allItems, + }; + } + + return { + result: allItems, + continuation: continuation, + }; +} +``` + +### Building URLs with Parameters + +```typescript +execute: async function([filter, sortBy], context) { + let params = new URLSearchParams(); + if (filter) params.append("filter", filter); + if (sortBy) params.append("sort", sortBy); + + let url = `https://api.example.com/items?${params.toString()}`; + let response = await context.fetcher.fetch({ method: "GET", url }); + + return response.body; +} +``` + +### Transforming API Data + +```typescript +execute: async function(args, context) { + let response = await context.fetcher.fetch({ + method: "GET", + url: "https://api.example.com/users", + }); + + // Transform API data to match schema + let users = response.body.users.map(user => ({ + id: user.user_id, // Map API field to schema + name: user.full_name, + email: user.email_address, + isActive: user.status === "active", + })); + + return { result: users }; +} +``` + +## Development Commands + +```bash +# Install dependencies +npm install + +# Upload/deploy pack +npx coda upload pack.ts --notes "Description of changes" + +# Validate pack +npx coda validate pack.ts + +# Execute formula locally (for testing) +npx coda execute pack.ts FormulaName param1 param2 + +# Create new pack +npx coda init +``` + +## Testing + +### Unit Testing + +```typescript +import { executeFormulaFromPackDef } from '@codahq/packs-sdk/dist/development'; +import { pack } from './pack'; + +// Test a formula +let result = await executeFormulaFromPackDef( + pack, + "FormulaName", + ["param1", "param2"] +); + +console.assert(result === expectedValue); +``` + +### Common Issues + +**"Network domain not whitelisted"** +- Add the domain with `pack.addNetworkDomain()` + +**"Formula already exists"** +- Formula names must be unique within the pack + +**"Invalid parameter type"** +- Check parameter types match expected values + +**"Execution timeout"** +- Use continuations for long-running operations +- Optimize API calls and data processing + +**"Authentication failed"** +- Verify auth configuration +- Check user credentials +- Ensure proper headers/tokens + +## Resources + +### Official Documentation +- **Official Docs**: https://coda.io/packs/build/latest/ +- **SDK Reference**: https://coda.io/packs/build/latest/reference/sdk/ +- **Pack Studio**: https://coda.io/packs/build +- **Example Packs**: Available in Pack Studio + +### Skill Reference Guides +- **[Advanced Sync Tables](references/advanced-sync-tables.md)** - Two-way sync, dynamic tables, property options +- **[Quick Examples](references/quick-examples.md)** - Common formula and sync table patterns +- **[Troubleshooting](references/troubleshooting.md)** - Common errors and debugging strategies + +## Quick Reference + +### Common Imports +```typescript +import * as coda from "@codahq/packs-sdk"; +``` + +### Pack Initialization +```typescript +export const pack = coda.newPack(); +``` + +### Add Formula +```typescript +pack.addFormula({ name, description, parameters, resultType, execute }); +``` + +### Add Sync Table +```typescript +pack.addSyncTable({ name, identityName, schema, formula }); +``` + +### Make Parameter +```typescript +coda.makeParameter({ type, name, description, optional }); +``` + +### Make Schema +```typescript +coda.makeObjectSchema({ properties, displayProperty, idProperty }); +``` + +### Fetch Data +```typescript +await context.fetcher.fetch({ method, url, headers, body }); +``` + +### Throw Error +```typescript +throw new coda.UserVisibleError("Error message"); +``` diff --git a/references/index.yaml b/references/index.yaml new file mode 100644 index 0000000..efb8363 --- /dev/null +++ b/references/index.yaml @@ -0,0 +1,592 @@ +--- +# Coda Pack SDK Documentation Structure +# Complete file tree of all documentation (370+ files) + +root: docs/ + +structure: + # Main landing page + index.md: Home page + + # Agents section + agents: + index.md: Agents overview + development.md: Agent development + examples.md: Agent examples + quickstart.md: Agent quickstart + troubleshooting.md: Agent troubleshooting + upgrade.md: Agent upgrade guide + features: + chat.md: Chat features + context.md: Context management + mcp.md: MCP (Model Context Protocol) + skills.md: Skills system + tools.md: Agent tools + indexing: + index.md: Indexing overview + crawling.md: Content crawling + incremental.md: Incremental indexing + schema.md: Index schema + + # Blog + blog: + index.md: Blog index + posts: + new_agent_features.md: New agent features announcement + + # Guides - main documentation + guides: + overview.md: Pack development overview + design.md: Pack design guidelines + best-practices.md: Best practices + + # Basics + basics: + data-types.md: Working with data types + fetcher.md: Making HTTP requests + authentication: + index.md: Authentication overview + oauth2.md: OAuth2 authentication + aws.md: AWS authentication + parameters: + index.md: Parameters overview + autocomplete.md: Parameter autocomplete + + # Building blocks + blocks: + formulas.md: Creating formulas + actions.md: Building actions + cards.md: Creating cards + column-formats.md: Custom column formats + sync-tables: + index.md: Sync tables overview + dynamic.md: Dynamic sync tables + two-way.md: Two-way sync + + # Advanced topics + advanced: + schemas.md: Advanced schema patterns + caching.md: Caching strategies + errors.md: Error handling + images.md: Working with images + embeds.md: Embedded content + timezones.md: Timezone handling + .card_schema.md: Card schema (internal) + + # Development + development: + cli.md: Command line interface + testing.md: Testing packs + troubleshooting.md: Troubleshooting + libraries.md: Using libraries + pack-maker-tools.md: Pack maker tools + versions.md: Version management + + # Tutorials + tutorials: + index.md: Tutorials index + videos.md: Video tutorials + get-started: + web.md: Web IDE tutorial + cli.md: CLI tutorial + github.md: GitHub development + gitpod.md: Gitpod development + replit.md: Replit development + .cli.md: CLI (internal) + .cli-before.md: CLI setup (internal) + .cli-test.md: CLI testing (internal) + .rebuild.md: Rebuild (internal) + .use.md: Usage (internal) + build: + formula.md: Building formulas + fetcher.md: Using fetcher + sync-table.md: Building sync tables + oauth.md: Implementing OAuth + + # Code samples + samples: + index.md: Samples index + + # Full pack examples + full: + hello-world.md: Hello World pack + cats.md: Cat photos pack + math.md: Math pack + github.md: GitHub pack + todoist.md: Todoist pack + daylight.md: Daylight pack + dnd.md: D&D pack + + # Topic-specific samples + topic: + formula.md: Formula examples + action.md: Action examples + sync-table.md: Sync table examples + dynamic-sync-table.md: Dynamic sync table examples + two-way.md: Two-way sync examples + authentication.md: Authentication examples + fetcher.md: Fetcher examples + parameter.md: Parameter examples + autocomplete.md: Autocomplete examples + schema.md: Schema examples + data-type.md: Data type examples + column-format.md: Column format examples + card.md: Card examples + image.md: Image examples + dates.md: Date handling examples + apis.md: API integration examples + + # SDK Reference + reference: + sdk: + index.md: SDK reference index + + # Core SDK + core: + index.md: Core SDK index + + # Classes + classes: + PackDefinitionBuilder.md: Pack definition builder + UserVisibleError.md: User visible error + StatusCodeError.md: Status code error + MissingScopesError.md: Missing scopes error + ResponseSizeTooLargeError.md: Response size error + + # Enumerations + enumerations: + AuthenticationType.md: Authentication types + ParameterType.md: Parameter types + ValueType.md: Value types + ValueHintType.md: Value hint types + ConnectionRequirement.md: Connection requirements + Type.md: Schema types + HttpStatusCode.md: HTTP status codes + InvocationErrorType.md: Invocation error types + InvocationSource.md: Invocation sources + PostSetupType.md: Post-setup types + OptionsType.md: Options types + NetworkConnection.md: Network connection types + PermissionSyncMode.md: Permission sync modes + EmbeddedContentType.md: Embedded content types + AttributionNodeType.md: Attribution node types + LinkDisplayType.md: Link display types + EmailDisplayType.md: Email display types + CurrencyFormat.md: Currency formats + DurationUnit.md: Duration units + PrecannedDateRange.md: Precanned date ranges + ImageCornerStyle.md: Image corner styles + ImageOutline.md: Image outlines + ImageShapeStyle.md: Image shape styles + ScaleIconSet.md: Scale icon sets + ToolType.md: Tool types + TokenExchangeCredentialsLocation.md: Token exchange locations + ScreenAnnotationType.md: Screen annotation types + KnowledgeToolSourceType.md: Knowledge tool source types + SkillModel.md: Skill models + + # Functions + functions: + newPack.md: Create new pack + makeFormula.md: Make formula + makeParameter.md: Make parameter + makeSchema.md: Make schema + makeObjectSchema.md: Make object schema + makeSyncTable.md: Make sync table + makeDynamicSyncTable.md: Make dynamic sync table + makeMetadataFormula.md: Make metadata formula + makeEmptyFormula.md: Make empty formula + makeAttributionNode.md: Make attribution node + makeReferenceSchemaFromObjectSchema.md: Make reference schema + makeTranslateObjectFormula.md: Make translate object formula + makeSimpleAutocompleteMetadataFormula.md: Simple autocomplete metadata + simpleAutocomplete.md: Simple autocomplete + autocompleteSearchObjects.md: Autocomplete search objects + generateSchema.md: Generate schema + getEffectivePropertyKeysFromSchema.md: Get effective property keys + joinUrl.md: Join URL + getQueryParams.md: Get query params + withQueryParams.md: With query params + withIdentity.md: With identity + assertCondition.md: Assert condition + ensureExists.md: Ensure exists + ensureNonEmptyString.md: Ensure non-empty string + ensureUnreachable.md: Ensure unreachable + + # Interfaces (100+ interfaces) + interfaces: + # Core interfaces + PackDefinition.md: Pack definition + PackVersionDefinition.md: Pack version definition + ExecutionContext.md: Execution context + SyncExecutionContext.md: Sync execution context + UpdateSyncExecutionContext.md: Update sync execution context + Fetcher.md: Fetcher interface + FetchRequest.md: Fetch request + FetchResponse.md: Fetch response + Network.md: Network interface + TemporaryBlobStorage.md: Temporary blob storage + InvocationLocation.md: Invocation location + + # Formula interfaces + BaseFormulaDef.md: Base formula definition + CommonPackFormulaDef.md: Common pack formula definition + PackFormulaDef.md: Pack formula definition + ObjectArrayFormulaDef.md: Object array formula definition + EmptyFormulaDef.md: Empty formula definition + MetadataFormulaObjectResultType.md: Metadata formula result type + + # Parameter interfaces + ParamDef.md: Parameter definition + RequiredParamDef.md: Required parameter + OptionalParamDef.md: Optional parameter + CustomAuthParameter.md: Custom auth parameter + DynamicOptions.md: Dynamic options + PropertyWithOptions.md: Property with options + PropertyOptionsExecutionContext.md: Property options context + + # Schema interfaces + ObjectSchemaDefinition.md: Object schema definition + ObjectSchemaProperty.md: Object schema property + ArraySchema.md: Array schema + BooleanSchema.md: Boolean schema + NumericSchema.md: Numeric schema + StringEmbedSchema.md: String embed schema + SimpleStringSchema.md: Simple string schema + StringWithOptionsSchema.md: String with options + ImageSchema.md: Image schema + LinkSchema.md: Link schema + EmailSchema.md: Email schema + CurrencySchema.md: Currency schema + DurationSchema.md: Duration schema + NumericDurationSchema.md: Numeric duration schema + StringDateSchema.md: String date schema + StringDateTimeSchema.md: String datetime schema + StringTimeSchema.md: String time schema + NumericDateSchema.md: Numeric date schema + NumericDateTimeSchema.md: Numeric datetime schema + NumericTimeSchema.md: Numeric time schema + ProgressBarSchema.md: Progress bar schema + ScaleSchema.md: Scale schema + SliderSchema.md: Slider schema + ArrayType.md: Array type + Format.md: Format interface + + # Authentication interfaces + BaseAuthentication.md: Base authentication + NoAuthentication.md: No authentication + CustomAuthentication.md: Custom authentication + CustomHeaderTokenAuthentication.md: Custom header token + HeaderBearerTokenAuthentication.md: Header bearer token + MultiHeaderTokenAuthentication.md: Multi-header token + QueryParamTokenAuthentication.md: Query param token + MultiQueryParamTokenAuthentication.md: Multi-query param token + WebBasicAuthentication.md: Web basic auth + OAuth2Authentication.md: OAuth2 authentication + OAuth2ClientCredentialsAuthentication.md: OAuth2 client credentials + CodaApiBearerTokenAuthentication.md: Coda API bearer token + AWSAccessKeyAuthentication.md: AWS access key + AWSAssumeRoleAuthentication.md: AWS assume role + + # Sync table interfaces + SyncTableDef.md: Sync table definition + SyncTableOptions.md: Sync table options + SyncFormulaDef.md: Sync formula definition + SyncFormulaResult.md: Sync formula result + DynamicSyncTableDef.md: Dynamic sync table definition + DynamicSyncTableOptions.md: Dynamic sync table options + SyncBase.md: Sync base + SyncFull.md: Full sync + SyncIncremental.md: Incremental sync + SyncUpdate.md: Sync update + UpdateSync.md: Update sync + SyncUpdateResult.md: Sync update result + SyncTableRelation.md: Sync table relation + SyncCompletionMetadata.md: Sync completion metadata + SyncCompletionMetadataIncomplete.md: Incomplete sync metadata + + # Identity and indexing + Identity.md: Identity interface + IdentityDefinition.md: Identity definition + PropertyIdentifierDetails.md: Property identifier details + CustomIndexDefinition.md: Custom index definition + CrawlStrategy.md: Crawl strategy + + # Embedded content + EmbeddedContentTool.md: Embedded content tool + CopyableBlockEmbeddedContent.md: Copyable block content + CarouselViewEmbeddedContent.md: Carousel view content + TabViewEmbeddedContent.md: Tab view content + + # Attribution + ImageAttributionNode.md: Image attribution node + LinkAttributionNode.md: Link attribution node + TextAttributionNode.md: Text attribution node + + # Tools and skills + PackTool.md: Pack tool + ContactResolutionTool.md: Contact resolution tool + KnowledgeTool.md: Knowledge tool + PackKnowledgeToolSource.md: Pack knowledge source + ScreenAnnotationTool.md: Screen annotation tool + RewriteScreenAnnotation.md: Rewrite screen annotation + Skill.md: Skill interface + SkillEntrypoints.md: Skill entrypoints + SkillEntrypointConfig.md: Skill entrypoint config + SkillModelConfiguration.md: Skill model configuration + MCPServer.md: MCP server interface + + # Validation and errors + ParameterValidationDetail.md: Parameter validation detail + ValidParameterValidationResult.md: Valid parameter validation + InvalidParameterValidationResult.md: Invalid parameter validation + StatusCodeErrorResponse.md: Status code error response + + # Post-setup and endpoints + SetEndpoint.md: Set endpoint + RequestHandlerTemplate.md: Request handler template + ResponseHandlerTemplate.md: Response handler template + + # Autocomplete + SimpleAutocompleteOption.md: Simple autocomplete option + + # Continuation + Continuation.md: Continuation interface + + # Type aliases (100+ type aliases) + type-aliases: + # Formula type aliases + Formula.md: Formula type + BaseFormula.md: Base formula + PackFormulaResult.md: Pack formula result + PackFormulaValue.md: Pack formula value + StringFormulaDef.md: String formula definition + NumericFormulaDef.md: Numeric formula definition + BooleanFormulaDef.md: Boolean formula definition + ArrayFormulaDef.md: Array formula definition + ObjectFormulaDef.md: Object formula definition + TypedPackFormula.md: Typed pack formula + StringPackFormula.md: String pack formula + NumericPackFormula.md: Numeric pack formula + BooleanPackFormula.md: Boolean pack formula + ObjectPackFormula.md: Object pack formula + + # Schema type aliases + Schema.md: Schema type + SchemaType.md: Schema type enum + NumberSchema.md: Number schema + StringSchema.md: String schema + StringHintTypes.md: String hint types + NumberHintTypes.md: Number hint types + BooleanHintTypes.md: Boolean hint types + ObjectHintTypes.md: Object hint types + ObjectSchemaProperties.md: Object schema properties + PropertySchemaOptions.md: Property schema options + + # Sync table type aliases + SyncTable.md: Sync table + GenericSyncTable.md: Generic sync table + GenericDynamicSyncTable.md: Generic dynamic sync table + SyncFormula.md: Sync formula + GenericSyncFormula.md: Generic sync formula + GenericSyncFormulaResult.md: Generic sync formula result + Sync.md: Sync type + SyncCompletionMetadataResult.md: Sync completion metadata result + GenericSyncUpdate.md: Generic sync update + GenericSyncUpdateSingleResult.md: Generic sync update single + SyncUpdateSingleResult.md: Sync update single result + + # Authentication type aliases + Authentication.md: Authentication type + AuthenticationDef.md: Authentication definition + SystemAuthentication.md: System authentication + SystemAuthenticationDef.md: System authentication definition + UserAuthenticationDef.md: User authentication definition + + # Metadata type aliases + MetadataFormula.md: Metadata formula + MetadataFormulaDef.md: Metadata formula definition + MetadataFormulaResultType.md: Metadata formula result + MetadataFunction.md: Metadata function + MetadataContext.md: Metadata context + LegacyDefaultMetadataReturnType.md: Legacy metadata return + PropertyOptionsMetadataFunction.md: Property options metadata function + PropertyOptionsMetadataResult.md: Property options metadata result + + # Parameter type aliases + ParamDefs.md: Parameter definitions + ParamValues.md: Parameter values + ParameterOptions.md: Parameter options + ParameterValidationResult.md: Parameter validation result + ParamDefFromOptionsUnion.md: Param def from options + SuggestedValueType.md: Suggested value type + + # Pack definition type aliases + BasicPackDefinition.md: Basic pack definition + PackId.md: Pack ID + + # Error type aliases + InvocationError.md: Invocation error + HttpStatusInvocationError.md: HTTP status error + TimeoutInvocationError.md: Timeout error + RateLimitExceededInvocationError.md: Rate limit error + ResponseTooLargeInvocationError.md: Response too large error + UnknownInvocationError.md: Unknown error + + # Formula options type aliases + FormulaDefinitionOptions.md: Formula definition options + FormulaOptions.md: Formula options + + # Post-setup type aliases + PostSetup.md: Post-setup type + PostSetupDef.md: Post-setup definition + SetEndpointDef.md: Set endpoint definition + + # Attribution type aliases + AttributionNode.md: Attribution node + + # Embedded content type aliases + EmbeddedContent.md: Embedded content type + + # Indexing type aliases + IndexDefinition.md: Index definition + BasicIndexedProperty.md: Basic indexed property + IndexedProperty.md: Indexed property + FilterableProperty.md: Filterable property + PropertyIdentifier.md: Property identifier + + # Context type aliases + ContextProperties.md: Context properties + + # Screen annotation type aliases + ScreenAnnotation.md: Screen annotation + + # Knowledge tool type aliases + KnowledgeToolSource.md: Knowledge tool source + + # Skills type aliases + PartialSkillDef.md: Partial skill definition + + # Fetch type aliases + FetchMethodType.md: Fetch method type + + # Inference type aliases + InferrableTypes.md: Inferrable types + + # Variables + variables: + PropertyLabelValueTemplate.md: Property label value template + ValidFetchMethods.md: Valid fetch methods + + # Namespaces + namespaces: + SvgConstants: + index.md: SVG constants + variables: + DataUrlPrefix.md: Data URL prefix + DataUrlPrefixWithDarkModeSupport.md: Data URL with dark mode + DarkModeFragmentId.md: Dark mode fragment ID + + # Testing SDK + testing: + index.md: Testing SDK index + + # Testing functions + functions: + executeFormulaFromPackDef.md: Execute formula from pack + executeFormulaOrSyncWithVM.md: Execute with VM + executeSyncFormula.md: Execute sync formula + executeSyncFormulaFromPackDef.md: Execute sync from pack + executeSyncFormulaFromPackDefSingleIteration.md: Execute single iteration + executeMetadataFormula.md: Execute metadata formula + newMockExecutionContext.md: New mock execution context + newMockSyncExecutionContext.md: New mock sync context + newRealFetcherExecutionContext.md: New real fetcher context + newRealFetcherSyncExecutionContext.md: New real fetcher sync context + newJsonFetchResponse.md: New JSON fetch response + + # Testing interfaces + interfaces: + MockExecutionContext.md: Mock execution context + MockSyncExecutionContext.md: Mock sync execution context + ExecuteOptions.md: Execute options + ContextOptions.md: Context options + + # Testing type aliases + type-aliases: + SyncExecutionContextAsMock.md: Sync execution context as mock + + # Support + support: + index.md: Support index + faq.md: Frequently asked questions + errors.md: Common errors + changes.md: Changelog + contributing: + index.md: Contributing guide + style.md: Style guide + migration: + index.md: Migration guide + v0.11.0.md: Migrate to v0.11.0 + +# Quick reference paths +quick_paths: + # Getting started + getting_started: docs/tutorials/get-started/web.md + overview: docs/guides/overview.md + + # Core building blocks + formulas: docs/guides/blocks/formulas.md + actions: docs/guides/blocks/actions.md + sync_tables: docs/guides/blocks/sync-tables/index.md + dynamic_sync_tables: docs/guides/blocks/sync-tables/dynamic.md + two_way_sync: docs/guides/blocks/sync-tables/two-way.md + column_formats: docs/guides/blocks/column-formats.md + cards: docs/guides/blocks/cards.md + + # Basics + authentication: docs/guides/basics/authentication/index.md + oauth2: docs/guides/basics/authentication/oauth2.md + fetcher: docs/guides/basics/fetcher.md + data_types: docs/guides/basics/data-types.md + parameters: docs/guides/basics/parameters/index.md + autocomplete: docs/guides/basics/parameters/autocomplete.md + + # Advanced + schemas: docs/guides/advanced/schemas.md + caching: docs/guides/advanced/caching.md + errors: docs/guides/advanced/errors.md + images: docs/guides/advanced/images.md + embeds: docs/guides/advanced/embeds.md + timezones: docs/guides/advanced/timezones.md + + # Development + cli: docs/guides/development/cli.md + testing: docs/guides/development/testing.md + troubleshooting: docs/guides/development/troubleshooting.md + libraries: docs/guides/development/libraries.md + versions: docs/guides/development/versions.md + + # SDK Reference + sdk_core: docs/reference/sdk/core/index.md + sdk_testing: docs/reference/sdk/testing/index.md + new_pack: docs/reference/sdk/core/functions/newPack.md + make_formula: docs/reference/sdk/core/functions/makeFormula.md + make_sync_table: docs/reference/sdk/core/functions/makeSyncTable.md + make_dynamic_sync_table: docs/reference/sdk/core/functions/makeDynamicSyncTable.md + + # Samples + samples_index: docs/samples/index.md + hello_world: docs/samples/full/hello-world.md + formula_samples: docs/samples/topic/formula.md + sync_table_samples: docs/samples/topic/sync-table.md + auth_samples: docs/samples/topic/authentication.md + + # Support + faq: docs/support/faq.md + best_practices: docs/guides/best-practices.md + design: docs/guides/design.md + +# Statistics +total_files: 370 +total_directories: 40