Compare commits

..

1 Commits

Author SHA1 Message Date
waleed
e6c7bd3534 feat(kb): added tags information to kb docs table 2025-12-26 02:06:50 -08:00
1345 changed files with 8883 additions and 9545 deletions

View File

@@ -462,19 +462,6 @@ export function SlackIcon(props: SVGProps<SVGSVGElement>) {
)
}
export function SlackMonoIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg' fill='currentColor' {...props}>
<g>
<path d='M53.8412698,161.320635 C53.8412698,176.152381 41.8539683,188.139683 27.0222222,188.139683 C12.1904762,188.139683 0.203174603,176.152381 0.203174603,161.320635 C0.203174603,146.488889 12.1904762,134.501587 27.0222222,134.501587 L53.8412698,134.501587 L53.8412698,161.320635 Z M67.2507937,161.320635 C67.2507937,146.488889 79.2380952,134.501587 94.0698413,134.501587 C108.901587,134.501587 120.888889,146.488889 120.888889,161.320635 L120.888889,228.368254 C120.888889,243.2 108.901587,255.187302 94.0698413,255.187302 C79.2380952,255.187302 67.2507937,243.2 67.2507937,228.368254 L67.2507937,161.320635 Z' />
<path d='M94.0698413,53.6380952 C79.2380952,53.6380952 67.2507937,41.6507937 67.2507937,26.8190476 C67.2507937,11.9873016 79.2380952,-7.10542736e-15 94.0698413,-7.10542736e-15 C108.901587,-7.10542736e-15 120.888889,11.9873016 120.888889,26.8190476 L120.888889,53.6380952 L94.0698413,53.6380952 Z M94.0698413,67.2507937 C108.901587,67.2507937 120.888889,79.2380952 120.888889,94.0698413 C120.888889,108.901587 108.901587,120.888889 94.0698413,120.888889 L26.8190476,120.888889 C11.9873016,120.888889 0,108.901587 0,94.0698413 C0,79.2380952 11.9873016,67.2507937 26.8190476,67.2507937 L94.0698413,67.2507937 Z' />
<path d='M201.549206,94.0698413 C201.549206,79.2380952 213.536508,67.2507937 228.368254,67.2507937 C243.2,67.2507937 255.187302,79.2380952 255.187302,94.0698413 C255.187302,108.901587 243.2,120.888889 228.368254,120.888889 L201.549206,120.888889 L201.549206,94.0698413 Z M188.139683,94.0698413 C188.139683,108.901587 176.152381,120.888889 161.320635,120.888889 C146.488889,120.888889 134.501587,108.901587 134.501587,94.0698413 L134.501587,26.8190476 C134.501587,11.9873016 146.488889,-1.42108547e-14 161.320635,-1.42108547e-14 C176.152381,-1.42108547e-14 188.139683,11.9873016 188.139683,26.8190476 L188.139683,94.0698413 Z' />
<path d='M161.320635,201.549206 C176.152381,201.549206 188.139683,213.536508 188.139683,228.368254 C188.139683,243.2 176.152381,255.187302 161.320635,255.187302 C146.488889,255.187302 134.501587,243.2 134.501587,228.368254 L134.501587,201.549206 L161.320635,201.549206 Z M161.320635,188.139683 C146.488889,188.139683 134.501587,176.152381 134.501587,161.320635 C134.501587,146.488889 146.488889,134.501587 161.320635,134.501587 L228.571429,134.501587 C243.403175,134.501587 255.390476,146.488889 255.390476,161.320635 C255.390476,176.152381 243.403175,188.139683 228.571429,188.139683 L161.320635,188.139683 Z' />
</g>
</svg>
)
}
export function GithubIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg {...props} width='26' height='26' viewBox='0 0 26 26' xmlns='http://www.w3.org/2000/svg'>

View File

@@ -146,32 +146,6 @@ Extrahieren Sie strukturierte Daten aus vollständigen Webseiten mithilfe von na
| `success` | boolean | Ob der Extraktionsvorgang erfolgreich war |
| `data` | object | Extrahierte strukturierte Daten gemäß dem Schema oder der Eingabeaufforderung |
### `firecrawl_agent`
Autonomer Web-Datenextraktions-Agent. Sucht und sammelt Informationen basierend auf natürlichsprachlichen Anweisungen, ohne dass spezifische URLs erforderlich sind.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `prompt` | string | Ja | Natürlichsprachliche Beschreibung der zu extrahierenden Daten \(max. 10.000 Zeichen\) |
| `urls` | json | Nein | Optionales Array von URLs, auf die sich der Agent konzentrieren soll |
| `schema` | json | Nein | JSON-Schema, das die Struktur der zu extrahierenden Daten definiert |
| `maxCredits` | number | Nein | Maximale Credits, die für diese Agent-Aufgabe verwendet werden sollen |
| `strictConstrainToURLs` | boolean | Nein | Wenn true, besucht der Agent nur URLs, die im urls-Array angegeben sind |
| `apiKey` | string | Ja | Firecrawl API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Agent-Operation erfolgreich war |
| `status` | string | Aktueller Status des Agent-Jobs \(processing, completed, failed\) |
| `data` | object | Vom Agent extrahierte Daten |
| `creditsUsed` | number | Anzahl der von dieser Agent-Aufgabe verbrauchten Credits |
| `expiresAt` | string | Zeitstempel, wann die Ergebnisse ablaufen \(24 Stunden\) |
| `sources` | object | Array der vom Agent verwendeten Quell-URLs |
## Hinweise
- Kategorie: `tools`

View File

@@ -55,7 +55,8 @@ Erstellen Sie einen neuen Kontakt in Intercom mit E-Mail, external_id oder Rolle
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `contact` | object | Erstelltes Kontaktobjekt |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Erstellte Kontaktdaten |
### `intercom_get_contact`
@@ -71,7 +72,8 @@ Einen einzelnen Kontakt anhand der ID von Intercom abrufen
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `contact` | object | Kontaktobjekt |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Kontaktdaten |
### `intercom_update_contact`
@@ -99,7 +101,8 @@ Einen bestehenden Kontakt in Intercom aktualisieren
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `contact` | object | Aktualisiertes Kontaktobjekt |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Aktualisierte Kontaktdaten |
### `intercom_list_contacts`
@@ -116,7 +119,8 @@ Alle Kontakte von Intercom mit Paginierungsunterstützung auflisten
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `contacts` | array | Array von Kontaktobjekten |
| `success` | boolean | Status des Operationserfolgs |
| `output` | object | Liste der Kontakte |
### `intercom_search_contacts`
@@ -136,7 +140,8 @@ Suche nach Kontakten in Intercom mit einer Abfrage
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `contacts` | array | Array von übereinstimmenden Kontaktobjekten |
| `success` | boolean | Status des Operationserfolgs |
| `output` | object | Suchergebnisse |
### `intercom_delete_contact`
@@ -152,9 +157,8 @@ Einen Kontakt aus Intercom nach ID löschen
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `id` | string | ID des gelöschten Kontakts |
| `deleted` | boolean | Ob der Kontakt gelöscht wurde |
| `metadata` | object | Metadaten der Operation |
| `success` | boolean | Status des Operationserfolgs |
| `output` | object | Löschergebnis |
### `intercom_create_company`
@@ -178,7 +182,8 @@ Ein Unternehmen in Intercom erstellen oder aktualisieren
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `company` | object | Erstelltes oder aktualisiertes Unternehmensobjekt |
| `success` | boolean | Status des Operationserfolgs |
| `output` | object | Erstellte oder aktualisierte Unternehmensdaten |
### `intercom_get_company`
@@ -194,7 +199,8 @@ Ein einzelnes Unternehmen anhand der ID von Intercom abrufen
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `company` | object | Unternehmensobjekt |
| `success` | boolean | Status des Operationserfolgs |
| `output` | object | Unternehmensdaten |
### `intercom_list_companies`
@@ -212,7 +218,8 @@ Listet alle Unternehmen von Intercom mit Paginierungsunterstützung auf. Hinweis
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `companies` | array | Array von Unternehmensobjekten |
| `success` | boolean | Status des Operationserfolgs |
| `output` | object | Liste der Unternehmen |
### `intercom_get_conversation`
@@ -230,7 +237,8 @@ Eine einzelne Konversation anhand der ID von Intercom abrufen
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `conversation` | object | Konversationsobjekt |
| `success` | boolean | Status des Operationserfolgs |
| `output` | object | Konversationsdaten |
### `intercom_list_conversations`
@@ -249,7 +257,8 @@ Alle Konversationen von Intercom mit Paginierungsunterstützung auflisten
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `conversations` | array | Array von Konversationsobjekten |
| `success` | boolean | Status des Operationserfolgs |
| `output` | object | Liste der Konversationen |
### `intercom_reply_conversation`
@@ -270,7 +279,8 @@ Als Administrator auf eine Konversation in Intercom antworten
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `conversation` | object | Aktualisiertes Konversationsobjekt |
| `success` | boolean | Status des Operationserfolgs |
| `output` | object | Aktualisierte Konversation mit Antwort |
### `intercom_search_conversations`
@@ -290,7 +300,8 @@ Nach Konversationen in Intercom mit einer Abfrage suchen
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `conversations` | array | Array von übereinstimmenden Konversationsobjekten |
| `success` | boolean | Status des Operationserfolgs |
| `output` | object | Suchergebnisse |
### `intercom_create_ticket`
@@ -310,9 +321,10 @@ Ein neues Ticket in Intercom erstellen
#### Output
| Parameter | Typ | Beschreibung |
| Parameter | Type | Beschreibung |
| --------- | ---- | ----------- |
| `ticket` | object | Erstelltes Ticket-Objekt |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Erstellte Ticket-Daten |
### `intercom_get_ticket`
@@ -326,9 +338,10 @@ Ein einzelnes Ticket anhand der ID von Intercom abrufen
#### Output
| Parameter | Typ | Beschreibung |
| Parameter | Type | Beschreibung |
| --------- | ---- | ----------- |
| `ticket` | object | Ticket-Objekt |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Ticket-Daten |
### `intercom_create_message`
@@ -350,9 +363,10 @@ Eine neue vom Administrator initiierte Nachricht in Intercom erstellen und sende
#### Output
| Parameter | Typ | Beschreibung |
| Parameter | Type | Beschreibung |
| --------- | ---- | ----------- |
| `message` | object | Erstelltes Nachrichtenobjekt |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Erstellte Nachrichtendaten |
## Notizen

View File

@@ -70,7 +70,8 @@ Text-Datensätze in einen Pinecone-Index einfügen oder aktualisieren
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `statusText` | string | Status der Upsert-Operation |
| `statusText` | string | Status des Einfügevorgangs |
| `upsertedCount` | number | Anzahl der erfolgreich eingefügten Datensätze |
### `pinecone_search_text`

View File

@@ -266,11 +266,10 @@ Eine Datei in einen Supabase-Speicher-Bucket hochladen
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `fileName` | string | Ja | Der Name der Datei \(z.B. "dokument.pdf", "bild.jpg"\) |
| `path` | string | Nein | Optionaler Ordnerpfad \(z.B. "ordner/unterordner/"\) |
| `path` | string | Ja | Der Pfad, unter dem die Datei gespeichert wird \(z.B. "ordner/datei.jpg"\) |
| `fileContent` | string | Ja | Der Dateiinhalt \(base64-kodiert für Binärdateien oder Klartext\) |
| `contentType` | string | Nein | MIME-Typ der Datei \(z.B. "image/jpeg", "text/plain"\) |
| `upsert` | boolean | Nein | Wenn true, wird die vorhandene Datei überschrieben \(Standard: false\) |
| `upsert` | boolean | Nein | Wenn true, überschreibt vorhandene Datei \(Standard: false\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe

View File

@@ -129,18 +129,15 @@ Vollständige Details und Struktur eines bestimmten Formulars abrufen
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `id` | string | Eindeutige Formularkennung |
| `id` | string | Eindeutige Formular-ID |
| `title` | string | Formulartitel |
| `type` | string | Formulartyp \(form, quiz, etc.\) |
| `settings` | object | Formulareinstellungen einschließlich Sprache, Fortschrittsbalken, etc. |
| `theme` | object | Theme-Referenz |
| `workspace` | object | Workspace-Referenz |
| `fields` | array | Array von Formularfeldern/Fragen |
| `welcome_screens` | array | Array von Willkommensbildschirmen \(leer, wenn keine konfiguriert\) |
| `thankyou_screens` | array | Array von Danke-Bildschirmen |
| `created_at` | string | Zeitstempel der Formularerstellung \(ISO-8601-Format\) |
| `last_updated_at` | string | Zeitstempel der letzten Formularaktualisierung \(ISO-8601-Format\) |
| `published_at` | string | Zeitstempel der Formularveröffentlichung \(ISO-8601-Format\) |
| `welcome_screens` | array | Array von Begrüßungsbildschirmen |
| `thankyou_screens` | array | Array von Dankesbildschirmen |
| `_links` | object | Links zu verwandten Ressourcen einschließlich öffentlicher Formular-URL |
### `typeform_create_form`
@@ -166,12 +163,7 @@ Ein neues Formular mit Feldern und Einstellungen erstellen
| `id` | string | Eindeutige Kennung des erstellten Formulars |
| `title` | string | Formulartitel |
| `type` | string | Formulartyp |
| `settings` | object | Formulareinstellungsobjekt |
| `theme` | object | Theme-Referenz |
| `workspace` | object | Workspace-Referenz |
| `fields` | array | Array von erstellten Formularfeldern \(leer, wenn keine hinzugefügt\) |
| `welcome_screens` | array | Array von Willkommensbildschirmen \(leer, wenn keine konfiguriert\) |
| `thankyou_screens` | array | Array von Danke-Bildschirmen |
| `fields` | array | Array der erstellten Formularfelder |
| `_links` | object | Links zu verwandten Ressourcen einschließlich öffentlicher Formular-URL |
### `typeform_update_form`
@@ -190,7 +182,16 @@ Ein bestehendes Formular mit JSON Patch-Operationen aktualisieren
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgsbestätigungsnachricht |
| `id` | string | Eindeutige Kennung des aktualisierten Formulars |
| `title` | string | Formulartitel |
| `type` | string | Formulartyp |
| `settings` | object | Formulareinstellungen |
| `theme` | object | Theme-Referenz |
| `workspace` | object | Workspace-Referenz |
| `fields` | array | Array von Formularfeldern |
| `welcome_screens` | array | Array von Begrüßungsbildschirmen |
| `thankyou_screens` | array | Array von Dankesbildschirmen |
| `_links` | object | Links zu verwandten Ressourcen |
### `typeform_delete_form`

View File

@@ -149,32 +149,6 @@ Extract structured data from entire webpages using natural language prompts and
| `success` | boolean | Whether the extraction operation was successful |
| `data` | object | Extracted structured data according to the schema or prompt |
### `firecrawl_agent`
Autonomous web data extraction agent. Searches and gathers information based on natural language prompts without requiring specific URLs.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `prompt` | string | Yes | Natural language description of the data to extract \(max 10,000 characters\) |
| `urls` | json | No | Optional array of URLs to focus the agent on |
| `schema` | json | No | JSON Schema defining the structure of data to extract |
| `maxCredits` | number | No | Maximum credits to spend on this agent task |
| `strictConstrainToURLs` | boolean | No | If true, agent will only visit URLs provided in the urls array |
| `apiKey` | string | Yes | Firecrawl API key |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the agent operation was successful |
| `status` | string | Current status of the agent job \(processing, completed, failed\) |
| `data` | object | Extracted data from the agent |
| `creditsUsed` | number | Number of credits consumed by this agent task |
| `expiresAt` | string | Timestamp when the results expire \(24 hours\) |
| `sources` | object | Array of source URLs used by the agent |
## Notes

View File

@@ -58,7 +58,8 @@ Create a new contact in Intercom with email, external_id, or role
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contact` | object | Created contact object |
| `success` | boolean | Operation success status |
| `output` | object | Created contact data |
### `intercom_get_contact`
@@ -74,7 +75,8 @@ Get a single contact by ID from Intercom
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contact` | object | Contact object |
| `success` | boolean | Operation success status |
| `output` | object | Contact data |
### `intercom_update_contact`
@@ -102,7 +104,8 @@ Update an existing contact in Intercom
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contact` | object | Updated contact object |
| `success` | boolean | Operation success status |
| `output` | object | Updated contact data |
### `intercom_list_contacts`
@@ -119,7 +122,8 @@ List all contacts from Intercom with pagination support
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contacts` | array | Array of contact objects |
| `success` | boolean | Operation success status |
| `output` | object | List of contacts |
### `intercom_search_contacts`
@@ -139,7 +143,8 @@ Search for contacts in Intercom using a query
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contacts` | array | Array of matching contact objects |
| `success` | boolean | Operation success status |
| `output` | object | Search results |
### `intercom_delete_contact`
@@ -155,9 +160,8 @@ Delete a contact from Intercom by ID
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `id` | string | ID of deleted contact |
| `deleted` | boolean | Whether the contact was deleted |
| `metadata` | object | Operation metadata |
| `success` | boolean | Operation success status |
| `output` | object | Deletion result |
### `intercom_create_company`
@@ -181,7 +185,8 @@ Create or update a company in Intercom
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `company` | object | Created or updated company object |
| `success` | boolean | Operation success status |
| `output` | object | Created or updated company data |
### `intercom_get_company`
@@ -197,7 +202,8 @@ Retrieve a single company by ID from Intercom
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `company` | object | Company object |
| `success` | boolean | Operation success status |
| `output` | object | Company data |
### `intercom_list_companies`
@@ -215,7 +221,8 @@ List all companies from Intercom with pagination support. Note: This endpoint ha
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `companies` | array | Array of company objects |
| `success` | boolean | Operation success status |
| `output` | object | List of companies |
### `intercom_get_conversation`
@@ -233,7 +240,8 @@ Retrieve a single conversation by ID from Intercom
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `conversation` | object | Conversation object |
| `success` | boolean | Operation success status |
| `output` | object | Conversation data |
### `intercom_list_conversations`
@@ -252,7 +260,8 @@ List all conversations from Intercom with pagination support
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `conversations` | array | Array of conversation objects |
| `success` | boolean | Operation success status |
| `output` | object | List of conversations |
### `intercom_reply_conversation`
@@ -273,7 +282,8 @@ Reply to a conversation as an admin in Intercom
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `conversation` | object | Updated conversation object |
| `success` | boolean | Operation success status |
| `output` | object | Updated conversation with reply |
### `intercom_search_conversations`
@@ -293,7 +303,8 @@ Search for conversations in Intercom using a query
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `conversations` | array | Array of matching conversation objects |
| `success` | boolean | Operation success status |
| `output` | object | Search results |
### `intercom_create_ticket`
@@ -315,7 +326,8 @@ Create a new ticket in Intercom
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ticket` | object | Created ticket object |
| `success` | boolean | Operation success status |
| `output` | object | Created ticket data |
### `intercom_get_ticket`
@@ -331,7 +343,8 @@ Retrieve a single ticket by ID from Intercom
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ticket` | object | Ticket object |
| `success` | boolean | Operation success status |
| `output` | object | Ticket data |
### `intercom_create_message`
@@ -355,7 +368,8 @@ Create and send a new admin-initiated message in Intercom
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | object | Created message object |
| `success` | boolean | Operation success status |
| `output` | object | Created message data |

View File

@@ -74,6 +74,7 @@ Insert or update text records in a Pinecone index
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `statusText` | string | Status of the upsert operation |
| `upsertedCount` | number | Number of records successfully upserted |
### `pinecone_search_text`

View File

@@ -269,8 +269,7 @@ Upload a file to a Supabase storage bucket
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Yes | Your Supabase project ID \(e.g., jdrkgepadsdopsntdlom\) |
| `bucket` | string | Yes | The name of the storage bucket |
| `fileName` | string | Yes | The name of the file \(e.g., "document.pdf", "image.jpg"\) |
| `path` | string | No | Optional folder path \(e.g., "folder/subfolder/"\) |
| `path` | string | Yes | The path where the file will be stored \(e.g., "folder/file.jpg"\) |
| `fileContent` | string | Yes | The file content \(base64 encoded for binary files, or plain text\) |
| `contentType` | string | No | MIME type of the file \(e.g., "image/jpeg", "text/plain"\) |
| `upsert` | boolean | No | If true, overwrites existing file \(default: false\) |

View File

@@ -139,11 +139,8 @@ Retrieve complete details and structure of a specific form
| `theme` | object | Theme reference |
| `workspace` | object | Workspace reference |
| `fields` | array | Array of form fields/questions |
| `welcome_screens` | array | Array of welcome screens \(empty if none configured\) |
| `welcome_screens` | array | Array of welcome screens |
| `thankyou_screens` | array | Array of thank you screens |
| `created_at` | string | Form creation timestamp \(ISO 8601 format\) |
| `last_updated_at` | string | Form last update timestamp \(ISO 8601 format\) |
| `published_at` | string | Form publication timestamp \(ISO 8601 format\) |
| `_links` | object | Related resource links including public form URL |
### `typeform_create_form`
@@ -169,12 +166,7 @@ Create a new form with fields and settings
| `id` | string | Created form unique identifier |
| `title` | string | Form title |
| `type` | string | Form type |
| `settings` | object | Form settings object |
| `theme` | object | Theme reference |
| `workspace` | object | Workspace reference |
| `fields` | array | Array of created form fields \(empty if none added\) |
| `welcome_screens` | array | Array of welcome screens \(empty if none configured\) |
| `thankyou_screens` | array | Array of thank you screens |
| `fields` | array | Array of created form fields |
| `_links` | object | Related resource links including public form URL |
### `typeform_update_form`
@@ -193,7 +185,16 @@ Update an existing form using JSON Patch operations
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Success confirmation message |
| `id` | string | Updated form unique identifier |
| `title` | string | Form title |
| `type` | string | Form type |
| `settings` | object | Form settings |
| `theme` | object | Theme reference |
| `workspace` | object | Workspace reference |
| `fields` | array | Array of form fields |
| `welcome_screens` | array | Array of welcome screens |
| `thankyou_screens` | array | Array of thank you screens |
| `_links` | object | Related resource links |
### `typeform_delete_form`

View File

@@ -146,32 +146,6 @@ Extrae datos estructurados de páginas web completas utilizando instrucciones en
| `success` | boolean | Si la operación de extracción fue exitosa |
| `data` | object | Datos estructurados extraídos según el esquema o indicación |
### `firecrawl_agent`
Agente autónomo de extracción de datos web. Busca y recopila información basándose en instrucciones en lenguaje natural sin requerir URLs específicas.
#### Entrada
| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `prompt` | string | Sí | Descripción en lenguaje natural de los datos a extraer (máx. 10.000 caracteres) |
| `urls` | json | No | Array opcional de URLs en las que enfocar al agente |
| `schema` | json | No | Esquema JSON que define la estructura de los datos a extraer |
| `maxCredits` | number | No | Créditos máximos a gastar en esta tarea del agente |
| `strictConstrainToURLs` | boolean | No | Si es true, el agente solo visitará las URLs proporcionadas en el array urls |
| `apiKey` | string | Sí | Clave API de Firecrawl |
#### Salida
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `success` | boolean | Si la operación del agente fue exitosa |
| `status` | string | Estado actual del trabajo del agente (processing, completed, failed) |
| `data` | object | Datos extraídos por el agente |
| `creditsUsed` | number | Número de créditos consumidos por esta tarea del agente |
| `expiresAt` | string | Marca de tiempo de cuándo expiran los resultados (24 horas) |
| `sources` | object | Array de URLs fuente utilizadas por el agente |
## Notas
- Categoría: `tools`

View File

@@ -55,7 +55,8 @@ Crear un nuevo contacto en Intercom con email, external_id o rol
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `contact` | object | Objeto de contacto creado |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Datos del contacto creado |
### `intercom_get_contact`
@@ -71,7 +72,8 @@ Obtener un solo contacto por ID desde Intercom
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `contact` | object | Objeto de contacto |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Datos del contacto |
### `intercom_update_contact`
@@ -99,7 +101,8 @@ Actualizar un contacto existente en Intercom
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `contact` | object | Objeto de contacto actualizado |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Datos del contacto actualizado |
### `intercom_list_contacts`
@@ -116,7 +119,8 @@ Listar todos los contactos de Intercom con soporte de paginación
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `contacts` | array | Array de objetos de contacto |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Lista de contactos |
### `intercom_search_contacts`
@@ -136,7 +140,8 @@ Buscar contactos en Intercom usando una consulta
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `contacts` | array | Array de objetos de contacto coincidentes |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Resultados de la búsqueda |
### `intercom_delete_contact`
@@ -152,9 +157,8 @@ Eliminar un contacto de Intercom por ID
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `id` | string | ID del contacto eliminado |
| `deleted` | boolean | Si el contacto fue eliminado |
| `metadata` | object | Metadatos de la operación |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Resultado de la eliminación |
### `intercom_create_company`
@@ -178,7 +182,8 @@ Crear o actualizar una empresa en Intercom
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `company` | object | Objeto de empresa creado o actualizado |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Datos de la empresa creada o actualizada |
### `intercom_get_company`
@@ -194,7 +199,8 @@ Recuperar una única empresa por ID desde Intercom
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `company` | object | Objeto de empresa |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Datos de la empresa |
### `intercom_list_companies`
@@ -212,7 +218,8 @@ Lista todas las empresas de Intercom con soporte de paginación. Nota: Este endp
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `companies` | array | Array de objetos de empresa |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Lista de empresas |
### `intercom_get_conversation`
@@ -230,7 +237,8 @@ Recuperar una sola conversación por ID desde Intercom
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `conversation` | object | Objeto de conversación |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Datos de la conversación |
### `intercom_list_conversations`
@@ -249,7 +257,8 @@ Listar todas las conversaciones de Intercom con soporte de paginación
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `conversations` | array | Array de objetos de conversación |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Lista de conversaciones |
### `intercom_reply_conversation`
@@ -270,7 +279,8 @@ Responder a una conversación como administrador en Intercom
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `conversation` | object | Objeto de conversación actualizado |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Conversación actualizada con respuesta |
### `intercom_search_conversations`
@@ -290,7 +300,8 @@ Buscar conversaciones en Intercom usando una consulta
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `conversations` | array | Array de objetos de conversación coincidentes |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Resultados de la búsqueda |
### `intercom_create_ticket`
@@ -312,7 +323,8 @@ Crear un nuevo ticket en Intercom
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `ticket` | object | Objeto de ticket creado |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Datos del ticket creado |
### `intercom_get_ticket`
@@ -328,7 +340,8 @@ Recuperar un solo ticket por ID desde Intercom
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `ticket` | object | Objeto de ticket |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Datos del ticket |
### `intercom_create_message`
@@ -352,7 +365,8 @@ Crear y enviar un nuevo mensaje iniciado por el administrador en Intercom
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | object | Objeto de mensaje creado |
| `success` | boolean | Estado de éxito de la operación |
| `output` | object | Datos del mensaje creado |
## Notas

View File

@@ -70,7 +70,8 @@ Insertar o actualizar registros de texto en un índice de Pinecone
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `statusText` | string | Estado de la operación de upsert |
| `statusText` | string | Estado de la operación de inserción |
| `upsertedCount` | number | Número de registros insertados correctamente |
### `pinecone_search_text`

View File

@@ -266,8 +266,7 @@ Subir un archivo a un bucket de almacenamiento de Supabase
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `bucket` | string | Sí | El nombre del bucket de almacenamiento |
| `fileName` | string | Sí | El nombre del archivo \(p. ej., "documento.pdf", "imagen.jpg"\) |
| `path` | string | No | Ruta de carpeta opcional \(p. ej., "carpeta/subcarpeta/"\) |
| `path` | string | Sí | La ruta donde se almacenará el archivo \(p. ej., "carpeta/archivo.jpg"\) |
| `fileContent` | string | Sí | El contenido del archivo \(codificado en base64 para archivos binarios, o texto plano\) |
| `contentType` | string | No | Tipo MIME del archivo \(p. ej., "image/jpeg", "text/plain"\) |
| `upsert` | boolean | No | Si es verdadero, sobrescribe el archivo existente \(predeterminado: false\) |

View File

@@ -136,12 +136,9 @@ Recuperar detalles completos y estructura de un formulario específico
| `theme` | object | Referencia del tema |
| `workspace` | object | Referencia del espacio de trabajo |
| `fields` | array | Array de campos/preguntas del formulario |
| `welcome_screens` | array | Array de pantallas de bienvenida \(vacío si no hay ninguna configurada\) |
| `welcome_screens` | array | Array de pantallas de bienvenida |
| `thankyou_screens` | array | Array de pantallas de agradecimiento |
| `created_at` | string | Marca de tiempo de creación del formulario \(formato ISO 8601\) |
| `last_updated_at` | string | Marca de tiempo de última actualización del formulario \(formato ISO 8601\) |
| `published_at` | string | Marca de tiempo de publicación del formulario \(formato ISO 8601\) |
| `_links` | object | Enlaces de recursos relacionados incluyendo URL pública del formulario |
| `_links` | object | Enlaces a recursos relacionados incluyendo URL pública del formulario |
### `typeform_create_form`
@@ -166,13 +163,8 @@ Crear un nuevo formulario con campos y configuraciones
| `id` | string | Identificador único del formulario creado |
| `title` | string | Título del formulario |
| `type` | string | Tipo de formulario |
| `settings` | object | Objeto de configuración del formulario |
| `theme` | object | Referencia del tema |
| `workspace` | object | Referencia del espacio de trabajo |
| `fields` | array | Array de campos del formulario creados \(vacío si no se agregó ninguno\) |
| `welcome_screens` | array | Array de pantallas de bienvenida \(vacío si no hay ninguna configurada\) |
| `thankyou_screens` | array | Array de pantallas de agradecimiento |
| `_links` | object | Enlaces de recursos relacionados incluyendo URL pública del formulario |
| `fields` | array | Array de campos del formulario creado |
| `_links` | object | Enlaces a recursos relacionados incluyendo URL pública del formulario |
### `typeform_update_form`
@@ -190,7 +182,16 @@ Actualizar un formulario existente usando operaciones JSON Patch
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de confirmación de éxito |
| `id` | string | Identificador único del formulario actualizado |
| `title` | string | Título del formulario |
| `type` | string | Tipo de formulario |
| `settings` | object | Configuración del formulario |
| `theme` | object | Referencia del tema |
| `workspace` | object | Referencia del espacio de trabajo |
| `fields` | array | Array de campos del formulario |
| `welcome_screens` | array | Array de pantallas de bienvenida |
| `thankyou_screens` | array | Array de pantallas de agradecimiento |
| `_links` | object | Enlaces a recursos relacionados |
### `typeform_delete_form`

View File

@@ -146,32 +146,6 @@ Extrayez des données structurées de pages web entières à l'aide d'instructio
| `success` | boolean | Indique si l'opération d'extraction a réussi |
| `data` | object | Données structurées extraites selon le schéma ou l'invite |
### `firecrawl_agent`
Agent autonome d'extraction de données web. Recherche et collecte des informations basées sur des instructions en langage naturel sans nécessiter d'URLs spécifiques.
#### Entrée
| Paramètre | Type | Obligatoire | Description |
| --------- | ---- | ----------- | ----------- |
| `prompt` | string | Oui | Description en langage naturel des données à extraire (max 10 000 caractères) |
| `urls` | json | Non | Tableau optionnel d'URLs sur lesquelles concentrer l'agent |
| `schema` | json | Non | Schéma JSON définissant la structure des données à extraire |
| `maxCredits` | number | Non | Nombre maximum de crédits à dépenser pour cette tâche d'agent |
| `strictConstrainToURLs` | boolean | Non | Si true, l'agent visitera uniquement les URLs fournies dans le tableau urls |
| `apiKey` | string | Oui | Clé API Firecrawl |
#### Sortie
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Indique si l'opération de l'agent a réussi |
| `status` | string | Statut actuel de la tâche de l'agent (processing, completed, failed) |
| `data` | object | Données extraites par l'agent |
| `creditsUsed` | number | Nombre de crédits consommés par cette tâche d'agent |
| `expiresAt` | string | Horodatage d'expiration des résultats (24 heures) |
| `sources` | object | Tableau des URLs sources utilisées par l'agent |
## Remarques
- Catégorie : `tools`

View File

@@ -56,7 +56,8 @@ Créer un nouveau contact dans Intercom avec email, external_id ou role
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `contact` | object | Objet contact créé |
| `success` | boolean | Statut de réussite de l'opération |
| `output` | object | Données du contact créé |
### `intercom_get_contact`
@@ -72,7 +73,8 @@ Obtenir un seul contact par ID depuis Intercom
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `contact` | object | Objet contact |
| `success` | boolean | Statut de réussite de l'opération |
| `output` | object | Données du contact |
### `intercom_update_contact`
@@ -100,7 +102,8 @@ Mettre à jour un contact existant dans Intercom
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `contact` | object | Objet contact mis à jour |
| `success` | boolean | Statut de réussite de l'opération |
| `output` | object | Données du contact mises à jour |
### `intercom_list_contacts`
@@ -117,7 +120,8 @@ Lister tous les contacts d'Intercom avec prise en charge de la pagination
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `contacts` | array | Tableau d'objets contact |
| `success` | booléen | Statut de réussite de l'opération |
| `output` | objet | Liste des contacts |
### `intercom_search_contacts`
@@ -137,7 +141,8 @@ Rechercher des contacts dans Intercom à l'aide d'une requête
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `contacts` | array | Tableau d'objets contact correspondants |
| `success` | booléen | Statut de réussite de l'opération |
| `output` | objet | Résultats de la recherche |
### `intercom_delete_contact`
@@ -153,9 +158,8 @@ Supprimer un contact d'Intercom par ID
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `id` | string | ID du contact supprimé |
| `deleted` | boolean | Indique si le contact a été supprimé |
| `metadata` | object | Métadonnées de l'opération |
| `success` | booléen | Statut de réussite de l'opération |
| `output` | objet | Résultat de la suppression |
### `intercom_create_company`
@@ -179,7 +183,8 @@ Créer ou mettre à jour une entreprise dans Intercom
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `company` | object | Objet entreprise cé ou mis à jour |
| `success` | booléen | Statut de réussite de l'opération |
| `output` | objet | Données de l'entreprise créée ou mise à jour |
### `intercom_get_company`
@@ -195,7 +200,8 @@ Récupérer une seule entreprise par ID depuis Intercom
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `company` | object | Objet entreprise |
| `success` | booléen | Statut de réussite de l'opération |
| `output` | objet | Données de l'entreprise |
### `intercom_list_companies`
@@ -213,7 +219,8 @@ Liste toutes les entreprises d'Intercom avec prise en charge de la pagination. R
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `companies` | array | Tableau d'objets entreprise |
| `success` | boolean | Statut de réussite de l'opération |
| `output` | object | Liste des entreprises |
### `intercom_get_conversation`
@@ -231,7 +238,8 @@ Récupérer une seule conversation par ID depuis Intercom
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `conversation` | object | Objet conversation |
| `success` | boolean | Statut de réussite de l'opération |
| `output` | object | Données de la conversation |
### `intercom_list_conversations`
@@ -250,7 +258,8 @@ Lister toutes les conversations depuis Intercom avec prise en charge de la pagin
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `conversations` | array | Tableau d'objets conversation |
| `success` | boolean | Statut de réussite de l'opération |
| `output` | object | Liste des conversations |
### `intercom_reply_conversation`
@@ -271,7 +280,8 @@ Répondre à une conversation en tant qu'administrateur dans Intercom
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `conversation` | object | Objet conversation mis à jour |
| `success` | boolean | Statut de réussite de l'opération |
| `output` | object | Conversation mise à jour avec la réponse |
### `intercom_search_conversations`
@@ -291,7 +301,8 @@ Rechercher des conversations dans Intercom à l'aide d'une requête
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `conversations` | array | Tableau d'objets conversation correspondants |
| `success` | boolean | Statut de réussite de l'opération |
| `output` | object | Résultats de la recherche |
### `intercom_create_ticket`
@@ -313,7 +324,8 @@ Créer un nouveau ticket dans Intercom
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `ticket` | object | Objet ticket créé |
| `success` | boolean | Statut de réussite de l'opération |
| `output` | object | Données du ticket créé |
### `intercom_get_ticket`
@@ -329,7 +341,8 @@ Récupérer un ticket unique par ID depuis Intercom
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `ticket` | object | Objet ticket |
| `success` | boolean | Statut de réussite de l'opération |
| `output` | object | Données du ticket |
### `intercom_create_message`
@@ -353,7 +366,8 @@ Créer et envoyer un nouveau message initié par l'administrateur dans Intercom
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `message` | object | Objet message créé |
| `success` | boolean | Statut de réussite de l'opération |
| `output` | object | Données du message créé |
## Notes

View File

@@ -70,7 +70,8 @@ Insérer ou mettre à jour des enregistrements textuels dans un index Pinecone
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `statusText` | string | Statut de l'opération d'insertion ou de mise à jour |
| `statusText` | chaîne | Statut de l'opération d'insertion |
| `upsertedCount` | nombre | Nombre d'enregistrements insérés avec succès |
### `pinecone_search_text`

View File

@@ -266,8 +266,7 @@ Téléverser un fichier vers un bucket de stockage Supabase
| --------- | ---- | ----------- | ----------- |
| `projectId` | string | Oui | L'ID de votre projet Supabase \(ex. : jdrkgepadsdopsntdlom\) |
| `bucket` | string | Oui | Le nom du bucket de stockage |
| `fileName` | string | Oui | Le nom du fichier \(ex. : "document.pdf", "image.jpg"\) |
| `path` | string | Non | Chemin de dossier optionnel \(ex. : "dossier/sousdossier/"\) |
| `path` | string | Oui | Le chemin où le fichier sera stocké \(ex. : "dossier/fichier.jpg"\) |
| `fileContent` | string | Oui | Le contenu du fichier \(encodé en base64 pour les fichiers binaires, ou texte brut\) |
| `contentType` | string | Non | Type MIME du fichier \(ex. : "image/jpeg", "text/plain"\) |
| `upsert` | boolean | Non | Si vrai, écrase le fichier existant \(par défaut : false\) |

View File

@@ -132,16 +132,13 @@ Récupérer les détails complets et la structure d'un formulaire spécifique
| `id` | chaîne | Identifiant unique du formulaire |
| `title` | chaîne | Titre du formulaire |
| `type` | chaîne | Type de formulaire \(form, quiz, etc.\) |
| `settings` | objet | Paramètres du formulaire incluant la langue, la barre de progression, etc. |
| `settings` | objet | Paramètres du formulaire incluant langue, barre de progression, etc. |
| `theme` | objet | Référence du thème |
| `workspace` | objet | Référence de l'espace de travail |
| `fields` | tableau | Tableau des champs/questions du formulaire |
| `welcome_screens` | tableau | Tableau des écrans d'accueil \(vide si aucun n'est configuré\) |
| `welcome_screens` | tableau | Tableau des écrans d'accueil |
| `thankyou_screens` | tableau | Tableau des écrans de remerciement |
| `created_at` | chaîne | Horodatage de création du formulaire \(format ISO 8601\) |
| `last_updated_at` | chaîne | Horodatage de dernière mise à jour du formulaire \(format ISO 8601\) |
| `published_at` | chaîne | Horodatage de publication du formulaire \(format ISO 8601\) |
| `_links` | objet | Liens vers les ressources associées incluant l'URL publique du formulaire |
| `_links` | objet | Liens vers les ressources associées, y compris l'URL publique du formulaire |
### `typeform_create_form`
@@ -166,13 +163,8 @@ Créer un nouveau formulaire avec champs et paramètres
| `id` | chaîne | Identifiant unique du formulaire créé |
| `title` | chaîne | Titre du formulaire |
| `type` | chaîne | Type de formulaire |
| `settings` | objet | Objet de paramètres du formulaire |
| `theme` | objet | Référence du thème |
| `workspace` | objet | Référence de l'espace de travail |
| `fields` | tableau | Tableau des champs du formulaire créés \(vide si aucun n'a été ajouté\) |
| `welcome_screens` | tableau | Tableau des écrans d'accueil \(vide si aucun n'est configuré\) |
| `thankyou_screens` | tableau | Tableau des écrans de remerciement |
| `_links` | objet | Liens vers les ressources associées incluant l'URL publique du formulaire |
| `fields` | tableau | Tableau des champs du formulaire créé |
| `_links` | objet | Liens vers les ressources associées, y compris l'URL publique du formulaire |
### `typeform_update_form`
@@ -190,7 +182,16 @@ Mettre à jour un formulaire existant à l'aide d'opérations JSON Patch
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `message` | chaîne | Message de confirmation de succès |
| `id` | chaîne | Identifiant unique du formulaire mis à jour |
| `title` | chaîne | Titre du formulaire |
| `type` | chaîne | Type de formulaire |
| `settings` | objet | Paramètres du formulaire |
| `theme` | objet | Référence du thème |
| `workspace` | objet | Référence de l'espace de travail |
| `fields` | tableau | Tableau des champs du formulaire |
| `welcome_screens` | tableau | Tableau des écrans d'accueil |
| `thankyou_screens` | tableau | Tableau des écrans de remerciement |
| `_links` | objet | Liens vers les ressources associées |
### `typeform_delete_form`

View File

@@ -146,33 +146,7 @@ Firecrawlを使用してウェブ上の情報を検索します
| `success` | boolean | 抽出操作が成功したかどうか |
| `data` | object | スキーマまたはプロンプトに従って抽出された構造化データ |
### `firecrawl_agent`
## 注意事項
自律型ウェブデータ抽出エージェント。特定のURLを必要とせず、自然言語プロンプトに基づいて情報を検索・収集します。
#### 入力
| パラメータ | 型 | 必須 | 説明 |
| --------- | ---- | -------- | ----------- |
| `prompt` | string | はい | 抽出するデータの自然言語による説明最大10,000文字 |
| `urls` | json | いいえ | エージェントが焦点を当てるURLの配列オプション |
| `schema` | json | いいえ | 抽出するデータの構造を定義するJSONスキーマ |
| `maxCredits` | number | いいえ | このエージェントタスクに使用する最大クレジット数 |
| `strictConstrainToURLs` | boolean | いいえ | trueの場合、エージェントはurls配列で提供されたURLのみを訪問します |
| `apiKey` | string | はい | Firecrawl APIキー |
#### 出力
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `success` | boolean | エージェント操作が成功したかどうか |
| `status` | string | エージェントジョブの現在のステータスprocessing、completed、failed |
| `data` | object | エージェントから抽出されたデータ |
| `creditsUsed` | number | このエージェントタスクで消費されたクレジット数 |
| `expiresAt` | string | 結果の有効期限のタイムスタンプ24時間 |
| `sources` | object | エージェントが使用したソースURLの配列 |
## 注記
- カテゴリ:`tools`
- タイプ:`firecrawl`
- カテゴリー: `tools`
- タイプ: `firecrawl`

View File

@@ -55,7 +55,8 @@ Intercomをワークフローに統合します。連絡先の作成、取得、
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `contact` | object | 作成された連絡先オブジェクト |
| `success` | boolean | 操作の成功ステータス |
| `output` | object | 作成された連絡先データ |
### `intercom_get_contact`
@@ -71,7 +72,8 @@ IDからIntercomの単一の連絡先を取得する
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `contact` | object | 連絡先オブジェクト |
| `success` | boolean | 操作成功ステータス |
| `output` | object | 連絡先データ |
### `intercom_update_contact`
@@ -99,7 +101,8 @@ Intercomの既存の連絡先を更新する
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `contact` | object | 更新された連絡先オブジェクト |
| `success` | boolean | 操作成功ステータス |
| `output` | object | 更新された連絡先データ |
### `intercom_list_contacts`
@@ -116,7 +119,8 @@ Intercomの既存の連絡先を更新する
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `contacts` | array | 連絡先オブジェクトの配列 |
| `success` | boolean | 操作成功ステータス |
| `output` | object | 連絡先リスト |
### `intercom_search_contacts`
@@ -136,7 +140,8 @@ Intercomの既存の連絡先を更新する
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `contacts` | array | 一致する連絡先オブジェクトの配列 |
| `success` | boolean | 操作成功ステータス |
| `output` | object | 検索結果 |
### `intercom_delete_contact`
@@ -152,9 +157,8 @@ IDでIntercomから連絡先を削除する
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `id` | string | 削除された連絡先のID |
| `deleted` | boolean | 連絡先が削除されたかどうか |
| `metadata` | object | 操作メタデータ |
| `success` | boolean | 操作成功ステータス |
| `output` | object | 削除結果 |
### `intercom_create_company`
@@ -178,7 +182,8 @@ Intercomで企業を作成または更新する
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `company` | object | 作成または更新された企業オブジェクト |
| `success` | boolean | 操作の成功ステータス |
| `output` | object | 作成または更新された企業データ |
### `intercom_get_company`
@@ -194,7 +199,8 @@ IDによってIntercomから単一の企業を取得する
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `company` | object | 企業オブジェクト |
| `success` | boolean | 操作の成功ステータス |
| `output` | object | 企業データ |
### `intercom_list_companies`
@@ -212,7 +218,8 @@ IDによってIntercomから単一の企業を取得する
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `companies` | array | 企業オブジェクトの配列 |
| `success` | boolean | 操作成功ステータス |
| `output` | object | 企業のリスト |
### `intercom_get_conversation`
@@ -230,7 +237,8 @@ IDによりIntercomから単一の会話を取得
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `conversation` | object | 会話オブジェクト |
| `success` | boolean | 操作成功ステータス |
| `output` | object | 会話データ |
### `intercom_list_conversations`
@@ -249,7 +257,8 @@ IDによりIntercomから単一の会話を取得
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `conversations` | array | 会話オブジェクトの配列 |
| `success` | boolean | 操作成功ステータス |
| `output` | object | 会話のリスト |
### `intercom_reply_conversation`
@@ -270,7 +279,8 @@ IDによりIntercomから単一の会話を取得
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `conversation` | object | 更新された会話オブジェクト |
| `success` | boolean | 操作成功ステータス |
| `output` | object | 返信を含む更新された会話 |
### `intercom_search_conversations`
@@ -290,7 +300,8 @@ IDによりIntercomから単一の会話を取得
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `conversations` | array | 一致する会話オブジェクトの配列 |
| `success` | boolean | 操作成功ステータス |
| `output` | object | 検索結果 |
### `intercom_create_ticket`
@@ -312,7 +323,8 @@ Intercomで新しいチケットを作成する
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `ticket` | object | 作成されたチケットオブジェクト |
| `success` | boolean | 作成功ステータス |
| `output` | object | 作成されたチケットデータ |
### `intercom_get_ticket`
@@ -328,7 +340,8 @@ IDによりIntercomから単一のチケットを取得する
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `ticket` | object | チケットオブジェクト |
| `success` | boolean | 操作成功ステータス |
| `output` | object | チケットデータ |
### `intercom_create_message`
@@ -352,7 +365,8 @@ Intercomで管理者が開始した新しいメッセージを作成して送信
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `message` | object | 作成されたメッセージオブジェクト |
| `success` | boolean | 作成功ステータス |
| `output` | object | 作成されたメッセージデータ |
## メモ

View File

@@ -71,6 +71,7 @@ Pineconeインデックスにテキストレコードを挿入または更新す
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `statusText` | string | アップサート操作のステータス |
| `upsertedCount` | number | 正常にアップサートされたレコードの数 |
### `pinecone_search_text`

View File

@@ -266,11 +266,10 @@ Supabaseストレージバケットにファイルをアップロードする
| --------- | ---- | -------- | ----------- |
| `projectId` | string | はい | あなたのSupabaseプロジェクトIDjdrkgepadsdopsntdlom |
| `bucket` | string | はい | ストレージバケットの名前 |
| `fileName` | string | はい | ファイルの名前(例:"document.pdf"、"image.jpg" |
| `path` | string | いいえ | オプションのフォルダパス(例:"folder/subfolder/" |
| `path` | string | はい | ファイルが保存されるパス(例:"folder/file.jpg" |
| `fileContent` | string | はい | ファイルの内容バイナリファイルの場合はbase64エンコード、またはプレーンテキスト |
| `contentType` | string | いいえ | ファイルのMIMEタイプ"image/jpeg"、"text/plain" |
| `upsert` | boolean | いいえ | trueの場合、既存のファイルを上書きデフォルトfalse |
| `upsert` | boolean | いいえ | trueの場合、既存のファイルを上書きするデフォルトfalse |
| `apiKey` | string | はい | あなたのSupabaseサービスロールシークレットキー |
#### 出力

View File

@@ -129,18 +129,15 @@ Typeformアカウント内のすべてのフォームのリストを取得する
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `id` | string | フォームの一意識別子 |
| `id` | string | フォームの一意識別子 |
| `title` | string | フォームのタイトル |
| `type` | string | フォームのタイプform、quizなど |
| `settings` | object | 言語、プログレスバーなどを含むフォーム設定 |
| `theme` | object | テーマ参照 |
| `workspace` | object | ワークスペース参照 |
| `fields` | array | フォームフィールド/質問の配列 |
| `welcome_screens` | array | ウェルカム画面の配列(設定されていない場合は空) |
| `welcome_screens` | array | ウェルカム画面の配列 |
| `thankyou_screens` | array | サンキュー画面の配列 |
| `created_at` | string | フォーム作成タイムスタンプISO 8601形式 |
| `last_updated_at` | string | フォーム最終更新タイムスタンプISO 8601形式 |
| `published_at` | string | フォーム公開タイムスタンプISO 8601形式 |
| `_links` | object | 公開フォームURLを含む関連リソースリンク |
### `typeform_create_form`
@@ -163,15 +160,10 @@ Typeformアカウント内のすべてのフォームのリストを取得する
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `id` | string | 作成されたフォームの一意識別子 |
| `id` | string | 作成されたフォームの一意識別子 |
| `title` | string | フォームのタイトル |
| `type` | string | フォームのタイプ |
| `settings` | object | フォーム設定オブジェクト |
| `theme` | object | テーマ参照 |
| `workspace` | object | ワークスペース参照 |
| `fields` | array | 作成されたフォームフィールドの配列(追加されていない場合は空) |
| `welcome_screens` | array | ウェルカム画面の配列(設定されていない場合は空) |
| `thankyou_screens` | array | サンキュー画面の配列 |
| `fields` | array | 作成されたフォームフィールドの配列 |
| `_links` | object | 公開フォームURLを含む関連リソースリンク |
### `typeform_update_form`
@@ -190,7 +182,16 @@ JSON Patchオペレーションを使用して既存のフォームを更新す
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `message` | string | 成功確認メッセージ |
| `id` | string | 更新されたフォームの一意の識別子 |
| `title` | string | フォームのタイトル |
| `type` | string | フォームのタイプ |
| `settings` | object | フォーム設定 |
| `theme` | object | テーマ参照 |
| `workspace` | object | ワークスペース参照 |
| `fields` | array | フォームフィールドの配列 |
| `welcome_screens` | array | ウェルカム画面の配列 |
| `thankyou_screens` | array | サンクスページの配列 |
| `_links` | object | 関連リソースリンク |
### `typeform_delete_form`

View File

@@ -146,33 +146,7 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| `success` | boolean | 提取操作是否成功 |
| `data` | object | 根据模式或提示提取的结构化数据 |
### `firecrawl_agent`
## 注意
自主网页数据提取代理。根据自然语言提示进行搜索和信息收集,无需指定具体 URL。
#### 输入
| 参数 | 类型 | 必需 | 描述 |
| --------- | ---- | -------- | ----------- |
| `prompt` | string | 是 | 要提取数据的自然语言描述(最多 10,000 个字符) |
| `urls` | json | 否 | 可选的 URL 数组,用于聚焦代理任务 |
| `schema` | json | 否 | 定义要提取数据结构的 JSON 架构 |
| `maxCredits` | number | 否 | 此代理任务可消耗的最大积分数 |
| `strictConstrainToURLs` | boolean | 否 | 若为 true代理仅访问 urls 数组中提供的 URL |
| `apiKey` | string | 是 | Firecrawl API 密钥 |
#### 输出
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `success` | boolean | 代理操作是否成功 |
| `status` | string | 代理任务的当前状态processing、completed、failed |
| `data` | object | 代理提取的数据 |
| `creditsUsed` | number | 此代理任务消耗的积分数 |
| `expiresAt` | string | 结果过期的时间戳24 小时) |
| `sources` | object | 代理使用的来源 URL 数组 |
## 说明
- 分类:`tools`
- 类别:`tools`
- 类型:`firecrawl`

View File

@@ -55,7 +55,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `contact` | object | 创建的联系人对象 |
| `success` | boolean | 操作成功状态 |
| `output` | object | 创建的联系人数据 |
### `intercom_get_contact`
@@ -71,7 +72,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `contact` | object | 联系人对象 |
| `success` | boolean | 操作成功状态 |
| `output` | object | 联系人数据 |
### `intercom_update_contact`
@@ -99,7 +101,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `contact` | object | 更新后的联系人对象 |
| `success` | boolean | 操作成功状态 |
| `output` | object | 更新后的联系人数据 |
### `intercom_list_contacts`
@@ -116,7 +119,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `contacts` | array | 联系人对象数组 |
| `success` | boolean | 操作成功状态 |
| `output` | object | 联系人列表 |
### `intercom_search_contacts`
@@ -136,7 +140,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `contacts` | array | 匹配的联系人对象数组 |
| `success` | boolean | 操作成功状态 |
| `output` | object | 搜索结果 |
### `intercom_delete_contact`
@@ -152,9 +157,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `id` | string | 已删除联系人的 ID |
| `deleted` | boolean | 联系人是否已被删除 |
| `metadata` | object | 操作元数据 |
| `success` | boolean | 操作成功状态 |
| `output` | object | 删除结果 |
### `intercom_create_company`
@@ -178,7 +182,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `company` | object | 新建或更新的公司对象 |
| `success` | boolean | 操作成功状态 |
| `output` | object | 创建或更新的公司数据 |
### `intercom_get_company`
@@ -194,7 +199,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `company` | object | 公司对象 |
| `success` | boolean | 操作成功状态 |
| `output` | object | 公司数据 |
### `intercom_list_companies`
@@ -212,7 +218,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `companies` | array | 公司对象数组 |
| `success` | 布尔值 | 操作成功状态 |
| `output` | 对象 | 公司列表 |
### `intercom_get_conversation`
@@ -230,7 +237,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `conversation` | object | 会话对象 |
| `success` | 布尔值 | 操作成功状态 |
| `output` | 对象 | 会话数据 |
### `intercom_list_conversations`
@@ -249,7 +257,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `conversations` | array | 会话对象数组 |
| `success` | 布尔值 | 操作成功状态 |
| `output` | 对象 | 会话列表 |
### `intercom_reply_conversation`
@@ -270,7 +279,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `conversation` | object | 更新后的会话对象 |
| `success` | boolean | 操作成功状态 |
| `output` | object | 包含回复的更新对话 |
### `intercom_search_conversations`
@@ -290,7 +300,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `conversations` | array | 匹配的会话对象数组 |
| `success` | boolean | 操作成功状态 |
| `output` | object | 搜索结果 |
### `intercom_create_ticket`
@@ -312,7 +323,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `ticket` | object | 创建的工单对象 |
| `success` | boolean | 操作成功状态 |
| `output` | object | 创建的工单数据 |
### `intercom_get_ticket`
@@ -328,7 +340,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `ticket` | object | 工单对象 |
| `success` | boolean | 操作成功状态 |
| `output` | object | 工单数据 |
### `intercom_create_message`
@@ -352,7 +365,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `message` | object | 创建的消息对象 |
| `success` | boolean | 操作成功状态 |
| `output` | object | 创建的消息数据 |
## 注意事项

View File

@@ -68,9 +68,10 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
#### 输出
| 参数 | 类型 | 说明 |
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `statusText` | string | upsert 操作的状态 |
| `statusText` | string | 插入操作的状态 |
| `upsertedCount` | number | 成功插入的记录数量 |
### `pinecone_search_text`

View File

@@ -266,11 +266,10 @@ Sim 的 Supabase 集成使您能够轻松地将代理工作流连接到您的 Su
| --------- | ---- | -------- | ----------- |
| `projectId` | string | 是 | 您的 Supabase 项目 ID \(例如jdrkgepadsdopsntdlom\) |
| `bucket` | string | 是 | 存储桶的名称 |
| `fileName` | string | 是 | 文件 \(例如:"document.pdf""image.jpg"\) |
| `path` | string | | 可选的文件夹路径 \(例如:"folder/subfolder/"\) |
| `fileContent` | string | | 文件内容(对于二进制文件为 base64 编码,或为纯文本)|
| `contentType` | string | 否 | 文件的 MIME 类型 \(例如:"image/jpeg""text/plain"\) |
| `upsert` | boolean | 否 | 如果为 true则覆盖已存在的文件默认值false|
| `path` | string | 是 | 文件将存储的路径 \(例如:"folder/file.jpg"\) |
| `fileContent` | string | | 文件内容 \(二进制文件为 base64 编码,或纯文本\) |
| `contentType` | string | | 文件的 MIME 类型 \(例如:"image/jpeg", "text/plain"\) |
| `upsert` | boolean | 否 | 如果为 true则覆盖现有文件 \(默认值false\) |
| `apiKey` | string | 是 | 您的 Supabase 服务角色密钥 |
#### 输出

View File

@@ -131,18 +131,14 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| --------- | ---- | ----------- |
| `id` | string | 表单唯一标识符 |
| `title` | string | 表单标题 |
| `type` | string | 表单类型 \(formquiz 等\) |
| `type` | string | 表单类型 \(form, quiz 等\) |
| `settings` | object | 表单设置,包括语言、进度条等 |
| `theme` | object | 主题引用 |
| `workspace` | object | 工作区引用 |
| `fields` | array | 表单字段/问题数组 |
| `welcome_screens` | array | 欢迎页数组(如未配置则为空) |
| `thankyou_screens` | array | 感谢页数组 |
| `created_at` | string | 表单创建时间戳ISO 8601 格式) |
| `last_updated_at` | string | 表单最后更新时间戳ISO 8601 格式) |
| `published_at` | string | 表单发布时间戳ISO 8601 格式) |
| `_links` | object | 相关资源链接,包括公开表单 URL |
| `welcome_screens` | array | 欢迎页数组 |
| `thankyou_screens` | array | 感谢页数组 |
| `_links` | object | 包括公共表单 URL 在内的相关资源链接 |
### `typeform_create_form`
@@ -164,17 +160,11 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `id` | string | 创建表单唯一标识符 |
| `id` | string | 创建表单唯一标识符 |
| `title` | string | 表单标题 |
| `type` | string | 表单类型 |
| `settings` | object | 表单设置对象 |
| `theme` | object | 主题引用 |
| `workspace` | object | 工作区引用 |
| `fields` | array | 已创建表单字段数组(如未添加则为空) |
| `welcome_screens` | array | 欢迎页数组(如未配置则为空) |
| `thankyou_screens` | array | 感谢页数组 |
| `_links` | object | 相关资源链接,包括公开表单 URL |
| `fields` | array | 创建的表单字段数组 |
| `_links` | object | 包括公共表单 URL 在内的相关资源链接 |
### `typeform_update_form`
@@ -192,7 +182,16 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `message` | string | 成功确认消息 |
| `id` | string | 更新的表单唯一标识符 |
| `title` | string | 表单标题 |
| `type` | string | 表单类型 |
| `settings` | object | 表单设置 |
| `theme` | object | 主题引用 |
| `workspace` | object | 工作区引用 |
| `fields` | array | 表单字段数组 |
| `welcome_screens` | array | 欢迎屏幕数组 |
| `thankyou_screens` | array | 感谢屏幕数组 |
| `_links` | object | 相关资源链接 |
### `typeform_delete_form`

View File

@@ -503,19 +503,19 @@ checksums:
content/35: 371d0e46b4bd2c23f559b8bc112f6955
content/36: 4c6a3b159dfff0106b67269130253eba
content/37: bcadfc362b69078beee0088e5936c98b
content/38: e30b26e62abc96c1ff0694762584501d
content/38: 21cc925781120afc2c4568f74ed8191a
content/39: 5de052cae5ada1f845f7257ba431ebd1
content/40: 1a36fc873771b68a67d95a2130487aec
content/41: 371d0e46b4bd2c23f559b8bc112f6955
content/42: b000bca7bd6658d4b5d21e6c7787d05e
content/43: bcadfc362b69078beee0088e5936c98b
content/44: 186da1feb6a6565956c7ea7707b388ad
content/44: 448922b8585b0b4599e7023c80faa449
content/45: 776f62636d112cbd27d5064a40e29ec9
content/46: f512a5096a1d5a4e4a0afd762152b714
content/47: 371d0e46b4bd2c23f559b8bc112f6955
content/48: 06de592289fb5f4dff42f451ebf9658a
content/49: bcadfc362b69078beee0088e5936c98b
content/50: b36b602337a0a9be8720b50ed3f949d5
content/50: d242a9680311743714a60bf1941ef9ac
content/51: a4cfd36d36633eee441423283d4d5fb3
content/52: 85ea23183709f33902aec778c7cb62b0
content/53: 371d0e46b4bd2c23f559b8bc112f6955
@@ -760,7 +760,7 @@ checksums:
content/71: 64c89ec9ca2719c58cfed42033a52217
content/72: ec97af83ea30e033d7b1b4ada910c03e
content/73: 371d0e46b4bd2c23f559b8bc112f6955
content/74: a3dc735b07499600ffd588b1279eea42
content/74: b6f54fba68782b589ee4dfa0aebf7adb
content/75: bcadfc362b69078beee0088e5936c98b
content/76: 64d66a993e96e5544d28bc75a2d0c6d6
content/77: 0295e0cd05bbf86d6d79400d787759f5
@@ -1279,7 +1279,7 @@ checksums:
content/17: 371d0e46b4bd2c23f559b8bc112f6955
content/18: 11e0f62da7bc51d4c9a94d2c60dd06ce
content/19: bcadfc362b69078beee0088e5936c98b
content/20: d78f8e8d74ba810e10dfbebd4423764f
content/20: d1fa8dd2b26e182a3a02bc996ad7dd0b
content/21: b72dd04e96d85431c18c28de8a6b00d7
content/22: 147ca5082380639c3168a44122a67192
content/23: 371d0e46b4bd2c23f559b8bc112f6955
@@ -3483,14 +3483,8 @@ checksums:
content/38: 3e7b1f581c8ef51fb3d9b6ecff47deb4
content/39: bcadfc362b69078beee0088e5936c98b
content/40: 07994574571bcaeb3b86ce92c46d0527
content/41: 5aba0f448543bbd7559573fed02724b2
content/42: f0cdbc370d80551a27c44588ae689f9d
content/43: 371d0e46b4bd2c23f559b8bc112f6955
content/44: 81b12b0196aa94b6f80686641125ea3a
content/45: bcadfc362b69078beee0088e5936c98b
content/46: 326cbcf1d379181f7f53c6a9ffb271f1
content/47: b3f310d5ef115bea5a8b75bf25d7ea9a
content/48: dc809f5be4a108f769310dd8290c0db4
content/41: b3f310d5ef115bea5a8b75bf25d7ea9a
content/42: dc809f5be4a108f769310dd8290c0db4
bda76150deadd23f7803a15b39c4db66:
meta/title: 1255b55897f2be1443d3bb8c30cd9795
meta/description: 1e7574b6666c662c08e7e256a9fceb4d
@@ -47172,97 +47166,97 @@ checksums:
content/11: 371d0e46b4bd2c23f559b8bc112f6955
content/12: a71a30e9f91c10daf481ea8f542e91f6
content/13: bcadfc362b69078beee0088e5936c98b
content/14: d3278442dbea313782edd4793be28197
content/14: 59c08999f9c404330ebd8f8a7d21e1a1
content/15: 49d191d312481589419c68a5506b0d71
content/16: dddb93e063541bfb5d72b6c506d3cb7f
content/17: 371d0e46b4bd2c23f559b8bc112f6955
content/18: e93f2b44f05dd87c82fe9557cd677eeb
content/19: bcadfc362b69078beee0088e5936c98b
content/20: 5079238d0092205bb1ca4ec32b8f3d97
content/20: b74416361f94e71f2a94139711a5dd21
content/21: 2e70c0a22a98675a13b493b9761ff92f
content/22: 107f6e51a1e896ee4d18f8ed4f82c50f
content/23: 371d0e46b4bd2c23f559b8bc112f6955
content/24: e506fbf4b80deecb3b44b29b8dc3438b
content/25: bcadfc362b69078beee0088e5936c98b
content/26: 4d1f3216d2694b7409792e34a6f181e0
content/26: a9096a341b00ce4f4891daaca2586d1c
content/27: 934a0124aa2118682b2b17fa258ff06a
content/28: aa318cc874d5936ce1f3bf9710da2a44
content/29: 371d0e46b4bd2c23f559b8bc112f6955
content/30: 660ce6e5a45abe1940974f7d818a6ee7
content/31: bcadfc362b69078beee0088e5936c98b
content/32: 5e9da15383417721362c8d33b0a12fb8
content/32: 551c2f007a7035ba0d48374081b02eb1
content/33: 1a1e332b525e86f7fd92f9da1ac0096c
content/34: 00098e1591c0f80ef6287d934d391409
content/35: 371d0e46b4bd2c23f559b8bc112f6955
content/36: e52688ff2fa61ce71026f33930e1ec86
content/37: bcadfc362b69078beee0088e5936c98b
content/38: ac15076b8e6cac4bf3a106ea32de661d
content/38: d84fb23e5dfc9d41a177acd7dfb28e72
content/39: 17be090a79154f557bc96f940c687aea
content/40: bb2f63774f45f14201d5c0c110458a90
content/41: 371d0e46b4bd2c23f559b8bc112f6955
content/42: 36afb2b0539e33ff83427a91fc5ba57b
content/43: bcadfc362b69078beee0088e5936c98b
content/44: 1da7a9f86cda2b24d0e1ffd5ae167272
content/44: 45d8bfeced635336cacc9d4a8d08dbca
content/45: c76943404f9c8d34a85e6315359ed0c4
content/46: b5e111e430aa1c929fb07d5844bf65eb
content/47: 371d0e46b4bd2c23f559b8bc112f6955
content/48: 6692edffddc28d3c64974ded23d1def2
content/49: bcadfc362b69078beee0088e5936c98b
content/50: e7e86e6f7734e9af89b5724ac674ff2c
content/50: dbc08cce26f9565e719891bbbf4632a9
content/51: d0ce65f5420745c45ab42b7edd135bf4
content/52: 4a3de8fb6c97898fcfa3800d149cd4e0
content/53: 371d0e46b4bd2c23f559b8bc112f6955
content/54: d16a985c206a21f4ffb1bbcdc0300c85
content/55: bcadfc362b69078beee0088e5936c98b
content/56: a64e62cd3f79c43f9411af221e24aa9f
content/56: a7e001e39652db8eeb4d32968bda102b
content/57: 440f2732ad006bee8cccc975fdbf673a
content/58: 7a7048c54763b0109643f37e583381ce
content/59: 371d0e46b4bd2c23f559b8bc112f6955
content/60: 11ad0a529a7fcc5892ae811cde6894f6
content/61: bcadfc362b69078beee0088e5936c98b
content/62: d3c54294a5180fda87c23e23d4ad17eb
content/62: c7055d8ce044e49929d4f005a28d7c0a
content/63: 2d7bad4340c1bc6a28e836e180e26c00
content/64: 576dbecf29644e7abf59d25ffda5728c
content/65: 371d0e46b4bd2c23f559b8bc112f6955
content/66: 59015900ce6b64caff0784491ec59ff9
content/67: bcadfc362b69078beee0088e5936c98b
content/68: 5e12d96ca701a7a8182558a4d070aed2
content/68: 2f225a893086726db6b6a994cc8a5e3c
content/69: 63cbf703cf33e0fee06f12fb23184352
content/70: dae1fda5ec57e1b598a7e2596007a775
content/71: 371d0e46b4bd2c23f559b8bc112f6955
content/72: 757f42df5247f2e6684ab32888d30e11
content/73: bcadfc362b69078beee0088e5936c98b
content/74: 46f9b95601bc643ba6175c2a0115df19
content/74: 380f805a5118dd4957f4fcce41e01b86
content/75: 935f1a713d05f32d3d826434a7e715ee
content/76: e505d8f656fb6e3b65a98cb73d744598
content/77: 371d0e46b4bd2c23f559b8bc112f6955
content/78: 2e77859b0f2c89186fc6a2d51287ea47
content/79: bcadfc362b69078beee0088e5936c98b
content/80: b312d1e8bce1418da88cd9812096db20
content/80: 22bd99d5b844817b808b9d0d3baddac4
content/81: e959b48af94a559e9c46cbd7653d2dd2
content/82: 5e3c04c5a9fabfceb7fcc00215f93bf9
content/83: 371d0e46b4bd2c23f559b8bc112f6955
content/84: a92b2a22061ee6fd453af32e0155f5aa
content/85: bcadfc362b69078beee0088e5936c98b
content/86: a735b1d909700cdf6d07c1a94330a1c6
content/86: d84fb23e5dfc9d41a177acd7dfb28e72
content/87: c886f11a0852010b90a1032b97118920
content/88: c60c832c08f9e1ff5f91565bf4ba549e
content/89: 371d0e46b4bd2c23f559b8bc112f6955
content/90: 1545794f4e8e696db96c3b660de684ec
content/91: bcadfc362b69078beee0088e5936c98b
content/92: 098eb544fe99ee061a081a1f2ef0e7c6
content/92: 573530e346d195727862b03b380f40fc
content/93: 3d31dedf076ec23547189a3eb5fe04c4
content/94: a261b9a2ef7724e4171487ef2435f259
content/95: 371d0e46b4bd2c23f559b8bc112f6955
content/96: bef786efecaaad82a34b861f37cde78f
content/97: bcadfc362b69078beee0088e5936c98b
content/98: 317256505991a755bbb6d3870b778f4a
content/98: 1b166ea32dff5f8de92b256fe48200d7
content/99: e1a03f917ad8b0a1ebec9a601aa3eede
content/100: 3aa857b8f85da07ee2d87e65c95b76d0
content/101: 371d0e46b4bd2c23f559b8bc112f6955
content/102: cc49a24c087d08717866a162cc47776c
content/103: bcadfc362b69078beee0088e5936c98b
content/104: 283b701d5bd6125f277a7f0ab3b4a7fe
content/104: c6d621ee3cdc66de2c20b70a39aafe12
content/105: b3f310d5ef115bea5a8b75bf25d7ea9a
content/106: 9d45ccf1c14d61412169be8f8510a960
9ed109808041fe9022eed66e1feedfdd:

View File

@@ -9,7 +9,6 @@ type AuthBackgroundProps = {
export default function AuthBackground({ className, children }: AuthBackgroundProps) {
return (
<div className={cn('relative min-h-screen w-full overflow-hidden', className)}>
<div className='-z-50 pointer-events-none fixed inset-0 bg-white' />
<AuthBackgroundSVG />
<div className='relative z-20'>{children}</div>
</div>

View File

@@ -1,7 +1,6 @@
'use client'
import { useEffect, useState } from 'react'
import { createLogger } from '@sim/logger'
import { ArrowRight, ChevronRight, Eye, EyeOff } from 'lucide-react'
import Link from 'next/link'
import { useRouter, useSearchParams } from 'next/navigation'
@@ -19,6 +18,7 @@ import { client } from '@/lib/auth/auth-client'
import { getEnv, isFalsy, isTruthy } from '@/lib/core/config/env'
import { cn } from '@/lib/core/utils/cn'
import { getBaseUrl } from '@/lib/core/utils/urls'
import { createLogger } from '@/lib/logs/console/logger'
import { quickValidateEmail } from '@/lib/messaging/email/validation'
import { inter } from '@/app/_styles/fonts/inter/inter'
import { soehne } from '@/app/_styles/fonts/soehne/soehne'

View File

@@ -1,9 +1,9 @@
'use client'
import { Suspense, useEffect, useState } from 'react'
import { createLogger } from '@sim/logger'
import Link from 'next/link'
import { useRouter, useSearchParams } from 'next/navigation'
import { createLogger } from '@/lib/logs/console/logger'
import { inter } from '@/app/_styles/fonts/inter/inter'
import { soehne } from '@/app/_styles/fonts/soehne/soehne'
import { SetNewPasswordForm } from '@/app/(auth)/reset-password/reset-password-form'

View File

@@ -1,7 +1,6 @@
'use client'
import { Suspense, useEffect, useState } from 'react'
import { createLogger } from '@sim/logger'
import { ArrowRight, ChevronRight, Eye, EyeOff } from 'lucide-react'
import Link from 'next/link'
import { useRouter, useSearchParams } from 'next/navigation'
@@ -11,6 +10,7 @@ import { Label } from '@/components/ui/label'
import { client, useSession } from '@/lib/auth/auth-client'
import { getEnv, isFalsy, isTruthy } from '@/lib/core/config/env'
import { cn } from '@/lib/core/utils/cn'
import { createLogger } from '@/lib/logs/console/logger'
import { quickValidateEmail } from '@/lib/messaging/email/validation'
import { inter } from '@/app/_styles/fonts/inter/inter'
import { soehne } from '@/app/_styles/fonts/soehne/soehne'

View File

@@ -1,7 +1,6 @@
'use client'
import { useEffect, useState } from 'react'
import { createLogger } from '@sim/logger'
import Link from 'next/link'
import { useRouter, useSearchParams } from 'next/navigation'
import { Button } from '@/components/ui/button'
@@ -10,6 +9,7 @@ import { Label } from '@/components/ui/label'
import { client } from '@/lib/auth/auth-client'
import { env, isFalsy } from '@/lib/core/config/env'
import { cn } from '@/lib/core/utils/cn'
import { createLogger } from '@/lib/logs/console/logger'
import { quickValidateEmail } from '@/lib/messaging/email/validation'
import { inter } from '@/app/_styles/fonts/inter/inter'
import { soehne } from '@/app/_styles/fonts/soehne/soehne'

View File

@@ -1,9 +1,9 @@
'use client'
import { useEffect, useState } from 'react'
import { createLogger } from '@sim/logger'
import { useRouter, useSearchParams } from 'next/navigation'
import { client, useSession } from '@/lib/auth/auth-client'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('useVerification')

View File

@@ -1,4 +1,4 @@
import { createLogger } from '@sim/logger'
import { createLogger } from '@/lib/logs/console/logger'
const DEFAULT_STARS = '19.4k'

View File

@@ -1,8 +1,7 @@
'use client'
import { useRef, useState } from 'react'
import { createLogger } from '@sim/logger'
import { X } from 'lucide-react'
import { Loader2, X } from 'lucide-react'
import { Button } from '@/components/ui/button'
import { Input } from '@/components/ui/input'
import { Label } from '@/components/ui/label'
@@ -16,6 +15,7 @@ import {
import { Textarea } from '@/components/ui/textarea'
import { isHosted } from '@/lib/core/config/feature-flags'
import { cn } from '@/lib/core/utils/cn'
import { createLogger } from '@/lib/logs/console/logger'
import { quickValidateEmail } from '@/lib/messaging/email/validation'
import { soehne } from '@/app/_styles/fonts/soehne/soehne'
import Footer from '@/app/(landing)/components/footer/footer'
@@ -499,11 +499,16 @@ export default function CareersPage() {
className='min-w-[200px] rounded-[10px] border border-[#6F3DFA] bg-gradient-to-b from-[#8357FF] to-[#6F3DFA] text-white shadow-[inset_0_2px_4px_0_#9B77FF] transition-all duration-300 hover:opacity-90 disabled:opacity-50'
size='lg'
>
{isSubmitting
? 'Submitting...'
: submitStatus === 'success'
? 'Submitted'
: 'Submit Application'}
{isSubmitting ? (
<>
<Loader2 className='mr-2 h-4 w-4 animate-spin' />
Submitting...
</>
) : submitStatus === 'success' ? (
'Submitted'
) : (
'Submit Application'
)}
</Button>
</div>
</form>

View File

@@ -5,39 +5,39 @@ export default function BackgroundSVG() {
focusable='false'
className='-translate-x-1/2 pointer-events-none absolute top-0 left-1/2 z-10 hidden h-full min-h-full w-[1308px] sm:block'
width='1308'
height='4970'
viewBox='0 18 1308 4094'
height='4942'
viewBox='0 18 1308 4066'
fill='none'
xmlns='http://www.w3.org/2000/svg'
preserveAspectRatio='xMidYMin slice'
>
{/* Pricing section (extended by ~28 units) */}
{/* Pricing section (original height ~380 units) */}
<path d='M6.71704 1236.22H1300.76' stroke='#E7E4EF' strokeWidth='2' />
<circle cx='11.0557' cy='1236.48' r='8.07846' fill='white' stroke='#E7E4EF' strokeWidth='2' />
<circle cx='1298.02' cy='1236.48' r='8.07846' fill='white' stroke='#E7E4EF' strokeWidth='2' />
<path d='M10.7967 1245.42V1641.91' stroke='#E7E4EF' strokeWidth='2' />
<path d='M1297.76 1245.96V1641.91' stroke='#E7E4EF' strokeWidth='2' />
<path d='M10.7967 1245.42V1613.91' stroke='#E7E4EF' strokeWidth='2' />
<path d='M1297.76 1245.96V1613.91' stroke='#E7E4EF' strokeWidth='2' />
{/* Integrations section (shifted down by 28 units) */}
<path d='M6.71704 1642.89H1291.05' stroke='#E7E4EF' strokeWidth='2' />
<circle cx='11.0557' cy='1643.15' r='8.07846' fill='white' stroke='#E7E4EF' strokeWidth='2' />
<circle cx='1298.02' cy='1643.15' r='8.07846' fill='white' stroke='#E7E4EF' strokeWidth='2' />
<path d='M10.7967 1652.61V2054.93' stroke='#E7E4EF' strokeWidth='2' />
<path d='M1297.76 1652.61V2054.93' stroke='#E7E4EF' strokeWidth='2' />
{/* Integrations section (original height ~412 units) */}
<path d='M6.71704 1614.89H1291.05' stroke='#E7E4EF' strokeWidth='2' />
<circle cx='11.0557' cy='1615.15' r='8.07846' fill='white' stroke='#E7E4EF' strokeWidth='2' />
<circle cx='1298.02' cy='1615.15' r='8.07846' fill='white' stroke='#E7E4EF' strokeWidth='2' />
<path d='M10.7967 1624.61V2026.93' stroke='#E7E4EF' strokeWidth='2' />
<path d='M1297.76 1624.61V2026.93' stroke='#E7E4EF' strokeWidth='2' />
{/* Testimonials section (shifted down by 28 units) */}
<path d='M6.71704 2054.71H1300.76' stroke='#E7E4EF' strokeWidth='2' />
<circle cx='11.0557' cy='2054.97' r='8.07846' fill='white' stroke='#E7E4EF' strokeWidth='2' />
<circle cx='1298.02' cy='2054.97' r='8.07846' fill='white' stroke='#E7E4EF' strokeWidth='2' />
<path d='M10.7967 2064.43V2205.43' stroke='#E7E4EF' strokeWidth='2' />
<path d='M1297.76 2064.43V2205.43' stroke='#E7E4EF' strokeWidth='2' />
{/* Testimonials section (original short height ~149 units) */}
<path d='M6.71704 2026.71H1300.76' stroke='#E7E4EF' strokeWidth='2' />
<circle cx='11.0557' cy='2026.97' r='8.07846' fill='white' stroke='#E7E4EF' strokeWidth='2' />
<circle cx='1298.02' cy='2026.97' r='8.07846' fill='white' stroke='#E7E4EF' strokeWidth='2' />
<path d='M10.7967 2036.43V2177.43' stroke='#E7E4EF' strokeWidth='2' />
<path d='M1297.76 2036.43V2177.43' stroke='#E7E4EF' strokeWidth='2' />
{/* Footer section line (shifted down by 28 units) */}
<path d='M6.71704 2205.71H1300.76' stroke='#E7E4EF' strokeWidth='2' />
<circle cx='11.0557' cy='2205.97' r='8.07846' fill='white' stroke='#E7E4EF' strokeWidth='2' />
<circle cx='1298.02' cy='2205.97' r='8.07846' fill='white' stroke='#E7E4EF' strokeWidth='2' />
<path d='M10.7967 2215.43V4118.25' stroke='#E7E4EF' strokeWidth='2' />
<path d='M1297.76 2215.43V4118.25' stroke='#E7E4EF' strokeWidth='2' />
{/* Footer section line */}
<path d='M6.71704 2177.71H1300.76' stroke='#E7E4EF' strokeWidth='2' />
<circle cx='11.0557' cy='2177.97' r='8.07846' fill='white' stroke='#E7E4EF' strokeWidth='2' />
<circle cx='1298.02' cy='2177.97' r='8.07846' fill='white' stroke='#E7E4EF' strokeWidth='2' />
<path d='M10.7967 2187.43V4090.25' stroke='#E7E4EF' strokeWidth='2' />
<path d='M1297.76 2187.43V4090.25' stroke='#E7E4EF' strokeWidth='2' />
<path
d='M959.828 116.604C1064.72 187.189 1162.61 277.541 1293.45 536.597'
stroke='#E7E4EF'

View File

@@ -15,7 +15,6 @@ type BackgroundProps = {
export default function Background({ className, children }: BackgroundProps) {
return (
<div className={cn('relative min-h-screen w-full', className)}>
<div className='-z-50 pointer-events-none fixed inset-0 bg-white' />
<BackgroundSVG />
<div className='relative z-0 mx-auto w-full max-w-[1308px]'>{children}</div>
</div>

View File

@@ -1,8 +1,6 @@
'use client'
import type { ComponentType, SVGProps } from 'react'
import { useState } from 'react'
import { createLogger } from '@sim/logger'
import type { LucideIcon } from 'lucide-react'
import {
ArrowRight,
@@ -15,6 +13,7 @@ import {
} from 'lucide-react'
import { useRouter } from 'next/navigation'
import { cn } from '@/lib/core/utils/cn'
import { createLogger } from '@/lib/logs/console/logger'
import { inter } from '@/app/_styles/fonts/inter/inter'
import {
ENTERPRISE_PLAN_FEATURES,
@@ -25,7 +24,7 @@ import {
const logger = createLogger('LandingPricing')
interface PricingFeature {
icon: LucideIcon | ComponentType<SVGProps<SVGSVGElement>>
icon: LucideIcon
text: string
}

View File

@@ -1,7 +1,6 @@
'use client'
import { useCallback, useEffect, useState } from 'react'
import { createLogger } from '@sim/logger'
import { ArrowRight, ChevronRight } from 'lucide-react'
import Image from 'next/image'
import Link from 'next/link'
@@ -9,6 +8,7 @@ import { useRouter } from 'next/navigation'
import { GithubIcon } from '@/components/icons'
import { useBrandConfig } from '@/lib/branding/branding'
import { isHosted } from '@/lib/core/config/feature-flags'
import { createLogger } from '@/lib/logs/console/logger'
import { soehne } from '@/app/_styles/fonts/soehne/soehne'
import { getFormattedGitHubStars } from '@/app/(landing)/actions/github'

View File

@@ -1,7 +1,7 @@
'use client'
import { useEffect } from 'react'
import { createLogger } from '@sim/logger'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('RootLayout')

View File

@@ -7,7 +7,7 @@ import { ThemeProvider as NextThemesProvider } from 'next-themes'
export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
const pathname = usePathname()
// Force light mode on public/marketing pages, allow user preference elsewhere
// Force light mode on public/marketing pages, dark mode everywhere else
const isLightModePage =
pathname === '/' ||
pathname.startsWith('/login') ||
@@ -27,10 +27,10 @@ export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
<NextThemesProvider
attribute='class'
defaultTheme='dark'
enableSystem
enableSystem={false}
disableTransitionOnChange
storageKey='sim-theme'
forcedTheme={isLightModePage ? 'light' : undefined}
forcedTheme={isLightModePage ? 'light' : 'dark'}
{...props}
>
{children}

View File

@@ -0,0 +1,33 @@
'use client'
import { useEffect } from 'react'
export function ZoomPrevention() {
useEffect(() => {
const preventZoom = (e: KeyboardEvent | WheelEvent) => {
// Prevent zoom on ctrl/cmd + wheel
if (e instanceof WheelEvent && (e.ctrlKey || e.metaKey)) {
e.preventDefault()
}
// Prevent zoom on ctrl/cmd + plus/minus/zero
if (e instanceof KeyboardEvent && (e.ctrlKey || e.metaKey)) {
if (e.key === '=' || e.key === '-' || e.key === '0') {
e.preventDefault()
}
}
}
// Add event listeners
document.addEventListener('wheel', preventZoom, { passive: false })
document.addEventListener('keydown', preventZoom)
// Cleanup
return () => {
document.removeEventListener('wheel', preventZoom)
document.removeEventListener('keydown', preventZoom)
}
}, [])
return null
}

View File

@@ -8,7 +8,7 @@
*/
:root {
--sidebar-width: 232px;
--panel-width: 260px;
--panel-width: 244px;
--toolbar-triggers-height: 300px;
--editor-connections-height: 200px;
--terminal-height: 196px;
@@ -26,6 +26,41 @@
height: var(--terminal-height);
}
/**
* Workflow component z-index fixes and background colors
*/
.workflow-container .react-flow__edges {
z-index: 0 !important;
}
.workflow-container .react-flow__node {
z-index: 21 !important;
}
.workflow-container .react-flow__handle {
z-index: 30 !important;
}
.workflow-container .react-flow__edge [data-testid="workflow-edge"] {
z-index: 0 !important;
}
.workflow-container .react-flow__edge-labels {
z-index: 60 !important;
}
.workflow-container,
.workflow-container .react-flow__pane,
.workflow-container .react-flow__renderer {
background-color: var(--bg) !important;
}
.dark .workflow-container,
.dark .workflow-container .react-flow__pane,
.dark .workflow-container .react-flow__renderer {
background-color: var(--bg) !important;
}
/**
* Landing loop animation styles (keyframes defined in tailwind.config.ts)
*/
@@ -40,87 +75,101 @@
}
/**
* Color tokens - single source of truth for all colors
* Light mode: Warm theme
* Dark mode: Dark neutral theme
* Dark color tokens - single source of truth for all colors (dark-only)
*/
@layer base {
:root,
.light {
--bg: #f9faf8; /* main canvas - near white */
--surface-1: #f9faf8; /* sidebar, panels - light warm gray */
--surface-2: #fdfdfb; /* blocks, cards, modals - soft warm white */
--surface-3: #f4f5f1; /* popovers, headers - more contrast */
--surface-4: #f2f3ef; /* buttons base */
--border: #d7dcda; /* primary border */
--surface-5: #f0f1ed; /* inputs, form elements - subtle */
--border-1: #d7dcda; /* stronger border - sage gray */
--surface-6: #eceee9; /* popovers, elevated surfaces */
--surface-7: #e8e9e4;
/* Neutrals (surfaces) - shadcn stone palette */
--bg: #ffffff; /* pure white for landing/auth pages */
--surface-1: #fafaf9; /* stone-50 */
--surface-2: #ffffff; /* white */
--surface-3: #f5f5f4; /* stone-100 */
--surface-4: #f5f5f4; /* stone-100 */
--surface-5: #eeedec; /* stone-150 */
--surface-6: #f5f5f4; /* stone-100 */
--surface-9: #f5f5f4; /* stone-100 */
--surface-11: #e7e5e4; /* stone-200 */
--surface-12: #d6d3d1; /* stone-300 */
--surface-13: #a8a29e; /* stone-400 */
--surface-14: #78716c; /* stone-500 */
--surface-15: #57534e; /* stone-600 */
--surface-elevated: #ffffff; /* white */
--bg-strong: #e7e5e4; /* stone-200 */
--workflow-edge: #d7dcda; /* workflow handles/edges - matches border-1 */
/* Text - shadcn stone palette for proper contrast */
--text-primary: #1c1917; /* stone-900 */
--text-secondary: #292524; /* stone-800 */
--text-tertiary: #57534e; /* stone-600 */
--text-muted: #78716c; /* stone-500 */
--text-subtle: #a8a29e; /* stone-400 */
--text-inverse: #fafaf9; /* stone-50 */
--text-error: #dc2626;
/* Text - warm neutrals */
--text-primary: #2d2d2d;
--text-secondary: #404040;
--text-tertiary: #5c5c5c;
--text-muted: #737373;
--text-subtle: #8c8c8c;
--text-inverse: #f0fff6;
--text-error: #ef4444;
/* Borders / dividers */
--divider: #e8e9e4;
--border-muted: #dfe0db;
--border-success: #d7dcda;
/* Borders / dividers - shadcn stone palette */
--border: #d6d3d1; /* stone-300 */
--border-strong: #d6d3d1; /* stone-300 */
--divider: #e7e5e4; /* stone-200 */
--border-muted: #e7e5e4; /* stone-200 */
--border-success: #d6d3d1; /* stone-300 */
/* Brand & state */
--brand-400: #8e4cfb;
--brand-500: #6f3dfa;
--brand-secondary: #33b4ff;
--brand-tertiary: #22c55e;
--brand-tertiary-2: #32bd7e;
--brand-tertiary-2: #33c481;
--warning: #ea580c;
/* Utility */
--white: #ffffff;
/* Font weights - lighter for light mode */
/* Font weights - lighter for light mode (-20 from dark) */
--font-weight-base: 430;
--font-weight-medium: 450;
--font-weight-semibold: 500;
/* Extended palette */
--c-0D0D0D: #0d0d0d;
--c-1A1A1A: #1a1a1a;
--c-1F1F1F: #1f1f1f;
--c-2A2A2A: #2a2a2a;
--c-383838: #383838;
--c-414141: #414141;
/* RGB for opacity usage - stone palette */
--surface-4-rgb: 245 245 244; /* stone-100 */
--surface-5-rgb: 238 237 236; /* stone-150 */
--surface-7-rgb: 245 245 244; /* stone-100 */
--surface-9-rgb: 245 245 244; /* stone-100 */
--divider-rgb: 231 229 228; /* stone-200 */
--white-rgb: 255 255 255;
--black-rgb: 0 0 0;
/* Extended palette - mapped to shadcn stone palette */
--c-0D0D0D: #0c0a09; /* stone-950 */
--c-1A1A1A: #1c1917; /* stone-900 */
--c-1F1F1F: #1c1917; /* stone-900 */
--c-2A2A2A: #292524; /* stone-800 */
--c-383838: #44403c; /* stone-700 */
--c-414141: #57534e; /* stone-600 */
--c-442929: #442929;
--c-491515: #491515;
--c-575757: #575757;
--c-686868: #686868;
--c-707070: #707070;
--c-727272: #727272;
--c-737373: #737373;
--c-808080: #808080;
--c-858585: #858585;
--c-868686: #868686;
--c-8D8D8D: #8d8d8d;
--c-939393: #939393;
--c-A8A8A8: #a8a8a8;
--c-B8B8B8: #b8b8b8;
--c-C0C0C0: #c0c0c0;
--c-CDCDCD: #cdcdcd;
--c-D0D0D0: #d0d0d0;
--c-D2D2D2: #d2d2d2;
--c-E0E0E0: #e0e0e0;
--c-E5E5E5: #e5e5e5;
--c-E8E8E8: #e8e8e8;
--c-EEEEEE: #eeeeee;
--c-F0F0F0: #f0f0f0;
--c-F4F4F4: #f4f4f4;
--c-F5F5F5: #f5f5f5;
--c-575757: #78716c; /* stone-500 */
--c-686868: #78716c; /* stone-500 */
--c-707070: #78716c; /* stone-500 */
--c-727272: #78716c; /* stone-500 */
--c-737373: #78716c; /* stone-500 */
--c-808080: #a8a29e; /* stone-400 */
--c-858585: #a8a29e; /* stone-400 */
--c-868686: #a8a29e; /* stone-400 */
--c-8D8D8D: #a8a29e; /* stone-400 */
--c-939393: #a8a29e; /* stone-400 */
--c-A8A8A8: #a8a29e; /* stone-400 */
--c-B8B8B8: #d6d3d1; /* stone-300 */
--c-C0C0C0: #d6d3d1; /* stone-300 */
--c-CDCDCD: #d6d3d1; /* stone-300 */
--c-D0D0D0: #d6d3d1; /* stone-300 */
--c-D2D2D2: #d6d3d1; /* stone-300 */
--c-E0E0E0: #e7e5e4; /* stone-200 */
--c-E5E5E5: #e7e5e4; /* stone-200 */
--c-E8E8E8: #e7e5e4; /* stone-200 */
--c-EEEEEE: #f5f5f4; /* stone-100 */
--c-F0F0F0: #f5f5f4; /* stone-100 */
--c-F4F4F4: #fafaf9; /* stone-50 */
--c-F5F5F5: #fafaf9; /* stone-50 */
/* Blues and cyans */
--c-00B0B0: #00b0b0;
@@ -154,27 +203,30 @@
/* Terminal status badges */
--terminal-status-error-bg: #feeeee;
--terminal-status-error-border: #f87171;
--terminal-status-info-bg: #f5f5f4;
--terminal-status-info-border: #a8a29e;
--terminal-status-info-color: #57534e;
--terminal-status-info-bg: #f5f5f4; /* stone-100 */
--terminal-status-info-border: #a8a29e; /* stone-400 */
--terminal-status-info-color: #57534e; /* stone-600 */
--terminal-status-warning-bg: #fef9e7;
--terminal-status-warning-border: #f5c842;
--terminal-status-warning-color: #a16207;
}
.dark {
/* Surface */
/* Neutrals (surfaces) */
--bg: #1b1b1b;
--surface-1: #1e1e1e;
--surface-2: #232323;
--surface-3: #242424;
--surface-4: #292929;
--border: #2c2c2c;
--surface-5: #363636;
--border-1: #3d3d3d;
--surface-6: #454545;
--surface-7: #454545;
--workflow-edge: #454545; /* workflow handles/edges - same as surface-6 in dark */
--surface-4: #252525;
--surface-5: #272727;
--surface-6: #282828;
--surface-9: #363636;
--surface-11: #3d3d3d;
--surface-12: #434343;
--surface-13: #454545;
--surface-14: #4a4a4a;
--surface-15: #5a5a5a;
--surface-elevated: #202020;
--bg-strong: #0c0c0c;
/* Text */
--text-primary: #e6e6e6;
@@ -185,7 +237,9 @@
--text-inverse: #1b1b1b;
--text-error: #ef4444;
/* --border-strong: #303030; */
/* Borders / dividers */
--border: #2c2c2c;
--border-strong: #303030;
--divider: #393939;
--border-muted: #424242;
--border-success: #575757;
@@ -194,7 +248,7 @@
--brand-400: #8e4cfb;
--brand-secondary: #33b4ff;
--brand-tertiary: #22c55e;
--brand-tertiary-2: #32bd7e;
--brand-tertiary-2: #33c481;
--warning: #ff6600;
/* Utility */
@@ -205,6 +259,15 @@
--font-weight-medium: 480;
--font-weight-semibold: 550;
/* RGB for opacity usage */
--surface-4-rgb: 37 37 37;
--surface-5-rgb: 39 39 39;
--surface-7-rgb: 44 44 44;
--surface-9-rgb: 54 54 54;
--divider-rgb: 57 57 57;
--white-rgb: 255 255 255;
--black-rgb: 0 0 0;
/* Extended palette (exhaustive from code usage via -[#...]) */
/* Neutral deep shades */
--c-0D0D0D: #0d0d0d;
@@ -332,34 +395,34 @@
}
::-webkit-scrollbar-thumb {
background-color: var(--surface-7);
background-color: var(--surface-12);
border-radius: var(--radius);
}
::-webkit-scrollbar-thumb:hover {
background-color: var(--surface-7);
background-color: var(--surface-13);
}
/* Dark Mode Global Scrollbar */
.dark ::-webkit-scrollbar-track {
background: var(--surface-4);
background: var(--surface-5);
}
.dark ::-webkit-scrollbar-thumb {
background-color: var(--surface-7);
background-color: var(--surface-12);
}
.dark ::-webkit-scrollbar-thumb:hover {
background-color: var(--surface-7);
background-color: var(--surface-13);
}
* {
scrollbar-width: thin;
scrollbar-color: var(--surface-7) var(--surface-1);
scrollbar-color: var(--surface-12) var(--surface-1);
}
.dark * {
scrollbar-color: var(--surface-7) var(--surface-4);
scrollbar-color: var(--surface-12) var(--surface-5);
}
.copilot-scrollable {
@@ -375,8 +438,8 @@
}
.panel-tab-active {
background-color: var(--surface-5);
color: var(--text-primary);
background-color: var(--white);
color: var(--text-inverse);
border-color: var(--border-muted);
}
@@ -387,7 +450,7 @@
}
.panel-tab-inactive:hover {
background-color: var(--surface-5);
background-color: var(--surface-9);
color: var(--text-primary);
}
@@ -538,25 +601,25 @@ input[type="search"]::-ms-clear {
}
.auth-button-gradient {
background: linear-gradient(to bottom, var(--brand-primary-hex), var(--brand-400)) !important;
background: linear-gradient(to bottom, var(--brand-500), var(--brand-400)) !important;
border-color: var(--brand-400) !important;
box-shadow: inset 0 2px 4px 0 var(--brand-400) !important;
}
.auth-button-gradient:hover {
background: linear-gradient(to bottom, var(--brand-primary-hex), var(--brand-400)) !important;
background: linear-gradient(to bottom, var(--brand-500), var(--brand-400)) !important;
opacity: 0.9;
}
.auth-button-custom {
background: var(--brand-primary-hex) !important;
border-color: var(--brand-primary-hex) !important;
background: var(--brand-500) !important;
border-color: var(--brand-500) !important;
box-shadow: inset 0 2px 4px 0 rgba(0, 0, 0, 0.1) !important;
}
.auth-button-custom:hover {
background: var(--brand-primary-hover-hex) !important;
border-color: var(--brand-primary-hover-hex) !important;
background: var(--brand-500) !important;
border-color: var(--brand-500) !important;
opacity: 1;
}
@@ -579,7 +642,7 @@ input[type="search"]::-ms-clear {
}
html[data-panel-active-tab="copilot"] .panel-container [data-tab-button="copilot"] {
background-color: var(--border-1) !important;
background-color: var(--surface-11) !important;
color: var(--text-primary) !important;
}
html[data-panel-active-tab="copilot"] .panel-container [data-tab-button="toolbar"],
@@ -589,7 +652,7 @@ input[type="search"]::-ms-clear {
}
html[data-panel-active-tab="toolbar"] .panel-container [data-tab-button="toolbar"] {
background-color: var(--border-1) !important;
background-color: var(--surface-11) !important;
color: var(--text-primary) !important;
}
html[data-panel-active-tab="toolbar"] .panel-container [data-tab-button="copilot"],
@@ -599,7 +662,7 @@ input[type="search"]::-ms-clear {
}
html[data-panel-active-tab="editor"] .panel-container [data-tab-button="editor"] {
background-color: var(--border-1) !important;
background-color: var(--surface-11) !important;
color: var(--text-primary) !important;
}
html[data-panel-active-tab="editor"] .panel-container [data-tab-button="copilot"],

View File

@@ -735,7 +735,7 @@ export function mockKnowledgeSchemas() {
* This ensures tests can assert on the same mockLogger instance exported from this module.
*/
export function mockConsoleLogger() {
vi.doMock('@sim/logger', () => ({
vi.doMock('@/lib/logs/console/logger', () => ({
createLogger: vi.fn().mockReturnValue(mockLogger),
}))
}

View File

@@ -1,9 +1,9 @@
import { db } from '@sim/db'
import { account } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { getSession } from '@/lib/auth'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('AuthAccountsAPI')

View File

@@ -162,7 +162,7 @@ describe('Forget Password API Route', () => {
expect(response.status).toBe(500)
expect(data.message).toBe(errorMessage)
const logger = await import('@sim/logger')
const logger = await import('@/lib/logs/console/logger')
const mockLogger = logger.createLogger('ForgetPasswordTest')
expect(mockLogger.error).toHaveBeenCalledWith('Error requesting password reset:', {
error: expect.any(Error),
@@ -192,7 +192,7 @@ describe('Forget Password API Route', () => {
expect(response.status).toBe(500)
expect(data.message).toBe('Failed to send password reset email. Please try again later.')
const logger = await import('@sim/logger')
const logger = await import('@/lib/logs/console/logger')
const mockLogger = logger.createLogger('ForgetPasswordTest')
expect(mockLogger.error).toHaveBeenCalled()
})

View File

@@ -1,8 +1,8 @@
import { createLogger } from '@sim/logger'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { auth } from '@/lib/auth'
import { isSameOrigin } from '@/lib/core/utils/validation'
import { createLogger } from '@/lib/logs/console/logger'
export const dynamic = 'force-dynamic'

View File

@@ -46,7 +46,7 @@ describe('OAuth Connections API Route', () => {
jwtDecode: vi.fn(),
}))
vi.doMock('@sim/logger', () => ({
vi.doMock('@/lib/logs/console/logger', () => ({
createLogger: vi.fn().mockReturnValue(mockLogger),
}))

View File

@@ -1,10 +1,10 @@
import { account, db, user } from '@sim/db'
import { createLogger } from '@sim/logger'
import { eq } from 'drizzle-orm'
import { jwtDecode } from 'jwt-decode'
import { type NextRequest, NextResponse } from 'next/server'
import { getSession } from '@/lib/auth'
import { generateRequestId } from '@/lib/core/utils/request'
import { createLogger } from '@/lib/logs/console/logger'
import type { OAuthProvider } from '@/lib/oauth'
import { evaluateScopeCoverage, parseProvider } from '@/lib/oauth'

View File

@@ -61,7 +61,7 @@ describe('OAuth Credentials API Route', () => {
jwtDecode: vi.fn(),
}))
vi.doMock('@sim/logger', () => ({
vi.doMock('@/lib/logs/console/logger', () => ({
createLogger: vi.fn().mockReturnValue(mockLogger),
}))

View File

@@ -1,12 +1,12 @@
import { db } from '@sim/db'
import { account, user, workflow } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, eq } from 'drizzle-orm'
import { jwtDecode } from 'jwt-decode'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { checkHybridAuth } from '@/lib/auth/hybrid'
import { generateRequestId } from '@/lib/core/utils/request'
import { createLogger } from '@/lib/logs/console/logger'
import { evaluateScopeCoverage, type OAuthProvider, parseProvider } from '@/lib/oauth'
import { getUserEntityPermissions } from '@/lib/workspaces/permissions/utils'

View File

@@ -42,7 +42,7 @@ describe('OAuth Disconnect API Route', () => {
or: vi.fn((...conditions) => ({ conditions, type: 'or' })),
}))
vi.doMock('@sim/logger', () => ({
vi.doMock('@/lib/logs/console/logger', () => ({
createLogger: vi.fn().mockReturnValue(mockLogger),
}))
})

View File

@@ -1,11 +1,11 @@
import { db } from '@sim/db'
import { account } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, eq, like, or } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { getSession } from '@/lib/auth'
import { generateRequestId } from '@/lib/core/utils/request'
import { createLogger } from '@/lib/logs/console/logger'
export const dynamic = 'force-dynamic'

View File

@@ -1,8 +1,8 @@
import { createLogger } from '@sim/logger'
import { type NextRequest, NextResponse } from 'next/server'
import { authorizeCredentialUse } from '@/lib/auth/credential-access'
import { validateMicrosoftGraphId } from '@/lib/core/security/input-validation'
import { generateRequestId } from '@/lib/core/utils/request'
import { createLogger } from '@/lib/logs/console/logger'
import { getCredential, refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils'
export const dynamic = 'force-dynamic'

View File

@@ -1,7 +1,7 @@
import { createLogger } from '@sim/logger'
import { type NextRequest, NextResponse } from 'next/server'
import { authorizeCredentialUse } from '@/lib/auth/credential-access'
import { generateRequestId } from '@/lib/core/utils/request'
import { createLogger } from '@/lib/logs/console/logger'
import { getCredential, refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils'
export const dynamic = 'force-dynamic'

View File

@@ -31,7 +31,7 @@ describe('OAuth Token API Routes', () => {
refreshTokenIfNeeded: mockRefreshTokenIfNeeded,
}))
vi.doMock('@sim/logger', () => ({
vi.doMock('@/lib/logs/console/logger', () => ({
createLogger: vi.fn().mockReturnValue(mockLogger),
}))

View File

@@ -1,17 +1,15 @@
import { createLogger } from '@sim/logger'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { authorizeCredentialUse } from '@/lib/auth/credential-access'
import { checkHybridAuth } from '@/lib/auth/hybrid'
import { generateRequestId } from '@/lib/core/utils/request'
import { createLogger } from '@/lib/logs/console/logger'
import { getCredential, refreshTokenIfNeeded } from '@/app/api/auth/oauth/utils'
export const dynamic = 'force-dynamic'
const logger = createLogger('OAuthTokenAPI')
const SALESFORCE_INSTANCE_URL_REGEX = /__sf_instance__:([^\s]+)/
const tokenRequestSchema = z.object({
credentialId: z
.string({ required_error: 'Credential ID is required' })
@@ -80,20 +78,10 @@ export async function POST(request: NextRequest) {
try {
// Refresh the token if needed
const { accessToken } = await refreshTokenIfNeeded(requestId, credential, credentialId)
let instanceUrl: string | undefined
if (credential.providerId === 'salesforce' && credential.scope) {
const instanceMatch = credential.scope.match(SALESFORCE_INSTANCE_URL_REGEX)
if (instanceMatch) {
instanceUrl = instanceMatch[1]
}
}
return NextResponse.json(
{
accessToken,
idToken: credential.idToken || undefined,
...(instanceUrl && { instanceUrl }),
},
{ status: 200 }
)
@@ -159,21 +147,10 @@ export async function GET(request: NextRequest) {
try {
const { accessToken } = await refreshTokenIfNeeded(requestId, credential, credentialId)
// For Salesforce, extract instanceUrl from the scope field
let instanceUrl: string | undefined
if (credential.providerId === 'salesforce' && credential.scope) {
const instanceMatch = credential.scope.match(SALESFORCE_INSTANCE_URL_REGEX)
if (instanceMatch) {
instanceUrl = instanceMatch[1]
}
}
return NextResponse.json(
{
accessToken,
idToken: credential.idToken || undefined,
...(instanceUrl && { instanceUrl }),
},
{ status: 200 }
)

View File

@@ -31,7 +31,7 @@ vi.mock('@/lib/oauth/oauth', () => ({
OAUTH_PROVIDERS: {},
}))
vi.mock('@sim/logger', () => loggerMock)
vi.mock('@/lib/logs/console/logger', () => loggerMock)
import { db } from '@sim/db'
import { refreshOAuthToken } from '@/lib/oauth'

View File

@@ -1,8 +1,8 @@
import { db } from '@sim/db'
import { account, workflow } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, desc, eq } from 'drizzle-orm'
import { getSession } from '@/lib/auth'
import { createLogger } from '@/lib/logs/console/logger'
import { refreshOAuthToken } from '@/lib/oauth'
const logger = createLogger('OAuthUtilsAPI')

View File

@@ -1,11 +1,11 @@
import { db } from '@sim/db'
import { account } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { getSession } from '@/lib/auth'
import { validateEnum, validatePathSegment } from '@/lib/core/security/input-validation'
import { generateRequestId } from '@/lib/core/utils/request'
import { createLogger } from '@/lib/logs/console/logger'
import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils'
export const dynamic = 'force-dynamic'

View File

@@ -1,10 +1,10 @@
import { db } from '@sim/db'
import { account } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { getSession } from '@/lib/auth'
import { generateRequestId } from '@/lib/core/utils/request'
import { createLogger } from '@/lib/logs/console/logger'
import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils'
export const dynamic = 'force-dynamic'

View File

@@ -1,9 +1,9 @@
import crypto from 'crypto'
import { createLogger } from '@sim/logger'
import { type NextRequest, NextResponse } from 'next/server'
import { getSession } from '@/lib/auth'
import { env } from '@/lib/core/config/env'
import { getBaseUrl } from '@/lib/core/utils/urls'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('ShopifyCallback')

View File

@@ -1,10 +1,10 @@
import { db } from '@sim/db'
import { account } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { getSession } from '@/lib/auth'
import { getBaseUrl } from '@/lib/core/utils/urls'
import { createLogger } from '@/lib/logs/console/logger'
import { safeAccountInsert } from '@/app/api/auth/oauth/utils'
const logger = createLogger('ShopifyStore')

View File

@@ -148,7 +148,7 @@ describe('Reset Password API Route', () => {
expect(response.status).toBe(500)
expect(data.message).toBe(errorMessage)
const logger = await import('@sim/logger')
const logger = await import('@/lib/logs/console/logger')
const mockLogger = logger.createLogger('PasswordResetAPI')
expect(mockLogger.error).toHaveBeenCalledWith('Error during password reset:', {
error: expect.any(Error),
@@ -181,7 +181,7 @@ describe('Reset Password API Route', () => {
'Failed to reset password. Please try again or request a new reset link.'
)
const logger = await import('@sim/logger')
const logger = await import('@/lib/logs/console/logger')
const mockLogger = logger.createLogger('PasswordResetAPI')
expect(mockLogger.error).toHaveBeenCalled()
})

View File

@@ -1,7 +1,7 @@
import { createLogger } from '@sim/logger'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { auth } from '@/lib/auth'
import { createLogger } from '@/lib/logs/console/logger'
export const dynamic = 'force-dynamic'

View File

@@ -1,8 +1,8 @@
import { createLogger } from '@sim/logger'
import { type NextRequest, NextResponse } from 'next/server'
import { getSession } from '@/lib/auth'
import { env } from '@/lib/core/config/env'
import { getBaseUrl } from '@/lib/core/utils/urls'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('ShopifyAuthorize')

View File

@@ -1,8 +1,8 @@
import { db, ssoProvider } from '@sim/db'
import { createLogger } from '@sim/logger'
import { eq } from 'drizzle-orm'
import { NextResponse } from 'next/server'
import { getSession } from '@/lib/auth'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('SSO-Providers')

View File

@@ -1,9 +1,9 @@
import { createLogger } from '@sim/logger'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { auth } from '@/lib/auth'
import { env } from '@/lib/core/config/env'
import { REDACTED_MARKER } from '@/lib/core/security/redaction'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('SSO-Register')

View File

@@ -1,8 +1,8 @@
import { createLogger } from '@sim/logger'
import { type NextRequest, NextResponse } from 'next/server'
import { getSession } from '@/lib/auth'
import { env } from '@/lib/core/config/env'
import { getBaseUrl } from '@/lib/core/utils/urls'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('TrelloAuthorize')

View File

@@ -1,8 +1,8 @@
import { createLogger } from '@sim/logger'
import { and, eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { getSession } from '@/lib/auth'
import { env } from '@/lib/core/config/env'
import { createLogger } from '@/lib/logs/console/logger'
import { safeAccountInsert } from '@/app/api/auth/oauth/utils'
import { db } from '@/../../packages/db'
import { account } from '@/../../packages/db/schema'

View File

@@ -1,9 +1,9 @@
import { createLogger } from '@sim/logger'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { getSession } from '@/lib/auth'
import { getCreditBalance } from '@/lib/billing/credits/balance'
import { purchaseCredits } from '@/lib/billing/credits/purchase'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('CreditsAPI')

View File

@@ -1,11 +1,11 @@
import { db } from '@sim/db'
import { subscription as subscriptionTable, user } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, eq, or } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { getSession } from '@/lib/auth'
import { requireStripeClient } from '@/lib/billing/stripe-client'
import { getBaseUrl } from '@/lib/core/utils/urls'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('BillingPortal')

View File

@@ -1,11 +1,11 @@
import { db } from '@sim/db'
import { member, userStats } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { getSession } from '@/lib/auth'
import { getSimplifiedBillingSummary } from '@/lib/billing/core/billing'
import { getOrganizationBillingData } from '@/lib/billing/core/organization'
import { createLogger } from '@/lib/logs/console/logger'
/**
* Gets the effective billing blocked status for a user.
@@ -93,7 +93,6 @@ export async function GET(request: NextRequest) {
const { searchParams } = new URL(request.url)
const context = searchParams.get('context') || 'user'
const contextId = searchParams.get('id')
const includeOrg = searchParams.get('includeOrg') === 'true'
// Validate context parameter
if (!['user', 'organization'].includes(context)) {
@@ -116,38 +115,14 @@ export async function GET(request: NextRequest) {
if (context === 'user') {
// Get user billing (may include organization if they're part of one)
billingData = await getSimplifiedBillingSummary(session.user.id, contextId || undefined)
// Attach effective billing blocked status (includes org owner check)
const billingStatus = await getEffectiveBillingStatus(session.user.id)
billingData = {
...billingData,
billingBlocked: billingStatus.billingBlocked,
billingBlockedReason: billingStatus.billingBlockedReason,
blockedByOrgOwner: billingStatus.blockedByOrgOwner,
}
// Optionally include organization membership and role
if (includeOrg) {
const userMembership = await db
.select({
organizationId: member.organizationId,
role: member.role,
})
.from(member)
.where(eq(member.userId, session.user.id))
.limit(1)
if (userMembership.length > 0) {
billingData = {
...billingData,
organization: {
id: userMembership[0].organizationId,
role: userMembership[0].role as 'owner' | 'admin' | 'member',
},
}
}
}
} else {
// Get user role in organization for permission checks first
const memberRecord = await db

View File

@@ -1,6 +1,5 @@
import { db } from '@sim/db'
import { userStats } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { eq, sql } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
@@ -9,6 +8,7 @@ import { checkAndBillOverageThreshold } from '@/lib/billing/threshold-billing'
import { checkInternalApiKey } from '@/lib/copilot/utils'
import { isBillingEnabled } from '@/lib/core/config/feature-flags'
import { generateRequestId } from '@/lib/core/utils/request'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('BillingUpdateCostAPI')

View File

@@ -1,10 +1,10 @@
import { render } from '@react-email/components'
import { createLogger } from '@sim/logger'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import CareersConfirmationEmail from '@/components/emails/careers/careers-confirmation-email'
import CareersSubmissionEmail from '@/components/emails/careers/careers-submission-email'
import { generateRequestId } from '@/lib/core/utils/request'
import { createLogger } from '@/lib/logs/console/logger'
import { sendEmail } from '@/lib/messaging/email/mailer'
export const dynamic = 'force-dynamic'

View File

@@ -147,7 +147,7 @@ describe('Chat OTP API Route', () => {
createErrorResponse: mockCreateErrorResponse,
}))
vi.doMock('@sim/logger', () => ({
vi.doMock('@/lib/logs/console/logger', () => ({
createLogger: vi.fn().mockReturnValue({
info: vi.fn(),
error: vi.fn(),

View File

@@ -1,7 +1,6 @@
import { randomUUID } from 'crypto'
import { db } from '@sim/db'
import { chat, verification } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, eq, gt } from 'drizzle-orm'
import type { NextRequest } from 'next/server'
import { z } from 'zod'
@@ -9,6 +8,7 @@ import { renderOTPEmail } from '@/components/emails/render-email'
import { getRedisClient } from '@/lib/core/config/redis'
import { getStorageMethod } from '@/lib/core/storage'
import { generateRequestId } from '@/lib/core/utils/request'
import { createLogger } from '@/lib/logs/console/logger'
import { sendEmail } from '@/lib/messaging/email/mailer'
import { addCorsHeaders, setChatAuthCookie } from '@/app/api/chat/utils'
import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils'

View File

@@ -120,7 +120,7 @@ describe('Chat Identifier API Route', () => {
validateAuthToken: vi.fn().mockReturnValue(true),
}))
vi.doMock('@sim/logger', () => ({
vi.doMock('@/lib/logs/console/logger', () => ({
createLogger: vi.fn().mockReturnValue({
debug: vi.fn(),
info: vi.fn(),

View File

@@ -1,12 +1,12 @@
import { randomUUID } from 'crypto'
import { db } from '@sim/db'
import { chat, workflow } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { generateRequestId } from '@/lib/core/utils/request'
import { preprocessExecution } from '@/lib/execution/preprocessing'
import { createLogger } from '@/lib/logs/console/logger'
import { LoggingSession } from '@/lib/logs/execution/logging-session'
import { ChatFiles } from '@/lib/uploads'
import {

View File

@@ -50,7 +50,7 @@ describe('Chat Edit API Route', () => {
chat: { id: 'id', identifier: 'identifier', userId: 'userId' },
}))
vi.doMock('@sim/logger', () => ({
vi.doMock('@/lib/logs/console/logger', () => ({
createLogger: vi.fn().mockReturnValue({
info: vi.fn(),
error: vi.fn(),

View File

@@ -1,6 +1,5 @@
import { db } from '@sim/db'
import { chat } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { eq } from 'drizzle-orm'
import type { NextRequest } from 'next/server'
import { z } from 'zod'
@@ -8,6 +7,7 @@ import { getSession } from '@/lib/auth'
import { isDev } from '@/lib/core/config/feature-flags'
import { encryptSecret } from '@/lib/core/security/encryption'
import { getEmailDomain } from '@/lib/core/utils/urls'
import { createLogger } from '@/lib/logs/console/logger'
import { deployWorkflow } from '@/lib/workflows/persistence/utils'
import { checkChatAccess } from '@/app/api/chat/utils'
import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils'

View File

@@ -42,7 +42,7 @@ describe('Chat API Route', () => {
workflow: { id: 'id', userId: 'userId', isDeployed: 'isDeployed' },
}))
vi.doMock('@sim/logger', () => ({
vi.doMock('@/lib/logs/console/logger', () => ({
createLogger: vi.fn().mockReturnValue({
info: vi.fn(),
error: vi.fn(),

View File

@@ -1,6 +1,5 @@
import { db } from '@sim/db'
import { chat } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { eq } from 'drizzle-orm'
import type { NextRequest } from 'next/server'
import { v4 as uuidv4 } from 'uuid'
@@ -9,6 +8,7 @@ import { getSession } from '@/lib/auth'
import { isDev } from '@/lib/core/config/feature-flags'
import { encryptSecret } from '@/lib/core/security/encryption'
import { getBaseUrl } from '@/lib/core/utils/urls'
import { createLogger } from '@/lib/logs/console/logger'
import { deployWorkflow } from '@/lib/workflows/persistence/utils'
import { checkWorkflowAccessForChatCreation } from '@/app/api/chat/utils'
import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils'

View File

@@ -52,7 +52,7 @@ vi.mock('@/lib/core/config/feature-flags', () => ({
describe('Chat API Utils', () => {
beforeEach(() => {
vi.doMock('@sim/logger', () => ({
vi.doMock('@/lib/logs/console/logger', () => ({
createLogger: vi.fn().mockReturnValue({
info: vi.fn(),
error: vi.fn(),

View File

@@ -1,11 +1,11 @@
import { createHash } from 'crypto'
import { db } from '@sim/db'
import { chat, workflow } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { eq } from 'drizzle-orm'
import type { NextRequest, NextResponse } from 'next/server'
import { isDev } from '@/lib/core/config/feature-flags'
import { decryptSecret } from '@/lib/core/security/encryption'
import { createLogger } from '@/lib/logs/console/logger'
import { hasAdminPermission } from '@/lib/workspaces/permissions/utils'
const logger = createLogger('ChatAuthUtils')

View File

@@ -1,9 +1,9 @@
import { db } from '@sim/db'
import { chat } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { eq } from 'drizzle-orm'
import type { NextRequest } from 'next/server'
import { z } from 'zod'
import { createLogger } from '@/lib/logs/console/logger'
import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils'
const logger = createLogger('ChatValidateAPI')

View File

@@ -1,8 +1,8 @@
import { createLogger } from '@sim/logger'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { checkServerSideUsageLimits } from '@/lib/billing/calculations/usage-monitor'
import { checkInternalApiKey } from '@/lib/copilot/utils'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('CopilotApiKeysValidate')

View File

@@ -1,9 +1,9 @@
import { db } from '@sim/db'
import { settings } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { getSession } from '@/lib/auth'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('CopilotAutoAllowedToolsAPI')

View File

@@ -1,10 +1,10 @@
import { db } from '@sim/db'
import { copilotChats } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { getSession } from '@/lib/auth'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('DeleteChatAPI')

View File

@@ -1,6 +1,5 @@
import { db } from '@sim/db'
import { copilotChats } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, desc, eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
@@ -18,6 +17,7 @@ import {
import { getCredentialsServerTool } from '@/lib/copilot/tools/server/user/get-credentials'
import type { CopilotProviderConfig } from '@/lib/copilot/types'
import { env } from '@/lib/core/config/env'
import { createLogger } from '@/lib/logs/console/logger'
import { CopilotFiles } from '@/lib/uploads'
import { createFileContent } from '@/lib/uploads/utils/file-utils'
import { tools } from '@/tools/registry'

View File

@@ -1,6 +1,5 @@
import { db } from '@sim/db'
import { copilotChats } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
@@ -11,6 +10,7 @@ import {
createRequestTracker,
createUnauthorizedResponse,
} from '@/lib/copilot/request-helpers'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('CopilotChatUpdateAPI')

View File

@@ -5,11 +5,11 @@
import { db } from '@sim/db'
import { copilotChats } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { getSession } from '@/lib/auth'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('UpdateChatTitleAPI')

View File

@@ -1,6 +1,5 @@
import { db } from '@sim/db'
import { copilotChats } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { desc, eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import {
@@ -8,6 +7,7 @@ import {
createInternalServerErrorResponse,
createUnauthorizedResponse,
} from '@/lib/copilot/request-helpers'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('CopilotChatsListAPI')

View File

@@ -1,6 +1,5 @@
import { db } from '@sim/db'
import { workflowCheckpoints, workflow as workflowTable } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
@@ -12,6 +11,7 @@ import {
createUnauthorizedResponse,
} from '@/lib/copilot/request-helpers'
import { getBaseUrl } from '@/lib/core/utils/urls'
import { createLogger } from '@/lib/logs/console/logger'
import { isUuidV4 } from '@/executor/constants'
const logger = createLogger('CheckpointRevertAPI')

View File

@@ -1,6 +1,5 @@
import { db } from '@sim/db'
import { copilotChats, workflowCheckpoints } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, desc, eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
@@ -11,6 +10,7 @@ import {
createRequestTracker,
createUnauthorizedResponse,
} from '@/lib/copilot/request-helpers'
import { createLogger } from '@/lib/logs/console/logger'
const logger = createLogger('WorkflowCheckpointsAPI')

Some files were not shown because too many files have changed in this diff Show More