内容
# 潮汐波
潮汐波是全栈Web应用开发的编码代理,与Phoenix深度集成,从数据库到UI。[查看我们的网站](https://tidewave.ai)获取更多信息。
该项目也可以用作[独立的模型上下文协议服务器](https://hexdocs.pm/tidewave/mcp.html)。
## 安装
### 手动安装
在您的`mix.exs`中添加`tidewave`包:
```elixir
def deps do
[
{:tidewave, "~> 0.5", only: :dev},
{:phoenix, ...},
]
end
```
然后,对于Phoenix应用程序,前往您的`lib/my_app_web/endpoint.ex`,在`if code_reloading? do`块上方添加:
```diff
+ if Mix.env() == :dev do
+ plug Tidewave
+ end
if code_reloading? do
```
现在确保[Tidewave已安装](https://hexdocs.pm/tidewave/installation.html),您就可以将Tidewave连接到您的应用程序。
> Tidewave Web与Phoenix LiveView v1.1或更高版本配合使用最佳。更新后,请确保在您的`config/dev.exs`中启用以下选项:
>
> ```elixir
> config :phoenix_live_view,
> debug_heex_annotations: true,
> debug_attributes: true
> ```
>
> 这些选项在Phoenix v1.8+应用程序中默认启用。
### 使用 Igniter
或者,您可以使用`igniter`将Tidewave自动安装到现有的Phoenix应用程序中:
```sh
# 如果尚未安装,请安装igniter_new
mix archive.install hex igniter_new
# 安装tidewave
mix igniter.install tidewave
```
现在确保[Tidewave已安装](https://hexdocs.pm/tidewave/installation.html),您就可以将Tidewave连接到您的应用程序。
### 伞形项目
对于伞形项目,您可以在定义Phoenix端点的应用程序(通常是`apps/your_app_web`)中遵循上述手动步骤。
### 在非Phoenix应用程序中使用
Tidewave可以作为MCP用于任何Elixir项目。例如,您可以在`mix.exs`中使用`bandit`(和`tidewave`)在开发模式下:
```elixir
{:tidewave, "~> 0.4", only: :dev},
{:bandit, "~> 1.0", only: :dev},
```
并在`mix.exs`中添加一个别名:
```elixir
aliases: [
tidewave:
"run --no-halt -e 'Agent.start(fn -> Bandit.start_link(plug: Tidewave, port: 4000) end)'"
]
```
现在运行`mix tidewave`并[配置Tidewave作为MCP](https://hexdocs.pm/tidewave/mcp.html)。
## 故障排除
### 使用多个主机/子域名
如果您在开发过程中使用多个主机/子域名,则必须使用`*.localhost`,因为此类域名被浏览器视为安全域名。此外,请在`lib/your_app_web/endpoint.ex`中的`@session_options`定义后立即添加以下内容:
```elixir
@session_options [
# ... 您的配置
]
if code_reloading? do
@session_options Keyword.merge(@session_options, same_site: "None", secure: true)
end
```
上述内容将允许您的应用程序在多个子域名上运行嵌入式Tidewave,只要它使用安全上下文(例如`admin.localhost`、`www.foobar.localhost`等)。
### 内容安全策略
如果您已启用内容安全策略,Tidewave将自动在`script-src`下启用“unsafe-eval”,以便上下文浏览器测试正确运行。它还会禁用`frame-ancestors`指令。
## 配置
您可以使用以下语法配置`Tidewave`插件:
```elixir
plug Tidewave, options
```
可用选项如下:
* `:allow_remote_access` - Tidewave默认仅允许来自localhost的请求,即使您的服务器监听其他接口出于安全目的。请阅读[我们的安全指南](https://hexdocs.pm/tidewave/security.html),了解更多信息以及何时允许远程访问(如果您知道自己在做什么)
* `:allowed_origins` - 与`Origin`头部匹配的值列表,以防止跨源和DNS绑定攻击。每个值必须是`[scheme:]//host[:port]`格式的字符串,其中scheme和port都是可选的。主机也可以以`*`开头。例如:`["//localhost:8000", "//*.test"]`
* `:inspect_opts` - 在格式化某些工具结果时传递给`Kernel.inspect/2`的自定义选项。默认为:`[charlists: :as_lists, limit: 50, pretty: true]`
* `:team` - 设置您的Tidewave团队配置,例如`team: [id: "my-company"]`
* `:toolbar` - 控制Tidewave工具栏是否注入到您的HTML页面中。默认为`true`
* `tmp_dir` - Tidewave用于截图和录制的临时目录。它必须是相对于当前应用程序根目录的相对目录。默认为`tmp`,在`tmp/tidewave/screenshots`和`tmp/tidewave/recordings`下存储文件。
## 可用工具
- `execute_sql_query` - 在您的应用程序数据库中执行SQL查询,以便代理验证操作的结果
- `get_docs` - 获取给定模块/函数的文档。它会查询项目使用的确切版本,确保您始终获得正确的信息
- `get_logs` - 读取服务器写入的日志
- `get_models` - 列出应用程序中的所有模块及其位置,以便快速发现
- `get_source_location` - 获取给定模块/函数的源代码位置,以便代理可以直接读取源代码而无需搜索
- `project_eval` - 在您的应用程序本身中评估代码,为代理提供对您的运行时、依赖项和内存数据的访问
如果您分别使用Ecto和Ash,还可以使用`get_ecto_schemas`和`get_ash_resources`。
## 许可证
版权所有 (c) 2025 Dashbit
根据Apache License, Version 2.0(“许可证”)授权;您不得在遵守许可证的情况下使用此文件。您可以在[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)获取许可证的副本。
除非适用法律要求或以书面形式达成协议,否则根据许可证分发的软件以“原样”分发,不提供任何明示或暗示的保证或条件。请参阅许可证中关于权限和限制的特定语言。