# Daiko Terminal > Daiko Terminal - Automated token monitoring with intelligent alerts ## DSL Reference The Conditions DSL (Domain-Specific Language) is how you express **what tokens to find** and **what conditions they must match**. It's a JSON format that gets validated and compiled to safe, parameterized SQL. import { DslSnippet, GlossaryCard } from "../../components"; :::tip You don't need to write DSL manually—the web app provides a visual builder for conditions. This reference is for understanding what's possible. ::: ### Overview A DSL condition is a JSON object with these properties: ```json { "target": "tokens", // Required: what to query (only "tokens" for now) "select": [...], // Optional: which fields to return "joins": [...], // Optional: additional data to join "derived_joins": [...], // Optional: computed metrics from trades "where": {...}, // Optional: filter conditions "order_by": [...], // Optional: sort order "limit": 100 // Optional: max results (capped at 500) } ``` ### Queryable Data #### Available Fields ##### Token Fields (`tokens.*`) | Field | Type | Description | | ------------------------------ | ------ | -------------------------- | | `tokens.mint_address` | string | Unique token identifier | | `tokens.symbol` | string | Token symbol (e.g., PEPE) | | `tokens.meta_url` | string | Metadata URL | | `tokens.created_timestamp` | number | Unix timestamp of creation | | `tokens.created_block` | number | Block number of creation | | `tokens.creator_address` | string | Creator's wallet address | | `tokens.bonding_curve_address` | string | Bonding curve address | | `tokens.platform_type` | string | Platform type | ##### Token Metrics Fields (`token_metrics.*`) Requires `joins: ["token_metrics"]`. | Field | Type | Description | | ---------------------------------- | ------ | ---------------------------------- | | `token_metrics.price_lamports` | number | Current price in lamports | | `token_metrics.mc_lamports` | number | Market cap in lamports | | `token_metrics.holder_count` | number | Number of holders | | `token_metrics.ath_price_lamports` | number | All-time high price | | `token_metrics.ath_mc_lamports` | number | All-time high market cap | | `token_metrics.ath_timestamp` | number | When ATH was reached | | `token_metrics.graduate_timestamp` | number | When token graduated (null if not) | | `token_metrics.updated_timestamp` | number | Last metrics update | ##### Derived Fields (`derived.*`) Requires a `derived_joins` entry. | Field | Description | | ----------------------- | ------------------------------------------------- | | `derived.pct_range` | Price range % (from `trade_price_range_1h`) | | `derived.min_price_sol` | Minimum price in SOL (from `trade_price_window`) | | `derived.max_price_sol` | Maximum price in SOL (from `trade_price_window`) | | `derived.volume_sol` | Trading volume in SOL (from `trade_price_window`) | | `derived.trade_count` | Number of trades (from `trade_price_window`) | ##### Trade Fields (`trades.*`) Only available inside `exists` conditions. | Field | Type | Description | | ---------------------------- | ------ | ------------------------ | | `trades.side` | string | "buy" or "sell" | | `trades.sol_amount_lamports` | number | Trade amount in lamports | | `trades.token_amount` | number | Token amount traded | | `trades.price_lamports` | number | Price at time of trade | | `trades.block_timestamp` | number | When trade occurred | | `trades.wallet_address` | string | Trader's wallet | ### Joins #### Regular Joins ```json { "target": "tokens", "joins": ["token_metrics"] } ``` Currently only `token_metrics` is supported. #### Derived Joins Derived joins compute aggregated values from trade data. **The `on` clause is required** and must be exactly as shown: **Available windows**: `5m`, `15m`, `1h` (default), `4h`, `24h` :::warning Only **one** derived join is allowed per condition. ::: ### Where Operators #### Comparison: `cmp` Compare a field to a literal value. =", left: { type: "field", field: "token_metrics.holder_count" }, right: 100, }} /> **Comparison operators**: `<`, `<=`, `>`, `>=`, `=`, `!=` #### Comparison: `cmp_field` Compare two fields directly. #### Comparison: `cmp_scaled_field` Compare a field to another field multiplied by a scale factor. #### Range Sugar: `min` and `max` Shorthand for common `>=` and `<=` comparisons. :::note `min` compiles to `field >= value`, `max` compiles to `field <= value`. ::: #### String Matching: `ilike` and `like` Case-insensitive pattern matching. **Pattern syntax**: * `%` matches any sequence of characters * `_` matches any single character :::tip Both `like` and `ilike` are case-insensitive in this system. ::: #### NULL Checks: `is_null` and `is_not_null` #### Time Comparison: `now_minus_seconds_cmp` Compare a timestamp field to "now minus X seconds". =", seconds: 7200, }} /> #### Existence Check: `exists` Check if related records exist in trades. =", left: { type: "field", field: "trades.sol_amount_lamports" }, right: 10000000000 }, { op: "now_minus_seconds_cmp", ref: { type: "field", field: "trades.block_timestamp" }, cmp: ">=", seconds: 1800, }, ], }, }} /> #### Logical Operators: `and`, `or`, `not` Combine multiple conditions. =", seconds: 3600, }, { op: "cmp", cmp: ">=", left: { type: "field", field: "token_metrics.holder_count" }, right: 50 }, ], }} /> ### Complete Examples #### New Token Discovery Find tokens created in the last hour with at least 50 holders: =", seconds: 3600, }, { op: "cmp", cmp: ">=", left: { type: "field", field: "token_metrics.holder_count" }, right: 50 }, ], }, order_by: [{ field: "token_metrics.holder_count", dir: "desc" }], limit: 20, }} /> #### Sideways Detection Find tokens trading in a tight range (max price within 1.2x of min): #### Dip from ATH Find graduated tokens that dropped to 30% of their ATH: ### Limitations | Aspect | Limitation | | ------------- | ----------------------------- | | Target | Only `"tokens"` is supported | | Joins | Only `["token_metrics"]` | | Derived joins | Maximum 1 per condition | | Results | Capped at 500 per evaluation | | Tables | Cannot query arbitrary tables | ### Security Your conditions are safe because: * **Validated**: Every field and operator is checked against a whitelist * **Parameterized**: All values become SQL parameters, not string concatenation * **No raw SQL**: You write JSON, the system compiles it safely For details on evaluation behavior, see [How It Works](/how-it-works). ## How It Works This page explains how Daiko Terminal evaluates your conditions and delivers notifications. Understanding these concepts helps you create better conditions and set realistic expectations. import { EvaluationFlowDiagram, GlossaryCard } from "../../components"; ### The Evaluation Loop When you save a condition, here's what happens behind the scenes: 1. **Your DSL is validated** - The system checks that your condition uses valid fields and operators 2. **It's compiled to SQL** - Your condition becomes a parameterized database query (no raw SQL injection possible) 3. **The query runs** - Matching tokens are fetched from the live database 4. **Results are filtered** - Cooldown and limits are applied 5. **Notifications are sent** - You receive alerts via Telegram (if connected) This loop runs **periodically** (typically every few seconds), so your conditions are always being evaluated against fresh data. ### Key Concepts 100", }, { term: "Evaluation", definition: "The periodic process of checking your conditions against the database and finding matches.", }, { term: "Cooldown", definition: "A period after notifying you about a token during which you won't be notified about it again for the same condition.", example: "If cooldown is 1 hour, you'll only get one notification per token per hour", }, { term: "Limit", definition: "The maximum number of tokens returned per evaluation cycle.", }, ]} /> ### Limits and Constraints :::warning Understanding these limits helps you write effective conditions. ::: #### Result Limit: 500 Tokens Each evaluation returns **at most 500 tokens**. If your condition matches more than 500 tokens: * Only the first 500 (based on your `order_by` or default ordering) are returned * You won't see the rest until they rise to the top or your condition changes **Best Practice**: Use more specific conditions or add an `order_by` clause to prioritize what matters most. #### Cooldown Period After you receive a notification about a specific token for a specific condition, that token enters a **cooldown period** for that condition. During cooldown: * The token may still match your condition * But you won't receive duplicate notifications * Cooldown is tracked per (condition, token) pair :::note Cooldown is stored in-memory, so it may reset if the service restarts. This is rare but can happen during deployments. ::: #### Active Conditions Only Only **active conditions** for **active agents** are evaluated. If you: * Deactivate a condition: It stops being evaluated * Delete an agent: All its conditions are removed ### Notifications #### Telegram (Primary Channel) When tokens match your condition: 1. The system checks if you have Telegram connected 2. If yes, it sends a message with: * Agent name * Matching token details (symbol, address, metrics) * A link to view more :::tip Make sure to connect Telegram in the web app to receive notifications. Without it, matches are computed but not delivered. ::: #### What Gets Sent Each notification includes: | Field | Description | | ---------------- | --------------------------------- | | Symbol | Token symbol (e.g., PEPE, WIF) | | Mint Address | Unique token identifier on Solana | | Price (SOL) | Current price in SOL | | Market Cap (USD) | Market capitalization in USD | ### Data Freshness Your conditions run against **near-real-time data**: * Token metadata (symbol, creation time): Updated as new tokens are created * Metrics (price, market cap, holder count): Updated continuously from on-chain data * Trade data: Streamed from the blockchain with minimal delay :::info Data freshness depends on blockchain indexing speed. In most cases, data is only seconds behind the chain. ::: ### Security Model Your conditions are safe because: 1. **No raw SQL**: You write DSL (JSON), not SQL. The system validates and compiles it. 2. **Field whitelist**: Only specific, allowed fields can be queried 3. **Parameterized queries**: All values are passed as parameters, not string-concatenated 4. **Validation at parse time**: Invalid conditions are rejected before execution This design prevents SQL injection and ensures you can only query intended data. ### Summary | Aspect | Behavior | | -------------------- | -------------------------------------- | | Evaluation frequency | Periodic (every few seconds) | | Max results per run | 500 tokens | | Cooldown | Per (condition, token) pair, in-memory | | Notifications | Telegram (requires connection) | | Data freshness | Near real-time (seconds behind chain) | | Security | Validated DSL → Parameterized SQL | For details on what you can query, see the [DSL Reference](/dsl). ## Blog This page is a placeholder for future expansion. For now, please refer to the public documentation in the sidebar. import { HomePage } from "vocs/components"; import { FeatureCard, FeatureGrid } from "../../components";
Daiko Terminal
{"Solanaトークンの自動監視とインテリジェントアラート。コーディング不要。"}
ドキュメント アプリを起動
### 機能
### 監視を始めましょう ドキュメント アプリを起動
## DSLリファレンス 条件DSL(ドメイン固有言語)は、**どのトークンを見つけるか**、**どの条件にマッチさせるか**を表現する方法です。JSON形式で記述し、バリデーションされて安全なパラメータ化SQLにコンパイルされます。 import { DslSnippet, GlossaryCard } from "../../../components"; :::tip DSLを手動で書く必要はありません ── Webアプリが条件構築のためのビジュアルビルダーを提供します。このリファレンスは何が可能かを理解するためのものです。 ::: ### 概要 DSL条件は以下のプロパティを持つJSONオブジェクトです: ```json { "target": "tokens", // 必須: クエリ対象(現在は "tokens" のみ) "select": [...], // 任意: 返すフィールド "joins": [...], // 任意: 結合する追加データ "derived_joins": [...], // 任意: 取引から計算されるメトリクス "where": {...}, // 任意: フィルター条件 "order_by": [...], // 任意: ソート順 "limit": 100 // 任意: 最大結果数(上限500) } ``` ### クエリ可能なデータ #### 利用可能なフィールド ##### トークンフィールド (`tokens.*`) | フィールド | 型 | 説明 | | ------------------------------ | ------ | ---------------- | | `tokens.mint_address` | string | ユニークなトークン識別子 | | `tokens.symbol` | string | トークンシンボル(例:PEPE) | | `tokens.meta_url` | string | メタデータURL | | `tokens.created_timestamp` | number | 作成時のUnixタイムスタンプ | | `tokens.created_block` | number | 作成時のブロック番号 | | `tokens.creator_address` | string | 作成者のウォレットアドレス | | `tokens.bonding_curve_address` | string | ボンディングカーブアドレス | | `tokens.platform_type` | string | プラットフォームタイプ | ##### トークンメトリクスフィールド (`token_metrics.*`) `joins: ["token_metrics"]` が必要です。 | フィールド | 型 | 説明 | | ---------------------------------- | ------ | --------------- | | `token_metrics.price_lamports` | number | lamports建ての現在価格 | | `token_metrics.mc_lamports` | number | lamports建ての時価総額 | | `token_metrics.holder_count` | number | ホルダー数 | | `token_metrics.ath_price_lamports` | number | 最高値価格 | | `token_metrics.ath_mc_lamports` | number | 最高値時価総額 | | `token_metrics.ath_timestamp` | number | ATH達成時刻 | | `token_metrics.graduate_timestamp` | number | 卒業時刻(未卒業はnull) | | `token_metrics.updated_timestamp` | number | 最終メトリクス更新 | ##### 派生フィールド (`derived.*`) `derived_joins` エントリが必要です。 | フィールド | 説明 | | ----------------------- | ---------------------------------- | | `derived.pct_range` | 価格レンジ %(`trade_price_range_1h` から) | | `derived.min_price_sol` | SOL建て最小価格(`trade_price_window` から) | | `derived.max_price_sol` | SOL建て最大価格(`trade_price_window` から) | | `derived.volume_sol` | SOL建て取引量(`trade_price_window` から) | | `derived.trade_count` | 取引回数(`trade_price_window` から) | ##### 取引フィールド (`trades.*`) `exists` 条件内でのみ使用可能。 | フィールド | 型 | 説明 | | ---------------------------- | ------ | ---------------- | | `trades.side` | string | "buy" または "sell" | | `trades.sol_amount_lamports` | number | lamports建て取引額 | | `trades.token_amount` | number | 取引されたトークン量 | | `trades.price_lamports` | number | 取引時の価格 | | `trades.block_timestamp` | number | 取引発生時刻 | | `trades.wallet_address` | string | トレーダーのウォレット | ### Joins #### 通常のJoins ```json { "target": "tokens", "joins": ["token_metrics"] } ``` 現在は `token_metrics` のみサポートされています。 #### Derived Joins Derived joinsは取引データから集約値を計算します。**`on`句は必須**で、以下の通り正確に記述する必要があります: **利用可能なウィンドウ**: `5m`, `15m`, `1h`(デフォルト), `4h`, `24h` :::warning 条件ごとに**1つ**のderived joinのみ許可されています。 ::: ### Where 演算子 #### 比較: `cmp` フィールドをリテラル値と比較します。 =", left: { type: "field", field: "token_metrics.holder_count" }, right: 100, }} /> **比較演算子**: `<`, `<=`, `>`, `>=`, `=`, `!=` #### 比較: `cmp_field` 2つのフィールドを直接比較します。 #### 比較: `cmp_scaled_field` フィールドを別のフィールドにスケールファクターを掛けた値と比較します。 #### レンジ糖衣構文: `min` と `max` 一般的な `>=` と `<=` 比較のショートハンド。 :::note `min` は `field >= value` にコンパイルされ、`max` は `field <= value` にコンパイルされます。 ::: #### 文字列マッチング: `ilike` と `like` 大文字小文字を区別しないパターンマッチング。 **パターン構文**: * `%` は任意の文字列にマッチ * `_` は任意の1文字にマッチ :::tip このシステムでは `like` と `ilike` の両方が大文字小文字を区別しません。 ::: #### NULLチェック: `is_null` と `is_not_null` #### 時間比較: `now_minus_seconds_cmp` タイムスタンプフィールドを「現在時刻 - X秒」と比較します。 =", seconds: 7200, }} /> #### 存在チェック: `exists` 関連レコードがtradesに存在するかチェックします。 =", left: { type: "field", field: "trades.sol_amount_lamports" }, right: 10000000000 }, { op: "now_minus_seconds_cmp", ref: { type: "field", field: "trades.block_timestamp" }, cmp: ">=", seconds: 1800, }, ], }, }} /> #### 論理演算子: `and`, `or`, `not` 複数の条件を組み合わせます。 =", seconds: 3600, }, { op: "cmp", cmp: ">=", left: { type: "field", field: "token_metrics.holder_count" }, right: 50 }, ], }} /> ### 完全な例 #### 新規トークン発見 直近1時間以内に作成された、50人以上のホルダーを持つトークンを検索: =", seconds: 3600, }, { op: "cmp", cmp: ">=", left: { type: "field", field: "token_metrics.holder_count" }, right: 50 }, ], }, order_by: [{ field: "token_metrics.holder_count", dir: "desc" }], limit: 20, }} /> #### レンジ相場検出 狭いレンジで取引されているトークンを検索(最大価格が最小価格の1.2倍以内): #### ATHからのディップ ATHの30%まで下落した卒業済みトークンを検索: ### 制限事項 | 項目 | 制限 | | ------------- | ---------------------- | | Target | `"tokens"` のみサポート | | Joins | `["token_metrics"]` のみ | | Derived joins | 条件ごとに最大1つ | | 結果 | 評価ごとに上限500件 | | テーブル | 任意のテーブルはクエリ不可 | ### セキュリティ 条件が安全な理由: * **バリデーション**: すべてのフィールドと演算子がホワイトリストに対してチェックされます * **パラメータ化**: すべての値は文字列連結ではなくSQLパラメータになります * **生のSQLなし**: JSONを書き、システムが安全にコンパイルします 評価動作の詳細は、[仕組み](/ja/how-it-works)をご覧ください。 ## 仕組み このページでは、Daiko Terminalがどのように条件を評価し、通知を配信するかを説明します。これらの概念を理解することで、より良い条件を作成し、現実的な期待を設定できます。 import { EvaluationFlowDiagram, GlossaryCard } from "../../../components"; ### 評価ループ 条件を保存すると、裏側では以下のことが起こります: 1. **DSLがバリデーションされる** - システムが条件に有効なフィールドと演算子が使われているか確認 2. **SQLにコンパイルされる** - 条件がパラメータ化されたデータベースクエリに変換(生のSQLインジェクションは不可能) 3. **クエリが実行される** - マッチするトークンがライブデータベースから取得 4. **結果がフィルタリングされる** - クールダウンとリミットが適用 5. **通知が送信される** - Telegram経由でアラートを受信(接続されている場合) このループは**定期的**(通常は数秒ごと)に実行されるため、条件は常に最新のデータに対して評価されます。 ### 主要概念 100 のトークンを検索", }, { term: "評価(Evaluation)", definition: "条件をデータベースに対してチェックし、マッチを見つける定期的なプロセス。", }, { term: "クールダウン(Cooldown)", definition: "あるトークンについて通知した後、同じ条件で再度通知されない期間。", example: "クールダウンが1時間の場合、1トークンにつき1時間に1回だけ通知", }, { term: "リミット(Limit)", definition: "各評価サイクルで返されるトークンの最大数。", }, ]} /> ### 制限と制約 :::warning これらの制限を理解することで、効果的な条件を書けるようになります。 ::: #### 結果リミット: 500トークン 各評価で**最大500トークン**が返されます。条件が500以上のトークンにマッチする場合: * `order_by`またはデフォルトの順序に基づいた最初の500件のみが返されます * 残りは上位に浮上するか条件が変更されるまで表示されません **ベストプラクティス**: より具体的な条件を使うか、`order_by`句を追加して最も重要なものを優先しましょう。 #### クールダウン期間 特定の条件で特定のトークンについて通知を受けた後、そのトークンはその条件に対して**クールダウン期間**に入ります。クールダウン中: * トークンは引き続き条件にマッチする可能性があります * ただし重複通知は送信されません * クールダウンは(条件、トークン)ペアごとに追跡されます :::note クールダウンはインメモリで保存されるため、サービスが再起動するとリセットされる場合があります。これはまれですが、デプロイ時に発生することがあります。 ::: #### アクティブな条件のみ **アクティブなエージェント**の**アクティブな条件**のみが評価されます。以下の場合: * 条件を無効化:評価が停止 * エージェントを削除:すべての条件が削除 ### 通知 #### Telegram(メインチャネル) トークンが条件にマッチすると: 1. システムがTelegramが接続されているか確認 2. 接続されている場合、以下を含むメッセージを送信: * エージェント名 * マッチしたトークンの詳細(シンボル、アドレス、メトリクス) * 詳細を見るためのリンク :::tip 通知を受け取るために、Webアプリでの Telegram接続を忘れずに。接続なしでもマッチは計算されますが配信されません。 ::: #### 送信される内容 各通知に含まれる情報: | フィールド | 説明 | | --------- | -------------------- | | シンボル | トークンシンボル(例:PEPE、WIF) | | ミントアドレス | Solana上のユニークなトークン識別子 | | 価格(SOL) | SOL建ての現在価格 | | 時価総額(USD) | USD建ての時価総額 | ### データの鮮度 条件は**ほぼリアルタイムのデータ**に対して実行されます: * トークンメタデータ(シンボル、作成時刻):新しいトークンの作成に伴い更新 * メトリクス(価格、時価総額、ホルダー数):オンチェーンデータから継続的に更新 * 取引データ:最小限の遅延でブロックチェーンからストリーミング :::info データの鮮度はブロックチェーンのインデックス速度に依存します。ほとんどの場合、データはチェーンから数秒遅れです。 ::: ### セキュリティモデル 条件が安全な理由: 1. **生のSQLなし**: DSL(JSON)を書き、SQLではありません。システムがバリデーションしてコンパイル。 2. **フィールドホワイトリスト**: 特定の許可されたフィールドのみクエリ可能 3. **パラメータ化されたクエリ**: すべての値はパラメータとして渡され、文字列連結ではない 4. **パース時のバリデーション**: 無効な条件は実行前に拒否 この設計によりSQLインジェクションを防ぎ、意図したデータのみをクエリできることを保証します。 ### まとめ | 項目 | 動作 | | ------- | ------------------------ | | 評価頻度 | 定期的(数秒ごと) | | 1回あたり最大 | 500トークン | | クールダウン | (条件、トークン)ペアごと、インメモリ | | 通知 | Telegram(接続が必要) | | データの鮮度 | ほぼリアルタイム(チェーンから数秒遅れ) | | セキュリティ | バリデーション済みDSL → パラメータ化SQL | クエリできる内容の詳細は、[DSLリファレンス](/ja/dsl)をご覧ください。 ## ブログ このページは将来の拡張のためのプレースホルダーです。 現時点では、サイドバーの公開ドキュメントをご参照ください。 ## ユーザーガイド import { JaGuideLinkAround, JaGuideStep, publicTerminalWebAppUrl, telegramBotUrl } from "../../../components"; 次の 5 ステップで、ログインから Telegram の通知確認まで進みます(ステップ 2 の言語切り替えは任意です)。 ### 最短で最初の通知まで進みましょう
  1. Sign in をクリックします。選択した wallet アプリ内で同じ画面が開きます。
  2. もう一度 Sign in をクリックします。
  3. 署名モーダルが出たら Confirm を押して Sign in を完了します。
  1. **Settings** を開きます。
  2. 表示言語を日本語に切り替えます(このガイドと画面が揃いやすくなります。任意のためスキップしても問題ありません)。
  1. 一番右の **Settings** に移動し、**接続** を押します。
  2. **Start** コマンドは自動的に実行されます。1 time password が発行されたらタップしてコピーします。
  3. wallet に戻り、先ほどの 1 time password をペーストすると連携が完了します。
:::warning Telegram を接続していない場合、エージェントの評価は行われても通知は届きません。 :::
  1. 下に表示される **condition idea** を選ぶか、お好みの条件を入力して agent を作成してみてください。
  2. エージェントに名前を付けて保存します。
  3. 一番左の **Agent** ページで、自分が作った agent や購入したエージェントの通知をいつでも確認できます。
  1. 通知の share や PnL の確認も Telegram 上で行えます。
### 最初はこの考え方で十分です * Preview で数件返るくらいの広さから始めましょう。 * 1 つのエージェントには 1 つの意図だけを持たせましょう。 * 保存前に毎回 Preview を確認します。保存後は通知の出方を見て調整しましょう。 * 通知が多すぎるときだけ、あとからエージェントの条件を厳しくしましょう。 ### 通知が来ないとき 1. Telegram の連携(1 time password の入力まで)が完了しているか確認します。 2. エージェントを開き、**Preview** がまだ結果を返すか確認します。 3. エージェントが有効になっているか確認します。 4. 直近で同じトークンが通知済みの場合は、cooldown が終わるまで待ちます。 ### 通知が多すぎるとき * 閾値を上げます。 * フィルターを 1 つ追加します。 * `limit` を下げ、重要度の高い順に並べます。 ### 次に読むページ * より細かい条件を書きたい場合は [DSL リファレンス](/ja/dsl) をご覧ください。 * 評価の仕組みを知りたい場合は [仕組み](/ja/how-it-works) をご覧ください。 ## プライバシーポリシー このプライバシーポリシーは、Daiko Terminal(以下「本サービス」)がユーザー情報をどのように取り扱うかを説明します。 > これはテンプレートです。運営者情報や保持期間などの未確定事項は `{{...}}` プレースホルダーで示されています。 ### 1. 収集する情報 本サービスは、その提供に必要な範囲で以下の情報を取り扱うことがあります。 * **アカウント情報**: ログインに必要な識別子(例:外部認証ユーザーIDなど) * **連携情報**: Telegram連携に関する情報(例:通知先チャットIDなど) * **利用情報**: サービスの利用状況(例:設定された条件、評価結果、エラーログなど) * **技術情報**: ブラウザ/デバイス情報、IPアドレス、クッキーなど(利用分析および不正防止のため) ### 2. 利用目的 収集した情報は、主に以下の目的で利用します。 * 本サービスの提供および運営(条件の保存、定期評価、通知配信など) * 本人確認、認証およびセキュリティの確保 * お問い合わせへの対応 * トラブルシューティング、品質向上および機能改善 * 不正利用の防止 ### 3. 第三者への提供 法令で定められた場合を除き、ユーザー情報を第三者に提供することはありません。 ### 4. 外部委託 本サービスの提供にあたり、ホスティング、ログ管理、通知配信などの業務を外部サービスプロバイダーに委託することがあります。その場合、委託先に対して必要かつ適切な監督を行います。 ### 5. 保持期間 / 削除 ユーザー情報は、利用目的に必要な期間保持し、不要になった場合またはユーザーからの削除請求があった場合は、合理的な範囲内で削除します。 * データ保持期間: `{{data-retention-period}}` ### 6. 安全管理措置 ユーザー情報の漏洩、滅失および毀損を防止するために、合理的な安全管理措置を講じます(アクセス制御、暗号化、ログ監視など)。 ### 7. ユーザーの権利 ユーザーは、当社所定の手続きを通じて、自身の情報の開示、訂正、削除などを請求することができます。 ### 8. お問い合わせ先 プライバシーに関するお問い合わせは、以下までご連絡ください: * 運営者: `{{operator-name}}` * 連絡先: `{{contact}}`(例:`{{contact-email}}`) ### 9. 変更の通知 本ポリシーを変更する場合、合理的な手段によりユーザーに通知します。 ### 10. 施行日 * 施行日: `{{effective-date}}` ## Chrome拡張機能 :::warning Chrome拡張機能は現在**一時停止中**です。条件の作成と管理には**Webアプリ**をメインインターフェースとしてご利用ください。 ::: このページは参考および将来の再有効化のために残されています。 ### インストール #### Chrome Web Storeから 1. Chrome Web Storeにアクセス(リンク準備中) 2. 「Chromeに追加」をクリック 3. インストールを確認 4. ツールバーに拡張機能をピン留めして簡単にアクセス #### 手動インストール(開発用) 開発ビルドをお持ちの場合: 1. `chrome://extensions` にアクセス 2. 「デベロッパーモード」を有効化 3. 「パッケージ化されていない拡張機能を読み込む」をクリック 4. 拡張機能フォルダを選択 ### 拡張機能を開く 拡張機能はChromeの**サイドパネル**機能を使用します: 1. ツールバーのDaiko Terminalアイコンをクリック 2. ブラウザの右側にサイドパネルが開きます 3. 端をドラッグしてリサイズ可能 ### 主な機能 #### ダッシュボード ダッシュボードに表示されるもの: * アクティブな条件 * 最近の通知 * クイックアクション #### 条件ビルダー :::steps #### 対象を選択 'tokens' を選択 #### フィルターを追加 条件を設定 #### プレビュー 結果をテスト #### 保存 有効化 ::: 条件ビルダーは、JSONを書かずにDSL条件を作成するのに役立ちます: 1. **対象の選択**: 現在は `tokens` をサポート 2. **Joinの選択**: 必要に応じて `token_metrics` を追加 3. **条件ビルダー**: 演算子のビジュアルインターフェース 4. **プレビュー**: 保存前にマッチするトークンを確認 #### 条件管理 各条件に対して以下の操作が可能: * **編集**: 条件パラメータの変更 * **切り替え**: 評価の有効/無効 * **削除**: 条件を完全に削除 * **プレビュー**: 現在のマッチを確認 #### 設定 体験をカスタマイズ: * **Telegram接続**: Telegramアカウントをリンク * **通知設定**: アラート設定をカスタマイズ * **アカウント設定**: プロフィールを管理 ### 条件ビルダーの使い方 #### シンプルなフィルターの追加 1. 「Add Filter」をクリック 2. フィールドを選択(例:`token_metrics.holder_count`) 3. 演算子を選択(例:`>=`) 4. 値を入力(例:`100`) #### 複数フィルターの組み合わせ 複数のフィルターはANDロジックで結合されます: 1. 最初のフィルターを追加 2. 再度「Add Filter」をクリック 3. 追加の条件を設定 4. トークンがマッチするにはすべてがtrueである必要があります #### 高度な機能の使用 複雑な条件の場合: * **Derived Joins**: 取引ベースのメトリクスを追加 * **Existsチェック**: 取引パターンでフィルタリング * **タイムウィンドウ**: 最近のアクティビティに焦点 :::tip 変更後は毎回プレビューして、結果への影響を確認しましょう! ::: ### キーボードショートカット | ショートカット | アクション | | -------------- | --------- | | `Ctrl/Cmd + N` | 新規条件 | | `Ctrl/Cmd + S` | 条件を保存 | | `Ctrl/Cmd + P` | 結果をプレビュー | | `Esc` | ダイアログを閉じる | ### トラブルシューティング #### 拡張機能が開かない 1. インストールされ有効になっているか確認 2. ツールバーのアイコンをクリックしてみる 3. お使いのChromeバージョンでサイドパネルがサポートされているか確認 #### サイドパネルが小さすぎる * 左端をドラッグしてリサイズ * 最小幅で使いやすさを確保 * Chromeは好みのサイズを記憶します #### 変更が保存されない 1. インターネット接続を確認 2. ログインしているか確認 3. UIにエラーメッセージがないか確認 #### プレビューに結果が表示されない * 条件が厳しすぎる可能性があります * 一部の閾値を緩和してみてください * 必要なjoinsが追加されているか確認 ### パワーユーザー向けのヒント #### 複製して変更 * 既存の条件を複製 * 別のユースケースに変更 * ゼロから構築するよりも時間を節約 #### 命名規則を使う * 条件に分かりやすい名前を付ける * 例:「新規トークン >100 ホルダー」 * 管理が容易になります #### 定期的なレビュー * どの条件が有用か確認 * 使っていないものは無効化または削除 * リストを管理しやすい状態に保つ ### 次のステップ * 完全なワークフローは[ユーザーガイド](/ja/guide)を参照 * 高度な条件は[DSLリファレンス](/ja/dsl)を学ぶ * 技術的な詳細は[仕組み](/ja/how-it-works)を理解する ## 利用規約 この利用規約(以下「本規約」)は、Daiko Terminal(以下「本サービス」)の利用条件を定めるものです。本サービスを利用することにより、ユーザーは本規約に同意したものとみなされます。 > これはテンプレートです。準拠法や管轄裁判所などの未確定事項は `{{...}}` プレースホルダーで示されています。 ### 1. 適用範囲 * 本規約は、本サービスの利用に関する当社とユーザー間のすべての関係に適用されます。 ### 2. 規約の変更 当社は、必要に応じて本規約を変更することがあります。変更後の規約は、合理的な手段で通知した時点から効力を有するものとします。 ### 3. アカウント / 利用条件 * ユーザーは、自己の責任においてアカウント情報を管理するものとします。 * 合理的な理由がある場合、当社は利用を制限または停止することがあります。 ### 4. 禁止行為 ユーザーは、以下の行為を行ってはなりません。 * 法令または公序良俗に反する行為 * 不正アクセスまたは過度な負荷をかける行為 * 本サービスの運営を妨害する行為 * 他者の権利を侵害する行為(知的財産権、プライバシーなど) * 反社会的勢力への利益供与またはそれに類する行為 ### 5. 知的財産権 本サービスに関する知的財産権は、当社または正当な権利者に帰属します。 ### 6. 免責 / 保証の否認 当社は、本サービスの特定目的への適合性、正確性、継続性などについて、明示または黙示を問わず、いかなる保証も行いません。 ### 7. 責任の制限 当社がユーザーに損害を与えた場合であっても、当社に帰責事由がある場合に限り、合理的な範囲でのみ責任を負うものとします(必要に応じて具体的な上限を別途定めることがあります)。 ### 8. サービスの変更・停止 当社は、事前の通知なく、本サービスの内容を変更し、またはその提供を停止することがあります。 ### 9. 準拠法および管轄 * 準拠法: `{{governing-law}}` * 管轄裁判所: `{{jurisdiction}}` ### 10. お問い合わせ先 * 運営者: `{{operator-name}}` * 連絡先: `{{contact}}`(例:`{{contact-email}}`) ## User Guide import { JaGuideLinkAround, JaGuideStep, publicTerminalWebAppUrl, telegramBotUrl } from "../../components"; Follow these five steps from sign-in to confirming alerts in Telegram (step 2, language, is optional). ### Fastest Path to Your First Alert
  1. Open{" "}
  2. Click Sign in → the same screen opens inside your selected wallet app.
  3. Click Sign in again.
  4. When the signature modal appears, tap Confirm to complete sign-in.
  1. Open **Settings**.
  2. Switch the display language to English (optional; skip if you prefer).
  1. Go to the rightmost **Settings** page and tap **Connect Telegram**.
  2. The **Start** command runs automatically. When a one-time password appears, tap to copy it.
  3. Return to the wallet app and paste the one-time password → linking complete.
:::warning If Telegram is not connected, Daiko can still evaluate agents, but you will not receive alerts. :::
  1. Pick a **condition idea** shown below, or enter your own conditions to create an agent.
  2. Give the agent a name and save it.
  3. On the leftmost **Agent** page, you can always check notifications from agents you created or purchased.
  1. You can share notifications and check PnL from Telegram as well.
### What Works Best * Start broad enough that preview shows a few results. * Keep one agent focused on one idea instead of mixing everything together. * Use preview before every save. After saving, watch how notifications behave and adjust. * Tighten thresholds only after you see too many matches. ### If Alerts Do Not Arrive 1. Make sure Telegram linking is complete (including pasting the one-time password in the wallet app). 2. Open the agent and check that **Preview** still returns matches. 3. Confirm the agent is enabled. 4. Wait out the cooldown if the same token already notified recently. ### If You Get Too Many Alerts * Raise thresholds. * Add one more filter. * Lower the result limit and sort for the highest-signal matches first. ### Go Deeper * Learn the [DSL Reference](/dsl) when you want more precise filters. * Read [How It Works](/how-it-works) for the evaluation model behind alerts. ## Privacy Policy This Privacy Policy describes how Daiko Terminal (the "Service") handles user information. > This is a template. Undetermined items such as operator information and retention periods are indicated with `{{...}}` placeholders. ### 1. Information We Collect The Service may handle the following information to the extent necessary for its provision. * **Account Information**: Identifiers required for login (e.g., external authentication user ID, etc.) * **Integration Information**: Information related to Telegram integration (e.g., notification destination chat ID, etc.) * **Usage Information**: Service usage status (e.g., configured conditions, evaluation results, error logs, etc.) * **Technical Information**: Browser/device information, IP address, cookies, etc. (for usage analysis and fraud prevention) ### 2. Purpose of Use Collected information is primarily used for the following purposes. * Providing and operating the Service (saving conditions, periodic evaluation, delivering notifications, etc.) * Identity verification, authentication, and security assurance * Responding to inquiries * Troubleshooting, quality improvement, and feature enhancement * Prevention of unauthorized use ### 3. Third-Party Disclosure We do not provide user information to third parties except as required by law. ### 4. Outsourcing In providing the Service, we may outsource tasks such as hosting, log management, and notification delivery to external service providers. In such cases, we exercise necessary and appropriate supervision over the contractors. ### 5. Retention Period / Deletion User information is retained for the period necessary for the purpose of use, and is deleted within a reasonable scope when no longer needed or upon user request for deletion. * Data retention period: `{{data-retention-period}}` ### 6. Security Measures We implement reasonable security measures to prevent leakage, loss, and damage of user information (access control, encryption, log monitoring, etc.). ### 7. User Rights Users may request disclosure, correction, deletion, etc. of their information through our prescribed procedures. ### 8. Contact Information For privacy-related inquiries, please contact us at: * Operator: `{{operator-name}}` * Contact: `{{contact}}` (e.g., `{{contact-email}}`) ### 9. Change Notification If we change this Policy, we will notify users through reasonable means. ### 10. Effective Date * Effective Date: `{{effective-date}}` ## Chrome Extension :::warning The Chrome extension is currently **paused**. Please use the **web app** as the primary interface for creating and managing conditions. ::: This page is kept for reference and future re-enablement. ### Installation #### From Chrome Web Store 1. Visit the Chrome Web Store (link coming soon) 2. Click "Add to Chrome" 3. Confirm the installation 4. Pin the extension to your toolbar for easy access #### Manual Installation (Development) If you have a development build: 1. Go to `chrome://extensions` 2. Enable "Developer mode" 3. Click "Load unpacked" 4. Select the extension folder ### Opening the Extension The extension uses Chrome's **Side Panel** feature: 1. Click the Daiko Terminal icon in your toolbar 2. The side panel opens on the right side of your browser 3. You can resize it by dragging the edge ### Main Features #### Dashboard The dashboard shows: * Your active conditions * Recent notifications * Quick actions #### Condition Builder :::steps #### Select Target Choose 'tokens' #### Add Filters Set conditions #### Preview Test results #### Save Activate ::: The condition builder helps you create DSL conditions without writing JSON: 1. **Target Selection**: Currently supports `tokens` 2. **Join Selection**: Add `token_metrics` if needed 3. **Condition Builder**: Visual interface for operators 4. **Preview**: See matching tokens before saving #### Condition Management For each condition, you can: * **Edit**: Modify the condition parameters * **Toggle**: Enable or disable evaluation * **Delete**: Remove the condition entirely * **Preview**: See current matches #### Settings Configure your experience: * **Telegram Connection**: Link your Telegram account * **Notification Preferences**: Customize alert settings * **Account Settings**: Manage your profile ### Using the Condition Builder #### Adding a Simple Filter 1. Click "Add Filter" 2. Select a field (e.g., `token_metrics.holder_count`) 3. Choose an operator (e.g., `>=`) 4. Enter a value (e.g., `100`) #### Combining Multiple Filters Multiple filters are combined with AND logic: 1. Add your first filter 2. Click "Add Filter" again 3. Add additional conditions 4. All must be true for a token to match #### Using Advanced Features For complex conditions: * **Derived Joins**: Add trade-based metrics * **Exists Checks**: Filter by trade patterns * **Time Windows**: Focus on recent activity :::tip Preview after each change to see how it affects results! ::: ### Keyboard Shortcuts | Shortcut | Action | | -------------- | --------------- | | `Ctrl/Cmd + N` | New condition | | `Ctrl/Cmd + S` | Save condition | | `Ctrl/Cmd + P` | Preview results | | `Esc` | Close dialogs | ### Troubleshooting #### Extension Not Opening 1. Make sure it's installed and enabled 2. Try clicking the icon in the toolbar 3. Check if Side Panel is supported in your Chrome version #### Side Panel Too Small * Drag the left edge to resize * Minimum width ensures usability * Chrome remembers your preferred size #### Changes Not Saving 1. Check your internet connection 2. Make sure you're logged in 3. Look for error messages in the UI #### Preview Shows No Results * Your condition might be too strict * Try relaxing some thresholds * Check that you've added necessary joins ### Tips for Power Users #### Duplicate and Modify * Duplicate an existing condition * Modify for a different use case * Saves time vs. building from scratch #### Use Naming Conventions * Name conditions descriptively * Example: "New tokens >100 holders" * Makes management easier #### Regular Review * Check which conditions are useful * Disable or delete unused ones * Keep your list manageable ### Next Steps * Read the [User Guide](/guide) for the full workflow * Learn the [DSL Reference](/dsl) for advanced conditions * Understand [How It Works](/how-it-works) technically ## Terms of Service These Terms of Service (the "Terms") set forth the conditions for using Daiko Terminal (the "Service"). By using the Service, users agree to these Terms. > This is a template. Undetermined items such as governing law and jurisdiction are indicated with `{{...}}` placeholders. ### 1. Scope * These Terms apply to all relationships between us and users regarding the use of the Service. ### 2. Changes to Terms We may change these Terms as necessary. Changed Terms shall take effect from the time they are communicated through reasonable means. ### 3. Accounts / Usage Conditions * Users shall manage their account information at their own responsibility. * We may restrict or suspend usage when there is reasonable cause. ### 4. Prohibited Activities Users shall not engage in the following activities. * Activities that violate laws or public order and morals * Unauthorized access or placing excessive load * Activities that interfere with the operation of the Service * Activities that infringe on the rights of others (intellectual property rights, privacy, etc.) * Providing benefits to antisocial forces or similar activities ### 5. Intellectual Property Rights Intellectual property rights related to the Service belong to us or legitimate rights holders. ### 6. Disclaimer / Warranty Denial We make no express or implied warranties regarding the suitability of the Service for a particular purpose, accuracy, continuity, etc. ### 7. Limitation of Liability Even if we cause damage to users, we shall only be liable to a reasonable extent when there is cause attributable to us (specific limits may be set separately if necessary). ### 8. Service Changes/Suspension We may change the content of the Service or suspend its provision without prior notice. ### 9. Governing Law and Jurisdiction * Governing Law: `{{governing-law}}` * Jurisdiction: `{{jurisdiction}}` ### 10. Contact Information * Operator: `{{operator-name}}` * Contact: `{{contact}}` (e.g., `{{contact-email}}`)