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
1402 changed files with 9927 additions and 12410 deletions

View File

@@ -23,17 +23,16 @@ jobs:
with:
node-version: latest
- name: Mount Bun cache (Sticky Disk)
uses: useblacksmith/stickydisk@v1
- name: Cache Bun dependencies
uses: actions/cache@v4
with:
key: ${{ github.repository }}-bun-cache
path: ~/.bun/install/cache
- name: Mount node_modules (Sticky Disk)
uses: useblacksmith/stickydisk@v1
with:
key: ${{ github.repository }}-node-modules
path: ./node_modules
path: |
~/.bun/install/cache
node_modules
**/node_modules
key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }}
restore-keys: |
${{ runner.os }}-bun-
- name: Install dependencies
run: bun install --frozen-lockfile

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'>
@@ -4344,16 +4331,3 @@ export function CirclebackIcon(props: SVGProps<SVGSVGElement>) {
</svg>
)
}
export function GreptileIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg {...props} viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path
clipRule='evenodd'
fillRule='evenodd'
fill='#44A775'
d='M3.353.004a6.074 6.074 0 01-.265.045C2.63.12 2.092.348 1.71.633 1.426.846.717 1.575.557 1.819a3.359 3.359 0 00-.23 3.296c.154.322.35.59.71.972.187.198.434.486.55.64a6.629 6.629 0 011.305 3.546c.01.138.035 1.607.057 3.264.043 3.273.038 3.18.203 3.485.266.494.94.79 1.474.648.29-.077.463-.204 1.353-.986.957-.84 1.092-.932 1.446-.98.124-.017.631 0 1.66.053 1.513.08 1.622.079 1.85-.016.393-.164.539-.4.661-1.074.247-1.36 1.296-2.56 2.64-3.022.116-.04.373-.104.572-.144.198-.04.426-.102.506-.138.296-.136.515-.424.566-.744.017-.11-.007-.549-.089-1.602-.091-1.179-.107-1.483-.083-1.621.057-.342.139-.46 1.01-1.448.447-.506.85-.976.895-1.043.262-.39.288-.91.068-1.345a1.44 1.44 0 00-.822-.67c-.1-.029-.834-.037-3.544-.038H9.897l-.335-.063c-.958-.179-1.765-.49-2.484-.958-.362-.236-.583-.41-1.018-.804-.408-.37-.59-.502-.921-.67A3.018 3.018 0 003.744.005a3.942 3.942 0 00-.391 0zm15.728 5.858c-.132.049-.217.127-.48.44-.592.707-.74 1.336-.531 2.256.106.466.163.572.361.673.105.054.169.055 2.637.046l2.53-.009.118-.063a.551.551 0 00.095-.895 184.88 184.88 0 00-2.223-1.254c-2.293-1.282-2.281-1.276-2.507-1.194zm-3.216 6.71a9.258 9.258 0 00-1.364.696c-.844.557-1.454 1.36-1.923 2.53-.211.525-.202.75.04.935.111.087 6.478 3.14 6.667 3.198.153.047.27.027.43-.074a.538.538 0 00.24-.434c0-.06-.03-.18-.065-.264-.156-.368-3.098-6.467-3.158-6.545-.168-.222-.394-.232-.867-.042zm-8.48 5.457c-.453.102-.83.32-1.285.745-.296.277-.336.468-.167.798.053.103.61 1.104 1.236 2.224 1.297 2.317 1.22 2.206 1.558 2.202.152-.002.198-.015.296-.084a.662.662 0 00.173-.193c.058-.11.06-.152.08-2.595.018-1.93.015-2.51-.011-2.606a.569.569 0 00-.138-.227c-.09-.091-.14-.112-.406-.176-.582-.138-.992-.165-1.336-.088z'
/>
</svg>
)
}

View File

@@ -42,7 +42,6 @@ import {
GoogleVaultIcon,
GrafanaIcon,
GrainIcon,
GreptileIcon,
HubspotIcon,
HuggingFaceIcon,
HunterIOIcon,
@@ -159,7 +158,6 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
google_vault: GoogleVaultIcon,
grafana: GrafanaIcon,
grain: GrainIcon,
greptile: GreptileIcon,
hubspot: HubspotIcon,
huggingface: HuggingFaceIcon,
hunter: HunterIOIcon,

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

@@ -1,136 +0,0 @@
---
title: Greptile
description: KI-gestützte Codebase-Suche und Fragen & Antworten
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="greptile"
color="#e5e5e5"
/>
{/* MANUAL-CONTENT-START:intro */}
[Greptile](https://greptile.com/) ist ein KI-gestütztes Entwicklertool zum Durchsuchen und Abfragen von Quellcode über ein oder mehrere Repositories hinweg. Greptile ermöglicht es Entwicklern, komplexe Fragen zur Codebase schnell in natürlicher Sprache zu beantworten, relevante Dateien oder Symbole zu finden und Einblicke in unbekannten oder Legacy-Code zu gewinnen.
Mit Greptile können Sie:
- **Komplexe Fragen zu Ihrer Codebase in natürlicher Sprache stellen**: Erhalten Sie KI-generierte Antworten zu Architektur, Verwendungsmustern oder spezifischen Implementierungen.
- **Relevanten Code, Dateien oder Funktionen sofort finden**: Suchen Sie mit Schlüsselwörtern oder natürlichsprachlichen Abfragen und springen Sie direkt zu passenden Zeilen, Dateien oder Codeblöcken.
- **Abhängigkeiten und Beziehungen verstehen**: Entdecken Sie, wo Funktionen aufgerufen werden, wie Module miteinander verbunden sind oder wo APIs in großen Codebasen verwendet werden.
- **Onboarding und Code-Exploration beschleunigen**: Arbeiten Sie sich schnell in neue Projekte ein oder debuggen Sie knifflige Probleme, ohne tiefgreifenden Vorkontext zu benötigen.
Die Sim Greptile-Integration ermöglicht es Ihren KI-Agenten:
- Private und öffentliche Repositories mithilfe der fortschrittlichen Sprachmodelle von Greptile abzufragen und zu durchsuchen.
- Kontextuell relevante Code-Snippets, Dateiverweise und Erklärungen abzurufen, um Code-Reviews, Dokumentation und Entwicklungsworkflows zu unterstützen.
- Automatisierungen in Sim-Workflows basierend auf Such-/Abfrageergebnissen auszulösen oder Code-Intelligenz direkt in Ihre Prozesse einzubetten.
Egal, ob Sie die Produktivität von Entwicklern beschleunigen, Dokumentation automatisieren oder das Verständnis Ihres Teams für eine komplexe Codebase verbessern möchten Greptile und Sim bieten nahtlosen Zugriff auf Code-Intelligenz und Suche, genau dort, wo Sie sie benötigen.
{/* MANUAL-CONTENT-END */}
## Nutzungsanleitung
Fragen Sie Codebasen mit natürlicher Sprache über Greptile ab und durchsuchen Sie sie. Erhalten Sie KI-generierte Antworten zu Ihrem Code, finden Sie relevante Dateien und verstehen Sie komplexe Codebasen.
## Tools
### `greptile_query`
Durchsuchen Sie Repositories in natürlicher Sprache und erhalten Sie Antworten mit relevanten Code-Referenzen. Greptile nutzt KI, um Ihre Codebasis zu verstehen und Fragen zu beantworten.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `query` | string | Ja | Frage in natürlicher Sprache zur Codebasis |
| `repositories` | string | Ja | Kommagetrennte Liste von Repositories. Format: "github:branch:owner/repo" oder nur "owner/repo" \(Standard ist github:main\) |
| `sessionId` | string | Nein | Sitzungs-ID für Gesprächskontinuität |
| `genius` | boolean | Nein | Genius-Modus für gründlichere Analyse aktivieren \(langsamer, aber genauer\) |
| `apiKey` | string | Ja | Greptile-API-Schlüssel |
| `githubToken` | string | Ja | GitHub Personal Access Token mit Lesezugriff auf Repositories |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | KI-generierte Antwort auf die Anfrage |
| `sources` | array | Relevante Code-Referenzen, die die Antwort unterstützen |
### `greptile_search`
Durchsuchen Sie Repositories in natürlicher Sprache und erhalten Sie relevante Code-Referenzen ohne Generierung einer Antwort. Nützlich zum Auffinden spezifischer Code-Stellen.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `query` | string | Ja | Suchanfrage in natürlicher Sprache zum Auffinden relevanten Codes |
| `repositories` | string | Ja | Kommagetrennte Liste von Repositories. Format: "github:branch:owner/repo" oder nur "owner/repo" \(Standard ist github:main\) |
| `sessionId` | string | Nein | Sitzungs-ID für Gesprächskontinuität |
| `genius` | boolean | Nein | Genius-Modus für gründlichere Suche aktivieren \(langsamer, aber genauer\) |
| `apiKey` | string | Ja | Greptile-API-Schlüssel |
| `githubToken` | string | Ja | GitHub Personal Access Token mit Lesezugriff auf Repositories |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `sources` | array | Relevante Code-Referenzen, die zur Suchanfrage passen |
### `greptile_index_repo`
Übermitteln Sie ein Repository zur Indexierung durch Greptile. Die Indexierung muss abgeschlossen sein, bevor das Repository abgefragt werden kann. Kleine Repositories benötigen 3-5 Minuten, größere können über eine Stunde dauern.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `remote` | string | Ja | Git-Remote-Typ: github oder gitlab |
| `repository` | string | Ja | Repository im Format owner/repo \(z. B. "facebook/react"\) |
| `branch` | string | Ja | Zu indexierender Branch \(z. B. "main" oder "master"\) |
| `reload` | boolean | Nein | Neuindexierung erzwingen, auch wenn bereits indexiert |
| `notify` | boolean | Nein | E-Mail-Benachrichtigung senden, wenn Indexierung abgeschlossen ist |
| `apiKey` | string | Ja | Greptile-API-Schlüssel |
| `githubToken` | string | Ja | GitHub Personal Access Token mit Lesezugriff auf Repository |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `repositoryId` | string | Eindeutige Kennung für das indexierte Repository \(Format: remote:branch:owner/repo\) |
| `statusEndpoint` | string | URL-Endpunkt zur Überprüfung des Indexierungsstatus |
| `message` | string | Statusmeldung über den Indexierungsvorgang |
### `greptile_status`
Überprüfen Sie den Indexierungsstatus eines Repositories. Verwenden Sie dies, um zu verifizieren, ob ein Repository abfragebereit ist, oder um den Indexierungsfortschritt zu überwachen.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `remote` | string | Ja | Git-Remote-Typ: github oder gitlab |
| `repository` | string | Ja | Repository im Format owner/repo \(z. B. "facebook/react"\) |
| `branch` | string | Ja | Branch-Name \(z. B. "main" oder "master"\) |
| `apiKey` | string | Ja | Greptile-API-Schlüssel |
| `githubToken` | string | Ja | GitHub Personal Access Token mit Lesezugriff auf das Repository |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `repository` | string | Repository-Name \(owner/repo\) |
| `remote` | string | Git-Remote \(github/gitlab\) |
| `branch` | string | Branch-Name |
| `private` | boolean | Ob das Repository privat ist |
| `status` | string | Indexierungsstatus: submitted, cloning, processing, completed oder failed |
| `filesProcessed` | number | Anzahl der bisher verarbeiteten Dateien |
| `numFiles` | number | Gesamtanzahl der Dateien im Repository |
| `sampleQuestions` | array | Beispielfragen für das indexierte Repository |
| `sha` | string | Git-Commit-SHA der indexierten Version |
## Hinweise
- Kategorie: `tools`
- Typ: `greptile`

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

@@ -1,141 +0,0 @@
---
title: Greptile
description: AI-powered codebase search and Q&A
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="greptile"
color="#e5e5e5"
/>
{/* MANUAL-CONTENT-START:intro */}
[Greptile](https://greptile.com/) is an AI-powered developer tool for searching and querying source code across one or more repositories. Greptile enables engineers to quickly answer complex codebase questions in natural language, locate relevant files or symbols, and gain insights into unfamiliar or legacy code.
With Greptile, you can:
- **Ask complex questions about your codebase in natural language**: Get AI-generated answers about architecture, usage patterns, or specific implementations.
- **Find relevant code, files, or functions instantly**: Search using keywords or natural language queries and jump right to matching lines, files, or code blocks.
- **Understand dependencies and relationships**: Uncover where functions are called, how modules are related, or where APIs are used across large codebases.
- **Accelerate onboarding and code exploration**: Quickly ramp up on new projects or debug tricky issues without needing deep prior context.
The Sim Greptile integration allows your AI agents to:
- Query and search private and public repositories using Greptiles advanced language models.
- Retrieve contextually relevant code snippets, file references, and explanations to support code review, documentation, and development workflows.
- Trigger automations in Sim workflows based on search/query results or embed code intelligence directly into your processes.
Whether youre trying to accelerate developer productivity, automate documentation, or supercharge your teams understanding of a complex codebase, Greptile and Sim provide seamless access to code intelligence and search—right where you need it.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Query and search codebases using natural language with Greptile. Get AI-generated answers about your code, find relevant files, and understand complex codebases.
## Tools
### `greptile_query`
Query repositories in natural language and get answers with relevant code references. Greptile uses AI to understand your codebase and answer questions.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `query` | string | Yes | Natural language question about the codebase |
| `repositories` | string | Yes | Comma-separated list of repositories. Format: "github:branch:owner/repo" or just "owner/repo" \(defaults to github:main\) |
| `sessionId` | string | No | Session ID for conversation continuity |
| `genius` | boolean | No | Enable genius mode for more thorough analysis \(slower but more accurate\) |
| `apiKey` | string | Yes | Greptile API key |
| `githubToken` | string | Yes | GitHub Personal Access Token with repo read access |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | AI-generated answer to the query |
| `sources` | array | Relevant code references that support the answer |
### `greptile_search`
Search repositories in natural language and get relevant code references without generating an answer. Useful for finding specific code locations.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `query` | string | Yes | Natural language search query to find relevant code |
| `repositories` | string | Yes | Comma-separated list of repositories. Format: "github:branch:owner/repo" or just "owner/repo" \(defaults to github:main\) |
| `sessionId` | string | No | Session ID for conversation continuity |
| `genius` | boolean | No | Enable genius mode for more thorough search \(slower but more accurate\) |
| `apiKey` | string | Yes | Greptile API key |
| `githubToken` | string | Yes | GitHub Personal Access Token with repo read access |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `sources` | array | Relevant code references matching the search query |
### `greptile_index_repo`
Submit a repository to be indexed by Greptile. Indexing must complete before the repository can be queried. Small repos take 3-5 minutes, larger ones can take over an hour.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `remote` | string | Yes | Git remote type: github or gitlab |
| `repository` | string | Yes | Repository in owner/repo format \(e.g., "facebook/react"\) |
| `branch` | string | Yes | Branch to index \(e.g., "main" or "master"\) |
| `reload` | boolean | No | Force re-indexing even if already indexed |
| `notify` | boolean | No | Send email notification when indexing completes |
| `apiKey` | string | Yes | Greptile API key |
| `githubToken` | string | Yes | GitHub Personal Access Token with repo read access |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `repositoryId` | string | Unique identifier for the indexed repository \(format: remote:branch:owner/repo\) |
| `statusEndpoint` | string | URL endpoint to check indexing status |
| `message` | string | Status message about the indexing operation |
### `greptile_status`
Check the indexing status of a repository. Use this to verify if a repository is ready to be queried or to monitor indexing progress.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `remote` | string | Yes | Git remote type: github or gitlab |
| `repository` | string | Yes | Repository in owner/repo format \(e.g., "facebook/react"\) |
| `branch` | string | Yes | Branch name \(e.g., "main" or "master"\) |
| `apiKey` | string | Yes | Greptile API key |
| `githubToken` | string | Yes | GitHub Personal Access Token with repo read access |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `repository` | string | Repository name \(owner/repo\) |
| `remote` | string | Git remote \(github/gitlab\) |
| `branch` | string | Branch name |
| `private` | boolean | Whether the repository is private |
| `status` | string | Indexing status: submitted, cloning, processing, completed, or failed |
| `filesProcessed` | number | Number of files processed so far |
| `numFiles` | number | Total number of files in the repository |
| `sampleQuestions` | array | Sample questions for the indexed repository |
| `sha` | string | Git commit SHA of the indexed version |
## Notes
- Category: `tools`
- Type: `greptile`

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

@@ -37,7 +37,6 @@
"google_vault",
"grafana",
"grain",
"greptile",
"hubspot",
"huggingface",
"hunter",

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

@@ -1,136 +0,0 @@
---
title: Greptile
description: Búsqueda de código base y preguntas y respuestas con IA
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="greptile"
color="#e5e5e5"
/>
{/* MANUAL-CONTENT-START:intro */}
[Greptile](https://greptile.com/) es una herramienta de desarrollo impulsada por IA para buscar y consultar código fuente en uno o más repositorios. Greptile permite a los ingenieros responder rápidamente preguntas complejas sobre el código base en lenguaje natural, localizar archivos o símbolos relevantes y obtener información sobre código desconocido o heredado.
Con Greptile, puedes:
- **Hacer preguntas complejas sobre tu código base en lenguaje natural**: Obtén respuestas generadas por IA sobre arquitectura, patrones de uso o implementaciones específicas.
- **Encontrar código, archivos o funciones relevantes al instante**: Busca usando palabras clave o consultas en lenguaje natural y ve directamente a las líneas, archivos o bloques de código coincidentes.
- **Comprender dependencias y relaciones**: Descubre dónde se llaman las funciones, cómo se relacionan los módulos o dónde se usan las API en grandes bases de código.
- **Acelerar la incorporación y exploración de código**: Ponte al día rápidamente en nuevos proyectos o depura problemas complicados sin necesitar un contexto previo profundo.
La integración de Sim Greptile permite a tus agentes de IA:
- Consultar y buscar repositorios privados y públicos usando los modelos de lenguaje avanzados de Greptile.
- Recuperar fragmentos de código contextualmente relevantes, referencias de archivos y explicaciones para apoyar la revisión de código, documentación y flujos de trabajo de desarrollo.
- Activar automatizaciones en flujos de trabajo de Sim basadas en resultados de búsqueda/consulta o integrar inteligencia de código directamente en tus procesos.
Ya sea que estés tratando de acelerar la productividad del desarrollador, automatizar la documentación o potenciar la comprensión de tu equipo sobre un código base complejo, Greptile y Sim proporcionan acceso fluido a la inteligencia y búsqueda de código, justo donde lo necesitas.
{/* MANUAL-CONTENT-END */}
## Instrucciones de uso
Consulta y busca en bases de código usando lenguaje natural con Greptile. Obtén respuestas generadas por IA sobre tu código, encuentra archivos relevantes y comprende bases de código complejas.
## Herramientas
### `greptile_query`
Consulta repositorios en lenguaje natural y obtén respuestas con referencias de código relevantes. Greptile utiliza IA para comprender tu código base y responder preguntas.
#### Entrada
| Parámetro | Tipo | Requerido | Descripción |
| --------- | ---- | -------- | ----------- |
| `query` | string | Sí | Pregunta en lenguaje natural sobre el código base |
| `repositories` | string | Sí | Lista de repositorios separados por comas. Formato: "github:branch:owner/repo" o simplemente "owner/repo" \(por defecto github:main\) |
| `sessionId` | string | No | ID de sesión para continuidad de la conversación |
| `genius` | boolean | No | Activar modo genius para un análisis más exhaustivo \(más lento pero más preciso\) |
| `apiKey` | string | Sí | Clave API de Greptile |
| `githubToken` | string | Sí | Token de acceso personal de GitHub con acceso de lectura al repositorio |
#### Salida
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Respuesta generada por IA a la consulta |
| `sources` | array | Referencias de código relevantes que respaldan la respuesta |
### `greptile_search`
Busca en repositorios en lenguaje natural y obtén referencias de código relevantes sin generar una respuesta. Útil para encontrar ubicaciones específicas de código.
#### Entrada
| Parámetro | Tipo | Requerido | Descripción |
| --------- | ---- | -------- | ----------- |
| `query` | string | Sí | Consulta de búsqueda en lenguaje natural para encontrar código relevante |
| `repositories` | string | Sí | Lista de repositorios separados por comas. Formato: "github:branch:owner/repo" o simplemente "owner/repo" \(por defecto github:main\) |
| `sessionId` | string | No | ID de sesión para continuidad de la conversación |
| `genius` | boolean | No | Activar modo genius para una búsqueda más exhaustiva \(más lento pero más preciso\) |
| `apiKey` | string | Sí | Clave API de Greptile |
| `githubToken` | string | Sí | Token de acceso personal de GitHub con acceso de lectura al repositorio |
#### Salida
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `sources` | array | Referencias de código relevantes que coinciden con la consulta de búsqueda |
### `greptile_index_repo`
Envía un repositorio para ser indexado por Greptile. La indexación debe completarse antes de que el repositorio pueda ser consultado. Los repositorios pequeños tardan de 3 a 5 minutos, los más grandes pueden tardar más de una hora.
#### Entrada
| Parámetro | Tipo | Requerido | Descripción |
| --------- | ---- | -------- | ----------- |
| `remote` | string | Sí | Tipo de remoto Git: github o gitlab |
| `repository` | string | Sí | Repositorio en formato propietario/repo \(ej., "facebook/react"\) |
| `branch` | string | Sí | Rama a indexar \(ej., "main" o "master"\) |
| `reload` | boolean | No | Forzar re-indexación incluso si ya está indexado |
| `notify` | boolean | No | Enviar notificación por correo electrónico cuando se complete la indexación |
| `apiKey` | string | Sí | Clave API de Greptile |
| `githubToken` | string | Sí | Token de acceso personal de GitHub con acceso de lectura al repositorio |
#### Salida
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `repositoryId` | string | Identificador único para el repositorio indexado \(formato: remoto:rama:propietario/repo\) |
| `statusEndpoint` | string | URL del endpoint para verificar el estado de indexación |
| `message` | string | Mensaje de estado sobre la operación de indexación |
### `greptile_status`
Verifica el estado de indexación de un repositorio. Usa esto para verificar si un repositorio está listo para ser consultado o para monitorear el progreso de indexación.
#### Entrada
| Parámetro | Tipo | Requerido | Descripción |
| --------- | ---- | -------- | ----------- |
| `remote` | string | Sí | Tipo de remoto Git: github o gitlab |
| `repository` | string | Sí | Repositorio en formato propietario/repo \(ej., "facebook/react"\) |
| `branch` | string | Sí | Nombre de la rama \(ej., "main" o "master"\) |
| `apiKey` | string | Sí | Clave API de Greptile |
| `githubToken` | string | Sí | Token de acceso personal de GitHub con acceso de lectura al repositorio |
#### Salida
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `repository` | string | Nombre del repositorio \(propietario/repo\) |
| `remote` | string | Remoto Git \(github/gitlab\) |
| `branch` | string | Nombre de la rama |
| `private` | boolean | Si el repositorio es privado |
| `status` | string | Estado de indexación: submitted, cloning, processing, completed o failed |
| `filesProcessed` | number | Número de archivos procesados hasta el momento |
| `numFiles` | number | Número total de archivos en el repositorio |
| `sampleQuestions` | array | Preguntas de ejemplo para el repositorio indexado |
| `sha` | string | SHA del commit Git de la versión indexada |
## Notas
- Categoría: `tools`
- Tipo: `greptile`

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

@@ -1,136 +0,0 @@
---
title: Greptile
description: Recherche de base de code et questions-réponses alimentées par l'IA
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="greptile"
color="#e5e5e5"
/>
{/* MANUAL-CONTENT-START:intro */}
[Greptile](https://greptile.com/) est un outil de développement alimenté par l'IA pour rechercher et interroger le code source dans un ou plusieurs dépôts. Greptile permet aux ingénieurs de répondre rapidement à des questions complexes sur la base de code en langage naturel, de localiser des fichiers ou symboles pertinents et d'obtenir des informations sur du code inconnu ou hérité.
Avec Greptile, vous pouvez :
- **Poser des questions complexes sur votre base de code en langage naturel** : obtenez des réponses générées par l'IA sur l'architecture, les modèles d'utilisation ou des implémentations spécifiques.
- **Trouver instantanément du code, des fichiers ou des fonctions pertinents** : recherchez à l'aide de mots-clés ou de requêtes en langage naturel et accédez directement aux lignes, fichiers ou blocs de code correspondants.
- **Comprendre les dépendances et les relations** : découvrez où les fonctions sont appelées, comment les modules sont liés ou où les API sont utilisées dans de grandes bases de code.
- **Accélérer l'intégration et l'exploration du code** : montez rapidement en compétence sur de nouveaux projets ou déboguez des problèmes complexes sans avoir besoin d'un contexte préalable approfondi.
L'intégration Sim Greptile permet à vos agents IA de :
- Interroger et rechercher des dépôts privés et publics en utilisant les modèles de langage avancés de Greptile.
- Récupérer des extraits de code contextuellement pertinents, des références de fichiers et des explications pour soutenir la revue de code, la documentation et les flux de travail de développement.
- Déclencher des automatisations dans les workflows Sim en fonction des résultats de recherche/requête ou intégrer l'intelligence du code directement dans vos processus.
Que vous cherchiez à accélérer la productivité des développeurs, à automatiser la documentation ou à renforcer la compréhension de votre équipe d'une base de code complexe, Greptile et Sim offrent un accès transparent à l'intelligence et à la recherche de code, exactement là où vous en avez besoin.
{/* MANUAL-CONTENT-END */}
## Instructions d'utilisation
Interrogez et recherchez des bases de code en langage naturel avec Greptile. Obtenez des réponses générées par l'IA sur votre code, trouvez des fichiers pertinents et comprenez des bases de code complexes.
## Outils
### `greptile_query`
Interrogez les dépôts en langage naturel et obtenez des réponses avec des références de code pertinentes. Greptile utilise l'IA pour comprendre votre base de code et répondre aux questions.
#### Entrée
| Paramètre | Type | Requis | Description |
| --------- | ---- | -------- | ----------- |
| `query` | string | Oui | Question en langage naturel sur la base de code |
| `repositories` | string | Oui | Liste de dépôts séparés par des virgules. Format : "github:branch:owner/repo" ou simplement "owner/repo" \(par défaut github:main\) |
| `sessionId` | string | Non | ID de session pour la continuité de la conversation |
| `genius` | boolean | Non | Activer le mode genius pour une analyse plus approfondie \(plus lent mais plus précis\) |
| `apiKey` | string | Oui | Clé API Greptile |
| `githubToken` | string | Oui | Jeton d'accès personnel GitHub avec accès en lecture au dépôt |
#### Sortie
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Réponse générée par l'IA à la requête |
| `sources` | array | Références de code pertinentes qui appuient la réponse |
### `greptile_search`
Recherchez dans les dépôts en langage naturel et obtenez des références de code pertinentes sans générer de réponse. Utile pour trouver des emplacements de code spécifiques.
#### Entrée
| Paramètre | Type | Requis | Description |
| --------- | ---- | -------- | ----------- |
| `query` | string | Oui | Requête de recherche en langage naturel pour trouver du code pertinent |
| `repositories` | string | Oui | Liste de dépôts séparés par des virgules. Format : "github:branch:owner/repo" ou simplement "owner/repo" \(par défaut github:main\) |
| `sessionId` | string | Non | ID de session pour la continuité de la conversation |
| `genius` | boolean | Non | Activer le mode genius pour une recherche plus approfondie \(plus lent mais plus précis\) |
| `apiKey` | string | Oui | Clé API Greptile |
| `githubToken` | string | Oui | Jeton d'accès personnel GitHub avec accès en lecture au dépôt |
#### Sortie
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `sources` | array | Références de code pertinentes correspondant à la requête de recherche |
### `greptile_index_repo`
Soumettre un dépôt pour qu'il soit indexé par Greptile. L'indexation doit être terminée avant que le dépôt puisse être interrogé. Les petits dépôts prennent 3 à 5 minutes, les plus grands peuvent prendre plus d'une heure.
#### Entrée
| Paramètre | Type | Requis | Description |
| --------- | ---- | -------- | ----------- |
| `remote` | string | Oui | Type de dépôt distant : github ou gitlab |
| `repository` | string | Oui | Dépôt au format propriétaire/dépôt \(par exemple, "facebook/react"\) |
| `branch` | string | Oui | Branche à indexer \(par exemple, "main" ou "master"\) |
| `reload` | boolean | Non | Forcer la réindexation même si déjà indexé |
| `notify` | boolean | Non | Envoyer une notification par e-mail lorsque l'indexation est terminée |
| `apiKey` | string | Oui | Clé API Greptile |
| `githubToken` | string | Oui | Jeton d'accès personnel GitHub avec accès en lecture au dépôt |
#### Sortie
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `repositoryId` | string | Identifiant unique du dépôt indexé \(format : distant:branche:propriétaire/dépôt\) |
| `statusEndpoint` | string | Point de terminaison URL pour vérifier l'état de l'indexation |
| `message` | string | Message d'état concernant l'opération d'indexation |
### `greptile_status`
Vérifier l'état d'indexation d'un dépôt. Utilisez ceci pour vérifier si un dépôt est prêt à être interrogé ou pour surveiller la progression de l'indexation.
#### Entrée
| Paramètre | Type | Requis | Description |
| --------- | ---- | -------- | ----------- |
| `remote` | string | Oui | Type de dépôt distant Git : github ou gitlab |
| `repository` | string | Oui | Dépôt au format propriétaire/dépôt \(par ex., "facebook/react"\) |
| `branch` | string | Oui | Nom de la branche \(par ex., "main" ou "master"\) |
| `apiKey` | string | Oui | Clé API Greptile |
| `githubToken` | string | Oui | Jeton d'accès personnel GitHub avec accès en lecture au dépôt |
#### Sortie
| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `repository` | string | Nom du dépôt \(propriétaire/dépôt\) |
| `remote` | string | Dépôt distant Git \(github/gitlab\) |
| `branch` | string | Nom de la branche |
| `private` | boolean | Indique si le dépôt est privé |
| `status` | string | Statut d'indexation : submitted, cloning, processing, completed ou failed |
| `filesProcessed` | number | Nombre de fichiers traités jusqu'à présent |
| `numFiles` | number | Nombre total de fichiers dans le dépôt |
| `sampleQuestions` | array | Exemples de questions pour le dépôt indexé |
| `sha` | string | SHA du commit Git de la version indexée |
## Remarques
- Catégorie : `tools`
- Type : `greptile`

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

@@ -1,136 +0,0 @@
---
title: Greptile
description: AI搭載のコードベース検索とQ&A
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="greptile"
color="#e5e5e5"
/>
{/* MANUAL-CONTENT-START:intro */}
[Greptile](https://greptile.com/)は、1つまたは複数のリポジトリにわたってソースコードを検索およびクエリするためのAI搭載開発者ツールです。Greptileを使用すると、エンジニアは自然言語で複雑なコードベースの質問に素早く回答し、関連するファイルやシンボルを見つけ、馴染みのないコードやレガシーコードについての洞察を得ることができます。
Greptileでできること:
- **自然言語でコードベースについて複雑な質問をする**: アーキテクチャ、使用パターン、または特定の実装についてAIが生成した回答を取得します。
- **関連するコード、ファイル、または関数を即座に見つける**: キーワードまたは自然言語クエリを使用して検索し、一致する行、ファイル、またはコードブロックに直接ジャンプします。
- **依存関係と関連性を理解する**: 大規模なコードベース全体で、関数がどこで呼び出されているか、モジュールがどのように関連しているか、またはAPIがどこで使用されているかを明らかにします。
- **オンボーディングとコード探索を加速する**: 深い事前知識がなくても、新しいプロジェクトを素早く立ち上げたり、厄介な問題をデバッグしたりできます。
Sim Greptile統合により、AIエージェントは次のことが可能になります:
- Greptileの高度な言語モデルを使用して、プライベートおよびパブリックリポジトリをクエリおよび検索します。
- コンテキストに関連するコードスニペット、ファイル参照、および説明を取得して、コードレビュー、ドキュメント、および開発ワークフローをサポートします。
- 検索/クエリ結果に基づいてSimワークフローで自動化をトリガーするか、コードインテリジェンスをプロセスに直接埋め込みます。
開発者の生産性を加速したり、ドキュメントを自動化したり、複雑なコードベースに対するチームの理解を強化したりする場合でも、GreptileとSimは、必要な場所でコードインテリジェンスと検索へのシームレスなアクセスを提供します。
{/* MANUAL-CONTENT-END */}
## 使用方法
Greptileを使用して自然言語でコードベースをクエリおよび検索します。コードについてAIが生成した回答を取得し、関連するファイルを見つけ、複雑なコードベースを理解します。
## ツール
### `greptile_query`
自然言語でリポジトリを検索し、関連するコード参照とともに回答を取得します。Greptileは、AIを使用してコードベースを理解し、質問に答えます。
#### 入力
| パラメータ | 型 | 必須 | 説明 |
| --------- | ---- | -------- | ----------- |
| `query` | string | はい | コードベースに関する自然言語の質問 |
| `repositories` | string | はい | カンマ区切りのリポジトリリスト。形式:「github:branch:owner/repo」または「owner/repo」のみ(デフォルトはgithub:main) |
| `sessionId` | string | いいえ | 会話の継続性を保つためのセッションID |
| `genius` | boolean | いいえ | より徹底的な分析のためのジーニアスモードを有効化(遅いがより正確) |
| `apiKey` | string | はい | Greptile APIキー |
| `githubToken` | string | はい | リポジトリ読み取りアクセス権を持つGitHub個人アクセストークン |
#### 出力
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `message` | string | クエリに対するAI生成の回答 |
| `sources` | array | 回答を裏付ける関連コード参照 |
### `greptile_search`
自然言語でリポジトリを検索し、回答を生成せずに関連するコード参照を取得します。特定のコードの場所を見つけるのに便利です。
#### 入力
| パラメータ | 型 | 必須 | 説明 |
| --------- | ---- | -------- | ----------- |
| `query` | string | はい | 関連するコードを見つけるための自然言語検索クエリ |
| `repositories` | string | はい | カンマ区切りのリポジトリリスト。形式:「github:branch:owner/repo」または「owner/repo」のみ(デフォルトはgithub:main) |
| `sessionId` | string | いいえ | 会話の継続性を保つためのセッションID |
| `genius` | boolean | いいえ | より徹底的な検索のためのジーニアスモードを有効化(遅いがより正確) |
| `apiKey` | string | はい | Greptile APIキー |
| `githubToken` | string | はい | リポジトリ読み取りアクセス権を持つGitHub個人アクセストークン |
#### 出力
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `sources` | array | 検索クエリに一致する関連コード参照 |
### `greptile_index_repo`
Greptileでインデックス化するリポジトリを送信します。リポジトリをクエリする前に、インデックス化を完了する必要があります。小規模なリポジトリは3〜5分、大規模なものは1時間以上かかる場合があります。
#### 入力
| パラメータ | 型 | 必須 | 説明 |
| --------- | ---- | -------- | ----------- |
| `remote` | string | はい | Gitリモートタイプ: githubまたはgitlab |
| `repository` | string | はい | owner/repo形式のリポジトリ例:「facebook/react」 |
| `branch` | string | はい | インデックス化するブランチ(例:「main」または「master」 |
| `reload` | boolean | いいえ | すでにインデックス化されている場合でも強制的に再インデックス化 |
| `notify` | boolean | いいえ | インデックス化完了時にメール通知を送信 |
| `apiKey` | string | はい | Greptile APIキー |
| `githubToken` | string | はい | リポジトリ読み取りアクセス権を持つGitHub Personal Access Token |
#### 出力
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `repositoryId` | string | インデックス化されたリポジトリの一意の識別子(形式: remote:branch:owner/repo |
| `statusEndpoint` | string | インデックス化ステータスを確認するためのURLエンドポイント |
| `message` | string | インデックス化操作に関するステータスメッセージ |
### `greptile_status`
リポジトリのインデックス化ステータスを確認します。リポジトリがクエリ可能な状態かどうかを確認したり、インデックス化の進行状況を監視したりするために使用します。
#### 入力
| パラメータ | 型 | 必須 | 説明 |
| --------- | ---- | -------- | ----------- |
| `remote` | string | はい | Gitリモートタイプ: githubまたはgitlab |
| `repository` | string | はい | owner/repo形式のリポジトリ \(例: "facebook/react"\) |
| `branch` | string | はい | ブランチ名 \(例: "main"または"master"\) |
| `apiKey` | string | はい | Greptile APIキー |
| `githubToken` | string | はい | リポジトリ読み取りアクセス権を持つGitHub Personal Access Token |
#### 出力
| パラメータ | 型 | 説明 |
| --------- | ---- | ----------- |
| `repository` | string | リポジトリ名 \(owner/repo\) |
| `remote` | string | Gitリモート \(github/gitlab\) |
| `branch` | string | ブランチ名 |
| `private` | boolean | リポジトリがプライベートかどうか |
| `status` | string | インデックス作成ステータス: submitted、cloning、processing、completed、またはfailed |
| `filesProcessed` | number | これまでに処理されたファイル数 |
| `numFiles` | number | リポジトリ内のファイルの総数 |
| `sampleQuestions` | array | インデックス化されたリポジトリのサンプル質問 |
| `sha` | string | インデックス化されたバージョンのGitコミットSHA |
## 注記
- カテゴリ: `tools`
- タイプ: `greptile`

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

@@ -1,136 +0,0 @@
---
title: Greptile
description: AI 驱动的代码库搜索与问答
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="greptile"
color="#e5e5e5"
/>
{/* MANUAL-CONTENT-START:intro */}
[Greptile](https://greptile.com/) 是一款 AI 驱动的开发者工具可用于在一个或多个代码仓库中搜索和查询源代码。Greptile 让工程师能够用自然语言快速解答复杂的代码库问题,定位相关文件或符号,并深入了解陌生或遗留代码。
使用 Greptile您可以
- **用自然语言就代码库提出复杂问题**:获取关于架构、使用模式或具体实现的 AI 生成答案。
- **即时查找相关代码、文件或函数**:通过关键词或自然语言查询搜索,直接跳转到匹配的行、文件或代码块。
- **理解依赖关系和关联**:发现函数被调用的位置、模块之间的关系,或 API 在大型代码库中的使用情况。
- **加速入职和代码探索**:快速上手新项目,或在无需深厚背景知识的情况下排查棘手问题。
Sim Greptile 集成让您的 AI 代理能够:
- 利用 Greptile 的先进语言模型查询和搜索私有及公共仓库。
- 获取与上下文相关的代码片段、文件引用和解释,支持代码评审、文档编写和开发流程。
- 根据搜索/查询结果在 Sim 工作流中触发自动化,或将代码智能直接嵌入您的流程。
无论您是想提升开发效率、自动化文档还是增强团队对复杂代码库的理解Greptile 与 Sim 都能为您无缝提供代码智能与搜索服务——就在您需要的地方。
{/* MANUAL-CONTENT-END */}
## 使用说明
使用 Greptile 通过自然语言查询和搜索代码库。获取 AI 生成的代码解答,查找相关文件,理解复杂代码库。
## 工具
### `greptile_query`
使用自然语言查询代码仓库并获得带有相关代码引用的答案。Greptile 利用 AI 理解您的代码库并回答问题。
#### 输入
| 参数 | 类型 | 必填 | 描述 |
| --------- | ---- | -------- | ----------- |
| `query` | string | 是 | 关于代码库的自然语言问题 |
| `repositories` | string | 是 | 以逗号分隔的仓库列表。格式:"github:branch:owner/repo" 或 "owner/repo"(默认为 github:main |
| `sessionId` | string | 否 | 用于会话连续性的会话 ID |
| `genius` | boolean | 否 | 启用 genius 模式以进行更深入的分析(速度较慢但更准确) |
| `apiKey` | string | 是 | Greptile API 密钥 |
| `githubToken` | string | 是 | 具有仓库读取权限的 GitHub 个人访问令牌 |
#### 输出
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `message` | string | AI 生成的查询答案 |
| `sources` | array | 支持答案的相关代码引用 |
### `greptile_search`
使用自然语言搜索代码仓库,获取相关代码引用而不生成答案。适用于查找特定代码位置。
#### 输入
| 参数 | 类型 | 必填 | 描述 |
| --------- | ---- | -------- | ----------- |
| `query` | string | 是 | 用于查找相关代码的自然语言搜索查询 |
| `repositories` | string | 是 | 以逗号分隔的仓库列表。格式:"github:branch:owner/repo" 或 "owner/repo"(默认为 github:main |
| `sessionId` | string | 否 | 用于会话连续性的会话 ID |
| `genius` | boolean | 否 | 启用 genius 模式以进行更深入的搜索(速度较慢但更准确) |
| `apiKey` | string | 是 | Greptile API 密钥 |
| `githubToken` | string | 是 | 具有仓库读取权限的 GitHub 个人访问令牌 |
#### 输出
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `sources` | array | 与搜索查询匹配的相关代码引用 |
### `greptile_index_repo`
提交一个仓库以供 Greptile 索引。索引完成后才能对仓库进行查询。小型仓库大约需要 3-5 分钟,大型仓库可能需要一个小时以上。
#### 输入
| 参数 | 类型 | 必填 | 描述 |
| --------- | ---- | ------ | ----------- |
| `remote` | string | 是 | Git 远程类型github 或 gitlab |
| `repository` | string | 是 | 以 owner/repo 格式填写的仓库(例如,"facebook/react" |
| `branch` | string | 是 | 要索引的分支(例如,"main" 或 "master" |
| `reload` | boolean | 否 | 即使已被索引也强制重新索引 |
| `notify` | boolean | 否 | 索引完成后发送邮件通知 |
| `apiKey` | string | 是 | Greptile API 密钥 |
| `githubToken` | string | 是 | 具有仓库读取权限的 GitHub 个人访问令牌 |
#### 输出
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `repositoryId` | string | 已索引仓库的唯一标识符格式remote:branch:owner/repo |
| `statusEndpoint` | string | 用于检查索引状态的 URL 端点 |
| `message` | string | 关于索引操作的状态信息 |
### `greptile_status`
检查仓库的索引状态。可用于验证仓库是否已准备好被查询,或监控索引进度。
#### 输入
| 参数 | 类型 | 必填 | 描述 |
| --------- | ---- | -------- | ----------- |
| `remote` | string | 是 | Git 远程类型github 或 gitlab |
| `repository` | string | 是 | 仓库,格式为 owner/repo例如"facebook/react" |
| `branch` | string | 是 | 分支名称(例如,"main" 或 "master" |
| `apiKey` | string | 是 | Greptile API 密钥 |
| `githubToken` | string | 是 | 具有仓库读取权限的 GitHub 个人访问令牌 |
#### 输出
| 参数 | 类型 | 描述 |
| --------- | ---- | ----------- |
| `repository` | string | 仓库名称owner/repo |
| `remote` | string | Git 远程github/gitlab |
| `branch` | string | 分支名称 |
| `private` | boolean | 仓库是否为私有 |
| `status` | string | 索引状态submitted、cloning、processing、completed 或 failed |
| `filesProcessed` | number | 已处理的文件数 |
| `numFiles` | number | 仓库中的文件总数 |
| `sampleQuestions` | array | 已索引仓库的示例问题 |
| `sha` | string | 已索引版本的 Git 提交 SHA |
## 备注
- 分类:`tools`
- 类型:`greptile`

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,17 +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`
@@ -163,16 +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`
@@ -190,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:
@@ -49960,43 +49954,3 @@ checksums:
content/11: 972721b310d5e3e6e08ec33dc9630f62
content/12: b3f310d5ef115bea5a8b75bf25d7ea9a
content/13: 06a9cbcec05366fe1c873c90c36b4f44
cde6c2ec1df03f206847ed139f21f2d6:
meta/title: d625514dc93a2c27c439aa3f05ef6825
meta/description: ba29063c3aa33a2bd7afe5837c7fdb9e
content/0: 1b031fb0c62c46b177aeed5c3d3f8f80
content/1: 38ab553787a3ea3d2cda30851aedc0ad
content/2: ad8cbe2b67d463500c7df82249a43130
content/3: 68e7aba40d1cd92f4a42ae47e959647c
content/4: 9a605b0b546c260c6274c6090d6f3581
content/5: b0072e1727b0b3aa280be0f214373362
content/6: f23d61d0b583ae7e014fad11cd88d650
content/7: 711f36e27a659049cf42b8678e67156c
content/8: 821e6394b0a953e2b0842b04ae8f3105
content/9: 954eb151461a8567f7c8132661927740
content/10: 9c8aa3f09c9b2bd50ea4cdff3598ea4e
content/11: 7a7984f05e34660cc71f06c220198e31
content/12: dae004748239e77e2532d74494a10d7e
content/13: 371d0e46b4bd2c23f559b8bc112f6955
content/14: 436dadcd195dd06d65d306d054d855a1
content/15: bcadfc362b69078beee0088e5936c98b
content/16: 8ed05ca8d0bb1d22992af58adba9e363
content/17: 0c04ebd8a688a9658529c0dbeb9e91da
content/18: eef5d898e4cd4c4fa684f6f30b5bff63
content/19: 371d0e46b4bd2c23f559b8bc112f6955
content/20: 447485a51605776e0801a7e6b3e57d69
content/21: bcadfc362b69078beee0088e5936c98b
content/22: 9eb1ac86dbadc526a2a97d4d49f5398a
content/23: 5b7448ffa97b9b0f7c92ce378d90d814
content/24: c9b99feb41660b7dfca04fe4cfb5c674
content/25: 371d0e46b4bd2c23f559b8bc112f6955
content/26: 0ce6d9d41e298509e192e4dd0fc654c6
content/27: bcadfc362b69078beee0088e5936c98b
content/28: 97fd7cc117408e1f7a076724a8bcbddf
content/29: c2e4dd92b12a214c7021ab345acb28c6
content/30: de9c09e2e23cfe69029a739ed7a51d83
content/31: 371d0e46b4bd2c23f559b8bc112f6955
content/32: a664478ba3bc1ebecaaebc39fe0d54ec
content/33: bcadfc362b69078beee0088e5936c98b
content/34: 492b7c5af2dd4be062ee7af19778566a
content/35: b3f310d5ef115bea5a8b75bf25d7ea9a
content/36: 1305f85599a560b30c009091311a8dd0

View File

@@ -29,7 +29,6 @@
"tailwind-merge": "^3.0.2"
},
"devDependencies": {
"@sim/tsconfig": "workspace:*",
"@tailwindcss/postcss": "^4.0.12",
"@types/mdx": "^2.0.13",
"@types/node": "^22.14.1",

View File

@@ -1,11 +1,29 @@
{
"extends": "@sim/tsconfig/nextjs.json",
"compilerOptions": {
"baseUrl": ".",
"target": "ESNext",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "react-jsx",
"incremental": true,
"paths": {
"@/.source/*": ["./.source/*"],
"@/*": ["./*"]
}
},
"plugins": [
{
"name": "next"
}
]
},
"include": [
"next-env.d.ts",

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: #fdfdfd; /* main canvas - neutral near-white */
--surface-1: #fcfcfc; /* sidebar, panels */
--surface-2: #ffffff; /* blocks, cards, modals - pure white */
--surface-3: #f7f7f7; /* popovers, headers */
--surface-4: #f5f5f5; /* buttons base */
--border: #e0e0e0; /* primary border */
--surface-5: #f3f3f3; /* inputs, form elements */
--border-1: #e0e0e0; /* stronger border */
--surface-6: #f0f0f0; /* popovers, elevated surfaces */
--surface-7: #ececec;
/* 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: #e0e0e0; /* 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 - neutral */
--text-primary: #2d2d2d;
--text-secondary: #404040;
--text-tertiary: #5c5c5c;
--text-muted: #737373;
--text-subtle: #8c8c8c;
--text-inverse: #ffffff;
--text-error: #ef4444;
/* Borders / dividers */
--divider: #ededed;
--border-muted: #e4e4e4;
--border-success: #e0e0e0;
/* 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;
@@ -152,29 +201,32 @@
--c-883827: #7c2d12;
/* Terminal status badges */
--terminal-status-error-bg: #fef2f2;
--terminal-status-error-bg: #feeeee;
--terminal-status-error-border: #f87171;
--terminal-status-info-bg: #f7f7f7;
--terminal-status-info-border: #a3a3a3;
--terminal-status-info-color: #525252;
--terminal-status-warning-bg: #fefce8;
--terminal-status-warning-border: #facc15;
--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,21 +450,10 @@
}
.panel-tab-inactive:hover {
background-color: var(--surface-5);
background-color: var(--surface-9);
color: var(--text-primary);
}
/**
* Subblock divider visibility
* Hides dividers when adjacent subblocks render empty content (e.g., schedule-info without data).
* Uses CSS :has() to detect empty .subblock-content elements and hide associated dividers.
* Selectors ordered by ascending specificity: (0,4,0) then (0,5,0)
*/
.subblock-row:has(> .subblock-content:empty) > .subblock-divider,
.subblock-row:has(+ .subblock-row > .subblock-content:empty) > .subblock-divider {
display: none;
}
/**
* Dark mode specific overrides
*/
@@ -549,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;
}
@@ -590,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"],
@@ -600,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"],
@@ -610,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(),

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