mirror of
https://github.com/n8n-io/n8n.git
synced 2026-06-05 02:59:27 +02:00
feat(core): Use n8n default sandbox for Instance AI (no-changelog) (#31335)
Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
parent
07119ce61d
commit
afd7ddf372
|
|
@ -295,6 +295,9 @@ export type FrontendModuleSettings = {
|
|||
localGatewayDisabled: boolean;
|
||||
proxyEnabled: boolean;
|
||||
cloudManaged: boolean;
|
||||
sandboxEnabled: boolean;
|
||||
workflowBuilderAvailable: boolean;
|
||||
sandboxUnavailableReason: string | null;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -309,6 +309,8 @@ export {
|
|||
gatewayConfirmationRequiredWirePayloadSchema,
|
||||
gatewayConfirmationRequiredPayloadSchema,
|
||||
instanceGatewayResourceDecisionSchema,
|
||||
instanceAiSandboxProviderSchema,
|
||||
isInstanceAiSandboxProvider,
|
||||
GATEWAY_CONFIRMATION_REQUIRED_PREFIX,
|
||||
InstanceAiSendMessageRequest,
|
||||
InstanceAiEvalExecutionRequest,
|
||||
|
|
@ -379,6 +381,7 @@ export type {
|
|||
InstanceAiAdminSettingsResponse,
|
||||
InstanceAiUserPreferencesResponse,
|
||||
InstanceAiModelCredential,
|
||||
InstanceAiSandboxProvider,
|
||||
InstanceAiMcpConnectionResponse,
|
||||
InstanceAiPermissionMode,
|
||||
InstanceAiPermissions,
|
||||
|
|
|
|||
|
|
@ -1,12 +1,36 @@
|
|||
import {
|
||||
applyBranchReadOnlyOverrides,
|
||||
DEFAULT_INSTANCE_AI_PERMISSIONS,
|
||||
InstanceAiAdminSettingsUpdateRequest,
|
||||
isDisplayableConfirmationRequest,
|
||||
isInstanceAiSandboxProvider,
|
||||
type InstanceAiConfirmationInputType,
|
||||
type InstanceAiConfirmationRequestPayload,
|
||||
type InstanceAiPermissions,
|
||||
} from '../instance-ai.schema';
|
||||
|
||||
describe('sandbox provider', () => {
|
||||
it('accepts supported providers', () => {
|
||||
expect(isInstanceAiSandboxProvider('n8n-sandbox')).toBe(true);
|
||||
expect(isInstanceAiSandboxProvider('daytona')).toBe(true);
|
||||
});
|
||||
|
||||
it('rejects unsupported or non-string providers', () => {
|
||||
expect(isInstanceAiSandboxProvider('local')).toBe(false);
|
||||
expect(isInstanceAiSandboxProvider('')).toBe(false);
|
||||
expect(isInstanceAiSandboxProvider(undefined)).toBe(false);
|
||||
});
|
||||
|
||||
it('rejects unsupported providers on the admin settings update request', () => {
|
||||
expect(
|
||||
InstanceAiAdminSettingsUpdateRequest.safeParse({ sandboxProvider: 'local' }).success,
|
||||
).toBe(false);
|
||||
expect(
|
||||
InstanceAiAdminSettingsUpdateRequest.safeParse({ sandboxProvider: 'n8n-sandbox' }).success,
|
||||
).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('applyBranchReadOnlyOverrides', () => {
|
||||
it('should block all write permissions while preserving safe ones', () => {
|
||||
const result = applyBranchReadOnlyOverrides({ ...DEFAULT_INSTANCE_AI_PERMISSIONS });
|
||||
|
|
|
|||
|
|
@ -994,13 +994,20 @@ export function applyBranchReadOnlyOverrides(
|
|||
// Admin settings — instance-scoped, admin-only
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export const instanceAiSandboxProviderSchema = z.enum(['n8n-sandbox', 'daytona']);
|
||||
export type InstanceAiSandboxProvider = z.infer<typeof instanceAiSandboxProviderSchema>;
|
||||
|
||||
export function isInstanceAiSandboxProvider(value: unknown): value is InstanceAiSandboxProvider {
|
||||
return instanceAiSandboxProviderSchema.safeParse(value).success;
|
||||
}
|
||||
|
||||
export interface InstanceAiAdminSettingsResponse {
|
||||
enabled: boolean;
|
||||
subAgentMaxSteps: number;
|
||||
permissions: InstanceAiPermissions;
|
||||
mcpServers: string;
|
||||
sandboxEnabled: boolean;
|
||||
sandboxProvider: string;
|
||||
sandboxProvider: InstanceAiSandboxProvider;
|
||||
sandboxImage: string;
|
||||
sandboxTimeout: number;
|
||||
daytonaCredentialId: string | null;
|
||||
|
|
@ -1015,7 +1022,7 @@ export class InstanceAiAdminSettingsUpdateRequest extends Z.class({
|
|||
permissions: instanceAiPermissionsSchema.partial().optional(),
|
||||
mcpServers: z.string().optional(),
|
||||
sandboxEnabled: z.boolean().optional(),
|
||||
sandboxProvider: z.string().optional(),
|
||||
sandboxProvider: instanceAiSandboxProviderSchema.optional(),
|
||||
sandboxImage: z.string().optional(),
|
||||
sandboxTimeout: z.number().int().positive().optional(),
|
||||
daytonaCredentialId: z.string().nullable().optional(),
|
||||
|
|
|
|||
|
|
@ -40,9 +40,9 @@ export class InstanceAiConfig {
|
|||
@Env('N8N_INSTANCE_AI_SANDBOX_ENABLED')
|
||||
sandboxEnabled: boolean = false;
|
||||
|
||||
/** Sandbox provider: 'daytona' for isolated Docker containers, 'local' for direct host execution (dev only). */
|
||||
/** Sandbox provider: 'n8n-sandbox' for n8n sandbox service, 'daytona' for Daytona-backed containers. */
|
||||
@Env('N8N_INSTANCE_AI_SANDBOX_PROVIDER')
|
||||
sandboxProvider: string = 'daytona';
|
||||
sandboxProvider: string = 'n8n-sandbox';
|
||||
|
||||
/** Daytona API URL (e.g. "http://localhost:3000/api"). */
|
||||
@Env('DAYTONA_API_URL')
|
||||
|
|
|
|||
|
|
@ -288,7 +288,7 @@ describe('GlobalConfig', () => {
|
|||
reflectorObservationTokens: 40_000,
|
||||
subAgentMaxSteps: 100,
|
||||
sandboxEnabled: false,
|
||||
sandboxProvider: 'daytona',
|
||||
sandboxProvider: 'n8n-sandbox',
|
||||
sandboxImage: 'daytonaio/sandbox:0.5.0',
|
||||
daytonaApiUrl: '',
|
||||
daytonaApiKey: '',
|
||||
|
|
|
|||
128
packages/@n8n/instance-ai/README.md
Normal file
128
packages/@n8n/instance-ai/README.md
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
# @n8n/instance-ai
|
||||
|
||||
Instance AI is the agent runtime behind the AI assistant experience in n8n. It
|
||||
lets users ask for help with workflows, executions, credentials, nodes, and
|
||||
workflow building from inside an n8n instance.
|
||||
|
||||
The package contains the agent prompts, tool registry, workflow-builder logic,
|
||||
workspace adapters, tracing helpers, and evaluation harnesses. The HTTP API,
|
||||
database entities, settings, and n8n service adapters live in
|
||||
`packages/cli/src/modules/instance-ai`.
|
||||
|
||||
## What It Does
|
||||
|
||||
Instance AI is built around a deep-agent loop:
|
||||
|
||||
- An orchestrator agent receives the user's request and maintains the plan.
|
||||
- Sub-agents can be delegated scoped tasks with a limited tool set.
|
||||
- Domain tools read and update n8n resources through backend adapters.
|
||||
- Observational memory condenses long conversations.
|
||||
- Workflow building runs in a sandbox workspace, validates generated TypeScript,
|
||||
and submits the workflow through the n8n backend.
|
||||
|
||||
The workflow builder requires sandboxing. The default provider is the n8n
|
||||
sandbox service. Daytona remains an explicit provider for environments that
|
||||
still need it.
|
||||
|
||||
## Running Locally
|
||||
|
||||
Instance AI is a backend module, so run it through n8n rather than this package
|
||||
directly.
|
||||
|
||||
### 1. Start the n8n Sandbox Service
|
||||
|
||||
From the repo root:
|
||||
|
||||
```bash
|
||||
TESTCONTAINERS_REUSE_ENABLE=true pnpm --filter n8n-containers services \
|
||||
--services sandbox \
|
||||
--network n8n-instance-ai-dev \
|
||||
--name n8n-svc-sandbox
|
||||
```
|
||||
|
||||
This starts the sandbox API and runner containers and writes the host-reachable
|
||||
sandbox environment variables to `packages/cli/bin/.env`. You can verify the
|
||||
service from any terminal:
|
||||
|
||||
```bash
|
||||
SANDBOX_PORT=$(docker port n8n-svc-sandbox-sandbox-api 8080/tcp | sed 's/.*://')
|
||||
curl "http://localhost:${SANDBOX_PORT}/healthz"
|
||||
```
|
||||
|
||||
Expected response:
|
||||
|
||||
```json
|
||||
{"status":"ok"}
|
||||
```
|
||||
|
||||
### 2. Start n8n With Instance AI Enabled
|
||||
|
||||
In a second terminal:
|
||||
|
||||
```bash
|
||||
export N8N_ENABLED_MODULES=instance-ai
|
||||
export N8N_AI_ENABLED=true
|
||||
|
||||
export N8N_INSTANCE_AI_MODEL=anthropic/claude-sonnet-4-5
|
||||
export N8N_INSTANCE_AI_MODEL_API_KEY="$ANTHROPIC_API_KEY"
|
||||
|
||||
export N8N_INSTANCE_AI_SANDBOX_ENABLED=true
|
||||
|
||||
pnpm dev:ai
|
||||
```
|
||||
|
||||
The `pnpm --filter n8n-containers services` command writes
|
||||
`N8N_INSTANCE_AI_SANDBOX_PROVIDER`, `N8N_SANDBOX_SERVICE_URL`, and
|
||||
`N8N_SANDBOX_SERVICE_API_KEY` to `packages/cli/bin/.env`. If you are not using
|
||||
that generated `.env` file, export them manually:
|
||||
|
||||
```bash
|
||||
export N8N_SANDBOX_PORT=$(docker port n8n-svc-sandbox-sandbox-api 8080/tcp | sed 's/.*://')
|
||||
export N8N_INSTANCE_AI_SANDBOX_PROVIDER=n8n-sandbox
|
||||
export N8N_SANDBOX_SERVICE_URL="http://localhost:${N8N_SANDBOX_PORT}"
|
||||
export N8N_SANDBOX_SERVICE_API_KEY=n8n-sandbox-ci-key
|
||||
```
|
||||
|
||||
For n8n running inside the same Docker network as the sandbox service, use the
|
||||
internal service URL instead:
|
||||
|
||||
```bash
|
||||
N8N_SANDBOX_SERVICE_URL=http://sandbox-api:8080
|
||||
```
|
||||
|
||||
### 3. Cleanup
|
||||
|
||||
```bash
|
||||
pnpm --filter n8n-containers services:clean
|
||||
docker network rm n8n-instance-ai-dev 2>/dev/null || true
|
||||
```
|
||||
|
||||
## Useful Commands
|
||||
|
||||
Run focused tests:
|
||||
|
||||
```bash
|
||||
pnpm --filter @n8n/instance-ai test
|
||||
```
|
||||
|
||||
Print agent prompts:
|
||||
|
||||
```bash
|
||||
pnpm --filter @n8n/instance-ai prompts:print
|
||||
```
|
||||
|
||||
Run evaluations:
|
||||
|
||||
```bash
|
||||
pnpm --filter @n8n/instance-ai eval:instance-ai
|
||||
```
|
||||
|
||||
## More Documentation
|
||||
|
||||
- [Architecture](docs/architecture.md)
|
||||
- [Configuration](docs/configuration.md)
|
||||
- [Sandboxing](docs/sandboxing.md)
|
||||
- [Tools](docs/tools.md)
|
||||
- [Memory](docs/memory.md)
|
||||
- [Streaming protocol](docs/streaming-protocol.md)
|
||||
- [Evaluations](evaluations/README.md)
|
||||
|
|
@ -76,10 +76,10 @@ graph TB
|
|||
|
||||
subgraph Sandbox ["Sandbox (Optional)"]
|
||||
Service -->|per-thread| WorkspaceManager[Workspace Manager]
|
||||
WorkspaceManager --> N8nSandbox[n8n Sandbox Service]
|
||||
WorkspaceManager --> DaytonaSandbox[Daytona Container]
|
||||
WorkspaceManager --> LocalSandbox[Local Sandbox]
|
||||
N8nSandbox --> SandboxFS[Filesystem + execute_command]
|
||||
DaytonaSandbox --> SandboxFS[Filesystem + execute_command]
|
||||
LocalSandbox --> SandboxFS
|
||||
end
|
||||
|
||||
|
||||
|
|
@ -187,7 +187,7 @@ The agent package — framework-agnostic business logic.
|
|||
- **Planned tasks** (`planned-tasks/`) — task graph coordination, dependency resolution, scheduled execution
|
||||
- **Workflow loop** (`workflow-loop/`) — deterministic build→verify→debug state machine for workflow builder agents
|
||||
- **Workflow builder** (`workflow-builder/`) — TypeScript SDK code parsing, validation, patching, and prompt sections
|
||||
- **Workspace** (`workspace/`) — sandbox provisioning (Daytona / local), filesystem abstraction, snapshot management
|
||||
- **Workspace** (`workspace/`) — sandbox provisioning (n8n sandbox service / Daytona), filesystem abstraction, snapshot management
|
||||
- **Memory** (`memory/`) — title generation, memory configuration
|
||||
- **Storage** (`storage/`) — iteration logs, task storage, planned task storage, workflow loop storage, agent tree snapshots
|
||||
- **MCP client** (`mcp/`) — manages connections to external MCP servers, schema sanitization for Anthropic compatibility
|
||||
|
|
|
|||
|
|
@ -58,8 +58,8 @@ When no search provider is available, the `web-search` action is disabled. `fetc
|
|||
|
||||
| Variable | Type | Default | Description |
|
||||
|----------|------|---------|-------------|
|
||||
| `N8N_INSTANCE_AI_SANDBOX_ENABLED` | boolean | `false` | Enable sandbox for code execution. When true, the builder agent writes TypeScript files and validates with `tsc` instead of using the string-based `build-workflow` tool. |
|
||||
| `N8N_INSTANCE_AI_SANDBOX_PROVIDER` | string | `daytona` | Sandbox provider: `daytona` for isolated Docker containers, `n8n-sandbox` for the n8n sandbox service, `local` for direct host execution (dev only, no isolation). |
|
||||
| `N8N_INSTANCE_AI_SANDBOX_ENABLED` | boolean | `false` | Enable sandbox-backed workflow building. When false, workflow builder capability is unavailable. |
|
||||
| `N8N_INSTANCE_AI_SANDBOX_PROVIDER` | string | `n8n-sandbox` | Sandbox provider: `n8n-sandbox` for the n8n sandbox service, or `daytona` for the Daytona provider. |
|
||||
| `DAYTONA_API_URL` | string | `''` | Daytona API URL (e.g. `https://app.daytona.io/api`). Required when provider is `daytona`. |
|
||||
| `DAYTONA_API_KEY` | string | `''` | Daytona API key for authentication. Required when provider is `daytona`. |
|
||||
| `N8N_SANDBOX_SERVICE_URL` | string | `''` | n8n sandbox service URL. Required when provider is `n8n-sandbox`. |
|
||||
|
|
@ -68,9 +68,10 @@ When no search provider is available, the `web-search` action is disabled. `fetc
|
|||
| `N8N_INSTANCE_AI_SANDBOX_TIMEOUT` | number | `300000` | Default command timeout in the sandbox (milliseconds). |
|
||||
| `N8N_INSTANCE_AI_SANDBOX_NAME_PREFIX` | string | `''` | Prefix prepended to every Daytona sandbox name (e.g. `eval-baseline-daily`). Also surfaced as a `name_prefix` label. Empty in production. |
|
||||
|
||||
**Modes**: When sandbox is enabled, the builder agent works in two modes:
|
||||
- **Sandbox mode** (Daytona/n8n-sandbox/local): agent writes TypeScript to `~/workspace/src/workflow.ts`, runs `tsc` for validation, and uses `submit-workflow` to save. Gets full filesystem access and `execute_command`.
|
||||
- **Tool mode** (fallback when sandbox unavailable): original `build-workflow` tool with string-based code validation.
|
||||
When sandbox is enabled, the builder agent writes TypeScript to
|
||||
`~/workspace/src/workflow.ts`, runs `tsc` for validation, and uses
|
||||
`submit-workflow` to save. It receives filesystem access and `execute_command`
|
||||
from the configured sandbox workspace. There is no no-sandbox builder fallback.
|
||||
|
||||
Sandbox workspaces persist per thread — the same container is reused across messages in a conversation. Workspaces are destroyed on server shutdown.
|
||||
|
||||
|
|
@ -163,25 +164,22 @@ N8N_INSTANCE_AI_SEARXNG_URL=http://searxng:8080
|
|||
N8N_INSTANCE_AI_MODEL=anthropic/claude-opus-4-8
|
||||
INSTANCE_AI_BRAVE_SEARCH_API_KEY=BSA-xxx
|
||||
|
||||
# With sandbox (Daytona — isolated code execution for builder agent)
|
||||
N8N_INSTANCE_AI_MODEL=anthropic/claude-opus-4-8
|
||||
N8N_INSTANCE_AI_SANDBOX_ENABLED=true
|
||||
N8N_INSTANCE_AI_SANDBOX_PROVIDER=daytona
|
||||
DAYTONA_API_URL=https://app.daytona.io/api
|
||||
DAYTONA_API_KEY=dtn_xxx
|
||||
|
||||
# With sandbox (local — development only, no isolation)
|
||||
N8N_INSTANCE_AI_MODEL=anthropic/claude-opus-4-8
|
||||
N8N_INSTANCE_AI_SANDBOX_ENABLED=true
|
||||
N8N_INSTANCE_AI_SANDBOX_PROVIDER=local
|
||||
|
||||
# With sandbox (n8n sandbox service)
|
||||
# CI can start it with:
|
||||
# pnpm tsx packages/testing/containers/start-sandbox.ts --network n8n-eval-net
|
||||
N8N_INSTANCE_AI_MODEL=anthropic/claude-sonnet-4-5
|
||||
N8N_INSTANCE_AI_SANDBOX_ENABLED=true
|
||||
N8N_INSTANCE_AI_SANDBOX_PROVIDER=n8n-sandbox
|
||||
N8N_SANDBOX_SERVICE_URL=https://sandbox.example.com
|
||||
N8N_SANDBOX_SERVICE_API_KEY=sandbox-key
|
||||
|
||||
# With sandbox (Daytona — explicit provider)
|
||||
N8N_INSTANCE_AI_MODEL=anthropic/claude-opus-4-8
|
||||
N8N_INSTANCE_AI_SANDBOX_ENABLED=true
|
||||
N8N_INSTANCE_AI_SANDBOX_PROVIDER=daytona
|
||||
DAYTONA_API_URL=https://app.daytona.io/api
|
||||
DAYTONA_API_KEY=dtn_xxx
|
||||
|
||||
# With filesystem gateway (user runs daemon on their machine)
|
||||
N8N_INSTANCE_AI_MODEL=anthropic/claude-opus-4-8
|
||||
N8N_INSTANCE_AI_GATEWAY_API_KEY=my-secret-key
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
When the Instance AI agent builds workflows, it needs somewhere to write code, run a compiler, install packages, and execute scripts. Running all of that directly on the n8n host is risky and hard to control. Sandboxing solves this by giving the agent a dedicated, disposable environment — a workspace with its own filesystem and shell — where it can do all of that without touching the host.
|
||||
|
||||
Today the main consumer is the workflow builder. The agent writes TypeScript files, validates them with the TypeScript compiler, executes them to produce workflow JSON, and only saves to n8n after everything passes. Without a sandbox, this falls back to a simpler string-based path that cannot run real tooling.
|
||||
Today the main consumer is the workflow builder. The agent writes TypeScript files, validates them with the TypeScript compiler, executes them to produce workflow JSON, and only saves to n8n after everything passes. Without a sandbox, workflow building is unavailable.
|
||||
|
||||
## How the Pieces Fit Together
|
||||
|
||||
There are three layers between the agent and actual code execution: a workspace abstraction from Mastra, a sandbox provider (Daytona, n8n sandbox service, or local), and the execution runtime inside the sandbox. Here is how they relate:
|
||||
There are three layers between the agent and actual code execution: a workspace abstraction from Mastra, a sandbox provider (n8n sandbox service or Daytona), and the execution runtime inside the sandbox. Here is how they relate:
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
|
|
@ -22,11 +22,9 @@ graph TB
|
|||
|
||||
subgraph Providers ["Sandbox Providers"]
|
||||
FS --> DaytonaFS["Daytona Filesystem<br/>(remote API calls)"]
|
||||
FS --> LocalFS["Local Filesystem<br/>(host disk I/O)"]
|
||||
FS --> N8nFS["n8n Sandbox FS<br/>(remote API calls)"]
|
||||
Sandbox --> DaytonaSB["Daytona Sandbox<br/>(remote container)"]
|
||||
Sandbox --> N8nSB["n8n Sandbox Service<br/>(remote container)"]
|
||||
Sandbox --> LocalSB["Local Sandbox<br/>(host process)"]
|
||||
end
|
||||
|
||||
subgraph Runtime ["Execution Runtime"]
|
||||
|
|
@ -34,8 +32,6 @@ graph TB
|
|||
DaytonaFS --> Container
|
||||
N8nSB --> Container
|
||||
N8nFS --> Container
|
||||
LocalSB --> HostDir["Host Directory<br/>Node.js · TypeScript · shell"]
|
||||
LocalFS --> HostDir
|
||||
end
|
||||
|
||||
style Agent fill:#f3e8ff,stroke:#7c3aed
|
||||
|
|
@ -55,7 +51,7 @@ Mastra is the agent framework that Instance AI uses. A Mastra **Workspace** is a
|
|||
|
||||
When a Workspace is attached to an agent, Mastra automatically exposes built-in tools to the LLM: `read_file`, `write_file`, `edit_file`, `list_files`, `grep`, `execute_command`, and others. The agent uses these tools naturally in its reasoning loop — it writes a file, runs a command, reads the output, and decides what to do next.
|
||||
|
||||
The key design property is that the Workspace abstraction is provider-agnostic. The agent's code and prompts are identical regardless of whether the workspace is backed by a remote container or a local directory. The provider choice is purely an infrastructure decision.
|
||||
The key design property is that the Workspace abstraction is provider-agnostic. The agent's code and prompts are identical regardless of whether the workspace is backed by n8n sandbox service or Daytona. The provider choice is purely an infrastructure decision.
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
|
|
@ -84,9 +80,9 @@ graph LR
|
|||
style Workspace fill:#e0f2fe,stroke:#0284c7
|
||||
```
|
||||
|
||||
## Daytona: The Production Provider
|
||||
## Daytona: Explicit Container Provider
|
||||
|
||||
Daytona is a third-party platform for creating and managing isolated sandbox environments. It runs containers on its own infrastructure (cloud-hosted or self-hosted) and exposes them through an SDK. Instance AI uses Daytona as its production sandbox provider.
|
||||
Daytona is a third-party platform for creating and managing isolated sandbox environments. It runs containers on its own infrastructure (cloud-hosted or self-hosted) and exposes them through an SDK. Instance AI keeps Daytona as an explicit provider for environments that still rely on it.
|
||||
|
||||
### What Daytona provides
|
||||
|
||||
|
|
@ -141,48 +137,31 @@ Once the sandbox is provisioned and the catalog is written, n8n wraps it in a Ma
|
|||
| Full shell (bash) | Arbitrary command execution |
|
||||
| Python | Available but not primary |
|
||||
|
||||
## n8n Sandbox Service: API-Backed Alternative
|
||||
## n8n Sandbox Service: Default Provider
|
||||
|
||||
The n8n sandbox service exposes a simple HTTP API for creating sandboxes, executing shell commands, and manipulating files. Instance AI uses it through a custom Mastra sandbox and filesystem adapter.
|
||||
|
||||
Builder prewarming follows Daytona-like lazy image instantiation semantics:
|
||||
- the builder creates an in-memory image placeholder from setup commands
|
||||
- the first sandbox creation sends those commands to the service
|
||||
- the returned `image_id` is cached on that placeholder
|
||||
- later builder sandboxes reuse the cached image directly
|
||||
|
||||
This provider supports the builder's file and command workflow, but it does not expose interactive process handles. That means `execute_command` works, while process-manager-backed features such as long-lived spawned subprocesses are out of scope for this provider.
|
||||
|
||||
## Local: The Development Fallback
|
||||
For eval CI, `n8n-containers` starts the API and runner sidecars through the shared sandbox service wrapper:
|
||||
|
||||
The local provider runs everything on the host machine in a subdirectory. There is no container, no API, no isolation. It exists so developers can iterate on sandbox-related features without needing a Daytona account or Docker.
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
Agent["Builder Agent"] --> Workspace["Workspace"]
|
||||
Workspace --> LocalSB["Local Sandbox<br/>(runs shell commands<br/>on host)"]
|
||||
Workspace --> LocalFS["Local Filesystem<br/>(reads/writes to<br/>./workspace-builders/)"]
|
||||
LocalSB --> Dir["Host Directory"]
|
||||
LocalFS --> Dir
|
||||
|
||||
style Dir fill:#fef3c7,stroke:#d97706
|
||||
```bash
|
||||
pnpm tsx packages/testing/containers/start-sandbox.ts --network n8n-eval-net
|
||||
```
|
||||
|
||||
Commands run as child processes of the n8n server. Files are written to the host disk. There is no cleanup — directories persist after the agent finishes, which is useful for inspecting what the agent did during debugging.
|
||||
For local development, point `N8N_SANDBOX_SERVICE_URL` and
|
||||
`N8N_SANDBOX_SERVICE_API_KEY` at a running sandbox service and enable
|
||||
`N8N_INSTANCE_AI_SANDBOX_ENABLED=true`.
|
||||
|
||||
The local provider is **blocked in production builds**. It is a developer convenience, not a deployment option.
|
||||
### Providers at a glance
|
||||
|
||||
### Daytona vs Local at a glance
|
||||
|
||||
| | Daytona | Local |
|
||||
| | n8n sandbox service | Daytona |
|
||||
| --- | --- | --- |
|
||||
| **Isolation** | Full container boundary | None — same host process |
|
||||
| **Where commands run** | Remote container via API | Host machine as child process |
|
||||
| **Where files live** | Container filesystem via API | Host disk in a subdirectory |
|
||||
| **Startup** | ~seconds (pre-warmed image) | Instant (local directory) |
|
||||
| **Cleanup** | Container destroyed after use | Directory persists (debugging) |
|
||||
| **Production use** | Yes | Blocked |
|
||||
| **Setup required** | Daytona account + API key | None |
|
||||
| **Isolation** | Service-managed container boundary | Daytona-managed container boundary |
|
||||
| **Where commands run** | Sandbox service runner via API | Remote container via Daytona API |
|
||||
| **Where files live** | Sandbox service filesystem API | Daytona filesystem API |
|
||||
| **Production use** | Default provider | Explicit provider |
|
||||
| **Setup required** | Sandbox API + runner sidecars | Daytona account/API or proxy |
|
||||
|
||||
## Lifecycle
|
||||
|
||||
|
|
@ -213,7 +192,7 @@ graph TB
|
|||
```
|
||||
|
||||
- **Thread-scoped workspace.** The service can maintain a single workspace per conversation thread, reused across messages. This workspace is destroyed on server shutdown.
|
||||
- **Per-builder ephemeral workspace.** Each time the workflow builder is invoked, it gets its own isolated workspace. Multiple concurrent builders in the same thread do not share a workspace. In Daytona mode, the container is deleted after the builder finishes (best-effort). In local mode, the directory persists for debugging.
|
||||
- **Per-builder ephemeral workspace.** Each time the workflow builder is invoked, it gets its own isolated workspace. Multiple concurrent builders in the same thread do not share a workspace. The provider sandbox is deleted after the builder finishes (best-effort).
|
||||
|
||||
### Pre-warmed images
|
||||
|
||||
|
|
@ -260,7 +239,7 @@ If any step fails, the agent reads the error output, fixes the code, and retries
|
|||
| Variable | Default | What it does |
|
||||
| --- | --- | --- |
|
||||
| `N8N_INSTANCE_AI_SANDBOX_ENABLED` | `false` | Master switch for sandboxing |
|
||||
| `N8N_INSTANCE_AI_SANDBOX_PROVIDER` | `daytona` | Which provider to use: `daytona`, `n8n-sandbox`, or `local` |
|
||||
| `N8N_INSTANCE_AI_SANDBOX_PROVIDER` | `n8n-sandbox` | Which provider to use: `n8n-sandbox` or `daytona` |
|
||||
| `DAYTONA_API_URL` | — | Daytona API endpoint (required for Daytona) |
|
||||
| `DAYTONA_API_KEY` | — | Daytona API key (required for Daytona) |
|
||||
| `N8N_SANDBOX_SERVICE_URL` | — | n8n sandbox service URL (required for `n8n-sandbox`) |
|
||||
|
|
|
|||
|
|
@ -9,8 +9,24 @@ const baseEnv = (extras: Record<string, string | undefined> = {}): NodeJS.Proces
|
|||
};
|
||||
|
||||
describe('resolveSandboxConfig', () => {
|
||||
it('returns an n8n-sandbox config by default when serviceUrl is set', () => {
|
||||
const env = baseEnv({
|
||||
N8N_SANDBOX_SERVICE_URL: 'https://sandbox.example.com',
|
||||
N8N_SANDBOX_SERVICE_API_KEY: 'sb_key',
|
||||
});
|
||||
const config = resolveSandboxConfig(env);
|
||||
expect(config).toEqual({
|
||||
enabled: true,
|
||||
provider: 'n8n-sandbox',
|
||||
serviceUrl: 'https://sandbox.example.com',
|
||||
apiKey: 'sb_key',
|
||||
timeout: 300_000,
|
||||
});
|
||||
});
|
||||
|
||||
it('returns a daytona config when DAYTONA env vars are set', () => {
|
||||
const env = baseEnv({
|
||||
N8N_INSTANCE_AI_SANDBOX_PROVIDER: 'daytona',
|
||||
DAYTONA_API_URL: 'https://app.daytona.io/api',
|
||||
DAYTONA_API_KEY: 'dtn_xxx',
|
||||
});
|
||||
|
|
@ -27,6 +43,7 @@ describe('resolveSandboxConfig', () => {
|
|||
|
||||
it('forwards optional image + timeout overrides', () => {
|
||||
const env = baseEnv({
|
||||
N8N_INSTANCE_AI_SANDBOX_PROVIDER: 'daytona',
|
||||
DAYTONA_API_URL: 'https://app.daytona.io/api',
|
||||
DAYTONA_API_KEY: 'dtn_xxx',
|
||||
N8N_INSTANCE_AI_SANDBOX_IMAGE: 'custom/image:1.0',
|
||||
|
|
@ -41,6 +58,7 @@ describe('resolveSandboxConfig', () => {
|
|||
|
||||
it('forwards N8N_INSTANCE_AI_SANDBOX_NAME_PREFIX as namePrefix', () => {
|
||||
const env = baseEnv({
|
||||
N8N_INSTANCE_AI_SANDBOX_PROVIDER: 'daytona',
|
||||
DAYTONA_API_URL: 'https://app.daytona.io/api',
|
||||
DAYTONA_API_KEY: 'dtn_xxx',
|
||||
N8N_INSTANCE_AI_SANDBOX_NAME_PREFIX: 'eval-baseline-daily',
|
||||
|
|
@ -52,6 +70,7 @@ describe('resolveSandboxConfig', () => {
|
|||
|
||||
it('omits namePrefix when N8N_INSTANCE_AI_SANDBOX_NAME_PREFIX is unset', () => {
|
||||
const env = baseEnv({
|
||||
N8N_INSTANCE_AI_SANDBOX_PROVIDER: 'daytona',
|
||||
DAYTONA_API_URL: 'https://app.daytona.io/api',
|
||||
DAYTONA_API_KEY: 'dtn_xxx',
|
||||
});
|
||||
|
|
@ -62,6 +81,7 @@ describe('resolveSandboxConfig', () => {
|
|||
|
||||
it('honors a custom createTimeoutSeconds env override', () => {
|
||||
const env = baseEnv({
|
||||
N8N_INSTANCE_AI_SANDBOX_PROVIDER: 'daytona',
|
||||
DAYTONA_API_URL: 'https://app.daytona.io/api',
|
||||
DAYTONA_API_KEY: 'dtn_xxx',
|
||||
N8N_INSTANCE_AI_SANDBOX_CREATE_TIMEOUT_SECONDS: '1800',
|
||||
|
|
@ -73,6 +93,7 @@ describe('resolveSandboxConfig', () => {
|
|||
|
||||
it('rejects a non-integer createTimeoutSeconds', () => {
|
||||
const env = baseEnv({
|
||||
N8N_INSTANCE_AI_SANDBOX_PROVIDER: 'daytona',
|
||||
DAYTONA_API_URL: 'https://app.daytona.io/api',
|
||||
DAYTONA_API_KEY: 'dtn_xxx',
|
||||
N8N_INSTANCE_AI_SANDBOX_CREATE_TIMEOUT_SECONDS: 'not-a-number',
|
||||
|
|
@ -83,19 +104,24 @@ describe('resolveSandboxConfig', () => {
|
|||
});
|
||||
|
||||
it('throws a clear error when DAYTONA_API_KEY is missing', () => {
|
||||
const env = baseEnv({ DAYTONA_API_URL: 'https://app.daytona.io/api' });
|
||||
const env = baseEnv({
|
||||
N8N_INSTANCE_AI_SANDBOX_PROVIDER: 'daytona',
|
||||
DAYTONA_API_URL: 'https://app.daytona.io/api',
|
||||
});
|
||||
expect(() => resolveSandboxConfig(env)).toThrow(/DAYTONA_API_KEY/);
|
||||
});
|
||||
|
||||
it('throws a clear error when DAYTONA_API_URL is missing', () => {
|
||||
const env = baseEnv({ DAYTONA_API_KEY: 'dtn_xxx' });
|
||||
const env = baseEnv({
|
||||
N8N_INSTANCE_AI_SANDBOX_PROVIDER: 'daytona',
|
||||
DAYTONA_API_KEY: 'dtn_xxx',
|
||||
});
|
||||
expect(() => resolveSandboxConfig(env)).toThrow(/DAYTONA_API_URL/);
|
||||
});
|
||||
|
||||
it('returns a local config when provider=local', () => {
|
||||
it('rejects local provider', () => {
|
||||
const env = baseEnv({ N8N_INSTANCE_AI_SANDBOX_PROVIDER: 'local' });
|
||||
const config = resolveSandboxConfig(env);
|
||||
expect(config).toEqual({ enabled: true, provider: 'local', timeout: 300_000 });
|
||||
expect(() => resolveSandboxConfig(env)).toThrow(/Invalid sandbox provider/);
|
||||
});
|
||||
|
||||
it('returns an n8n-sandbox config when provider=n8n-sandbox with serviceUrl', () => {
|
||||
|
|
@ -114,8 +140,8 @@ describe('resolveSandboxConfig', () => {
|
|||
});
|
||||
});
|
||||
|
||||
it('throws a clear error when provider=n8n-sandbox without serviceUrl', () => {
|
||||
const env = baseEnv({ N8N_INSTANCE_AI_SANDBOX_PROVIDER: 'n8n-sandbox' });
|
||||
it('throws a clear error when default n8n-sandbox provider has no serviceUrl', () => {
|
||||
const env = baseEnv();
|
||||
expect(() => resolveSandboxConfig(env)).toThrow(/N8N_SANDBOX_SERVICE_URL/);
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -19,10 +19,10 @@ const DEFAULT_TIMEOUT_MS = 300_000;
|
|||
* than the SDK's 300s default; 900s avoids spurious eval-run failures.
|
||||
*/
|
||||
const DEFAULT_DAYTONA_CREATE_TIMEOUT_SECONDS = 900;
|
||||
const VALID_PROVIDERS: SandboxProvider[] = ['daytona', 'local', 'n8n-sandbox'];
|
||||
const VALID_PROVIDERS: SandboxProvider[] = ['n8n-sandbox', 'daytona'];
|
||||
|
||||
export function resolveSandboxConfig(env: NodeJS.ProcessEnv): SandboxConfig {
|
||||
const providerRaw = env.N8N_INSTANCE_AI_SANDBOX_PROVIDER ?? 'daytona';
|
||||
const providerRaw = env.N8N_INSTANCE_AI_SANDBOX_PROVIDER ?? 'n8n-sandbox';
|
||||
if (!VALID_PROVIDERS.includes(providerRaw as SandboxProvider)) {
|
||||
throw new Error(
|
||||
`Invalid sandbox provider "${providerRaw}". Set N8N_INSTANCE_AI_SANDBOX_PROVIDER to one of: ${VALID_PROVIDERS.join(', ')}.`,
|
||||
|
|
@ -67,7 +67,7 @@ export function resolveSandboxConfig(env: NodeJS.ProcessEnv): SandboxConfig {
|
|||
const serviceUrl = env.N8N_SANDBOX_SERVICE_URL;
|
||||
if (!serviceUrl) {
|
||||
throw new Error(
|
||||
'N8N_SANDBOX_SERVICE_URL is required for sandbox provider "n8n-sandbox". Set it to the service URL, or pick a different provider via N8N_INSTANCE_AI_SANDBOX_PROVIDER.',
|
||||
'N8N_SANDBOX_SERVICE_URL is required for sandbox provider "n8n-sandbox". Set it to the service URL.',
|
||||
);
|
||||
}
|
||||
const apiKey = env.N8N_SANDBOX_SERVICE_API_KEY;
|
||||
|
|
@ -80,7 +80,10 @@ export function resolveSandboxConfig(env: NodeJS.ProcessEnv): SandboxConfig {
|
|||
};
|
||||
}
|
||||
|
||||
return { enabled: true, provider: 'local', timeout };
|
||||
const exhaustiveProvider: never = provider;
|
||||
throw new Error(
|
||||
`Invalid sandbox provider "${String(exhaustiveProvider)}". Set N8N_INSTANCE_AI_SANDBOX_PROVIDER to one of: ${VALID_PROVIDERS.join(', ')}.`,
|
||||
);
|
||||
}
|
||||
|
||||
function parseTimeout(raw: string | undefined): number | undefined {
|
||||
|
|
|
|||
|
|
@ -35,9 +35,9 @@ export interface WorkflowBuildEvalCase {
|
|||
export interface CapturedWorkflow {
|
||||
/** The WorkflowJSON the agent produced */
|
||||
json: WorkflowJSON;
|
||||
/** Whether the build-workflow tool reported success */
|
||||
/** Whether the submit-workflow tool reported success */
|
||||
success: boolean;
|
||||
/** Errors reported by the build-workflow tool */
|
||||
/** Errors reported by the submit-workflow tool */
|
||||
errors?: string[];
|
||||
}
|
||||
|
||||
|
|
@ -49,7 +49,7 @@ export interface WorkflowBuildEvalResult {
|
|||
testCase: WorkflowBuildEvalCase;
|
||||
/** The agent's final text output */
|
||||
text: string;
|
||||
/** Workflows captured from build-workflow tool calls */
|
||||
/** Workflows captured from submit-workflow tool calls */
|
||||
capturedWorkflows: CapturedWorkflow[];
|
||||
/** Evaluation feedback (binary checks on captured workflows, etc.) */
|
||||
feedback: Feedback[];
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ function createMockContext(
|
|||
userId: 'user-1',
|
||||
workflowService: {
|
||||
get: vi.fn().mockResolvedValue({ id: 'wf-1', name: 'Fetched Name' }),
|
||||
list: vi.fn().mockResolvedValue([]),
|
||||
} as unknown as InstanceAiContext['workflowService'],
|
||||
executionService: {
|
||||
list: vi.fn(),
|
||||
|
|
@ -335,6 +336,125 @@ describe('executions tool', () => {
|
|||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it('runs without HITL when always_allow + workflow name is in the allow-list', async () => {
|
||||
const context = createMockContext({
|
||||
permissions: { runWorkflow: 'always_allow' },
|
||||
allowedRunWorkflowIds: new Set(['wf-recorded']),
|
||||
allowedRunWorkflowNames: new Set(['Replay Created WF']),
|
||||
});
|
||||
(context.workflowService.get as Mock).mockResolvedValue({ name: 'Replay Created WF' });
|
||||
(context.executionService.run as Mock).mockResolvedValue({
|
||||
executionId: 'exec-1',
|
||||
status: 'success',
|
||||
});
|
||||
const suspendFn = vi.fn();
|
||||
|
||||
const tool = createExecutionsTool(context);
|
||||
await executeTool(
|
||||
tool,
|
||||
{ action: 'run' as const, workflowId: 'wf-replayed' },
|
||||
createAgentCtx({ suspend: suspendFn }) as never,
|
||||
);
|
||||
|
||||
expect(suspendFn).not.toHaveBeenCalled();
|
||||
expect(context.executionService.run).toHaveBeenCalledWith('wf-replayed', undefined, {
|
||||
timeout: undefined,
|
||||
});
|
||||
});
|
||||
|
||||
it('matches workflow-name allow-list case-insensitively', async () => {
|
||||
const context = createMockContext({
|
||||
permissions: { runWorkflow: 'always_allow' },
|
||||
allowedRunWorkflowIds: new Set(['wf-recorded']),
|
||||
allowedRunWorkflowNames: new Set(['full execution test']),
|
||||
});
|
||||
(context.workflowService.get as Mock).mockResolvedValue({
|
||||
name: 'Full Execution Test',
|
||||
});
|
||||
(context.executionService.run as Mock).mockResolvedValue({
|
||||
executionId: 'exec-1',
|
||||
status: 'success',
|
||||
});
|
||||
const suspendFn = vi.fn();
|
||||
|
||||
const tool = createExecutionsTool(context);
|
||||
await executeTool(
|
||||
tool,
|
||||
{ action: 'run' as const, workflowId: 'wf-replayed' },
|
||||
createAgentCtx({ suspend: suspendFn }) as never,
|
||||
);
|
||||
|
||||
expect(suspendFn).not.toHaveBeenCalled();
|
||||
expect(context.executionService.run).toHaveBeenCalledWith('wf-replayed', undefined, {
|
||||
timeout: undefined,
|
||||
});
|
||||
});
|
||||
|
||||
it('runs the current replay workflow by name when the recorded workflow id no longer resolves', async () => {
|
||||
const originalE2ETests = process.env.E2E_TESTS;
|
||||
process.env.E2E_TESTS = 'true';
|
||||
|
||||
try {
|
||||
const context = createMockContext({
|
||||
permissions: { runWorkflow: 'always_allow' },
|
||||
allowedRunWorkflowIds: new Set(['wf-recorded']),
|
||||
allowedRunWorkflowNames: new Set(['Replay Created WF']),
|
||||
});
|
||||
(context.workflowService.get as Mock).mockRejectedValue(new Error('not found'));
|
||||
(context.workflowService.list as Mock).mockResolvedValue([
|
||||
{ id: 'wf-current', name: 'Replay Created WF' },
|
||||
]);
|
||||
(context.executionService.run as Mock).mockResolvedValue({
|
||||
executionId: 'exec-1',
|
||||
status: 'success',
|
||||
});
|
||||
const suspendFn = vi.fn();
|
||||
|
||||
const tool = createExecutionsTool(context);
|
||||
await executeTool(
|
||||
tool,
|
||||
{ action: 'run' as const, workflowId: 'wf-recorded' },
|
||||
createAgentCtx({ suspend: suspendFn }) as never,
|
||||
);
|
||||
|
||||
expect(context.workflowService.list).toHaveBeenCalledWith({
|
||||
query: 'Replay Created WF',
|
||||
limit: 10,
|
||||
});
|
||||
expect(suspendFn).not.toHaveBeenCalled();
|
||||
expect(context.executionService.run).toHaveBeenCalledWith('wf-current', undefined, {
|
||||
timeout: undefined,
|
||||
});
|
||||
} finally {
|
||||
if (originalE2ETests === undefined) {
|
||||
delete process.env.E2E_TESTS;
|
||||
} else {
|
||||
process.env.E2E_TESTS = originalE2ETests;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it('still requires HITL when neither workflow id nor name is in the allow-list', async () => {
|
||||
const context = createMockContext({
|
||||
permissions: { runWorkflow: 'always_allow' },
|
||||
allowedRunWorkflowIds: new Set(['wf-recorded']),
|
||||
allowedRunWorkflowNames: new Set(['Allowed WF']),
|
||||
});
|
||||
(context.workflowService.get as Mock).mockResolvedValue({ name: 'Other WF' });
|
||||
const suspendFn = vi.fn();
|
||||
|
||||
const tool = createExecutionsTool(context);
|
||||
const result = await executeTool(
|
||||
tool,
|
||||
{ action: 'run' as const, workflowId: 'wf-replayed' },
|
||||
createAgentCtx({ suspend: suspendFn }) as never,
|
||||
);
|
||||
|
||||
expect(suspendFn).toHaveBeenCalled();
|
||||
expect(context.executionService.run).not.toHaveBeenCalled();
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it('requires HITL when a checkpoint run represents an explicit user-requested execution', async () => {
|
||||
const context = createMockContext({
|
||||
permissions: { runWorkflow: 'always_allow' },
|
||||
|
|
|
|||
|
|
@ -32,10 +32,6 @@ vi.mock('../nodes.tool', () => ({
|
|||
})),
|
||||
}));
|
||||
|
||||
vi.mock('../orchestration/build-workflow-agent.tool', () => ({
|
||||
createBuildWorkflowAgentTool: vi.fn(() => ({ id: 'build-workflow-with-agent' })),
|
||||
}));
|
||||
|
||||
vi.mock('../orchestration/complete-checkpoint.tool', () => ({
|
||||
createCompleteCheckpointTool: vi.fn(() => ({ id: 'complete-checkpoint' })),
|
||||
}));
|
||||
|
|
|
|||
|
|
@ -160,6 +160,39 @@ async function handleGet(context: InstanceAiContext, input: Extract<Input, { act
|
|||
return await context.executionService.getStatus(input.executionId);
|
||||
}
|
||||
|
||||
function normalizeWorkflowName(name: string): string {
|
||||
return name.trim().toLowerCase();
|
||||
}
|
||||
|
||||
function hasWorkflowName(
|
||||
allowList: ReadonlySet<string>,
|
||||
workflowName: string | undefined,
|
||||
): boolean {
|
||||
if (!workflowName) return false;
|
||||
|
||||
const normalizedWorkflowName = normalizeWorkflowName(workflowName);
|
||||
for (const allowedName of allowList) {
|
||||
if (normalizeWorkflowName(allowedName) === normalizedWorkflowName) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
async function findAllowedWorkflowByName(
|
||||
context: InstanceAiContext,
|
||||
allowList: ReadonlySet<string> | undefined,
|
||||
): Promise<{ id: string; name: string } | undefined> {
|
||||
if (process.env.E2E_TESTS !== 'true' || allowList === undefined) return undefined;
|
||||
|
||||
for (const allowedName of allowList) {
|
||||
const workflows = await context.workflowService.list({ query: allowedName, limit: 10 });
|
||||
const match = workflows.find((workflow) => hasWorkflowName(allowList, workflow.name));
|
||||
if (match) return { id: match.id, name: match.name };
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
async function handleRun(
|
||||
context: InstanceAiContext,
|
||||
input: Extract<Input, { action: 'run' }>,
|
||||
|
|
@ -180,18 +213,42 @@ async function handleRun(
|
|||
// is verifying). When the allow-list is unset, `always_allow` applies broadly,
|
||||
// matching the legacy behavior.
|
||||
const allowList = context.allowedRunWorkflowIds;
|
||||
const workflowNameAllowList = context.allowedRunWorkflowNames;
|
||||
let workflowName: string | undefined;
|
||||
let workflowId = input.workflowId;
|
||||
const getWorkflowName = async () => {
|
||||
workflowName ??= await context.workflowService
|
||||
.get(workflowId)
|
||||
.then((wf) => wf.name)
|
||||
.catch(() => undefined);
|
||||
return workflowName;
|
||||
};
|
||||
let allowedByName =
|
||||
context.permissions?.runWorkflow === 'always_allow' &&
|
||||
workflowNameAllowList !== undefined &&
|
||||
hasWorkflowName(workflowNameAllowList, await getWorkflowName());
|
||||
if (
|
||||
context.permissions?.runWorkflow === 'always_allow' &&
|
||||
workflowNameAllowList !== undefined &&
|
||||
!allowedByName &&
|
||||
workflowName === undefined
|
||||
) {
|
||||
const fallbackWorkflow = await findAllowedWorkflowByName(context, workflowNameAllowList);
|
||||
if (fallbackWorkflow) {
|
||||
workflowId = fallbackWorkflow.id;
|
||||
workflowName = fallbackWorkflow.name;
|
||||
allowedByName = true;
|
||||
}
|
||||
}
|
||||
const allowedByScope =
|
||||
context.requireRunWorkflowApproval !== true &&
|
||||
context.permissions?.runWorkflow === 'always_allow' &&
|
||||
(allowList === undefined || allowList.has(input.workflowId));
|
||||
(allowList === undefined || allowList.has(workflowId) || allowedByName);
|
||||
const needsApproval = !allowedByScope;
|
||||
|
||||
// If approval is required and this is the first call, suspend for confirmation
|
||||
if (needsApproval && (resumeData === undefined || resumeData === null)) {
|
||||
const workflowName = await context.workflowService
|
||||
.get(input.workflowId)
|
||||
.then((wf) => wf.name)
|
||||
.catch(() => input.workflowId);
|
||||
const workflowName = (await getWorkflowName()) ?? input.workflowId;
|
||||
return await suspend({
|
||||
requestId: nanoid(),
|
||||
message: `Execute ${workflowName} (ID: ${input.workflowId})`,
|
||||
|
|
@ -210,7 +267,7 @@ async function handleRun(
|
|||
}
|
||||
|
||||
// Approved or always_allow — execute
|
||||
return await context.executionService.run(input.workflowId, input.inputData, {
|
||||
return await context.executionService.run(workflowId, input.inputData, {
|
||||
timeout: input.timeout,
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
import { buildWorkflowInputSchema } from '../build-workflow.tool';
|
||||
|
||||
describe('buildWorkflowInputSchema.patches coercion', () => {
|
||||
const patch = { old_str: 'foo', new_str: 'bar' };
|
||||
|
||||
it('accepts a native array of patches', () => {
|
||||
const parsed = buildWorkflowInputSchema.parse({ patches: [patch] });
|
||||
expect(parsed.patches).toEqual([patch]);
|
||||
});
|
||||
|
||||
it('accepts a JSON-stringified array of patches', () => {
|
||||
const parsed = buildWorkflowInputSchema.parse({ patches: JSON.stringify([patch]) });
|
||||
expect(parsed.patches).toEqual([patch]);
|
||||
});
|
||||
|
||||
it('rejects a non-JSON string with a helpful array-expected error', () => {
|
||||
const result = buildWorkflowInputSchema.safeParse({ patches: 'not-json' });
|
||||
expect(result.success).toBe(false);
|
||||
if (!result.success) {
|
||||
expect(result.error.issues[0].path).toEqual(['patches']);
|
||||
}
|
||||
});
|
||||
|
||||
it('rejects a stringified object (not an array)', () => {
|
||||
const result = buildWorkflowInputSchema.safeParse({ patches: JSON.stringify(patch) });
|
||||
expect(result.success).toBe(false);
|
||||
});
|
||||
|
||||
it('leaves patches undefined when not provided', () => {
|
||||
const parsed = buildWorkflowInputSchema.parse({});
|
||||
expect(parsed.patches).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
|
@ -1503,7 +1503,9 @@ describe('createInstanceAiTraceContext', () => {
|
|||
);
|
||||
|
||||
expect(result).toEqual({ denied: true, payload: suspendPayload });
|
||||
const suspend = writer.getEvents()[1] as TraceToolSuspend;
|
||||
const events = writer.getEvents();
|
||||
expect(events).toHaveLength(2);
|
||||
const suspend = events[1] as TraceToolSuspend;
|
||||
expect(suspend).toEqual({
|
||||
kind: 'tool-suspend',
|
||||
stepId: 1,
|
||||
|
|
@ -1515,6 +1517,65 @@ describe('createInstanceAiTraceContext', () => {
|
|||
});
|
||||
});
|
||||
|
||||
it('records suspend calls before the native suspend interrupts execution', async () => {
|
||||
const writer = new TraceWriter('record-interrupted-suspend');
|
||||
const tracing = createTraceReplayOnlyContext();
|
||||
tracing.replayMode = 'record';
|
||||
tracing.traceWriter = writer;
|
||||
|
||||
const suspendPayload = {
|
||||
requestId: 'request-1',
|
||||
inputType: 'plan-review',
|
||||
message: 'Review the plan',
|
||||
};
|
||||
const interruptibleTool: BuiltTool = {
|
||||
name: 'plan-tool',
|
||||
description: 'Requests approval.',
|
||||
suspendSchema: {},
|
||||
handler: async (_input, context) => {
|
||||
if (!('suspend' in context) || typeof context.suspend !== 'function') {
|
||||
throw new Error('Expected interruptible tool context');
|
||||
}
|
||||
return await context.suspend(suspendPayload);
|
||||
},
|
||||
};
|
||||
|
||||
const wrappedTools = tracing.wrapTools(createToolRegistry([['plan-tool', interruptibleTool]]), {
|
||||
agentRole: 'planner',
|
||||
});
|
||||
const wrappedTool = wrappedTools.get('plan-tool');
|
||||
if (!isExecutableTool(wrappedTool)) {
|
||||
throw new Error('Wrapped plan-tool is not executable');
|
||||
}
|
||||
|
||||
await expect(
|
||||
executeTool(
|
||||
wrappedTool,
|
||||
{ action: 'submit-plan' },
|
||||
{
|
||||
resumeData: undefined,
|
||||
suspend: async (): Promise<never> => {
|
||||
await Promise.resolve();
|
||||
throw new Error('native suspend interrupted');
|
||||
},
|
||||
},
|
||||
),
|
||||
).rejects.toThrow('native suspend interrupted');
|
||||
|
||||
const events = writer.getEvents();
|
||||
expect(events).toHaveLength(2);
|
||||
const suspend = events[1] as TraceToolSuspend;
|
||||
expect(suspend).toEqual({
|
||||
kind: 'tool-suspend',
|
||||
stepId: 1,
|
||||
agentRole: 'planner',
|
||||
toolName: 'plan-tool',
|
||||
input: { action: 'submit-plan' },
|
||||
output: {},
|
||||
suspendPayload,
|
||||
});
|
||||
});
|
||||
|
||||
it('records denied first-call outputs as normal tool calls when suspend is not called', async () => {
|
||||
const writer = new TraceWriter('record-denied-output');
|
||||
const tracing = createTraceReplayOnlyContext();
|
||||
|
|
|
|||
|
|
@ -1278,11 +1278,20 @@ function recordWrapTool(
|
|||
const resumeData = isInterruptibleToolContext(context) ? context.resumeData : undefined;
|
||||
const inputRecord = (input ?? {}) as Record<string, unknown>;
|
||||
let capturedSuspendPayload: Record<string, unknown> | undefined;
|
||||
let recordedSuspend = false;
|
||||
const wrappedContext: NativeToolContext = isInterruptibleToolContext(context)
|
||||
? {
|
||||
...context,
|
||||
suspend: async (suspendPayload: unknown) => {
|
||||
capturedSuspendPayload = isRecord(suspendPayload) ? suspendPayload : {};
|
||||
traceWriter.recordToolSuspend(
|
||||
agentRole,
|
||||
tool.name,
|
||||
inputRecord,
|
||||
{},
|
||||
capturedSuspendPayload,
|
||||
);
|
||||
recordedSuspend = true;
|
||||
return await context.suspend(suspendPayload);
|
||||
},
|
||||
}
|
||||
|
|
@ -1300,13 +1309,15 @@ function recordWrapTool(
|
|||
resumeData as Record<string, unknown>,
|
||||
);
|
||||
} else if (capturedSuspendPayload) {
|
||||
traceWriter.recordToolSuspend(
|
||||
agentRole,
|
||||
tool.name,
|
||||
inputRecord,
|
||||
{},
|
||||
capturedSuspendPayload,
|
||||
);
|
||||
if (!recordedSuspend) {
|
||||
traceWriter.recordToolSuspend(
|
||||
agentRole,
|
||||
tool.name,
|
||||
inputRecord,
|
||||
{},
|
||||
capturedSuspendPayload,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
traceWriter.recordToolCall(agentRole, tool.name, inputRecord, outputRecord);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -960,11 +960,7 @@ function classifyToolCategory(name: string): string {
|
|||
if (name.includes('credential')) return 'credential';
|
||||
if (name.includes('browser')) return 'browser';
|
||||
if (name.includes('data-table')) return 'data-table';
|
||||
if (
|
||||
name.includes('workflow') ||
|
||||
name === DOMAIN_TOOL_IDS.BUILD_WORKFLOW ||
|
||||
name === WORKSPACE_TOOL_IDS.SUBMIT_WORKFLOW
|
||||
) {
|
||||
if (name.includes('workflow') || name === WORKSPACE_TOOL_IDS.SUBMIT_WORKFLOW) {
|
||||
return 'workflow';
|
||||
}
|
||||
if (name === DOMAIN_TOOL_IDS.NODES || name === 'materialize-node-type') return 'node';
|
||||
|
|
|
|||
|
|
@ -738,6 +738,8 @@ export interface InstanceAiContext {
|
|||
* Used by checkpoint follow-up runs to scope the override to the workflows the checkpoint is
|
||||
* verifying — `executions(action="run")` on any other workflow still requires user approval. */
|
||||
allowedRunWorkflowIds?: ReadonlySet<string>;
|
||||
/** Fallback scope for checkpoint follow-up runs when replay/runtime workflow IDs are remapped. */
|
||||
allowedRunWorkflowNames?: ReadonlySet<string>;
|
||||
/** Force `executions(action="run")` through HITL even when a scoped checkpoint override exists. */
|
||||
requireRunWorkflowApproval?: boolean;
|
||||
/** When true, the instance is in read-only mode (source control branchReadOnly). */
|
||||
|
|
|
|||
|
|
@ -3,8 +3,6 @@ import { Workspace } from '@n8n/agents';
|
|||
import { type SandboxConfig, createSandbox, createWorkspace } from '../create-workspace';
|
||||
import { DaytonaFilesystem } from '../daytona-filesystem';
|
||||
import { DaytonaSandbox } from '../daytona-sandbox';
|
||||
import { LocalFilesystem } from '../local-filesystem';
|
||||
import { LocalSandbox } from '../local-sandbox';
|
||||
import { N8nSandboxFilesystem } from '../n8n-sandbox-filesystem';
|
||||
import { N8nSandboxServiceSandbox } from '../n8n-sandbox-sandbox';
|
||||
|
||||
|
|
@ -15,14 +13,8 @@ function getPrivateOptions(value: unknown): Record<string, unknown> {
|
|||
}
|
||||
|
||||
describe('createSandbox', () => {
|
||||
const originalEnv = process.env.NODE_ENV;
|
||||
|
||||
afterEach(() => {
|
||||
process.env.NODE_ENV = originalEnv;
|
||||
});
|
||||
|
||||
it('should return undefined when sandbox is disabled', async () => {
|
||||
const config: SandboxConfig = { enabled: false, provider: 'local' };
|
||||
const config: SandboxConfig = { enabled: false, provider: 'n8n-sandbox' };
|
||||
|
||||
const result = await createSandbox(config);
|
||||
|
||||
|
|
@ -137,26 +129,6 @@ describe('createSandbox', () => {
|
|||
expect(getPrivateOptions(result)).not.toHaveProperty('image');
|
||||
});
|
||||
|
||||
it('should return a LocalSandbox for "local" provider in non-production', async () => {
|
||||
process.env.NODE_ENV = 'development';
|
||||
const config: SandboxConfig = { enabled: true, provider: 'local' };
|
||||
|
||||
const result = await createSandbox(config);
|
||||
|
||||
expect(result).toBeInstanceOf(LocalSandbox);
|
||||
if (!(result instanceof LocalSandbox)) throw new Error('Expected LocalSandbox');
|
||||
expect(result.workingDirectory).toMatch(/workspace$/);
|
||||
});
|
||||
|
||||
it('should throw in production when provider is "local"', async () => {
|
||||
process.env.NODE_ENV = 'production';
|
||||
const config: SandboxConfig = { enabled: true, provider: 'local' };
|
||||
|
||||
await expect(createSandbox(config)).rejects.toThrow(
|
||||
'LocalSandbox (provider: "local") is not allowed in production. Use "daytona" provider for isolated sandbox execution.',
|
||||
);
|
||||
});
|
||||
|
||||
it('should return an N8nSandboxServiceSandbox for "n8n-sandbox" provider', async () => {
|
||||
const config: SandboxConfig = {
|
||||
enabled: true,
|
||||
|
|
@ -184,16 +156,6 @@ describe('createWorkspace', () => {
|
|||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should wrap LocalSandbox with LocalFilesystem', () => {
|
||||
const sandbox = new LocalSandbox({ workingDirectory: './workspace' });
|
||||
|
||||
const result = createWorkspace(sandbox);
|
||||
|
||||
expect(result).toBeInstanceOf(Workspace);
|
||||
expect(result?.sandbox).toBe(sandbox);
|
||||
expect(result?.filesystem).toBeInstanceOf(LocalFilesystem);
|
||||
});
|
||||
|
||||
it('should wrap DaytonaSandbox with DaytonaFilesystem', () => {
|
||||
const sandbox = new DaytonaSandbox({ apiKey: 'key' });
|
||||
|
||||
|
|
|
|||
|
|
@ -425,7 +425,7 @@ describe('DaytonaSandbox (remote sandbox gone during refetch)', () => {
|
|||
const sandbox = await startAndStageRemoteGone();
|
||||
|
||||
await expect(sandbox.destroy()).resolves.toBeUndefined();
|
||||
// Second destroy goes through the no-local-sandbox branch. Need a fresh
|
||||
// Second destroy goes through the no cached sandbox branch. Need a fresh
|
||||
// queued error since the previous one was consumed.
|
||||
queueNotFound();
|
||||
await expect(sandbox.destroy()).resolves.toBeUndefined();
|
||||
|
|
|
|||
|
|
@ -1,67 +0,0 @@
|
|||
import { mkdtemp, mkdir, readFile, rm, symlink, writeFile } from 'node:fs/promises';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { join } from 'node:path';
|
||||
|
||||
import { LocalFilesystem } from '../local-filesystem';
|
||||
|
||||
describe('LocalFilesystem', () => {
|
||||
let basePath: string;
|
||||
let outsidePath: string;
|
||||
|
||||
beforeEach(async () => {
|
||||
basePath = await mkdtemp(join(tmpdir(), 'n8n-local-fs-'));
|
||||
outsidePath = await mkdtemp(join(tmpdir(), 'n8n-local-fs-outside-'));
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await rm(basePath, { force: true, recursive: true });
|
||||
await rm(outsidePath, { force: true, recursive: true });
|
||||
});
|
||||
|
||||
it('rejects reads through a symlink that points outside the workspace', async () => {
|
||||
const target = join(outsidePath, 'secret.txt');
|
||||
await writeFile(target, 'secret');
|
||||
await symlink(target, join(basePath, 'link.txt'));
|
||||
|
||||
const filesystem = new LocalFilesystem({ basePath });
|
||||
|
||||
await expect(filesystem.readFile('link.txt', { encoding: 'utf-8' })).rejects.toThrow(
|
||||
/escapes local workspace root/,
|
||||
);
|
||||
});
|
||||
|
||||
it('rejects writes through an existing symlink that points outside the workspace', async () => {
|
||||
const target = join(outsidePath, 'secret.txt');
|
||||
await writeFile(target, 'secret');
|
||||
await symlink(target, join(basePath, 'link.txt'));
|
||||
|
||||
const filesystem = new LocalFilesystem({ basePath });
|
||||
|
||||
await expect(filesystem.writeFile('link.txt', 'changed')).rejects.toThrow(
|
||||
/escapes local workspace root/,
|
||||
);
|
||||
await expect(readFile(target, 'utf-8')).resolves.toBe('secret');
|
||||
});
|
||||
|
||||
it('rejects recursive writes through a symlinked parent directory outside the workspace', async () => {
|
||||
await symlink(outsidePath, join(basePath, 'outside'));
|
||||
|
||||
const filesystem = new LocalFilesystem({ basePath });
|
||||
|
||||
await expect(
|
||||
filesystem.writeFile('outside/new.txt', 'changed', { recursive: true }),
|
||||
).rejects.toThrow(/escapes local workspace root/);
|
||||
});
|
||||
|
||||
it('rejects recursive directory traversal through a symlink outside the workspace', async () => {
|
||||
await mkdir(join(outsidePath, 'nested'), { recursive: true });
|
||||
await writeFile(join(outsidePath, 'nested', 'secret.txt'), 'secret');
|
||||
await symlink(outsidePath, join(basePath, 'outside'));
|
||||
|
||||
const filesystem = new LocalFilesystem({ basePath });
|
||||
|
||||
await expect(filesystem.readdir('.', { recursive: true })).rejects.toThrow(
|
||||
/escapes local workspace root/,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
@ -43,6 +43,24 @@ function createSetupContext(
|
|||
} as unknown as InstanceAiContext;
|
||||
}
|
||||
|
||||
function createFilesystemWorkspace(
|
||||
writeFile: Mock<(...args: [string, string | Buffer, { recursive?: boolean }?]) => Promise<void>>,
|
||||
mkdir?: Mock<(...args: [string, { recursive?: boolean }?]) => Promise<void>>,
|
||||
): SandboxWorkspace {
|
||||
return {
|
||||
filesystem: {
|
||||
provider: 'daytona',
|
||||
writeFile,
|
||||
mkdir:
|
||||
mkdir ??
|
||||
vi.fn<(...args: [string, { recursive?: boolean }?]) => Promise<void>>(async () => {}),
|
||||
},
|
||||
sandbox: {
|
||||
executeCommand: vi.fn(),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function createLocalWorkspace(
|
||||
writeFile: Mock<(...args: [string, string | Buffer, { recursive?: boolean }?]) => Promise<void>>,
|
||||
mkdir?: Mock<(...args: [string, { recursive?: boolean }?]) => Promise<void>>,
|
||||
|
|
@ -183,10 +201,10 @@ describe('setupSandboxWorkspace', () => {
|
|||
(...args: [string, string | Buffer, { recursive?: boolean }?]) => Promise<void>
|
||||
>(async () => {});
|
||||
|
||||
await setupSandboxWorkspace(createLocalWorkspace(writeFile), createSetupContext());
|
||||
await setupSandboxWorkspace(createFilesystemWorkspace(writeFile), createSetupContext());
|
||||
|
||||
const markerCallIndex = writeFile.mock.calls.findIndex(
|
||||
([path]) => path === '/sandbox/.sandbox-initialized',
|
||||
([path]) => path === '/home/daytona/workspace/.sandbox-initialized',
|
||||
);
|
||||
expect(markerCallIndex).toBeGreaterThan(-1);
|
||||
expect(writeFile.mock.invocationCallOrder[markerCallIndex]).toBeGreaterThan(
|
||||
|
|
@ -217,11 +235,15 @@ describe('setupSandboxWorkspace', () => {
|
|||
);
|
||||
|
||||
// Setup context defaults to an empty workflow list, mirroring a fresh DB.
|
||||
await setupSandboxWorkspace(createLocalWorkspace(writeFile, mkdir), createSetupContext());
|
||||
await setupSandboxWorkspace(createFilesystemWorkspace(writeFile, mkdir), createSetupContext());
|
||||
|
||||
const mkdirPaths = mkdir.mock.calls.map(([path]) => path);
|
||||
expect(mkdirPaths).toEqual(
|
||||
expect.arrayContaining(['/sandbox/src', '/sandbox/chunks', '/sandbox/workflows']),
|
||||
expect.arrayContaining([
|
||||
'/home/daytona/workspace/src',
|
||||
'/home/daytona/workspace/chunks',
|
||||
'/home/daytona/workspace/workflows',
|
||||
]),
|
||||
);
|
||||
});
|
||||
|
||||
|
|
@ -324,9 +346,9 @@ describe('setupSandboxWorkspace', () => {
|
|||
workflowService.list.mockResolvedValue([{ id: '../escape' }]);
|
||||
workflowService.get.mockResolvedValue({ id: '../escape' });
|
||||
|
||||
await expect(setupSandboxWorkspace(createLocalWorkspace(writeFile), context)).rejects.toThrow(
|
||||
'Sandbox workspace setup failed during write-workspace-files',
|
||||
);
|
||||
await expect(
|
||||
setupSandboxWorkspace(createFilesystemWorkspace(writeFile), context),
|
||||
).rejects.toThrow('Sandbox workspace setup failed during write-workspace-files');
|
||||
});
|
||||
|
||||
it('does not write the initialized marker when npm install fails', async () => {
|
||||
|
|
@ -349,11 +371,11 @@ describe('setupSandboxWorkspace', () => {
|
|||
>(async () => {});
|
||||
|
||||
await expect(
|
||||
setupSandboxWorkspace(createLocalWorkspace(writeFile), createSetupContext()),
|
||||
setupSandboxWorkspace(createFilesystemWorkspace(writeFile), createSetupContext()),
|
||||
).rejects.toThrow('Sandbox npm install failed');
|
||||
|
||||
expect(writeFile.mock.calls).not.toContainEqual([
|
||||
'/sandbox/.sandbox-initialized',
|
||||
'/home/daytona/workspace/.sandbox-initialized',
|
||||
expect.any(String),
|
||||
{ recursive: true },
|
||||
]);
|
||||
|
|
@ -378,13 +400,13 @@ describe('setupSandboxWorkspace', () => {
|
|||
.fn<(...args: [string, string | Buffer, { recursive?: boolean }?]) => Promise<void>>()
|
||||
.mockImplementation(async (path) => {
|
||||
await Promise.resolve();
|
||||
if (path === '/sandbox/.sandbox-initialized') {
|
||||
if (path === '/home/daytona/workspace/.sandbox-initialized') {
|
||||
throw new Error('primary write failed');
|
||||
}
|
||||
});
|
||||
|
||||
await expect(
|
||||
setupSandboxWorkspace(createLocalWorkspace(writeFile), createSetupContext()),
|
||||
setupSandboxWorkspace(createFilesystemWorkspace(writeFile), createSetupContext()),
|
||||
).resolves.toBe(true);
|
||||
|
||||
expect(
|
||||
|
|
@ -416,13 +438,13 @@ describe('setupSandboxWorkspace', () => {
|
|||
.fn<(...args: [string, string | Buffer, { recursive?: boolean }?]) => Promise<void>>()
|
||||
.mockImplementation(async (path) => {
|
||||
await Promise.resolve();
|
||||
if (path === '/sandbox/.sandbox-initialized') {
|
||||
if (path === '/home/daytona/workspace/.sandbox-initialized') {
|
||||
throw new Error('primary write failed');
|
||||
}
|
||||
});
|
||||
|
||||
const error = await setupSandboxWorkspace(
|
||||
createLocalWorkspace(writeFile),
|
||||
createFilesystemWorkspace(writeFile),
|
||||
createSetupContext(),
|
||||
).catch((caught: unknown) => caught);
|
||||
|
||||
|
|
@ -431,7 +453,7 @@ describe('setupSandboxWorkspace', () => {
|
|||
'Sandbox workspace setup failed during write-initialization-marker',
|
||||
);
|
||||
expect((error as Error).message).toContain(
|
||||
'Failed to write sandbox workspace file "/sandbox/.sandbox-initialized"',
|
||||
'Failed to write sandbox workspace file "/home/daytona/workspace/.sandbox-initialized"',
|
||||
);
|
||||
expect((error as Error).message).toContain('primary write failed');
|
||||
expect((error as Error).message).toContain('command fallback failed');
|
||||
|
|
@ -489,7 +511,7 @@ describe('setupSandboxWorkspace', () => {
|
|||
});
|
||||
|
||||
describe('getWorkspaceRoot', () => {
|
||||
it('uses the resolved filesystem base path for lazy local workspaces', async () => {
|
||||
it('uses the resolved filesystem base path for lazy workspaces', async () => {
|
||||
let initialized = false;
|
||||
const executeCommand = vi.fn();
|
||||
const init = vi.fn<(...args: []) => Promise<void>>(async () => {
|
||||
|
|
@ -645,6 +667,5 @@ describe('getPromptWorkspaceRoot', () => {
|
|||
it('returns the provider-specific workspace root used in agent prompts', () => {
|
||||
expect(getPromptWorkspaceRoot('daytona')).toBe('/home/daytona/workspace');
|
||||
expect(getPromptWorkspaceRoot('n8n-sandbox')).toBe('/home/user/workspace');
|
||||
expect(getPromptWorkspaceRoot('local')).toBe('.');
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -4,13 +4,11 @@ import type { ErrorReporter, Logger } from '../logger';
|
|||
import { DaytonaFilesystem } from './daytona-filesystem';
|
||||
import { DaytonaSandbox } from './daytona-sandbox';
|
||||
import { loadDaytona } from './lazy-daytona';
|
||||
import { LocalFilesystem } from './local-filesystem';
|
||||
import { LocalSandbox } from './local-sandbox';
|
||||
import { N8nSandboxFilesystem } from './n8n-sandbox-filesystem';
|
||||
import { N8nSandboxServiceSandbox } from './n8n-sandbox-sandbox';
|
||||
import { SnapshotManager } from './snapshot-manager';
|
||||
|
||||
export type SandboxProvider = 'daytona' | 'local' | 'n8n-sandbox';
|
||||
export type SandboxProvider = 'daytona' | 'n8n-sandbox';
|
||||
|
||||
interface SandboxConfigBase {
|
||||
provider: SandboxProvider;
|
||||
|
|
@ -49,23 +47,16 @@ interface DaytonaSandboxConfig extends SandboxConfigBase {
|
|||
logger?: Logger;
|
||||
}
|
||||
|
||||
interface LocalSandboxConfig extends SandboxConfigBase {
|
||||
enabled: true;
|
||||
provider: 'local';
|
||||
}
|
||||
|
||||
interface N8nSandboxConfig extends SandboxConfigBase {
|
||||
enabled: true;
|
||||
provider: 'n8n-sandbox';
|
||||
serviceUrl?: string;
|
||||
serviceUrl: string;
|
||||
apiKey?: string;
|
||||
}
|
||||
|
||||
export type SandboxConfig =
|
||||
| DisabledSandboxConfig
|
||||
| DaytonaSandboxConfig
|
||||
| LocalSandboxConfig
|
||||
| N8nSandboxConfig;
|
||||
export type SandboxConfig = DisabledSandboxConfig | DaytonaSandboxConfig | N8nSandboxConfig;
|
||||
|
||||
export type SandboxInstance = DaytonaSandbox | N8nSandboxServiceSandbox;
|
||||
|
||||
export interface CreateSandboxOptions {
|
||||
logger?: Logger;
|
||||
|
|
@ -84,13 +75,13 @@ const NOOP_LOGGER: Logger = {
|
|||
* Create a sandbox instance based on config.
|
||||
* Returns undefined when sandbox is disabled.
|
||||
*
|
||||
* - 'daytona': Isolated Docker container via Daytona API (production)
|
||||
* - 'local': Direct host execution via LocalSandbox (development only, no isolation)
|
||||
* - 'daytona': Isolated Docker container via Daytona API.
|
||||
* - 'n8n-sandbox': n8n sandbox service-backed container.
|
||||
*/
|
||||
export async function createSandbox(
|
||||
config: SandboxConfig,
|
||||
options: CreateSandboxOptions = {},
|
||||
): Promise<DaytonaSandbox | LocalSandbox | N8nSandboxServiceSandbox | undefined> {
|
||||
): Promise<SandboxInstance | undefined> {
|
||||
if (!config.enabled) return undefined;
|
||||
|
||||
if (config.provider === 'daytona') {
|
||||
|
|
@ -146,35 +137,19 @@ export async function createSandbox(
|
|||
});
|
||||
}
|
||||
|
||||
// Local fallback for development — no isolation, runs commands directly on host.
|
||||
// Block in production to prevent unrestricted host command execution.
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
throw new Error(
|
||||
'LocalSandbox (provider: "local") is not allowed in production. Use "daytona" provider for isolated sandbox execution.',
|
||||
);
|
||||
}
|
||||
|
||||
return new LocalSandbox({
|
||||
workingDirectory: './workspace',
|
||||
});
|
||||
const exhaustiveProvider: never = config;
|
||||
throw new Error(`Unsupported sandbox provider: ${JSON.stringify(exhaustiveProvider)}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a Workspace wrapping a sandbox instance.
|
||||
* When sandbox is a LocalSandbox, also provides a local filesystem.
|
||||
*/
|
||||
export function createWorkspace(
|
||||
sandbox: DaytonaSandbox | LocalSandbox | N8nSandboxServiceSandbox | undefined,
|
||||
): Workspace | undefined {
|
||||
export function createWorkspace(sandbox: SandboxInstance | undefined): Workspace | undefined {
|
||||
if (!sandbox) return undefined;
|
||||
|
||||
const createWorkspaceWithFilesystem = (filesystem: WorkspaceFilesystem) =>
|
||||
new Workspace({ sandbox, filesystem });
|
||||
|
||||
if (sandbox instanceof LocalSandbox) {
|
||||
return createWorkspaceWithFilesystem(new LocalFilesystem({ basePath: './workspace' }));
|
||||
}
|
||||
|
||||
if (sandbox instanceof N8nSandboxServiceSandbox) {
|
||||
return createWorkspaceWithFilesystem(new N8nSandboxFilesystem(sandbox));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,312 +0,0 @@
|
|||
import type {
|
||||
CopyOptions,
|
||||
FileContent,
|
||||
FileEntry,
|
||||
FileStat,
|
||||
ListOptions,
|
||||
ProviderStatus,
|
||||
ReadOptions,
|
||||
RemoveOptions,
|
||||
WriteOptions,
|
||||
} from '@n8n/agents';
|
||||
import { BaseFilesystem } from '@n8n/agents';
|
||||
import {
|
||||
access,
|
||||
copyFile,
|
||||
cp,
|
||||
lstat,
|
||||
mkdir,
|
||||
readdir,
|
||||
readFile,
|
||||
realpath,
|
||||
rename,
|
||||
rm,
|
||||
stat,
|
||||
writeFile,
|
||||
} from 'node:fs/promises';
|
||||
import { basename, dirname, isAbsolute, join, relative, resolve } from 'node:path';
|
||||
|
||||
export interface LocalFilesystemOptions {
|
||||
id?: string;
|
||||
basePath: string;
|
||||
contained?: boolean;
|
||||
readOnly?: boolean;
|
||||
instructions?: string;
|
||||
}
|
||||
|
||||
function toBuffer(content: FileContent): Buffer {
|
||||
return typeof content === 'string' ? Buffer.from(content, 'utf-8') : Buffer.from(content);
|
||||
}
|
||||
|
||||
function isPathInside(childPath: string, parentPath: string): boolean {
|
||||
const rel = relative(parentPath, childPath);
|
||||
return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));
|
||||
}
|
||||
|
||||
function isNotFoundError(error: unknown): boolean {
|
||||
if (typeof error !== 'object' || error === null) return false;
|
||||
return Reflect.get(error, 'code') === 'ENOENT';
|
||||
}
|
||||
|
||||
class PathEscapesWorkspaceError extends Error {}
|
||||
|
||||
export class LocalFilesystem extends BaseFilesystem {
|
||||
readonly id: string;
|
||||
readonly name = 'LocalFilesystem';
|
||||
readonly provider = 'local';
|
||||
readonly readOnly?: boolean;
|
||||
readonly basePath: string;
|
||||
status: ProviderStatus = 'pending';
|
||||
|
||||
private readonly contained: boolean;
|
||||
private readonly instructions?: string;
|
||||
private realBasePath: string | undefined;
|
||||
|
||||
constructor(options: LocalFilesystemOptions) {
|
||||
super();
|
||||
this.id = options.id ?? `local-fs-${Buffer.from(resolve(options.basePath)).toString('hex')}`;
|
||||
this.basePath = resolve(options.basePath);
|
||||
this.contained = options.contained ?? true;
|
||||
this.readOnly = options.readOnly;
|
||||
this.instructions = options.instructions;
|
||||
}
|
||||
|
||||
override async init(): Promise<void> {
|
||||
await mkdir(this.basePath, { recursive: true });
|
||||
this.realBasePath = await realpath(this.basePath);
|
||||
}
|
||||
|
||||
async readFile(path: string, options?: ReadOptions): Promise<string | Buffer> {
|
||||
await this.ensureReady();
|
||||
const content = await readFile(await this.resolveExistingPath(path));
|
||||
return options?.encoding ? content.toString(options.encoding) : content;
|
||||
}
|
||||
|
||||
async writeFile(path: string, content: FileContent, options?: WriteOptions): Promise<void> {
|
||||
await this.ensureReady();
|
||||
this.assertWritable();
|
||||
const filePath = await this.resolveWritablePath(path);
|
||||
if (options?.recursive) {
|
||||
await mkdir(dirname(filePath), { recursive: true });
|
||||
}
|
||||
if (options?.overwrite === false && (await this.exists(path))) {
|
||||
throw new Error(`File already exists: ${path}`);
|
||||
}
|
||||
await writeFile(filePath, toBuffer(content));
|
||||
}
|
||||
|
||||
async appendFile(path: string, content: FileContent): Promise<void> {
|
||||
await this.ensureReady();
|
||||
this.assertWritable();
|
||||
const filePath = await this.resolveWritablePath(path);
|
||||
await writeFile(filePath, toBuffer(content), { flag: 'a' });
|
||||
}
|
||||
|
||||
async deleteFile(path: string, options?: RemoveOptions): Promise<void> {
|
||||
await this.ensureReady();
|
||||
this.assertWritable();
|
||||
const filePath = options?.force
|
||||
? await this.resolveWritablePath(path)
|
||||
: await this.resolveExistingPath(path);
|
||||
await rm(filePath, {
|
||||
recursive: options?.recursive ?? false,
|
||||
force: options?.force ?? false,
|
||||
});
|
||||
}
|
||||
|
||||
async copyFile(src: string, dest: string, options?: CopyOptions): Promise<void> {
|
||||
await this.ensureReady();
|
||||
this.assertWritable();
|
||||
const srcPath = await this.resolveExistingPath(src);
|
||||
const destPath = await this.resolveWritablePath(dest);
|
||||
const srcStat = await stat(srcPath);
|
||||
if (options?.recursive || srcStat.isDirectory()) {
|
||||
await cp(srcPath, destPath, {
|
||||
recursive: true,
|
||||
force: options?.overwrite ?? true,
|
||||
errorOnExist: options?.overwrite === false,
|
||||
});
|
||||
return;
|
||||
}
|
||||
await mkdir(dirname(destPath), { recursive: true });
|
||||
if (options?.overwrite === false && (await this.exists(dest))) {
|
||||
throw new Error(`File already exists: ${dest}`);
|
||||
}
|
||||
await copyFile(srcPath, destPath);
|
||||
}
|
||||
|
||||
async moveFile(src: string, dest: string, options?: CopyOptions): Promise<void> {
|
||||
await this.ensureReady();
|
||||
this.assertWritable();
|
||||
const srcPath = await this.resolveExistingPath(src);
|
||||
const destPath = await this.resolveWritablePath(dest);
|
||||
if (options?.overwrite === false && (await this.exists(dest))) {
|
||||
throw new Error(`Path already exists: ${dest}`);
|
||||
}
|
||||
await mkdir(dirname(destPath), { recursive: true });
|
||||
await rename(srcPath, destPath);
|
||||
}
|
||||
|
||||
async mkdir(path: string, options?: { recursive?: boolean }): Promise<void> {
|
||||
await this.ensureReady();
|
||||
this.assertWritable();
|
||||
await mkdir(await this.resolveWritablePath(path), { recursive: options?.recursive ?? false });
|
||||
}
|
||||
|
||||
async rmdir(path: string, options?: RemoveOptions): Promise<void> {
|
||||
await this.deleteFile(path, { recursive: options?.recursive, force: options?.force });
|
||||
}
|
||||
|
||||
async readdir(path: string, options?: ListOptions): Promise<FileEntry[]> {
|
||||
await this.ensureReady();
|
||||
const entries = await this.readDirectory(
|
||||
await this.resolveExistingPath(path),
|
||||
options?.recursive ?? false,
|
||||
);
|
||||
const extension = options?.extension
|
||||
? options.extension.startsWith('.')
|
||||
? options.extension
|
||||
: `.${options.extension}`
|
||||
: undefined;
|
||||
|
||||
return entries.filter(
|
||||
(entry) => !extension || entry.type === 'directory' || entry.name.endsWith(extension),
|
||||
);
|
||||
}
|
||||
|
||||
async exists(path: string): Promise<boolean> {
|
||||
await this.ensureReady();
|
||||
try {
|
||||
await access(await this.resolveExistingPath(path));
|
||||
return true;
|
||||
} catch (error) {
|
||||
if (error instanceof PathEscapesWorkspaceError) throw error;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async stat(path: string): Promise<FileStat> {
|
||||
await this.ensureReady();
|
||||
const filePath = await this.resolveExistingPath(path);
|
||||
const info = await stat(filePath);
|
||||
return {
|
||||
name: basename(filePath),
|
||||
path,
|
||||
type: info.isDirectory() ? 'directory' : 'file',
|
||||
size: info.size,
|
||||
createdAt: info.birthtime,
|
||||
modifiedAt: info.mtime,
|
||||
};
|
||||
}
|
||||
|
||||
getMountConfig(): { type: 'local'; basePath: string } {
|
||||
return { type: 'local', basePath: this.basePath };
|
||||
}
|
||||
|
||||
getInstructions(): string {
|
||||
return (
|
||||
this.instructions ??
|
||||
`Local filesystem rooted at ${this.basePath}. Use paths relative to this directory.`
|
||||
);
|
||||
}
|
||||
|
||||
private resolvePathLexically(inputPath: string): string {
|
||||
const filePath = isAbsolute(inputPath)
|
||||
? resolve(inputPath)
|
||||
: resolve(join(this.basePath, inputPath));
|
||||
if (this.contained && !isPathInside(filePath, this.basePath)) {
|
||||
throw new Error(`Path escapes local workspace root: ${inputPath}`);
|
||||
}
|
||||
return filePath;
|
||||
}
|
||||
|
||||
private async resolveExistingPath(inputPath: string): Promise<string> {
|
||||
const filePath = this.resolvePathLexically(inputPath);
|
||||
await this.assertExistingPathContained(filePath, inputPath);
|
||||
return filePath;
|
||||
}
|
||||
|
||||
private async resolveWritablePath(inputPath: string): Promise<string> {
|
||||
const filePath = this.resolvePathLexically(inputPath);
|
||||
if (!this.contained) return filePath;
|
||||
|
||||
try {
|
||||
await this.assertExistingPathContained(filePath, inputPath);
|
||||
return filePath;
|
||||
} catch (error) {
|
||||
if (!isNotFoundError(error)) throw error;
|
||||
}
|
||||
|
||||
await this.assertNearestExistingParentContained(filePath, inputPath);
|
||||
return filePath;
|
||||
}
|
||||
|
||||
private async assertExistingPathContained(filePath: string, inputPath: string): Promise<void> {
|
||||
if (!this.contained) return;
|
||||
const [realFilePath, realBasePath] = await Promise.all([
|
||||
realpath(filePath),
|
||||
this.getRealBasePath(),
|
||||
]);
|
||||
if (!isPathInside(realFilePath, realBasePath)) {
|
||||
throw new PathEscapesWorkspaceError(`Path escapes local workspace root: ${inputPath}`);
|
||||
}
|
||||
}
|
||||
|
||||
private async assertNearestExistingParentContained(
|
||||
filePath: string,
|
||||
inputPath: string,
|
||||
): Promise<void> {
|
||||
let parentPath = dirname(filePath);
|
||||
while (true) {
|
||||
try {
|
||||
await this.assertExistingPathContained(parentPath, inputPath);
|
||||
return;
|
||||
} catch (error) {
|
||||
if (!isNotFoundError(error)) throw error;
|
||||
}
|
||||
|
||||
const nextParentPath = dirname(parentPath);
|
||||
if (nextParentPath === parentPath)
|
||||
throw new Error(`Path has no existing parent: ${inputPath}`);
|
||||
parentPath = nextParentPath;
|
||||
}
|
||||
}
|
||||
|
||||
private async getRealBasePath(): Promise<string> {
|
||||
this.realBasePath ??= await realpath(this.basePath);
|
||||
return this.realBasePath;
|
||||
}
|
||||
|
||||
private assertWritable(): void {
|
||||
if (this.readOnly) {
|
||||
throw new Error(`Filesystem "${this.id}" is read-only`);
|
||||
}
|
||||
}
|
||||
|
||||
private async readDirectory(path: string, recursive: boolean): Promise<FileEntry[]> {
|
||||
const dirents = await readdir(path, { withFileTypes: true });
|
||||
const entries: FileEntry[] = [];
|
||||
for (const dirent of dirents) {
|
||||
const entryPath = join(path, dirent.name);
|
||||
await this.assertExistingPathContained(entryPath, entryPath);
|
||||
const linkInfo = await lstat(entryPath);
|
||||
const info = await stat(entryPath);
|
||||
const isDirectory = info.isDirectory();
|
||||
entries.push({
|
||||
name: dirent.name,
|
||||
type: isDirectory ? 'directory' : 'file',
|
||||
size: info.size,
|
||||
});
|
||||
if (recursive && isDirectory && !linkInfo.isSymbolicLink()) {
|
||||
const nested = await this.readDirectory(entryPath, true);
|
||||
entries.push(
|
||||
...nested.map((entry) => ({
|
||||
...entry,
|
||||
name: join(dirent.name, entry.name),
|
||||
})),
|
||||
);
|
||||
}
|
||||
}
|
||||
return entries;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,158 +0,0 @@
|
|||
import type {
|
||||
CommandResult,
|
||||
ExecuteCommandOptions,
|
||||
ProviderStatus,
|
||||
SandboxInfo,
|
||||
} from '@n8n/agents';
|
||||
import { BaseSandbox } from '@n8n/agents';
|
||||
import { spawn } from 'node:child_process';
|
||||
import { randomUUID } from 'node:crypto';
|
||||
import { mkdir } from 'node:fs/promises';
|
||||
import { resolve } from 'node:path';
|
||||
|
||||
export interface LocalSandboxOptions {
|
||||
id?: string;
|
||||
workingDirectory?: string;
|
||||
env?: NodeJS.ProcessEnv;
|
||||
timeout?: number;
|
||||
instructions?: string;
|
||||
}
|
||||
|
||||
function shellEscape(value: string): string {
|
||||
return /^[A-Za-z0-9_./:=@+-]+$/.test(value) ? value : `'${value.replace(/'/g, "'\\''")}'`;
|
||||
}
|
||||
|
||||
function toShellCommand(command: string, args: string[] = []): string {
|
||||
if (args.length === 0) return command;
|
||||
return [command, ...args.map((arg) => shellEscape(arg))].join(' ');
|
||||
}
|
||||
|
||||
export class LocalSandbox extends BaseSandbox {
|
||||
readonly id: string;
|
||||
readonly name = 'LocalSandbox';
|
||||
readonly provider = 'local';
|
||||
status: ProviderStatus = 'pending';
|
||||
readonly workingDirectory: string;
|
||||
|
||||
private readonly env?: NodeJS.ProcessEnv;
|
||||
private readonly timeout?: number;
|
||||
private readonly instructions?: string;
|
||||
private readonly createdAt = new Date();
|
||||
|
||||
constructor(options: LocalSandboxOptions = {}) {
|
||||
super();
|
||||
this.id = options.id ?? `local-sandbox-${randomUUID()}`;
|
||||
this.workingDirectory = resolve(options.workingDirectory ?? './workspace');
|
||||
this.env = options.env;
|
||||
this.timeout = options.timeout;
|
||||
this.instructions = options.instructions;
|
||||
}
|
||||
|
||||
override async start(): Promise<void> {
|
||||
await mkdir(this.workingDirectory, { recursive: true });
|
||||
}
|
||||
|
||||
override async stop(): Promise<void> {}
|
||||
|
||||
override async destroy(): Promise<void> {}
|
||||
|
||||
override async executeCommand(
|
||||
command: string,
|
||||
args: string[] = [],
|
||||
options?: ExecuteCommandOptions,
|
||||
): Promise<CommandResult> {
|
||||
await this.ensureRunning();
|
||||
return await this.runCommand(toShellCommand(command, args), options);
|
||||
}
|
||||
|
||||
getInfo(): SandboxInfo {
|
||||
return {
|
||||
id: this.id,
|
||||
name: this.name,
|
||||
provider: this.provider,
|
||||
status: this.status,
|
||||
createdAt: this.createdAt,
|
||||
metadata: {
|
||||
workingDirectory: this.workingDirectory,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
override getInstructions(): string {
|
||||
return (
|
||||
this.instructions ??
|
||||
`Local sandbox executing host commands in ${this.workingDirectory}. This provider is for development only.`
|
||||
);
|
||||
}
|
||||
|
||||
private async runCommand(
|
||||
command: string,
|
||||
options?: ExecuteCommandOptions,
|
||||
): Promise<CommandResult> {
|
||||
const startedAt = Date.now();
|
||||
const cwd = options?.cwd ?? this.workingDirectory;
|
||||
const env: NodeJS.ProcessEnv = {
|
||||
PATH: process.env.PATH,
|
||||
...this.env,
|
||||
...options?.env,
|
||||
};
|
||||
|
||||
return await new Promise<CommandResult>((resolveResult, reject) => {
|
||||
const child = spawn(command, {
|
||||
shell: true,
|
||||
cwd,
|
||||
env,
|
||||
stdio: ['pipe', 'pipe', 'pipe'],
|
||||
});
|
||||
|
||||
let stdout = '';
|
||||
let stderr = '';
|
||||
let timedOut = false;
|
||||
let killed = false;
|
||||
|
||||
const timeoutMs = options?.timeout ?? this.timeout;
|
||||
const timeoutHandle =
|
||||
timeoutMs === undefined
|
||||
? undefined
|
||||
: setTimeout(() => {
|
||||
timedOut = true;
|
||||
killed = child.kill('SIGTERM');
|
||||
}, timeoutMs);
|
||||
|
||||
const abort = () => {
|
||||
killed = child.kill('SIGTERM');
|
||||
};
|
||||
options?.abortSignal?.addEventListener('abort', abort, { once: true });
|
||||
|
||||
child.stdout.on('data', (chunk: Buffer) => {
|
||||
const text = chunk.toString('utf-8');
|
||||
stdout += text;
|
||||
options?.onStdout?.(text);
|
||||
});
|
||||
|
||||
child.stderr.on('data', (chunk: Buffer) => {
|
||||
const text = chunk.toString('utf-8');
|
||||
stderr += text;
|
||||
options?.onStderr?.(text);
|
||||
});
|
||||
|
||||
child.on('error', reject);
|
||||
|
||||
child.on('close', (code) => {
|
||||
if (timeoutHandle) clearTimeout(timeoutHandle);
|
||||
options?.abortSignal?.removeEventListener('abort', abort);
|
||||
const exitCode = code ?? (timedOut ? 124 : 1);
|
||||
resolveResult({
|
||||
command,
|
||||
success: exitCode === 0 && !timedOut,
|
||||
exitCode,
|
||||
stdout,
|
||||
stderr,
|
||||
executionTimeMs: Date.now() - startedAt,
|
||||
timedOut,
|
||||
killed,
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -2,11 +2,10 @@
|
|||
* Sandbox File I/O Utilities
|
||||
*
|
||||
* Thin wrappers around sandbox command execution for file operations.
|
||||
* Works with both Daytona (remote) and Local (host) sandbox providers,
|
||||
* since both support executeCommand / processes.spawn.
|
||||
* Works with sandbox providers that support executeCommand / processes.spawn.
|
||||
*
|
||||
* We avoid workspace.filesystem because Daytona workspaces don't have one —
|
||||
* only LocalSandbox gets a filesystem attached in createWorkspace().
|
||||
* command fallback keeps setup compatible with command-only providers.
|
||||
*/
|
||||
|
||||
interface SandboxCommandResult {
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ const NOOP_LOGGER: Logger = {
|
|||
error: () => {},
|
||||
debug: () => {},
|
||||
};
|
||||
|
||||
type SandboxWorkspaceSetupStep =
|
||||
| 'resolve-workspace-root'
|
||||
| 'read-initialization-marker'
|
||||
|
|
@ -108,10 +109,6 @@ export function getPromptWorkspaceRoot(provider: SandboxProvider): string {
|
|||
return DAYTONA_WORKSPACE_ROOT;
|
||||
case 'n8n-sandbox':
|
||||
return N8N_SANDBOX_WORKSPACE_ROOT;
|
||||
case 'local':
|
||||
// Local workspaces are already scoped to the resolved root; use `.` so
|
||||
// paths like `./knowledge-base/...` resolve under `<root>/`, not `<root>/workspace/`.
|
||||
return '.';
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -234,42 +231,6 @@ export const PACKAGE_JSON = buildPackageJson(
|
|||
isLinkWorkspaceSdkEnabled() ? null : SANDBOX_SDK_VERSION,
|
||||
);
|
||||
|
||||
/**
|
||||
* Return the absolute on-disk path of a host-installed package, or `null`
|
||||
* if it can't be resolved. Used by the local provider to point the sandbox
|
||||
* at the workspace SDK via a `file:` reference instead of the npm registry.
|
||||
*/
|
||||
function resolveHostDepPath(name: string): string | null {
|
||||
try {
|
||||
const pkgPath = hostRequire.resolve(`${name}/package.json`);
|
||||
return pkgPath.slice(0, pkgPath.length - '/package.json'.length);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a PACKAGE_JSON that points `@n8n/workflow-sdk` at its host-resolved
|
||||
* location via `file:` — so the local provider picks up workspace SDK
|
||||
* changes after `pnpm build` without needing a publish.
|
||||
*
|
||||
* Falls back to the registry-pinned PACKAGE_JSON if the SDK can't be
|
||||
* resolved on disk (e.g. a stripped-down test harness).
|
||||
*/
|
||||
function buildLocalProviderPackageJson(): string {
|
||||
const sdkPath = resolveHostDepPath('@n8n/workflow-sdk');
|
||||
if (!sdkPath) return PACKAGE_JSON;
|
||||
return buildPackageJson(`file:${sdkPath}`);
|
||||
}
|
||||
|
||||
function getSandboxProvider(workspace: SandboxWorkspace): string | undefined {
|
||||
return workspace.filesystem?.provider ?? workspace.sandbox?.provider;
|
||||
}
|
||||
|
||||
function buildWorkspacePackageJson(workspace: SandboxWorkspace): string {
|
||||
return getSandboxProvider(workspace) === 'local' ? buildLocalProviderPackageJson() : PACKAGE_JSON;
|
||||
}
|
||||
|
||||
let sdkTarballPromise: Promise<WorkspaceSdkTarball | null> | null = null;
|
||||
|
||||
export async function linkWorkspaceSdkIfEnabled(
|
||||
|
|
@ -277,7 +238,7 @@ export async function linkWorkspaceSdkIfEnabled(
|
|||
root: string,
|
||||
logger?: Logger,
|
||||
): Promise<void> {
|
||||
if (!isLinkWorkspaceSdkEnabled() || getSandboxProvider(workspace) === 'local') return;
|
||||
if (!isLinkWorkspaceSdkEnabled()) return;
|
||||
|
||||
sdkTarballPromise ??= packWorkspaceSdk(logger ?? NOOP_LOGGER).catch((error: unknown) => {
|
||||
sdkTarballPromise = null;
|
||||
|
|
@ -559,11 +520,7 @@ export async function setupSandboxWorkspace(
|
|||
|
||||
const files = new Map<string, string>();
|
||||
|
||||
// Config files. Local provider runs on the dev host, so point the SDK at
|
||||
// its workspace location via `file:` — this makes SDK changes visible in
|
||||
// the sandbox after `pnpm build`, without a publish. Daytona/n8n-sandbox
|
||||
// stay on the registry-pinned PACKAGE_JSON (they can't see the host FS).
|
||||
files.set('package.json', buildWorkspacePackageJson(workspace));
|
||||
files.set('package.json', PACKAGE_JSON);
|
||||
files.set('tsconfig.json', TSCONFIG_JSON);
|
||||
files.set('build.mjs', BUILD_MJS);
|
||||
|
||||
|
|
|
|||
|
|
@ -25,9 +25,11 @@ describe('InstanceAiSettingsService', () => {
|
|||
subAgentMaxSteps: 10,
|
||||
mcpServers: '',
|
||||
sandboxEnabled: false,
|
||||
sandboxProvider: '',
|
||||
sandboxProvider: 'n8n-sandbox',
|
||||
sandboxImage: '',
|
||||
sandboxTimeout: 60,
|
||||
n8nSandboxServiceUrl: 'http://sandbox-api:8080',
|
||||
n8nSandboxServiceApiKey: '',
|
||||
localGatewayDisabled: false,
|
||||
} as unknown as InstanceAiConfig,
|
||||
deployment: { type: 'default' },
|
||||
|
|
@ -44,6 +46,15 @@ describe('InstanceAiSettingsService', () => {
|
|||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
Object.assign(globalConfig.instanceAi, {
|
||||
sandboxEnabled: false,
|
||||
sandboxProvider: 'n8n-sandbox',
|
||||
n8nSandboxServiceUrl: 'http://sandbox-api:8080',
|
||||
n8nSandboxServiceApiKey: '',
|
||||
mcpServers: '',
|
||||
browserMcp: false,
|
||||
});
|
||||
globalConfig.deployment.type = 'default';
|
||||
service = new InstanceAiSettingsService(
|
||||
globalConfig as never,
|
||||
settingsRepository,
|
||||
|
|
@ -91,6 +102,66 @@ describe('InstanceAiSettingsService', () => {
|
|||
|
||||
await expect(service.updateAdminSettings({ sandboxEnabled: true })).resolves.toBeDefined();
|
||||
});
|
||||
|
||||
it('should require a service URL when enabling n8n sandbox', async () => {
|
||||
aiService.isProxyEnabled.mockReturnValue(false);
|
||||
globalConfig.instanceAi.n8nSandboxServiceUrl = '';
|
||||
|
||||
await expect(service.updateAdminSettings({ sandboxEnabled: true })).rejects.toThrow(
|
||||
/N8N_SANDBOX_SERVICE_URL/,
|
||||
);
|
||||
});
|
||||
|
||||
it('should allow unrelated admin updates when existing n8n sandbox URL is missing', async () => {
|
||||
aiService.isProxyEnabled.mockReturnValue(false);
|
||||
settingsRepository.upsert.mockResolvedValue(undefined as never);
|
||||
globalConfig.instanceAi.sandboxEnabled = true;
|
||||
globalConfig.instanceAi.sandboxProvider = 'n8n-sandbox';
|
||||
globalConfig.instanceAi.n8nSandboxServiceUrl = '';
|
||||
|
||||
await expect(
|
||||
service.updateAdminSettings({ localGatewayDisabled: true }),
|
||||
).resolves.toMatchObject({
|
||||
localGatewayDisabled: true,
|
||||
});
|
||||
});
|
||||
|
||||
it('should allow disabling n8n sandbox when the service URL is missing', async () => {
|
||||
aiService.isProxyEnabled.mockReturnValue(false);
|
||||
settingsRepository.upsert.mockResolvedValue(undefined as never);
|
||||
globalConfig.instanceAi.sandboxEnabled = true;
|
||||
globalConfig.instanceAi.sandboxProvider = 'n8n-sandbox';
|
||||
globalConfig.instanceAi.n8nSandboxServiceUrl = '';
|
||||
|
||||
await expect(service.updateAdminSettings({ sandboxEnabled: false })).resolves.toMatchObject({
|
||||
sandboxEnabled: false,
|
||||
});
|
||||
});
|
||||
|
||||
it('should reject switching an enabled sandbox to n8n-sandbox without a service URL', async () => {
|
||||
aiService.isProxyEnabled.mockReturnValue(false);
|
||||
globalConfig.instanceAi.sandboxEnabled = true;
|
||||
globalConfig.instanceAi.sandboxProvider = 'daytona';
|
||||
globalConfig.instanceAi.n8nSandboxServiceUrl = '';
|
||||
|
||||
await expect(service.updateAdminSettings({ sandboxProvider: 'n8n-sandbox' })).rejects.toThrow(
|
||||
/N8N_SANDBOX_SERVICE_URL/,
|
||||
);
|
||||
});
|
||||
|
||||
it('should expose workflow builder as unavailable when n8n sandbox URL is missing', () => {
|
||||
globalConfig.instanceAi.sandboxEnabled = true;
|
||||
globalConfig.instanceAi.sandboxProvider = 'n8n-sandbox';
|
||||
globalConfig.instanceAi.n8nSandboxServiceUrl = '';
|
||||
|
||||
expect(service.getSandboxStatus()).toEqual({
|
||||
enabled: true,
|
||||
provider: 'n8n-sandbox',
|
||||
workflowBuilderAvailable: false,
|
||||
unavailableReason:
|
||||
'N8N_SANDBOX_SERVICE_URL is required when Instance AI sandbox provider is n8n-sandbox.',
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('instance-ai-settings-updated event', () => {
|
||||
|
|
|
|||
|
|
@ -106,6 +106,32 @@ describe('InstanceAiTestController', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('getIdleState', () => {
|
||||
it('should report idle when there is no running work', () => {
|
||||
instanceAiService.hasRunningWorkForTest.mockReturnValue(false);
|
||||
|
||||
const result = controller.getIdleState();
|
||||
|
||||
expect(instanceAiService.hasRunningWorkForTest).toHaveBeenCalled();
|
||||
expect(result).toEqual({ idle: true });
|
||||
});
|
||||
|
||||
it('should report non-idle when there is running work', () => {
|
||||
instanceAiService.hasRunningWorkForTest.mockReturnValue(true);
|
||||
|
||||
const result = controller.getIdleState();
|
||||
|
||||
expect(instanceAiService.hasRunningWorkForTest).toHaveBeenCalled();
|
||||
expect(result).toEqual({ idle: false });
|
||||
});
|
||||
|
||||
it('should throw ForbiddenError when trace replay is not enabled', () => {
|
||||
delete process.env.E2E_TESTS;
|
||||
|
||||
expect(() => controller.getIdleState()).toThrow(ForbiddenError);
|
||||
});
|
||||
});
|
||||
|
||||
describe('clearToolTrace', () => {
|
||||
it('should clear trace events for slug', () => {
|
||||
const req = mock<Request>();
|
||||
|
|
@ -173,6 +199,7 @@ describe('InstanceAiTestController', () => {
|
|||
const result = await controller.reset();
|
||||
|
||||
expect(instanceAiService.cancelAllBackgroundTasks).toHaveBeenCalled();
|
||||
expect(instanceAiService.clearTraceContextsForTest).toHaveBeenCalled();
|
||||
expect(instanceAiService.clearThreadState).toHaveBeenCalledWith('t1');
|
||||
expect(instanceAiService.clearThreadState).toHaveBeenCalledWith('t2');
|
||||
expect(queryBuilder.delete).toHaveBeenCalled();
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ jest.mock('@n8n/instance-ai', () => {
|
|||
import type { InstanceAiAgentNode, InstanceAiEvent } from '@n8n/api-types';
|
||||
import type { User } from '@n8n/db';
|
||||
import {
|
||||
buildAgentTreeFromEvents,
|
||||
createAllTools,
|
||||
createLazyRuntimeWorkspace,
|
||||
createLazyWorkspaceRuntimeSkillSource,
|
||||
|
|
@ -827,6 +828,13 @@ describe('InstanceAiService — runtime workspace setup', () => {
|
|||
}),
|
||||
);
|
||||
(createLazyWorkspaceRuntimeSkillSource as jest.Mock).mockImplementation(({ source }) => source);
|
||||
(loadInstanceAiRuntimeSkillSource as jest.Mock).mockImplementation(() => ({
|
||||
registry: {
|
||||
skillsHash: 'runtime-skills-hash',
|
||||
skills: [{ id: 'data-table-manager' }],
|
||||
},
|
||||
loadSkill: jest.fn(),
|
||||
}));
|
||||
});
|
||||
|
||||
it('serializes workspace creation for concurrent calls on the same thread', async () => {
|
||||
|
|
@ -1034,6 +1042,7 @@ describe('InstanceAiService — runtime workspace setup', () => {
|
|||
}>;
|
||||
settingsService: {
|
||||
getAdminSettings: jest.Mock;
|
||||
getSandboxStatus: jest.Mock;
|
||||
isLocalGatewayDisabledForUser: jest.Mock;
|
||||
getPermissions: jest.Mock;
|
||||
};
|
||||
|
|
@ -1071,6 +1080,12 @@ describe('InstanceAiService — runtime workspace setup', () => {
|
|||
};
|
||||
service.settingsService = {
|
||||
getAdminSettings: jest.fn(() => ({ localGatewayDisabled: false, sandboxEnabled: true })),
|
||||
getSandboxStatus: jest.fn(() => ({
|
||||
enabled: true,
|
||||
provider: 'n8n-sandbox',
|
||||
workflowBuilderAvailable: true,
|
||||
unavailableReason: null,
|
||||
})),
|
||||
isLocalGatewayDisabledForUser: jest.fn(async () => false),
|
||||
getPermissions: jest.fn(() => ({})),
|
||||
};
|
||||
|
|
@ -1170,6 +1185,34 @@ describe('InstanceAiService — runtime workspace setup', () => {
|
|||
expect(createWorkspace).toHaveBeenCalledWith(sandbox);
|
||||
expect(workspace.init).toHaveBeenCalledTimes(1);
|
||||
expect(setupSandboxWorkspace).toHaveBeenCalledTimes(1);
|
||||
|
||||
(createLazyRuntimeWorkspace as jest.Mock).mockClear();
|
||||
(createLazyWorkspaceRuntimeSkillSource as jest.Mock).mockClear();
|
||||
(createSandbox as jest.Mock).mockClear();
|
||||
(setupSandboxWorkspace as jest.Mock).mockClear();
|
||||
(loadInstanceAiRuntimeSkillSource as jest.Mock).mockClear();
|
||||
service.settingsService.getSandboxStatus.mockReturnValue({
|
||||
enabled: true,
|
||||
provider: 'n8n-sandbox',
|
||||
workflowBuilderAvailable: false,
|
||||
unavailableReason: 'N8N_SANDBOX_SERVICE_URL is required.',
|
||||
});
|
||||
|
||||
const unavailableEnvironment = await service.createExecutionEnvironment(
|
||||
fakeUser,
|
||||
'thread-2',
|
||||
'run-2',
|
||||
new AbortController().signal,
|
||||
);
|
||||
|
||||
expect(unavailableEnvironment.orchestrationContext.workspace).toBeUndefined();
|
||||
expect(unavailableEnvironment.orchestrationContext.runtimeSkills?.registry.skills).toEqual([
|
||||
{ id: 'data-table-manager' },
|
||||
]);
|
||||
expect(createLazyRuntimeWorkspace).not.toHaveBeenCalled();
|
||||
expect(createLazyWorkspaceRuntimeSkillSource).not.toHaveBeenCalled();
|
||||
expect(createSandbox).not.toHaveBeenCalled();
|
||||
expect(setupSandboxWorkspace).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -2075,6 +2118,23 @@ describe('InstanceAiService — terminal outcome replay', () => {
|
|||
});
|
||||
|
||||
describe('InstanceAiService — agent tree snapshots', () => {
|
||||
beforeEach(() => {
|
||||
(buildAgentTreeFromEvents as jest.Mock).mockImplementation(
|
||||
(events: Array<{ type: string; payload?: { text?: string } }>) => ({
|
||||
agentId: 'agent-001',
|
||||
role: 'orchestrator',
|
||||
status: 'completed',
|
||||
textContent: events
|
||||
.map((event) => (event.type === 'text-delta' ? (event.payload?.text ?? '') : ''))
|
||||
.join(''),
|
||||
reasoning: '',
|
||||
toolCalls: [],
|
||||
children: [],
|
||||
timeline: [],
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
it('falls back to persisted run ids when an old background group mapping was pruned', async () => {
|
||||
const service = createSnapshotService();
|
||||
const terminalEvent: InstanceAiEvent = {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,36 @@
|
|||
import { OperationalError } from 'n8n-workflow';
|
||||
|
||||
import {
|
||||
N8N_SANDBOX_SERVICE_URL_REQUIRED_MESSAGE,
|
||||
normalizeSandboxProvider,
|
||||
requireN8nSandboxServiceUrl,
|
||||
} from '../sandbox-provider';
|
||||
|
||||
describe('sandbox-provider', () => {
|
||||
describe('normalizeSandboxProvider', () => {
|
||||
it('returns supported sandbox providers unchanged', () => {
|
||||
expect(normalizeSandboxProvider('n8n-sandbox')).toBe('n8n-sandbox');
|
||||
expect(normalizeSandboxProvider('daytona')).toBe('daytona');
|
||||
});
|
||||
|
||||
it('falls back to n8n-sandbox for unsupported values', () => {
|
||||
expect(normalizeSandboxProvider('local')).toBe('n8n-sandbox');
|
||||
expect(normalizeSandboxProvider(undefined)).toBe('n8n-sandbox');
|
||||
});
|
||||
});
|
||||
|
||||
describe('requireN8nSandboxServiceUrl', () => {
|
||||
it('trims and returns a configured service URL', () => {
|
||||
expect(requireN8nSandboxServiceUrl(' http://sandbox-api:8080 ')).toBe(
|
||||
'http://sandbox-api:8080',
|
||||
);
|
||||
});
|
||||
|
||||
it('throws an operational error when the service URL is missing', () => {
|
||||
expect(() => requireN8nSandboxServiceUrl(' ')).toThrow(OperationalError);
|
||||
expect(() => requireN8nSandboxServiceUrl(' ')).toThrow(
|
||||
N8N_SANDBOX_SERVICE_URL_REQUIRED_MESSAGE,
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -145,6 +145,86 @@ describe('TraceReplayState', () => {
|
|||
expect(result).toEqual(writerEvents);
|
||||
});
|
||||
|
||||
it('should merge preserved events with active writer events', () => {
|
||||
const state = new TraceReplayState();
|
||||
state.loadEvents('my-slug', [{ kind: 'header' }, { kind: 'tool-call', stepId: 1 }]);
|
||||
const entries = [
|
||||
{
|
||||
traceSlug: 'my-slug',
|
||||
tracing: { traceWriter: { getEvents: () => [{ kind: 'tool-resume', stepId: 2 }] } },
|
||||
},
|
||||
];
|
||||
|
||||
const result = state.getEventsWithWriterFallback(
|
||||
'my-slug',
|
||||
entries as Iterable<{ traceSlug?: string; tracing: InstanceAiTraceContext }>,
|
||||
);
|
||||
|
||||
expect(result).toEqual([
|
||||
{ kind: 'header' },
|
||||
{ kind: 'tool-call', stepId: 1 },
|
||||
{ kind: 'tool-resume', stepId: 2 },
|
||||
]);
|
||||
});
|
||||
|
||||
it('should de-dupe exact tool events while merging preserved and writer events', () => {
|
||||
const duplicate = { kind: 'tool-call', stepId: 1, agentRole: 'orchestrator', toolName: 'x' };
|
||||
const state = new TraceReplayState();
|
||||
state.loadEvents('my-slug', [{ kind: 'header' }, duplicate]);
|
||||
const entries = [
|
||||
{
|
||||
traceSlug: 'my-slug',
|
||||
tracing: { traceWriter: { getEvents: () => [{ kind: 'header' }, duplicate] } },
|
||||
},
|
||||
];
|
||||
|
||||
const result = state.getEventsWithWriterFallback(
|
||||
'my-slug',
|
||||
entries as Iterable<{ traceSlug?: string; tracing: InstanceAiTraceContext }>,
|
||||
);
|
||||
|
||||
expect(result).toEqual([{ kind: 'header' }, duplicate]);
|
||||
});
|
||||
|
||||
it('should not let an active header-only writer hide preserved tool events', () => {
|
||||
const state = new TraceReplayState();
|
||||
state.loadEvents('my-slug', [{ kind: 'header' }, { kind: 'tool-suspend', stepId: 1 }]);
|
||||
const entries = [
|
||||
{
|
||||
traceSlug: 'my-slug',
|
||||
tracing: { traceWriter: { getEvents: () => [{ kind: 'header' }] } },
|
||||
},
|
||||
];
|
||||
|
||||
const result = state.getEventsWithWriterFallback(
|
||||
'my-slug',
|
||||
entries as Iterable<{ traceSlug?: string; tracing: InstanceAiTraceContext }>,
|
||||
);
|
||||
|
||||
expect(result).toEqual([{ kind: 'header' }, { kind: 'tool-suspend', stepId: 1 }]);
|
||||
});
|
||||
|
||||
it('should de-dupe header-only events from shared writers', () => {
|
||||
const state = new TraceReplayState();
|
||||
const entries = [
|
||||
{
|
||||
traceSlug: 'my-slug',
|
||||
tracing: { traceWriter: { getEvents: () => [{ kind: 'header' }] } },
|
||||
},
|
||||
{
|
||||
traceSlug: 'my-slug',
|
||||
tracing: { traceWriter: { getEvents: () => [{ kind: 'header' }] } },
|
||||
},
|
||||
];
|
||||
|
||||
const result = state.getEventsWithWriterFallback(
|
||||
'my-slug',
|
||||
entries as Iterable<{ traceSlug?: string; tracing: InstanceAiTraceContext }>,
|
||||
);
|
||||
|
||||
expect(result).toEqual([{ kind: 'header' }]);
|
||||
});
|
||||
|
||||
it('should fall back to preserved events when no writers match', () => {
|
||||
const state = new TraceReplayState();
|
||||
state.loadEvents('my-slug', [{ kind: 'header' }]);
|
||||
|
|
@ -196,7 +276,7 @@ describe('TraceReplayState', () => {
|
|||
entries as Iterable<{ traceSlug?: string; tracing: InstanceAiTraceContext }>,
|
||||
);
|
||||
|
||||
expect(result).toEqual(writerEvents);
|
||||
expect(result).toEqual([{ kind: 'header' }, ...writerEvents]);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -224,6 +304,18 @@ describe('TraceReplayState', () => {
|
|||
expect(tracing.idRemapper).toBeDefined();
|
||||
});
|
||||
|
||||
it('should set record mode when only a header event is loaded', async () => {
|
||||
process.env.E2E_TESTS = 'true';
|
||||
const state = new TraceReplayState();
|
||||
state.loadEvents('test', [{ kind: 'header' }]);
|
||||
const tracing = {} as Record<string, unknown>;
|
||||
|
||||
await state.configureReplayMode(tracing as unknown as InstanceAiTraceContext);
|
||||
|
||||
expect(tracing.replayMode).toBe('record');
|
||||
expect(tracing.traceWriter).toBeDefined();
|
||||
});
|
||||
|
||||
it('should set record mode when no events are loaded', async () => {
|
||||
process.env.E2E_TESTS = 'true';
|
||||
const state = new TraceReplayState();
|
||||
|
|
@ -263,22 +355,54 @@ describe('TraceReplayState', () => {
|
|||
expect(tracing1.idRemapper).toBe(tracing2.idRemapper);
|
||||
});
|
||||
|
||||
it('should reuse shared TraceWriter for the same recording slug', async () => {
|
||||
process.env.E2E_TESTS = 'true';
|
||||
const state = new TraceReplayState();
|
||||
state.activateSlug('test');
|
||||
|
||||
const tracing1 = {} as Record<string, unknown>;
|
||||
const tracing2 = {} as Record<string, unknown>;
|
||||
|
||||
await state.configureReplayMode(tracing1 as unknown as InstanceAiTraceContext);
|
||||
await state.configureReplayMode(tracing2 as unknown as InstanceAiTraceContext);
|
||||
|
||||
expect(tracing1.traceWriter).toBe(tracing2.traceWriter);
|
||||
});
|
||||
|
||||
it('should clear shared state when slug changes via clearEvents', async () => {
|
||||
process.env.E2E_TESTS = 'true';
|
||||
const state = new TraceReplayState();
|
||||
state.loadEvents('test-a', [{ kind: 'header' }, { kind: 'tool-call' }]);
|
||||
state.loadEvents('test-a', [{ kind: 'header' }, { kind: 'tool-call', stepId: 1 }]);
|
||||
|
||||
const tracing1 = {} as Record<string, unknown>;
|
||||
await state.configureReplayMode(tracing1 as unknown as InstanceAiTraceContext);
|
||||
const firstIndex = tracing1.traceIndex;
|
||||
|
||||
state.clearEvents('test-a');
|
||||
state.loadEvents('test-b', [{ kind: 'header' }, { kind: 'tool-call' }]);
|
||||
state.loadEvents('test-b', [{ kind: 'header' }, { kind: 'tool-call', stepId: 1 }]);
|
||||
|
||||
const tracing2 = {} as Record<string, unknown>;
|
||||
await state.configureReplayMode(tracing2 as unknown as InstanceAiTraceContext);
|
||||
|
||||
expect(tracing2.traceIndex).not.toBe(firstIndex);
|
||||
});
|
||||
|
||||
it('should clear shared writer state when slug changes via clearEvents', async () => {
|
||||
process.env.E2E_TESTS = 'true';
|
||||
const state = new TraceReplayState();
|
||||
state.activateSlug('test-a');
|
||||
|
||||
const tracing1 = {} as Record<string, unknown>;
|
||||
await state.configureReplayMode(tracing1 as unknown as InstanceAiTraceContext);
|
||||
const firstWriter = tracing1.traceWriter;
|
||||
|
||||
state.clearEvents('test-a');
|
||||
state.activateSlug('test-b');
|
||||
|
||||
const tracing2 = {} as Record<string, unknown>;
|
||||
await state.configureReplayMode(tracing2 as unknown as InstanceAiTraceContext);
|
||||
|
||||
expect(tracing2.traceWriter).not.toBe(firstWriter);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import type {
|
|||
InstanceAiUserPreferencesUpdateRequest,
|
||||
InstanceAiModelCredential,
|
||||
InstanceAiPermissions,
|
||||
InstanceAiSandboxProvider,
|
||||
} from '@n8n/api-types';
|
||||
import { Logger } from '@n8n/backend-common';
|
||||
import { GlobalConfig } from '@n8n/config';
|
||||
|
|
@ -24,10 +25,22 @@ import { EventService } from '@/events/event.service';
|
|||
import { AiService } from '@/services/ai.service';
|
||||
import { UserService } from '@/services/user.service';
|
||||
|
||||
import {
|
||||
N8N_SANDBOX_SERVICE_URL_REQUIRED_MESSAGE,
|
||||
normalizeSandboxProvider,
|
||||
} from './sandbox-provider';
|
||||
|
||||
const ADMIN_SETTINGS_KEY = 'instanceAi.settings';
|
||||
|
||||
type UserInstanceAiPreferences = NonNullable<IUserSettings['instanceAi']>;
|
||||
|
||||
export interface InstanceAiSandboxStatus {
|
||||
enabled: boolean;
|
||||
provider: InstanceAiSandboxProvider;
|
||||
workflowBuilderAvailable: boolean;
|
||||
unavailableReason: string | null;
|
||||
}
|
||||
|
||||
/** Credential types we support and their model provider mapping. */
|
||||
const CREDENTIAL_TO_MODEL_PROVIDER: Record<string, string> = {
|
||||
openAiApi: 'openai',
|
||||
|
|
@ -122,6 +135,7 @@ export class InstanceAiSettingsService {
|
|||
|
||||
/** Load persisted settings from DB and apply to the singleton config. Call on module init. */
|
||||
async loadFromDb(): Promise<void> {
|
||||
this.config.sandboxProvider = normalizeSandboxProvider(this.config.sandboxProvider);
|
||||
const envSnapshot = {
|
||||
sandboxEnabled: this.config.sandboxEnabled,
|
||||
sandboxProvider: this.config.sandboxProvider,
|
||||
|
|
@ -141,14 +155,17 @@ export class InstanceAiSettingsService {
|
|||
const overridden =
|
||||
c.sandboxEnabled !== envSnapshot.sandboxEnabled ||
|
||||
c.sandboxProvider !== envSnapshot.sandboxProvider;
|
||||
Container.get(Logger)
|
||||
.scoped('instance-ai')
|
||||
.info(
|
||||
`Sandbox: enabled=${c.sandboxEnabled} provider=${c.sandboxProvider}` +
|
||||
(overridden
|
||||
? ` (DB override; env was enabled=${envSnapshot.sandboxEnabled} provider=${envSnapshot.sandboxProvider})`
|
||||
: ' (from env)'),
|
||||
);
|
||||
const logger = Container.get(Logger).scoped('instance-ai');
|
||||
logger.info(
|
||||
`Sandbox: enabled=${c.sandboxEnabled} provider=${c.sandboxProvider}` +
|
||||
(overridden
|
||||
? ` (DB override; env was enabled=${envSnapshot.sandboxEnabled} provider=${envSnapshot.sandboxProvider})`
|
||||
: ' (from env)'),
|
||||
);
|
||||
const sandboxStatus = this.getSandboxStatus();
|
||||
if (sandboxStatus.unavailableReason) {
|
||||
logger.warn(`Sandbox unavailable: ${sandboxStatus.unavailableReason}`);
|
||||
}
|
||||
}
|
||||
|
||||
// ── Admin settings ────────────────────────────────────────────────────
|
||||
|
|
@ -161,7 +178,7 @@ export class InstanceAiSettingsService {
|
|||
permissions: { ...this.permissions },
|
||||
mcpServers: c.mcpServers,
|
||||
sandboxEnabled: c.sandboxEnabled,
|
||||
sandboxProvider: c.sandboxProvider,
|
||||
sandboxProvider: normalizeSandboxProvider(c.sandboxProvider),
|
||||
sandboxImage: c.sandboxImage,
|
||||
sandboxTimeout: c.sandboxTimeout,
|
||||
daytonaCredentialId: this.adminDaytonaCredentialId,
|
||||
|
|
@ -187,6 +204,7 @@ export class InstanceAiSettingsService {
|
|||
'proxy',
|
||||
);
|
||||
}
|
||||
this.validateAdminSettingsUpdate(update);
|
||||
const c = this.config;
|
||||
const previousMcpServers = c.mcpServers;
|
||||
if (update.enabled !== undefined) this.enabled = update.enabled;
|
||||
|
|
@ -415,6 +433,22 @@ export class InstanceAiSettingsService {
|
|||
return this.config.localGatewayDisabled;
|
||||
}
|
||||
|
||||
/** Whether workflow building can use the required sandbox workspace. */
|
||||
getSandboxStatus(): InstanceAiSandboxStatus {
|
||||
const provider = normalizeSandboxProvider(this.config.sandboxProvider);
|
||||
const unavailableReason = this.getSandboxUnavailableReason(
|
||||
this.config.sandboxEnabled,
|
||||
provider,
|
||||
);
|
||||
|
||||
return {
|
||||
enabled: this.config.sandboxEnabled,
|
||||
provider,
|
||||
workflowBuilderAvailable: this.config.sandboxEnabled && unavailableReason === null,
|
||||
unavailableReason,
|
||||
};
|
||||
}
|
||||
|
||||
/** Whether Instance AI chat and main UI are enabled (settings always available when module loads). */
|
||||
isInstanceAiEnabled(): boolean {
|
||||
return this.enabled;
|
||||
|
|
@ -514,6 +548,45 @@ export class InstanceAiSettingsService {
|
|||
}
|
||||
}
|
||||
|
||||
private validateAdminSettingsUpdate(update: InstanceAiAdminSettingsUpdateRequest): void {
|
||||
const c = this.config;
|
||||
const touchesSandboxSettings =
|
||||
update.sandboxEnabled !== undefined ||
|
||||
update.sandboxProvider !== undefined ||
|
||||
update.sandboxImage !== undefined ||
|
||||
update.sandboxTimeout !== undefined ||
|
||||
update.daytonaCredentialId !== undefined ||
|
||||
update.n8nSandboxCredentialId !== undefined;
|
||||
if (!touchesSandboxSettings) {
|
||||
return;
|
||||
}
|
||||
|
||||
// `update.sandboxProvider` is already enum-validated by the request DTO; we only
|
||||
// need the resolved provider here to enforce the cross-field service-URL rule,
|
||||
// which spans the request body and env-backed config and can't live in the schema.
|
||||
const sandboxProvider = update.sandboxProvider ?? normalizeSandboxProvider(c.sandboxProvider);
|
||||
const sandboxEnabled = update.sandboxEnabled ?? c.sandboxEnabled;
|
||||
const unavailableReason = this.getSandboxUnavailableReason(sandboxEnabled, sandboxProvider);
|
||||
if (unavailableReason) {
|
||||
throw new UnprocessableRequestError(unavailableReason);
|
||||
}
|
||||
}
|
||||
|
||||
private getSandboxUnavailableReason(
|
||||
sandboxEnabled: boolean,
|
||||
sandboxProvider: InstanceAiSandboxProvider,
|
||||
): string | null {
|
||||
if (
|
||||
sandboxEnabled &&
|
||||
sandboxProvider === 'n8n-sandbox' &&
|
||||
this.config.n8nSandboxServiceUrl.trim().length === 0
|
||||
) {
|
||||
return N8N_SANDBOX_SERVICE_URL_REQUIRED_MESSAGE;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private envVarModelConfig(): ModelConfig {
|
||||
return this.envVarModelConfigForModel(this.config.model);
|
||||
}
|
||||
|
|
@ -552,7 +625,8 @@ export class InstanceAiSettingsService {
|
|||
}
|
||||
if (persisted.mcpServers !== undefined) c.mcpServers = persisted.mcpServers;
|
||||
if (persisted.sandboxEnabled !== undefined) c.sandboxEnabled = persisted.sandboxEnabled;
|
||||
if (persisted.sandboxProvider !== undefined) c.sandboxProvider = persisted.sandboxProvider;
|
||||
if (persisted.sandboxProvider !== undefined)
|
||||
c.sandboxProvider = normalizeSandboxProvider(persisted.sandboxProvider);
|
||||
if (persisted.sandboxImage !== undefined) c.sandboxImage = persisted.sandboxImage;
|
||||
if (persisted.sandboxTimeout !== undefined) c.sandboxTimeout = persisted.sandboxTimeout;
|
||||
if (persisted.daytonaCredentialId !== undefined)
|
||||
|
|
|
|||
|
|
@ -41,6 +41,12 @@ export class InstanceAiTestController {
|
|||
return { events: this.instanceAiService.getTraceEvents(slug) };
|
||||
}
|
||||
|
||||
@Get('/test/idle', { skipAuth: true })
|
||||
getIdleState() {
|
||||
this.assertTraceReplayEnabled();
|
||||
return { idle: !this.instanceAiService.hasRunningWorkForTest() };
|
||||
}
|
||||
|
||||
@Post('/test/background-timeout/start', { skipAuth: true })
|
||||
async startBackgroundTimeoutSimulation(@Body payload: { userId: string; threadId?: string }) {
|
||||
this.assertTraceReplayEnabled();
|
||||
|
|
@ -82,6 +88,7 @@ export class InstanceAiTestController {
|
|||
this.assertTraceReplayEnabled();
|
||||
|
||||
this.instanceAiService.cancelAllBackgroundTasks();
|
||||
this.instanceAiService.clearTraceContextsForTest();
|
||||
|
||||
const threads = await this.threadRepo.find({ select: ['id'] });
|
||||
for (const { id } of threads) {
|
||||
|
|
|
|||
|
|
@ -43,11 +43,15 @@ export class InstanceAiModule implements ModuleInterface {
|
|||
const settingsService = Container.get(InstanceAiSettingsService);
|
||||
const enabled = settingsService.isAgentEnabled();
|
||||
const localGatewayDisabled = settingsService.isLocalGatewayDisabled();
|
||||
const sandboxStatus = settingsService.getSandboxStatus();
|
||||
return {
|
||||
enabled,
|
||||
localGatewayDisabled,
|
||||
proxyEnabled: service.isProxyEnabled(),
|
||||
cloudManaged: globalConfig.deployment.type === 'cloud',
|
||||
sandboxEnabled: sandboxStatus.enabled,
|
||||
workflowBuilderAvailable: enabled && sandboxStatus.workflowBuilderAvailable,
|
||||
sandboxUnavailableReason: sandboxStatus.unavailableReason,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -108,6 +108,7 @@ import { LocalGatewayRegistry } from './filesystem';
|
|||
import { InstanceAiSettingsService } from './instance-ai-settings.service';
|
||||
import { InstanceAiAdapterService } from './instance-ai.adapter.service';
|
||||
import { AUTO_FOLLOW_UP_MESSAGE } from './internal-messages';
|
||||
import { normalizeSandboxProvider, requireN8nSandboxServiceUrl } from './sandbox-provider';
|
||||
import { DbSnapshotStorage } from './storage/db-snapshot-storage';
|
||||
import { DbIterationLogStorage } from './storage/db-iteration-log-storage';
|
||||
import { TypeORMAgentCheckpointStore } from './storage/typeorm-agent-checkpoint-store';
|
||||
|
|
@ -719,20 +720,16 @@ export class InstanceAiService {
|
|||
sandboxNamePrefix,
|
||||
daytonaTokenRefreshSkewMs,
|
||||
} = this.instanceAiConfig;
|
||||
const provider = normalizeSandboxProvider(sandboxProvider);
|
||||
if (!sandboxEnabled) {
|
||||
return {
|
||||
enabled: false,
|
||||
provider:
|
||||
sandboxProvider === 'n8n-sandbox'
|
||||
? 'n8n-sandbox'
|
||||
: sandboxProvider === 'daytona'
|
||||
? 'daytona'
|
||||
: 'local',
|
||||
provider,
|
||||
timeout: sandboxTimeout,
|
||||
};
|
||||
}
|
||||
|
||||
if (sandboxProvider === 'daytona') {
|
||||
if (provider === 'daytona') {
|
||||
return {
|
||||
enabled: true,
|
||||
provider: 'daytona',
|
||||
|
|
@ -746,19 +743,11 @@ export class InstanceAiService {
|
|||
};
|
||||
}
|
||||
|
||||
if (sandboxProvider === 'n8n-sandbox') {
|
||||
return {
|
||||
enabled: true,
|
||||
provider: 'n8n-sandbox',
|
||||
serviceUrl: n8nSandboxServiceUrl || undefined,
|
||||
apiKey: n8nSandboxServiceApiKey || undefined,
|
||||
timeout: sandboxTimeout,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
enabled: true,
|
||||
provider: 'local',
|
||||
provider: 'n8n-sandbox',
|
||||
serviceUrl: requireN8nSandboxServiceUrl(n8nSandboxServiceUrl),
|
||||
apiKey: n8nSandboxServiceApiKey || undefined,
|
||||
timeout: sandboxTimeout,
|
||||
};
|
||||
}
|
||||
|
|
@ -795,15 +784,12 @@ export class InstanceAiService {
|
|||
daytonaApiKey: daytona.apiKey ?? base.daytonaApiKey,
|
||||
};
|
||||
}
|
||||
if (base.provider === 'n8n-sandbox') {
|
||||
const sandbox = await this.settingsService.resolveN8nSandboxConfig(user);
|
||||
return {
|
||||
...base,
|
||||
serviceUrl: sandbox.serviceUrl ?? base.serviceUrl,
|
||||
apiKey: sandbox.apiKey ?? base.apiKey,
|
||||
};
|
||||
}
|
||||
return base;
|
||||
const sandbox = await this.settingsService.resolveN8nSandboxConfig(user);
|
||||
return {
|
||||
...base,
|
||||
serviceUrl: sandbox.serviceUrl ?? base.serviceUrl,
|
||||
apiKey: sandbox.apiKey ?? base.apiKey,
|
||||
};
|
||||
}
|
||||
|
||||
private async getOrCreateWorkspaceEntry(
|
||||
|
|
@ -1183,6 +1169,18 @@ export class InstanceAiService {
|
|||
tracing: InstanceAiTraceContext,
|
||||
messageGroupId?: string,
|
||||
): void {
|
||||
const existing = this.traceContextsByRunId.get(runId);
|
||||
if (
|
||||
existing?.tracing.traceWriter &&
|
||||
existing.traceSlug &&
|
||||
existing.tracing.traceWriter !== tracing.traceWriter
|
||||
) {
|
||||
this.traceReplay.preserveWriterEvents(
|
||||
existing.traceSlug,
|
||||
existing.tracing.traceWriter.getEvents(),
|
||||
);
|
||||
}
|
||||
|
||||
this.traceContextsByRunId.set(runId, {
|
||||
threadId,
|
||||
messageGroupId,
|
||||
|
|
@ -1361,6 +1359,22 @@ export class InstanceAiService {
|
|||
}
|
||||
}
|
||||
|
||||
private deleteTraceContextsForSlug(slug: string): void {
|
||||
for (const [runId, entry] of this.traceContextsByRunId) {
|
||||
if (entry.traceSlug === slug) {
|
||||
releaseTraceClient(entry.tracing.rootRun.traceId);
|
||||
this.traceContextsByRunId.delete(runId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
clearTraceContextsForTest(): void {
|
||||
for (const entry of this.traceContextsByRunId.values()) {
|
||||
releaseTraceClient(entry.tracing.rootRun.traceId);
|
||||
}
|
||||
this.traceContextsByRunId.clear();
|
||||
}
|
||||
|
||||
private async finalizeDetachedTraceRun(
|
||||
taskId: string,
|
||||
traceContext: InstanceAiTraceContext | undefined,
|
||||
|
|
@ -1865,11 +1879,25 @@ export class InstanceAiService {
|
|||
return this.traceReplay.getEventsWithWriterFallback(slug, this.traceContextsByRunId.values());
|
||||
}
|
||||
|
||||
hasRunningWorkForTest(): boolean {
|
||||
const threadIds = new Set(
|
||||
[...this.traceContextsByRunId.values()].map((entry) => entry.threadId),
|
||||
);
|
||||
|
||||
for (const threadId of threadIds) {
|
||||
if (this.runState.getActiveRunId(threadId)) return true;
|
||||
if (this.backgroundTasks.getRunningTasks(threadId).length > 0) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
activateTraceSlug(slug: string): void {
|
||||
this.traceReplay.activateSlug(slug);
|
||||
}
|
||||
|
||||
clearTraceEvents(slug: string): void {
|
||||
this.deleteTraceContextsForSlug(slug);
|
||||
this.traceReplay.clearEvents(slug);
|
||||
}
|
||||
|
||||
|
|
@ -3001,7 +3029,8 @@ export class InstanceAiService {
|
|||
let runtimeWorkspace: Workspace | undefined;
|
||||
let workspaceRoot: string | undefined;
|
||||
|
||||
if (adminSettings.sandboxEnabled) {
|
||||
const sandboxStatus = this.settingsService.getSandboxStatus();
|
||||
if (sandboxStatus.workflowBuilderAvailable) {
|
||||
const sandboxConfig = await this.resolveSandboxConfig(user);
|
||||
|
||||
if (sandboxConfig.enabled) {
|
||||
|
|
@ -3208,10 +3237,46 @@ export class InstanceAiService {
|
|||
};
|
||||
}
|
||||
|
||||
private collectWorkflowIds(value: unknown, workflowIds: Set<string>): void {
|
||||
if (value === null || value === undefined || typeof value !== 'object') return;
|
||||
|
||||
if (Array.isArray(value)) {
|
||||
for (const item of value) {
|
||||
this.collectWorkflowIds(item, workflowIds);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
for (const [key, child] of Object.entries(value as Record<string, unknown>)) {
|
||||
if (key === 'workflowId' && typeof child === 'string' && child.length > 0) {
|
||||
workflowIds.add(child);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (key === 'supportingWorkflowIds' && Array.isArray(child)) {
|
||||
for (const workflowId of child) {
|
||||
if (typeof workflowId === 'string' && workflowId.length > 0) {
|
||||
workflowIds.add(workflowId);
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
this.collectWorkflowIds(child, workflowIds);
|
||||
}
|
||||
}
|
||||
|
||||
private getBuildTaskWorkflowName(task: PlannedTaskRecord): string | undefined {
|
||||
if (task.kind !== 'build-workflow') return undefined;
|
||||
|
||||
const titleMatch =
|
||||
task.title.match(/^Build '(.+)' workflow$/) ?? task.title.match(/^Build "(.+)" workflow$/);
|
||||
|
||||
return titleMatch?.[1];
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve the workflow IDs the checkpoint task is verifying so the runWorkflow
|
||||
* permission override can be scoped, and keep explicit user-requested runs
|
||||
* approval-gated even when they happen as checkpoint fallback.
|
||||
* Keep explicit user-requested runs approval-gated even when they happen as checkpoint fallback.
|
||||
*/
|
||||
private checkpointRequiresRunApproval(
|
||||
graph: PlannedTaskGraph,
|
||||
|
|
@ -3232,28 +3297,57 @@ export class InstanceAiService {
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve the workflows the checkpoint task is verifying so the runWorkflow
|
||||
* permission override can be scoped. Workflow names are carried as an E2E replay
|
||||
* fallback because runtime workflow IDs can be remapped.
|
||||
*/
|
||||
private async getCheckpointRunPolicy(
|
||||
threadId: string,
|
||||
checkpointTaskId: string,
|
||||
): Promise<{ allowedWorkflowIds: ReadonlySet<string>; requireApproval: boolean }> {
|
||||
): Promise<{
|
||||
allowedWorkflowIds: ReadonlySet<string>;
|
||||
allowedWorkflowNames: ReadonlySet<string>;
|
||||
requireApproval: boolean;
|
||||
}> {
|
||||
try {
|
||||
const { plannedTaskService } = await this.createPlannedTaskState();
|
||||
const graph = await plannedTaskService.getGraph(threadId);
|
||||
const checkpoint = graph?.tasks.find((t) => t.id === checkpointTaskId);
|
||||
if (!graph || !checkpoint) {
|
||||
return { allowedWorkflowIds: new Set(), requireApproval: false };
|
||||
return {
|
||||
allowedWorkflowIds: new Set(),
|
||||
allowedWorkflowNames: new Set(),
|
||||
requireApproval: false,
|
||||
};
|
||||
}
|
||||
const deps = new Set(checkpoint.deps);
|
||||
const allowed = new Set<string>();
|
||||
const ids = new Set<string>();
|
||||
const names = new Set<string>();
|
||||
for (const task of graph.tasks) {
|
||||
if (!deps.has(task.id)) continue;
|
||||
const workflowId = task.outcome?.workflowId;
|
||||
if (typeof workflowId === 'string' && workflowId.length > 0) {
|
||||
allowed.add(workflowId);
|
||||
|
||||
const workflowName = this.getBuildTaskWorkflowName(task);
|
||||
if (workflowName) {
|
||||
names.add(workflowName);
|
||||
}
|
||||
|
||||
if (task.workflowId) {
|
||||
ids.add(task.workflowId);
|
||||
}
|
||||
this.collectWorkflowIds(task.outcome, ids);
|
||||
}
|
||||
|
||||
const tracing = this.getTraceContextForContinuation(threadId);
|
||||
for (const workflowId of [...ids]) {
|
||||
const remappedWorkflowId = tracing?.idRemapper?.remapOutput(workflowId);
|
||||
if (typeof remappedWorkflowId === 'string' && remappedWorkflowId.length > 0) {
|
||||
ids.add(remappedWorkflowId);
|
||||
}
|
||||
}
|
||||
return {
|
||||
allowedWorkflowIds: allowed,
|
||||
allowedWorkflowIds: ids,
|
||||
allowedWorkflowNames: names,
|
||||
requireApproval: this.checkpointRequiresRunApproval(graph, checkpoint),
|
||||
};
|
||||
} catch (error) {
|
||||
|
|
@ -3262,7 +3356,11 @@ export class InstanceAiService {
|
|||
checkpointTaskId,
|
||||
error: error instanceof Error ? error.message : String(error),
|
||||
});
|
||||
return { allowedWorkflowIds: new Set(), requireApproval: false };
|
||||
return {
|
||||
allowedWorkflowIds: new Set(),
|
||||
allowedWorkflowNames: new Set(),
|
||||
requireApproval: false,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3635,6 +3733,7 @@ export class InstanceAiService {
|
|||
// without HITL, but any other workflow id still requires user approval.
|
||||
const runPolicy = await this.getCheckpointRunPolicy(threadId, checkpoint.checkpointTaskId);
|
||||
context.allowedRunWorkflowIds = runPolicy.allowedWorkflowIds;
|
||||
context.allowedRunWorkflowNames = runPolicy.allowedWorkflowNames;
|
||||
context.requireRunWorkflowApproval = runPolicy.requireApproval;
|
||||
}
|
||||
|
||||
|
|
|
|||
22
packages/cli/src/modules/instance-ai/sandbox-provider.ts
Normal file
22
packages/cli/src/modules/instance-ai/sandbox-provider.ts
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
import { isInstanceAiSandboxProvider, type InstanceAiSandboxProvider } from '@n8n/api-types';
|
||||
import { OperationalError } from 'n8n-workflow';
|
||||
|
||||
/** Fallback provider when none is configured or a persisted/env value is unrecognized. */
|
||||
export const DEFAULT_SANDBOX_PROVIDER: InstanceAiSandboxProvider = 'n8n-sandbox';
|
||||
|
||||
export const N8N_SANDBOX_SERVICE_URL_REQUIRED_MESSAGE =
|
||||
'N8N_SANDBOX_SERVICE_URL is required when Instance AI sandbox provider is n8n-sandbox.';
|
||||
|
||||
/** Coerce a raw config/env value to a supported provider, falling back to the default. */
|
||||
export function normalizeSandboxProvider(value: string | undefined): InstanceAiSandboxProvider {
|
||||
return value && isInstanceAiSandboxProvider(value) ? value : DEFAULT_SANDBOX_PROVIDER;
|
||||
}
|
||||
|
||||
/** Require a non-empty n8n sandbox service URL, raising a clear operator-facing error otherwise. */
|
||||
export function requireN8nSandboxServiceUrl(value: string): string {
|
||||
const serviceUrl = value.trim();
|
||||
if (serviceUrl.length === 0) {
|
||||
throw new OperationalError(N8N_SANDBOX_SERVICE_URL_REQUIRED_MESSAGE);
|
||||
}
|
||||
return serviceUrl;
|
||||
}
|
||||
|
|
@ -2,16 +2,53 @@ import type {
|
|||
InstanceAiTraceContext,
|
||||
TraceIndex as TraceIndexType,
|
||||
IdRemapper as IdRemapperType,
|
||||
TraceWriter as TraceWriterType,
|
||||
TraceEvent,
|
||||
} from '@n8n/instance-ai';
|
||||
|
||||
function hasToolEvents(events: unknown[]): boolean {
|
||||
return events.some(
|
||||
(event) =>
|
||||
typeof event === 'object' &&
|
||||
event !== null &&
|
||||
(event as { kind?: unknown }).kind !== 'header',
|
||||
);
|
||||
const TOOL_TRACE_EVENT_KINDS = new Set(['tool-call', 'tool-suspend', 'tool-resume']);
|
||||
|
||||
function getTraceEventKind(event: unknown): string | undefined {
|
||||
if (typeof event !== 'object' || event === null || Array.isArray(event)) return undefined;
|
||||
|
||||
const kind = Reflect.get(event, 'kind');
|
||||
return typeof kind === 'string' ? kind : undefined;
|
||||
}
|
||||
|
||||
function isHeaderTraceEvent(event: unknown): boolean {
|
||||
return getTraceEventKind(event) === 'header';
|
||||
}
|
||||
|
||||
function isToolTraceEvent(event: unknown): boolean {
|
||||
const kind = getTraceEventKind(event);
|
||||
return kind !== undefined && TOOL_TRACE_EVENT_KINDS.has(kind);
|
||||
}
|
||||
|
||||
function hasToolTraceEvents(events: unknown[] | undefined): boolean {
|
||||
return events?.some(isToolTraceEvent) ?? false;
|
||||
}
|
||||
|
||||
function mergeTraceEvents(...eventLists: unknown[][]): unknown[] {
|
||||
const merged: unknown[] = [];
|
||||
let hasHeader = false;
|
||||
const seenToolEvents = new Set<string>();
|
||||
|
||||
for (const events of eventLists) {
|
||||
for (const event of events) {
|
||||
if (isHeaderTraceEvent(event)) {
|
||||
if (hasHeader) continue;
|
||||
hasHeader = true;
|
||||
}
|
||||
if (isToolTraceEvent(event)) {
|
||||
const key = JSON.stringify(event);
|
||||
if (seenToolEvents.has(key)) continue;
|
||||
seenToolEvents.add(key);
|
||||
}
|
||||
merged.push(event);
|
||||
}
|
||||
}
|
||||
|
||||
return merged;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -36,6 +73,10 @@ export class TraceReplayState {
|
|||
|
||||
private sharedTraceSlug?: string;
|
||||
|
||||
private sharedTraceWriter?: TraceWriterType;
|
||||
|
||||
private sharedTraceWriterSlug?: string;
|
||||
|
||||
getActiveSlug(): string | undefined {
|
||||
return this.activeSlug;
|
||||
}
|
||||
|
|
@ -63,6 +104,10 @@ export class TraceReplayState {
|
|||
this.sharedIdRemapper = undefined;
|
||||
this.sharedTraceSlug = undefined;
|
||||
}
|
||||
if (this.sharedTraceWriterSlug === slug) {
|
||||
this.sharedTraceWriter = undefined;
|
||||
this.sharedTraceWriterSlug = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -92,9 +137,12 @@ export class TraceReplayState {
|
|||
fromWriters.push(...entry.tracing.traceWriter.getEvents());
|
||||
}
|
||||
}
|
||||
if (fromWriters.length > 0) return fromWriters;
|
||||
|
||||
return this.eventsBySlug.get(slug) ?? [];
|
||||
const preserved = this.eventsBySlug.get(slug) ?? [];
|
||||
const merged = mergeTraceEvents(preserved, fromWriters);
|
||||
if (hasToolTraceEvents(merged)) return merged;
|
||||
|
||||
return fromWriters.length > 0 ? merged : preserved;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -112,7 +160,7 @@ export class TraceReplayState {
|
|||
const slug = this.activeSlug;
|
||||
const events = slug ? this.eventsBySlug.get(slug) : undefined;
|
||||
|
||||
if (events && hasToolEvents(events)) {
|
||||
if (hasToolTraceEvents(events)) {
|
||||
if (this.sharedTraceSlug !== slug || !this.sharedTraceIndex) {
|
||||
this.sharedTraceIndex = new TI(events as TraceEvent[]);
|
||||
this.sharedIdRemapper = new IR();
|
||||
|
|
@ -122,8 +170,12 @@ export class TraceReplayState {
|
|||
tracing.traceIndex = this.sharedTraceIndex;
|
||||
tracing.idRemapper = this.sharedIdRemapper!;
|
||||
} else {
|
||||
if (this.sharedTraceWriterSlug !== slug || !this.sharedTraceWriter) {
|
||||
this.sharedTraceWriter = new TW('recording');
|
||||
this.sharedTraceWriterSlug = slug;
|
||||
}
|
||||
tracing.replayMode = 'record';
|
||||
tracing.traceWriter = new TW('recording');
|
||||
tracing.traceWriter = this.sharedTraceWriter;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5569,6 +5569,7 @@
|
|||
"instanceAi.view.subtitle": "Chat with your n8n instance",
|
||||
"instanceAi.input.placeholder": "Ask anything...",
|
||||
"instanceAi.input.suspendedPlaceholder": "Complete or skip the setup above to continue",
|
||||
"instanceAi.input.workflowBuilderUnavailablePlaceholder": "Workflow builder unavailable",
|
||||
"instanceAi.statusBar.waitingForInput": "Waiting for your input",
|
||||
"instanceAi.input.send": "Send",
|
||||
"instanceAi.input.stop": "Stop",
|
||||
|
|
@ -5743,6 +5744,7 @@
|
|||
"instanceAi.settings.sandboxProvider.label": "Sandbox provider",
|
||||
"instanceAi.settings.daytonaCredential.label": "Daytona credential",
|
||||
"instanceAi.settings.n8nSandboxCredential.label": "n8n sandbox API key credential",
|
||||
"instanceAi.settings.n8nSandbox.serviceUrlHint": "Set N8N_SANDBOX_SERVICE_URL in your environment to use the n8n Sandbox Service.",
|
||||
"instanceAi.settings.sandboxImage.label": "Sandbox Docker image",
|
||||
"instanceAi.settings.sandboxTimeout.label": "Sandbox timeout (ms)",
|
||||
"instanceAi.settings.searchCredential.label": "Search credential",
|
||||
|
|
@ -5831,6 +5833,9 @@
|
|||
"instanceAi.input.planEditContext": "Plan edits",
|
||||
"instanceAi.feedback.success": "Thanks for your feedback!",
|
||||
"instanceAi.emptyState.title": "AI Assistant",
|
||||
"instanceAi.workflowBuilderUnavailable.title": "Workflow builder unavailable",
|
||||
"instanceAi.workflowBuilderUnavailable.enableSandboxDescription": "Ask an admin to enable Instance AI sandboxing.",
|
||||
"instanceAi.workflowBuilderUnavailable.serviceUrlDescription": "Ask an admin to set N8N_SANDBOX_SERVICE_URL for the n8n Sandbox Service.",
|
||||
"instanceAi.emptyState.suggestions.buildWorkflow.label": "Build a workflow",
|
||||
"instanceAi.emptyState.suggestions.buildWorkflow.prompt": "I want to build a new workflow. Help me figure out what to build. Ask me what's the end goal, what should trigger it, and what apps or services are involved.",
|
||||
"instanceAi.emptyState.suggestions.buildAgent.label": "Build an agent",
|
||||
|
|
|
|||
|
|
@ -416,6 +416,9 @@ describe('useGlobalEntityCreation', () => {
|
|||
localGatewayDisabled: false,
|
||||
proxyEnabled: false,
|
||||
cloudManaged: false,
|
||||
sandboxEnabled: true,
|
||||
workflowBuilderAvailable: true,
|
||||
sandboxUnavailableReason: null,
|
||||
};
|
||||
|
||||
const enableInstanceAi = () => {
|
||||
|
|
|
|||
|
|
@ -256,6 +256,9 @@ describe('router', () => {
|
|||
localGatewayDisabled: false,
|
||||
proxyEnabled: false,
|
||||
cloudManaged: false,
|
||||
sandboxEnabled: true,
|
||||
workflowBuilderAvailable: true,
|
||||
sandboxUnavailableReason: null,
|
||||
};
|
||||
|
||||
const runRootRedirect = () => {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import { useRootStore } from '@n8n/stores/useRootStore';
|
|||
import { useToast } from '@/app/composables/useToast';
|
||||
import { usePageRedirectionHelper } from '@/app/composables/usePageRedirectionHelper';
|
||||
import { useInstanceAiStore } from './instanceAi.store';
|
||||
import { useInstanceAiSettingsStore } from './instanceAiSettings.store';
|
||||
import { INSTANCE_AI_THREAD_VIEW } from './constants';
|
||||
import { INSTANCE_AI_EMPTY_STATE_SUGGESTIONS } from './emptyStateSuggestions';
|
||||
import { useCreditWarningBanner } from './composables/useCreditWarningBanner';
|
||||
|
|
@ -34,6 +35,7 @@ import {
|
|||
import InstanceAiInput from './components/InstanceAiInput.vue';
|
||||
import InstanceAiEmptyState from './components/InstanceAiEmptyState.vue';
|
||||
import InstanceAiViewHeader from './components/InstanceAiViewHeader.vue';
|
||||
import WorkflowBuilderUnavailableNotice from './components/WorkflowBuilderUnavailableNotice.vue';
|
||||
import CreditWarningBanner from '@/features/ai/assistant/components/Agent/CreditWarningBanner.vue';
|
||||
|
||||
const INSTANCE_AI_DEFAULT_TITLE_KEY: BaseTextKey = 'instanceAi.emptyState.title';
|
||||
|
|
@ -48,6 +50,7 @@ const INSTANCE_AI_WORKFLOW_PREVIEW_SUGGESTIONS_PLACEHOLDER_KEY =
|
|||
'experiments.instanceAiWorkflowPreviewSuggestions.input.placeholder' as BaseTextKey;
|
||||
|
||||
const store = useInstanceAiStore();
|
||||
const settingsStore = useInstanceAiSettingsStore();
|
||||
const { isLowCredits } = storeToRefs(store);
|
||||
const rootStore = useRootStore();
|
||||
const router = useRouter();
|
||||
|
|
@ -118,6 +121,10 @@ onMounted(() => {
|
|||
});
|
||||
|
||||
async function handleSubmit(message: string, attachments?: InstanceAiAttachment[]) {
|
||||
if (!settingsStore.isWorkflowBuilderAvailable) {
|
||||
return;
|
||||
}
|
||||
|
||||
const threadId = uuidv4();
|
||||
isStartingThread.value = true;
|
||||
|
||||
|
|
@ -158,9 +165,11 @@ async function handleSubmit(message: string, attachments?: InstanceAiAttachment[
|
|||
@upgrade-click="goToUpgrade('instance-ai', 'upgrade-instance-ai')"
|
||||
@dismiss="creditBanner.dismiss()"
|
||||
/>
|
||||
<WorkflowBuilderUnavailableNotice v-if="!settingsStore.isWorkflowBuilderAvailable" />
|
||||
<InstanceAiInput
|
||||
ref="chatInputRef"
|
||||
:is-submitting="isStartingThread"
|
||||
:is-workflow-builder-available="settingsStore.isWorkflowBuilderAvailable"
|
||||
@submit="handleSubmit"
|
||||
/>
|
||||
</div>
|
||||
|
|
@ -175,9 +184,11 @@ async function handleSubmit(message: string, attachments?: InstanceAiAttachment[
|
|||
@upgrade-click="goToUpgrade('instance-ai', 'upgrade-instance-ai')"
|
||||
@dismiss="creditBanner.dismiss()"
|
||||
/>
|
||||
<WorkflowBuilderUnavailableNotice v-if="!settingsStore.isWorkflowBuilderAvailable" />
|
||||
<InstanceAiInput
|
||||
ref="chatInputRef"
|
||||
:is-submitting="isStartingThread"
|
||||
:is-workflow-builder-available="settingsStore.isWorkflowBuilderAvailable"
|
||||
v-bind="emptyStatePromptSuggestionProps"
|
||||
@submit="handleSubmit"
|
||||
@workflow-preview="handleWorkflowPreview"
|
||||
|
|
@ -226,6 +237,9 @@ async function handleSubmit(message: string, attachments?: InstanceAiAttachment[
|
|||
.centeredInput {
|
||||
width: 100%;
|
||||
max-width: 680px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--spacing--xs);
|
||||
}
|
||||
|
||||
.workflowPreview {
|
||||
|
|
@ -256,6 +270,9 @@ async function handleSubmit(message: string, attachments?: InstanceAiAttachment[
|
|||
max-width: 750px;
|
||||
margin: 0 auto;
|
||||
padding: 0 var(--spacing--lg) var(--spacing--sm);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--spacing--xs);
|
||||
}
|
||||
|
||||
:global(.workflow-preview-fade-enter-active) {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import { usePageRedirectionHelper } from '@/app/composables/usePageRedirectionHe
|
|||
import { COLLAPSED_MAIN_SIDEBAR_WIDTH, useSidebarLayout } from '@/app/composables/useSidebarLayout';
|
||||
import { useTelemetry } from '@/app/composables/useTelemetry';
|
||||
import { provideThread, useInstanceAiStore } from './instanceAi.store';
|
||||
import { useInstanceAiSettingsStore } from './instanceAiSettings.store';
|
||||
import { isPendingItemFloating } from './confirmationKinds';
|
||||
import { scrubSecretsInText } from '@n8n/utils/scrub-secrets';
|
||||
import { useCanvasPreview } from './useCanvasPreview';
|
||||
|
|
@ -44,6 +45,7 @@ import InstanceAiConfirmationPanel from './components/InstanceAiConfirmationPane
|
|||
import InstanceAiFixWithAiPanel from './components/InstanceAiFixWithAiPanel.vue';
|
||||
import InstanceAiPreviewTabBar from './components/InstanceAiPreviewTabBar.vue';
|
||||
import InstanceAiViewHeader from './components/InstanceAiViewHeader.vue';
|
||||
import WorkflowBuilderUnavailableNotice from './components/WorkflowBuilderUnavailableNotice.vue';
|
||||
import AgentSection from './components/AgentSection.vue';
|
||||
import { collectActiveBuilderAgents, messageHasVisibleContent } from './builderAgents';
|
||||
import CreditWarningBanner from '@/features/ai/assistant/components/Agent/CreditWarningBanner.vue';
|
||||
|
|
@ -59,6 +61,7 @@ const props = defineProps<{
|
|||
}>();
|
||||
|
||||
const store = useInstanceAiStore();
|
||||
const settingsStore = useInstanceAiSettingsStore();
|
||||
const thread = provideThread(props.threadId);
|
||||
const { isLowCredits } = storeToRefs(store);
|
||||
const rootStore = useRootStore();
|
||||
|
|
@ -489,6 +492,10 @@ const workflowPreviewRef =
|
|||
|
||||
// --- Message handlers ---
|
||||
function handleSubmit(message: string, attachments?: InstanceAiAttachment[]) {
|
||||
if (!settingsStore.isWorkflowBuilderAvailable) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Reset scroll on new user message
|
||||
userScrolledUp.value = false;
|
||||
|
||||
|
|
@ -637,8 +644,8 @@ function handleWorkflowFailures(report: WorkflowFailuresReport) {
|
|||
/>
|
||||
</TransitionGroup>
|
||||
<!-- Builder sub-agents are extracted from their parent assistant
|
||||
messages and rendered here so they always sit at the bottom
|
||||
of the conversation. -->
|
||||
messages and rendered here so they always sit at the bottom
|
||||
of the conversation. -->
|
||||
<div v-if="builderAgents.length" :class="$style.builderAgents">
|
||||
<AgentSection
|
||||
v-for="builder in builderAgents"
|
||||
|
|
@ -690,6 +697,9 @@ function handleWorkflowFailures(report: WorkflowFailuresReport) {
|
|||
|
||||
<div :class="$style.inputContainer">
|
||||
<div :class="$style.inputConstraint">
|
||||
<WorkflowBuilderUnavailableNotice
|
||||
v-if="!settingsStore.isWorkflowBuilderAvailable"
|
||||
/>
|
||||
<InstanceAiStatusBar />
|
||||
<CreditWarningBanner
|
||||
v-if="creditBanner.visible.value"
|
||||
|
|
@ -713,6 +723,7 @@ function handleWorkflowFailures(report: WorkflowFailuresReport) {
|
|||
:is-submitting="thread.isSendingMessage"
|
||||
:is-awaiting-confirmation="thread.isAwaitingConfirmation"
|
||||
:is-plan-edit-mode="thread.activePlanEdit !== null"
|
||||
:is-workflow-builder-available="settingsStore.isWorkflowBuilderAvailable"
|
||||
:current-thread-id="thread.id"
|
||||
:amend-context="thread.amendContext"
|
||||
:contextual-suggestion="thread.contextualSuggestion"
|
||||
|
|
@ -1076,6 +1087,9 @@ function handleWorkflowFailures(report: WorkflowFailuresReport) {
|
|||
max-width: 750px;
|
||||
margin: 0 auto;
|
||||
transform: translateX(calc(var(--instance-ai-artifacts-layout-width) / -2));
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--spacing--xs);
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
|
|
|
|||
|
|
@ -8,8 +8,10 @@ import { createComponentRenderer } from '@/__tests__/render';
|
|||
import { mockedStore } from '@/__tests__/utils';
|
||||
import InstanceAiEmptyView from '../InstanceAiEmptyView.vue';
|
||||
import { useInstanceAiStore, type ThreadRuntime } from '../instanceAi.store';
|
||||
import { useSettingsStore } from '@/app/stores/settings.store';
|
||||
import { SidebarStateKey } from '../instanceAiLayout';
|
||||
import { INSTANCE_AI_THREAD_VIEW } from '../constants';
|
||||
import type { FrontendModuleSettings } from '@n8n/api-types';
|
||||
|
||||
const {
|
||||
experimentMocks,
|
||||
|
|
@ -105,6 +107,7 @@ const InstanceAiInputStub = defineComponent({
|
|||
placeholderKey: { type: String, required: false },
|
||||
isStreaming: { type: Boolean, required: false },
|
||||
isSubmitting: { type: Boolean, required: false },
|
||||
isWorkflowBuilderAvailable: { type: Boolean, required: false },
|
||||
},
|
||||
emits: ['submit'],
|
||||
setup(props, { emit, expose }) {
|
||||
|
|
@ -131,6 +134,11 @@ const InstanceAiInputStub = defineComponent({
|
|||
{ 'data-test-id': 'instance-ai-input-placeholder-key' },
|
||||
props.placeholderKey ?? 'unset',
|
||||
),
|
||||
h(
|
||||
'span',
|
||||
{ 'data-test-id': 'instance-ai-input-availability' },
|
||||
props.isWorkflowBuilderAvailable === false ? 'unavailable' : 'available',
|
||||
),
|
||||
h(
|
||||
'button',
|
||||
{
|
||||
|
|
@ -154,6 +162,18 @@ const renderView = createComponentRenderer(InstanceAiEmptyView, {
|
|||
},
|
||||
});
|
||||
|
||||
type InstanceAiModuleSettings = NonNullable<FrontendModuleSettings['instance-ai']>;
|
||||
|
||||
const defaultModuleSettings: InstanceAiModuleSettings = {
|
||||
enabled: true,
|
||||
localGatewayDisabled: false,
|
||||
proxyEnabled: false,
|
||||
cloudManaged: false,
|
||||
sandboxEnabled: true,
|
||||
workflowBuilderAvailable: true,
|
||||
sandboxUnavailableReason: null,
|
||||
};
|
||||
|
||||
describe('InstanceAiEmptyView', () => {
|
||||
let store: ReturnType<typeof mockedStore<typeof useInstanceAiStore>>;
|
||||
let thread: ThreadRuntime;
|
||||
|
|
@ -169,6 +189,9 @@ describe('InstanceAiEmptyView', () => {
|
|||
const pinia = createTestingPinia();
|
||||
setActivePinia(pinia);
|
||||
|
||||
useSettingsStore().moduleSettings = {
|
||||
'instance-ai': { ...defaultModuleSettings },
|
||||
};
|
||||
store = mockedStore(useInstanceAiStore);
|
||||
thread = {
|
||||
id: 'thread-placeholder',
|
||||
|
|
@ -279,4 +302,27 @@ describe('InstanceAiEmptyView', () => {
|
|||
expect(thread.sendMessage).not.toHaveBeenCalled();
|
||||
expect(replaceMock).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('shows an upfront unavailable state and does not start a thread when the builder is unavailable', async () => {
|
||||
useSettingsStore().moduleSettings = {
|
||||
'instance-ai': {
|
||||
...defaultModuleSettings,
|
||||
sandboxEnabled: false,
|
||||
workflowBuilderAvailable: false,
|
||||
},
|
||||
};
|
||||
const { getByTestId, getByText } = renderView();
|
||||
|
||||
expect(getByTestId('instance-ai-workflow-builder-unavailable')).toBeVisible();
|
||||
expect(getByText('Workflow builder unavailable')).toBeVisible();
|
||||
expect(getByTestId('instance-ai-input-availability')).toHaveTextContent('unavailable');
|
||||
|
||||
await fireEvent.click(getByTestId('instance-ai-input-stub-submit'));
|
||||
await flushPromises();
|
||||
|
||||
expect(store.syncThread).not.toHaveBeenCalled();
|
||||
expect(store.getOrCreateRuntime).not.toHaveBeenCalled();
|
||||
expect(thread.sendMessage).not.toHaveBeenCalled();
|
||||
expect(replaceMock).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ type InputTestProps = {
|
|||
currentThreadId: string;
|
||||
amendContext: { agentId: string; role: string } | null;
|
||||
contextualSuggestion: string | null;
|
||||
isWorkflowBuilderAvailable: boolean;
|
||||
suggestions?: typeof suggestions;
|
||||
suggestionsComponent?: Component;
|
||||
suggestionCatalogVersion?: string;
|
||||
|
|
@ -35,6 +36,7 @@ const defaultProps = (): InputTestProps => ({
|
|||
currentThreadId: 'thread-1',
|
||||
amendContext: null,
|
||||
contextualSuggestion: null,
|
||||
isWorkflowBuilderAvailable: true,
|
||||
});
|
||||
|
||||
function inputProps(overrides: Partial<InputTestProps> = {}): InputTestProps {
|
||||
|
|
@ -215,6 +217,20 @@ describe('InstanceAiInput', () => {
|
|||
);
|
||||
});
|
||||
|
||||
it('disables the composer when the workflow builder is unavailable', () => {
|
||||
const { getByRole, getByTestId, queryByTestId } = renderComponent({
|
||||
props: {
|
||||
isWorkflowBuilderAvailable: false,
|
||||
suggestions,
|
||||
},
|
||||
});
|
||||
|
||||
expect(getByRole('textbox')).toBeDisabled();
|
||||
expect(getByRole('textbox')).toHaveAttribute('placeholder', 'Workflow builder unavailable');
|
||||
expect(getByTestId('instance-ai-send-button')).toBeDisabled();
|
||||
expect(queryByTestId('instance-ai-suggestion-build-workflow')).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('shows a ghost prompt in the placeholder when hovering a prompt suggestion', async () => {
|
||||
const { getByRole, getByTestId } = renderComponent({
|
||||
props: {
|
||||
|
|
|
|||
|
|
@ -9,9 +9,14 @@ import InstanceAiThreadView from '../InstanceAiThreadView.vue';
|
|||
import { useInstanceAiStore, type ThreadRuntime } from '../instanceAi.store';
|
||||
import type { PlanEditContext } from '../instanceAi.threadRuntime';
|
||||
import { usePushConnectionStore } from '@/app/stores/pushConnection.store';
|
||||
import { useSettingsStore } from '@/app/stores/settings.store';
|
||||
import { SidebarStateKey } from '../instanceAiLayout';
|
||||
import type { WorkflowFailuresReport } from '../components/InstanceAiWorkflowPreview.vue';
|
||||
import type { InstanceAiAgentNode, InstanceAiMessage } from '@n8n/api-types';
|
||||
import type {
|
||||
FrontendModuleSettings,
|
||||
InstanceAiAgentNode,
|
||||
InstanceAiMessage,
|
||||
} from '@n8n/api-types';
|
||||
|
||||
const mockWindowSizeState = vi.hoisted(() => ({
|
||||
width: { value: 1200 },
|
||||
|
|
@ -27,6 +32,10 @@ vi.mock('@/app/composables/useTelemetry', () => ({
|
|||
useTelemetry: () => ({ track: telemetryTrackSpy }),
|
||||
}));
|
||||
|
||||
vi.mock('@/app/composables/useToast', () => ({
|
||||
useToast: () => ({ showError: vi.fn(), showMessage: vi.fn() }),
|
||||
}));
|
||||
|
||||
vi.mock('@/app/composables/usePageRedirectionHelper', () => ({
|
||||
usePageRedirectionHelper: () => ({ goToUpgrade: vi.fn() }),
|
||||
}));
|
||||
|
|
@ -59,6 +68,7 @@ const InstanceAiInputStub = defineComponent({
|
|||
suggestions: { type: Array, required: false },
|
||||
isStreaming: { type: Boolean, required: false },
|
||||
isPlanEditMode: { type: Boolean, required: false },
|
||||
isWorkflowBuilderAvailable: { type: Boolean, required: false },
|
||||
},
|
||||
emits: ['submit', 'cancel-plan-edit'],
|
||||
setup(props, { emit, expose }) {
|
||||
|
|
@ -71,6 +81,11 @@ const InstanceAiInputStub = defineComponent({
|
|||
{ 'data-test-id': 'instance-ai-input-mode' },
|
||||
props.isPlanEditMode ? 'plan-edit' : 'normal',
|
||||
),
|
||||
h(
|
||||
'span',
|
||||
{ 'data-test-id': 'instance-ai-input-availability' },
|
||||
props.isWorkflowBuilderAvailable === false ? 'unavailable' : 'available',
|
||||
),
|
||||
h(
|
||||
'button',
|
||||
{
|
||||
|
|
@ -138,6 +153,16 @@ const renderView = createComponentRenderer(InstanceAiThreadView, {
|
|||
},
|
||||
});
|
||||
|
||||
const defaultModuleSettings: NonNullable<FrontendModuleSettings['instance-ai']> = {
|
||||
enabled: true,
|
||||
localGatewayDisabled: false,
|
||||
proxyEnabled: false,
|
||||
cloudManaged: false,
|
||||
sandboxEnabled: true,
|
||||
workflowBuilderAvailable: true,
|
||||
sandboxUnavailableReason: null,
|
||||
};
|
||||
|
||||
function makePlanReviewMessage(): InstanceAiMessage {
|
||||
const planner: InstanceAiAgentNode = {
|
||||
agentId: 'planner-1',
|
||||
|
|
@ -203,6 +228,9 @@ describe('InstanceAiThreadView', () => {
|
|||
const pinia = createTestingPinia();
|
||||
setActivePinia(pinia);
|
||||
|
||||
useSettingsStore().moduleSettings = {
|
||||
'instance-ai': { ...defaultModuleSettings },
|
||||
};
|
||||
workflowPreviewEmit = null;
|
||||
|
||||
thread = reactive({
|
||||
|
|
@ -309,6 +337,26 @@ describe('InstanceAiThreadView', () => {
|
|||
expect(getByTestId('instance-ai-confirmation-panel-inline')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('shows an upfront unavailable state and blocks sends when the builder is unavailable', async () => {
|
||||
useSettingsStore().moduleSettings = {
|
||||
'instance-ai': {
|
||||
...defaultModuleSettings,
|
||||
sandboxEnabled: false,
|
||||
workflowBuilderAvailable: false,
|
||||
},
|
||||
};
|
||||
|
||||
const { getByTestId, getByText } = renderView({ props: { threadId: 'thread-1' } });
|
||||
|
||||
expect(getByTestId('instance-ai-workflow-builder-unavailable')).toBeVisible();
|
||||
expect(getByText('Workflow builder unavailable')).toBeVisible();
|
||||
expect(getByTestId('instance-ai-input-availability')).toHaveTextContent('unavailable');
|
||||
|
||||
await userEvent.click(getByTestId('instance-ai-input-submit'));
|
||||
|
||||
expect(thread.sendMessage).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('swaps the chat input for the floating panel when a generic approval is pending', () => {
|
||||
thread.pendingConfirmations = [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -75,6 +75,9 @@ const defaultModuleSettings: NonNullable<FrontendModuleSettings['instance-ai']>
|
|||
localGatewayDisabled: false,
|
||||
proxyEnabled: false,
|
||||
cloudManaged: false,
|
||||
sandboxEnabled: true,
|
||||
workflowBuilderAvailable: true,
|
||||
sandboxUnavailableReason: null,
|
||||
};
|
||||
|
||||
describe('SettingsInstanceAiView', () => {
|
||||
|
|
@ -95,7 +98,7 @@ describe('SettingsInstanceAiView', () => {
|
|||
permissions: {},
|
||||
mcpServers: '',
|
||||
sandboxEnabled: false,
|
||||
sandboxProvider: '',
|
||||
sandboxProvider: 'n8n-sandbox',
|
||||
sandboxImage: '',
|
||||
sandboxTimeout: 60,
|
||||
daytonaCredentialId: null,
|
||||
|
|
|
|||
|
|
@ -58,11 +58,28 @@ vi.mock('../instanceAi.api', () => ({
|
|||
import { useInstanceAiSettingsStore } from '../instanceAiSettings.store';
|
||||
import { useSettingsStore } from '@/app/stores/settings.store';
|
||||
|
||||
type InstanceAiModuleSettings = NonNullable<FrontendModuleSettings['instance-ai']>;
|
||||
|
||||
function makeModuleSettings(
|
||||
overrides: Partial<InstanceAiModuleSettings> = {},
|
||||
): InstanceAiModuleSettings {
|
||||
return {
|
||||
enabled: true,
|
||||
localGatewayDisabled: false,
|
||||
proxyEnabled: false,
|
||||
cloudManaged: false,
|
||||
sandboxEnabled: true,
|
||||
workflowBuilderAvailable: true,
|
||||
sandboxUnavailableReason: null,
|
||||
...overrides,
|
||||
};
|
||||
}
|
||||
|
||||
function setModuleSettings(
|
||||
settingsStore: ReturnType<typeof useSettingsStore>,
|
||||
instanceAi: FrontendModuleSettings['instance-ai'],
|
||||
instanceAi: Partial<InstanceAiModuleSettings>,
|
||||
) {
|
||||
settingsStore.moduleSettings = { 'instance-ai': instanceAi };
|
||||
settingsStore.moduleSettings = { 'instance-ai': makeModuleSettings(instanceAi) };
|
||||
}
|
||||
|
||||
function setUserPreference(
|
||||
|
|
@ -227,6 +244,32 @@ describe('useInstanceAiSettingsStore', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('workflow builder availability', () => {
|
||||
it('returns false when the module settings mark the builder unavailable', () => {
|
||||
setModuleSettings(settingsStore, {
|
||||
sandboxEnabled: false,
|
||||
workflowBuilderAvailable: false,
|
||||
sandboxUnavailableReason: null,
|
||||
});
|
||||
|
||||
expect(store.isWorkflowBuilderAvailable).toBe(false);
|
||||
expect(store.isSandboxEnabled).toBe(false);
|
||||
expect(store.sandboxUnavailableReason).toBeNull();
|
||||
});
|
||||
|
||||
it('exposes the sandbox unavailable reason from module settings', () => {
|
||||
setModuleSettings(settingsStore, {
|
||||
sandboxEnabled: true,
|
||||
workflowBuilderAvailable: false,
|
||||
sandboxUnavailableReason: 'N8N_SANDBOX_SERVICE_URL is required.',
|
||||
});
|
||||
|
||||
expect(store.isWorkflowBuilderAvailable).toBe(false);
|
||||
expect(store.isSandboxEnabled).toBe(true);
|
||||
expect(store.sandboxUnavailableReason).toBe('N8N_SANDBOX_SERVICE_URL is required.');
|
||||
});
|
||||
});
|
||||
|
||||
describe('refreshModuleSettings', () => {
|
||||
it('fetches preferences when they are not loaded yet', async () => {
|
||||
const prefsResponse = {
|
||||
|
|
@ -278,7 +321,7 @@ describe('useInstanceAiSettingsStore', () => {
|
|||
permissions: {},
|
||||
mcpServers: '',
|
||||
sandboxEnabled: false,
|
||||
sandboxProvider: '',
|
||||
sandboxProvider: 'n8n-sandbox',
|
||||
sandboxImage: '',
|
||||
sandboxTimeout: 60,
|
||||
daytonaCredentialId: null,
|
||||
|
|
@ -297,6 +340,9 @@ describe('useInstanceAiSettingsStore', () => {
|
|||
expect(ms?.cloudManaged).toBe(true);
|
||||
expect(ms?.proxyEnabled).toBe(true);
|
||||
expect(ms?.enabled).toBe(true);
|
||||
expect(ms?.sandboxEnabled).toBe(false);
|
||||
expect(ms?.workflowBuilderAvailable).toBe(false);
|
||||
expect(ms?.sandboxUnavailableReason).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ const props = withDefaults(
|
|||
amendContext?: AmendContext;
|
||||
contextualSuggestion?: string | null;
|
||||
suggestions?: readonly InstanceAiEmptyStateSuggestion[];
|
||||
isWorkflowBuilderAvailable?: boolean;
|
||||
// Experiment cleanup: remove with instanceAiPromptSuggestionsV2.
|
||||
suggestionsComponent?: Component;
|
||||
suggestionCatalogVersion?: string;
|
||||
|
|
@ -54,6 +55,7 @@ const props = withDefaults(
|
|||
currentThreadId: '',
|
||||
amendContext: null,
|
||||
contextualSuggestion: null,
|
||||
isWorkflowBuilderAvailable: true,
|
||||
},
|
||||
);
|
||||
|
||||
|
|
@ -93,7 +95,9 @@ const hasNonWhitespaceDraftText = computed(() => inputText.value.trim().length >
|
|||
const isInputVisuallyEmpty = computed(() => inputText.value.length === 0);
|
||||
const hasAttachments = computed(() => attachedFiles.value.length > 0);
|
||||
const isComposerDirty = computed(() => hasNonWhitespaceDraftText.value || hasAttachments.value);
|
||||
const isGatedBySetup = computed(() => props.isAwaitingConfirmation);
|
||||
const isGatedBySetup = computed(
|
||||
() => props.isAwaitingConfirmation || !props.isWorkflowBuilderAvailable,
|
||||
);
|
||||
const canSubmit = computed(() => isComposerDirty.value && !isBusy.value && !isGatedBySetup.value);
|
||||
const canShowSuggestions = computed(
|
||||
() =>
|
||||
|
|
@ -113,6 +117,9 @@ const resolvedSuggestionCatalogVersion = computed(
|
|||
const shouldTrackVisibleSuggestions = computed(() => canShowSuggestions.value);
|
||||
|
||||
const placeholder = computed(() => {
|
||||
if (!props.isWorkflowBuilderAvailable) {
|
||||
return i18n.baseText('instanceAi.input.workflowBuilderUnavailablePlaceholder');
|
||||
}
|
||||
if (isGatedBySetup.value) {
|
||||
return i18n.baseText('instanceAi.input.suspendedPlaceholder');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { N8nCallout } from '@n8n/design-system';
|
||||
import { useI18n, type BaseTextKey } from '@n8n/i18n';
|
||||
import { useInstanceAiSettingsStore } from '../instanceAiSettings.store';
|
||||
|
||||
const i18n = useI18n();
|
||||
const settingsStore = useInstanceAiSettingsStore();
|
||||
|
||||
const descriptionKey = computed<BaseTextKey>(() =>
|
||||
settingsStore.isSandboxEnabled
|
||||
? ('instanceAi.workflowBuilderUnavailable.serviceUrlDescription' as BaseTextKey)
|
||||
: ('instanceAi.workflowBuilderUnavailable.enableSandboxDescription' as BaseTextKey),
|
||||
);
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<N8nCallout
|
||||
:class="$style.notice"
|
||||
theme="warning"
|
||||
data-test-id="instance-ai-workflow-builder-unavailable"
|
||||
>
|
||||
<span :class="$style.copy">
|
||||
<strong>{{ i18n.baseText('instanceAi.workflowBuilderUnavailable.title') }}</strong>
|
||||
<span>{{ i18n.baseText(descriptionKey) }}</span>
|
||||
</span>
|
||||
</N8nCallout>
|
||||
</template>
|
||||
|
||||
<style lang="scss" module>
|
||||
.notice {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.copy {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--spacing--4xs);
|
||||
}
|
||||
</style>
|
||||
|
|
@ -21,7 +21,7 @@ const uiStore = useUIStore();
|
|||
const { store, getString, getNumber, getBool } = useSettingsField();
|
||||
|
||||
const provider = computed(() => {
|
||||
return store.draft.sandboxProvider ?? store.settings?.sandboxProvider ?? 'daytona';
|
||||
return store.draft.sandboxProvider ?? store.settings?.sandboxProvider ?? 'n8n-sandbox';
|
||||
});
|
||||
|
||||
const showDaytonaFields = computed(() => {
|
||||
|
|
@ -36,6 +36,12 @@ const showImageField = computed(() => {
|
|||
return provider.value === 'daytona';
|
||||
});
|
||||
|
||||
function handleProviderChange(value: string | number | boolean | null) {
|
||||
if (value === 'n8n-sandbox' || value === 'daytona') {
|
||||
store.setField('sandboxProvider', value);
|
||||
}
|
||||
}
|
||||
|
||||
const daytonaCredentials = computed(() =>
|
||||
store.serviceCredentials.filter((c) => c.type === 'daytonaApi'),
|
||||
);
|
||||
|
|
@ -128,14 +134,9 @@ watch(
|
|||
:bold="false"
|
||||
size="small"
|
||||
>
|
||||
<N8nSelect
|
||||
:model-value="provider"
|
||||
size="small"
|
||||
@update:model-value="store.setField('sandboxProvider', String($event))"
|
||||
>
|
||||
<N8nOption value="daytona" label="Daytona" />
|
||||
<N8nSelect :model-value="provider" size="small" @update:model-value="handleProviderChange">
|
||||
<N8nOption value="n8n-sandbox" label="n8n Sandbox Service" />
|
||||
<N8nOption value="local" label="Local" />
|
||||
<N8nOption value="daytona" label="Daytona" />
|
||||
</N8nSelect>
|
||||
</N8nInputLabel>
|
||||
|
||||
|
|
@ -190,6 +191,9 @@ watch(
|
|||
:label="i18n.baseText('instanceAi.settings.credential.createNew')"
|
||||
/>
|
||||
</N8nSelect>
|
||||
<p :class="$style.hint">
|
||||
{{ i18n.baseText('instanceAi.settings.n8nSandbox.serviceUrlHint' as BaseTextKey) }}
|
||||
</p>
|
||||
</N8nInputLabel>
|
||||
</template>
|
||||
|
||||
|
|
@ -245,4 +249,11 @@ watch(
|
|||
font-size: var(--font-size--2xs);
|
||||
color: var(--color--text--tint-1);
|
||||
}
|
||||
|
||||
.hint {
|
||||
margin: var(--spacing--4xs) 0 0;
|
||||
font-size: var(--font-size--2xs);
|
||||
line-height: var(--line-height--sm);
|
||||
color: var(--color--text--tint-1);
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -93,6 +93,15 @@ export const useInstanceAiSettingsStore = defineStore('instanceAiSettings', () =
|
|||
const isCloudManaged = computed(
|
||||
() => settingsStore.moduleSettings?.['instance-ai']?.cloudManaged === true,
|
||||
);
|
||||
const isSandboxEnabled = computed(
|
||||
() => settingsStore.moduleSettings?.['instance-ai']?.sandboxEnabled === true,
|
||||
);
|
||||
const isWorkflowBuilderAvailable = computed(
|
||||
() => settingsStore.moduleSettings?.['instance-ai']?.workflowBuilderAvailable ?? true,
|
||||
);
|
||||
const sandboxUnavailableReason = computed(
|
||||
() => settingsStore.moduleSettings?.['instance-ai']?.sandboxUnavailableReason ?? null,
|
||||
);
|
||||
|
||||
const isDirty = computed(() => {
|
||||
if (!settings.value && !preferences.value) return false;
|
||||
|
|
@ -109,6 +118,13 @@ export const useInstanceAiSettingsStore = defineStore('instanceAiSettings', () =
|
|||
localGatewayDisabled: adminRes.localGatewayDisabled ?? prev?.localGatewayDisabled ?? false,
|
||||
proxyEnabled: prev?.proxyEnabled ?? false,
|
||||
cloudManaged: prev?.cloudManaged ?? false,
|
||||
sandboxEnabled: adminRes.sandboxEnabled,
|
||||
workflowBuilderAvailable: adminRes.sandboxEnabled
|
||||
? (prev?.workflowBuilderAvailable ?? true)
|
||||
: false,
|
||||
sandboxUnavailableReason: adminRes.sandboxEnabled
|
||||
? (prev?.sandboxUnavailableReason ?? null)
|
||||
: null,
|
||||
};
|
||||
settingsStore.moduleSettings = {
|
||||
...ms,
|
||||
|
|
@ -537,6 +553,9 @@ export const useInstanceAiSettingsStore = defineStore('instanceAiSettings', () =
|
|||
isLocalGatewayDisabled,
|
||||
isLocalGatewayDisabledByAdmin,
|
||||
isProxyEnabled,
|
||||
isSandboxEnabled,
|
||||
isWorkflowBuilderAvailable,
|
||||
sandboxUnavailableReason,
|
||||
fetchGatewayStatus,
|
||||
connectLocalGateway,
|
||||
isCloudManaged,
|
||||
|
|
|
|||
|
|
@ -180,6 +180,7 @@ export class ProxyServer {
|
|||
partialBodyMatching?: boolean;
|
||||
sequential?: boolean;
|
||||
repeatLastResponse?: boolean;
|
||||
filter?: (expectation: Expectation, fileName: string) => boolean;
|
||||
transform?: (expectation: Expectation, fileName: string) => Expectation;
|
||||
} = {},
|
||||
): Promise<void> {
|
||||
|
|
@ -221,6 +222,10 @@ export class ProxyServer {
|
|||
'ONLY_MATCHING_FIELDS';
|
||||
}
|
||||
|
||||
if (options.filter && !options.filter(expectation, file)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (options.sequential) {
|
||||
expectation.times = { remainingTimes: 1 };
|
||||
}
|
||||
|
|
@ -286,6 +291,14 @@ export class ProxyServer {
|
|||
}
|
||||
}
|
||||
|
||||
async reset(): Promise<void> {
|
||||
try {
|
||||
await this.withRetry(async () => await this.client.reset());
|
||||
} catch (error) {
|
||||
throw new Error(`Failed to reset ProxyServer: ${JSON.stringify(error)}`);
|
||||
}
|
||||
}
|
||||
|
||||
async createGetExpectation(
|
||||
path: string,
|
||||
responseBody: unknown,
|
||||
|
|
@ -332,6 +345,7 @@ export class ProxyServer {
|
|||
dedupe?: boolean;
|
||||
raw?: boolean;
|
||||
clearDir?: boolean;
|
||||
filter?: (expectation: Expectation) => boolean;
|
||||
transform?: (expectation: Expectation) => Expectation;
|
||||
},
|
||||
): Promise<void> {
|
||||
|
|
@ -415,6 +429,10 @@ export class ProxyServer {
|
|||
},
|
||||
};
|
||||
|
||||
if (options?.filter && !options.filter(processedExpectation)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (options?.transform) {
|
||||
processedExpectation = options.transform(processedExpectation);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
import { execFile } from 'node:child_process';
|
||||
import { chmodSync, mkdtempSync } from 'node:fs';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { join } from 'node:path';
|
||||
import { promisify } from 'node:util';
|
||||
import type { StartedNetwork, StartedTestContainer } from 'testcontainers';
|
||||
import { GenericContainer, Wait } from 'testcontainers';
|
||||
|
||||
|
|
@ -16,6 +18,11 @@ const API_GRPC_PORT = 9090;
|
|||
const API_KEY = 'n8n-sandbox-ci-key';
|
||||
const RUNNER_API_KEY = 'ci-runner-key';
|
||||
const REGISTRATION_TOKEN = 'ci-reg-token';
|
||||
const SANDBOX_READY_TIMEOUT_MS = 120_000;
|
||||
const SANDBOX_READY_POLL_INTERVAL_MS = 1_000;
|
||||
const DOCKER_COMMAND_MAX_BUFFER = 10 * 1024 * 1024;
|
||||
|
||||
const execFileAsync = promisify(execFile);
|
||||
|
||||
export interface SandboxMeta {
|
||||
apiUrl: string;
|
||||
|
|
@ -28,6 +35,73 @@ export type SandboxResult = ServiceResult<SandboxMeta> & {
|
|||
|
||||
const CERT_GEN_SENTINEL = 'SANDBOX_CERTS_READY';
|
||||
|
||||
function shellQuote(value: string): string {
|
||||
return `'${value.replace(/'/g, "'\\''")}'`;
|
||||
}
|
||||
|
||||
async function ensureHostDockerImage(image: string): Promise<void> {
|
||||
try {
|
||||
await execFileAsync('docker', ['image', 'inspect', image], {
|
||||
maxBuffer: DOCKER_COMMAND_MAX_BUFFER,
|
||||
});
|
||||
} catch {
|
||||
await execFileAsync('docker', ['pull', image], { maxBuffer: DOCKER_COMMAND_MAX_BUFFER });
|
||||
}
|
||||
}
|
||||
|
||||
async function loadSandboxImageIntoRunner(
|
||||
runnerContainer: StartedTestContainer,
|
||||
image: string,
|
||||
): Promise<void> {
|
||||
await ensureHostDockerImage(image);
|
||||
|
||||
const runnerName = runnerContainer.getName().replace(/^\//, '');
|
||||
await execFileAsync(
|
||||
'sh',
|
||||
[
|
||||
'-lc',
|
||||
`docker save ${shellQuote(image)} | docker exec -i ${shellQuote(runnerName)} docker load`,
|
||||
],
|
||||
{ maxBuffer: DOCKER_COMMAND_MAX_BUFFER },
|
||||
);
|
||||
}
|
||||
|
||||
async function waitForSandboxApiReady(apiContainer: StartedTestContainer): Promise<void> {
|
||||
const host = apiContainer.getHost();
|
||||
const port = apiContainer.getMappedPort(API_HTTP_PORT);
|
||||
const baseUrl = `http://${host}:${port}`;
|
||||
const deadline = Date.now() + SANDBOX_READY_TIMEOUT_MS;
|
||||
let lastError = 'sandbox API was not ready';
|
||||
|
||||
while (Date.now() < deadline) {
|
||||
try {
|
||||
const createResponse = await fetch(`${baseUrl}/sandboxes`, {
|
||||
method: 'POST',
|
||||
headers: { 'X-Api-Key': API_KEY },
|
||||
});
|
||||
|
||||
if (createResponse.ok) {
|
||||
const sandbox = (await createResponse.json()) as { id?: string };
|
||||
if (sandbox.id) {
|
||||
await fetch(`${baseUrl}/sandboxes/${sandbox.id}`, {
|
||||
method: 'DELETE',
|
||||
headers: { 'X-Api-Key': API_KEY },
|
||||
}).catch(() => {});
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
lastError = `${createResponse.status} ${await createResponse.text()}`;
|
||||
} catch (error) {
|
||||
lastError = error instanceof Error ? error.message : String(error);
|
||||
}
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, SANDBOX_READY_POLL_INTERVAL_MS));
|
||||
}
|
||||
|
||||
throw new Error(`Sandbox service did not become ready: ${lastError}`);
|
||||
}
|
||||
|
||||
async function generateMtlsCerts(network: StartedNetwork, projectName: string): Promise<string> {
|
||||
const tlsDir = mkdtempSync(join(tmpdir(), `${projectName}-sandbox-tls-`));
|
||||
chmodSync(tlsDir, 0o755);
|
||||
|
|
@ -147,6 +221,9 @@ export const sandbox: Service<SandboxResult> = {
|
|||
return throwRunnerLogs(error);
|
||||
}
|
||||
|
||||
await loadSandboxImageIntoRunner(runnerContainer, TEST_CONTAINER_IMAGES.sandboxSandbox);
|
||||
await waitForSandboxApiReady(apiContainer);
|
||||
|
||||
return {
|
||||
container: apiContainer,
|
||||
containers: [apiContainer, runnerContainer],
|
||||
|
|
|
|||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*Build a simple workflow with a manual trigger connected to a set node called \\\\\"re-run test\\\\\"[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-8ef97270cf64a96cfd89425a396e9ddd-e62748d92c0549d4-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=HMM38m13R2XLOYUoewb12Bl5Q5ajohPyRNpPpCB02.Y-1780495759.2269917-1.0.1.1-at9YU7KY3ALFbOxxBSs8v8Ki56dxdxDt_1z_NKq.Ygk; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgTag9o4oRxRyaKSwSX2"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T14:09:19Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17969000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T14:09:19Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T14:09:19Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T14:09:19Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14969000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 14:09:21 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f465f2c38f994-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "HMM38m13R2XLOYUoewb12Bl5Q5ajohPyRNpPpCB02.Y-1780495759.2269917-1.0.1.1-at9YU7KY3ALFbOxxBSs8v8Ki56dxdxDt_1z_NKq.Ygk"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_0196YnJgaNP9BxS8Lhucwef1\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":18935,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":18935,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":46,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01RV6sPgRNN98JAM1WV6jZcP\",\"name\":\"load_skill\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"name\\\": \\\"workflow-builder\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":18935,\"cache_read_input_tokens\":0,\"output_tokens\":56} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxOTZZbkpnYU5QOUJ4UzhMaHVjd2VmMSIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MTg5MzUsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjoxODkzNSwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjQ2LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxUlY2c1BnUk5OOThKQU0xV1Y2alpjUCIsIm5hbWUiOiJsb2FkX3NraWxsIiwiaW5wdXQiOnt9LCJjYWxsZXIiOnsidHlwZSI6ImRpcmVjdCJ9fSB9CgpldmVudDogcGluZwpkYXRhOiB7InR5cGUiOiAicGluZyJ9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiIn0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IntcIm5hbWVcIjogXCJ3b3JrZmxvdy1idWlsZGVyIn0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJcIn0ifSAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjozLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjE4OTM1LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwib3V0cHV0X3Rva2VucyI6NTZ9ICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgIH0KCg==",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0000-1780495806994-unknown-host-POST-_v1_messages-86dfd40b.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}\\\\\"success\\\\\":true[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-792e88b351029308dac2658436e75aaf-46b5de35e64c152f-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=OoMbNVMex7bEMQuKhw.hd_6TIqanrl5ku3E5w7TutWQ-1780495761.524498-1.0.1.1-vV0qXE7gEIt6yH3Gc5q.1mRd3oCDAdgcBuU2C17X3K8; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgTaqzsoLA8DPLtKkUbP"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T14:09:21Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17978000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T14:09:21Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T14:09:21Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T14:09:21Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14978000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 14:09:23 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f466d88d1d51d-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "OoMbNVMex7bEMQuKhw.hd_6TIqanrl5ku3E5w7TutWQ-1780495761.524498-1.0.1.1-vV0qXE7gEIt6yH3Gc5q.1mRd3oCDAdgcBuU2C17X3K8"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01VmoWZBaLXbJrEVubkHkd27\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":13333,\"cache_read_input_tokens\":18935,\"cache_creation\":{\"ephemeral_5m_input_tokens\":13333,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Building\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" the workflow now.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":1,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_012STLjPvW9mD4xSQtHYGVsY\",\"name\":\"build-workflow\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"name\\\": \\\"re-run test\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"code\\\": \\\"\\\\nimport { workflow, node, trigger, expr } from '@n8n/workflow-sdk\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"';\\\\n\\\\nconst manualTrigger = trigger({\\\\n type: 'n8n-nodes-base.manualTrigger',\\\\n version: 1,\\\\n config: { name: 'When clicking\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" \\\\\\\"Test workflow\\\\\\\"' },\\\\n});\\\\n\\\\nconst reRunTest = node({\\\\n type: 'n8n-nodes-base\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\".set',\\\\n version: 3.4,\\\\n config: {\\\\n name: 're-run test',\\\\n parameters: {\\\\n mode: 'keep\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"AllFields',\\\\n },\\\\n },\\\\n});\\\\n\\\\nexport default workflow('new', 're-run test')\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\\n .add(manualTrigger)\\\\n .to(reRunTest);\\\\n\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":1 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":13333,\"cache_read_input_tokens\":18935,\"output_tokens\":260} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxVm1vV1pCYUxYYkpyRVZ1YmtIa2QyNyIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MTMzMzMsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjoxODkzNSwiY2FjaGVfY3JlYXRpb24iOnsiZXBoZW1lcmFsXzVtX2lucHV0X3Rva2VucyI6MTMzMzMsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJCdWlsZGluZyJ9ICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiB0aGUgd29ya2Zsb3cgbm93LiJ9ICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjEsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMTJTVExqUHZXOW1ENHhTUXRIWUdWc1kiLCJuYW1lIjoiYnVpbGQtd29ya2Zsb3ciLCJpbnB1dCI6e30sImNhbGxlciI6eyJ0eXBlIjoiZGlyZWN0In19ICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiJ9ICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoie1wibmFtZVwiOiBcInJlLXJ1biB0ZXN0In0gICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCIsIFwiY29kZVwiOiBcIlxcbmltcG9ydCB7IHdvcmtmbG93LCBub2RlLCB0cmlnZ2VyLCBleHByIH0gZnJvbSAnQG44bi93b3JrZmxvdy1zZGsifSAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiInO1xcblxcbmNvbnN0IG1hbnVhbFRyaWdnZXIgPSB0cmlnZ2VyKHtcXG4gIHR5cGU6ICduOG4tbm9kZXMtYmFzZS5tYW51YWxUcmlnZ2VyJyxcXG4gIHZlcnNpb246IDEsXFxuICBjb25maWc6IHsgbmFtZTogJ1doZW4gY2xpY2tpbmcifSAgICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIgXFxcIlRlc3Qgd29ya2Zsb3dcXFwiJyB9LFxcbn0pO1xcblxcbmNvbnN0IHJlUnVuVGVzdCA9IG5vZGUoe1xcbiAgdHlwZTogJ244bi1ub2Rlcy1iYXNlIn0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIuc2V0JyxcXG4gIHZlcnNpb246IDMuNCxcXG4gIGNvbmZpZzoge1xcbiAgICBuYW1lOiAncmUtcnVuIHRlc3QnLFxcbiAgICBwYXJhbWV0ZXJzOiB7XFxuICAgICAgbW9kZTogJ2tlZXAifSAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IkFsbEZpZWxkcycsXFxuICAgIH0sXFxuICB9LFxcbn0pO1xcblxcbmV4cG9ydCBkZWZhdWx0IHdvcmtmbG93KCduZXcnLCAncmUtcnVuIHRlc3QnKSJ9ICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJcXG4gIC5hZGQobWFudWFsVHJpZ2dlcilcXG4gIC50byhyZVJ1blRlc3QpO1xcbiJ9ICAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IlwifSJ9ICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjEgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoidG9vbF91c2UiLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MTMzMzMsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjoxODkzNSwib3V0cHV0X3Rva2VucyI6MjYwfSAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0001-1780495806996-unknown-host-POST-_v1_messages-77bad225.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}\\\\\"success\\\\\":false[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-5aeaa394a43b1174a707e45e1a304a5b-60b25f935014bc3b-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=mGzXiPnnM4uht3uGMkXMHlWJ867Iljrtlmo3zcxzODU-1780495767.5801175-1.0.1.1-Go3FMuXP8nr.pvVXI8U3awyBheuevNPAJlYlkWBthm4; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgTbHsNSMaJ5zpktNmDH"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T14:09:27Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17977000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T14:09:27Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T14:09:27Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T14:09:27Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14977000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 14:09:29 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f4693582a0aca-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "mGzXiPnnM4uht3uGMkXMHlWJ867Iljrtlmo3zcxzODU-1780495767.5801175-1.0.1.1-Go3FMuXP8nr.pvVXI8U3awyBheuevNPAJlYlkWBthm4"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_014j6BT6h5ohbZtyitGvTmcJ\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":304,\"cache_read_input_tokens\":32268,\"cache_creation\":{\"ephemeral_5m_input_tokens\":304,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":37,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01SkXadYsYztiYUo5SwsyVYZ\",\"name\":\"plan\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"guidance\\\": \\\"Build a simple workflow with a manual trigger connected\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" to a single Set node named \\\\\\\"re-run test\\\\\\\". No credentials needed, no external\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" services.\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":304,\"cache_read_input_tokens\":32268,\"output_tokens\":78} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxNGo2QlQ2aDVvaGJadHlpdEd2VG1jSiIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MzA0LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MzIyNjgsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjMwNCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjM3LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMVNrWGFkWXNZenRpWVVvNVN3c3lWWVoiLCJuYW1lIjoicGxhbiIsImlucHV0Ijp7fSwiY2FsbGVyIjp7InR5cGUiOiJkaXJlY3QifX0gICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiJ9fQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IntcImd1aWRhbmNlXCI6IFwiQnVpbGQgYSBzaW1wbGUgd29ya2Zsb3cgd2l0aCBhIG1hbnVhbCB0cmlnZ2VyIGNvbm5lY3RlZCJ9ICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiB0byBhIHNpbmdsZSBTZXQgbm9kZSBuYW1lZCBcXFwicmUtcnVuIHRlc3RcXFwiLiBObyBjcmVkZW50aWFscyBuZWVkZWQsIG5vIGV4dGVybmFsIn0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiBzZXJ2aWNlcy4ifSB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCJ9In0gICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoidG9vbF91c2UiLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MzA0LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MzIyNjgsIm91dHB1dF90b2tlbnMiOjc4fSAgICAgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgICAgICAgICB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0002-1780495806997-unknown-host-POST-_v1_messages-ec41fb8e.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Workflow Planner — you design solution architectures\\. You do NOT[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-a8bd0801a263e190e74b664fccae793e-d755f705fab334af-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=Ftt5hxJy61AA0zWZUv9QVVxI4fRunbO5XzIg624_j04-1780495770.085922-1.0.1.1-b.I5n6BwRjpFUwP3ehhl5etL75rK6A70N6WcxFVXWPw; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgTbUYKeJD6174qMwQZP"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T14:09:30Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17985000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T14:09:30Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T14:09:30Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T14:09:30Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14985000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 14:09:32 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f46a30dd3a0f5-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "Ftt5hxJy61AA0zWZUv9QVVxI4fRunbO5XzIg624_j04-1780495770.085922-1.0.1.1-b.I5n6BwRjpFUwP3ehhl5etL75rK6A70N6WcxFVXWPw"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01GeDqCtrzAgS6CEGqnN27dJ\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":439,\"cache_read_input_tokens\":12472,\"cache_creation\":{\"ephemeral_5m_input_tokens\":439,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":38,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_0163xpkMXaCGDD4TKpvGLbqx\",\"name\":\"add-plan-item\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"item\\\": {\\n \\\"id\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\": \\\"wf-rerun-test\\\",\\n \\\"kind\\\": \\\"workflow\\\",\\n \\\"name\\\": \\\"re-run test\\\",\\n \\\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"purpose\\\": \\\"A simple manual-trigger workflow connected to a Set node named 're-run test'.\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" Used for manual testing and re-running purposes. No external\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" services or credentials required.\\\",\\n \\\"triggerDescription\\\": \\\"Manual trigger\\\",\\n \\\"integrations\\\": [],\\n \\\"depend\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"sOn\\\": []\\n}\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\", \\\"summary\\\": \\\"Build a minimal workflow with a Manual Trigger connected to a Set node named 're\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"-run test'.\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"assumptions\\\": [\\\"Set node will be named 're-run test' with\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" no fields configured by default\\\"]\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"}\"}}\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":439,\"cache_read_input_tokens\":12472,\"output_tokens\":229} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxR2VEcUN0cnpBZ1M2Q0VHcW5OMjdkSiIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6NDM5LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTI0NzIsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjQzOSwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjM4LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMTYzeHBrTVhhQ0dERDRUS3B2R0xicXgiLCJuYW1lIjoiYWRkLXBsYW4taXRlbSIsImlucHV0Ijp7fSwiY2FsbGVyIjp7InR5cGUiOiJkaXJlY3QifX0gICAgICAgICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiJ9ICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IntcIml0ZW1cIjoge1xuICBcImlkIn0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJcIjogXCJ3Zi1yZXJ1bi10ZXN0XCIsXG4gIFwia2luZFwiOiBcIndvcmtmbG93XCIsXG4gIFwibmFtZVwiOiBcInJlLXJ1biB0ZXN0XCIsXG4gIFwiIn0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJwdXJwb3NlXCI6IFwiQSBzaW1wbGUgbWFudWFsLXRyaWdnZXIgd29ya2Zsb3cgY29ubmVjdGVkIHRvIGEgU2V0IG5vZGUgbmFtZWQgJ3JlLXJ1biB0ZXN0Jy4ifSAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiIFVzZWQgZm9yIG1hbnVhbCB0ZXN0aW5nIGFuZCByZS1ydW5uaW5nIHB1cnBvc2VzLiBObyBleHRlcm5hbCJ9ICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIgc2VydmljZXMgb3IgY3JlZGVudGlhbHMgcmVxdWlyZWQuXCIsXG4gIFwidHJpZ2dlckRlc2NyaXB0aW9uXCI6IFwiTWFudWFsIHRyaWdnZXJcIixcbiAgXCJpbnRlZ3JhdGlvbnNcIjogW10sXG4gIFwiZGVwZW5kIn0gICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6InNPblwiOiBbXVxufSJ9ICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiwgXCJzdW1tYXJ5XCI6IFwiQnVpbGQgYSBtaW5pbWFsIHdvcmtmbG93IHdpdGggYSBNYW51YWwgVHJpZ2dlciBjb25uZWN0ZWQgdG8gYSBTZXQgbm9kZSBuYW1lZCAncmUifSAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6Ii1ydW4gdGVzdCcuIn0gICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IlwiLCBcImFzc3VtcHRpb25zXCI6IFtcIlNldCBub2RlIHdpbGwgYmUgbmFtZWQgJ3JlLXJ1biB0ZXN0JyB3aXRoIn0gICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiIG5vIGZpZWxkcyBjb25maWd1cmVkIGJ5IGRlZmF1bHRcIl0ifSAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJ9In19CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgICAgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoidG9vbF91c2UiLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6NDM5LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTI0NzIsIm91dHB1dF90b2tlbnMiOjIyOX0gICAgICAgICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0003-1780495806998-unknown-host-POST-_v1_messages-74d1411b.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Workflow Planner — you design solution architectures\\. You do NOT[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}Added: Build 're-run test' workflow \\(1 item total\\)[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-0cd1db32cc2b1acf2795a35c2cc6f02d-27dabf32bdbe9437-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=uRSCF1rcXZ3LALyKHw4KA_6yfxNxhWcnxQfM1Gx5bsw-1780495775.0738785-1.0.1.1-XTszfi2fqvYD2Epi_Cftjh5eLovncOpqDeP24cUUoF4; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgTbqqyhWsowD6SAjyE3"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T14:09:35Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17985000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T14:09:35Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T14:09:35Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T14:09:35Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14985000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 14:09:36 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f46c23badb371-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "uRSCF1rcXZ3LALyKHw4KA_6yfxNxhWcnxQfM1Gx5bsw-1780495775.0738785-1.0.1.1-XTszfi2fqvYD2Epi_Cftjh5eLovncOpqDeP24cUUoF4"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01K3MeGdCfoHvdC4ymCj4TKK\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":246,\"cache_read_input_tokens\":12911,\"cache_creation\":{\"ephemeral_5m_input_tokens\":246,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":51,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01NrwLKHacuFVfZodtpmfZAJ\",\"name\":\"add-plan-item\",\"input\":{},\"caller\":{\"type\":\"direct\"}}}\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"item\\\": {\\\"id\\\": \\\"chk-rerun-test\\\", \\\"title\\\": \\\"Verify \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"'re-run test' workflow runs successfully\\\", \\\"instructions\\\": \\\"Call verify-built-workflow with the work item ID from the 'wf-rerun-test' build outcome. Pass condition: workflow\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" executes without errors, Manual Trigger connects to the Set node named 're-run test', and at\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" least one output item is produced.\\\", \\\"dependsOn\\\": [\\\"wf-rerun-test\\\"], \\\"kind\\\": \\\"checkpoint\\\"}\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":246,\"cache_read_input_tokens\":12911,\"output_tokens\":165} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxSzNNZUdkQ2ZvSHZkQzR5bUNqNFRLSyIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MjQ2LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTI5MTEsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjI0NiwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjUxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjowLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0b29sX3VzZSIsImlkIjoidG9vbHVfMDFOcndMS0hhY3VGVmZab2R0cG1mWkFKIiwibmFtZSI6ImFkZC1wbGFuLWl0ZW0iLCJpbnB1dCI6e30sImNhbGxlciI6eyJ0eXBlIjoiZGlyZWN0In19fQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiJ9ICAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoie1wiaXRlbVwiOiB7XCJpZFwiOiBcImNoay1yZXJ1bi10ZXN0XCIsIFwidGl0bGVcIjogXCJWZXJpZnkgIn0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IidyZS1ydW4gdGVzdCcgd29ya2Zsb3cgcnVucyBzdWNjZXNzZnVsbHlcIiwgXCJpbnN0cnVjdGlvbnNcIjogXCJDYWxsIHZlcmlmeS1idWlsdC13b3JrZmxvdyB3aXRoIHRoZSB3b3JrIGl0ZW0gSUQgZnJvbSB0aGUgJ3dmLXJlcnVuLXRlc3QnIGJ1aWxkIG91dGNvbWUuIFBhc3MgY29uZGl0aW9uOiB3b3JrZmxvdyJ9ICAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiIGV4ZWN1dGVzIHdpdGhvdXQgZXJyb3JzLCBNYW51YWwgVHJpZ2dlciBjb25uZWN0cyB0byB0aGUgU2V0IG5vZGUgbmFtZWQgJ3JlLXJ1biB0ZXN0JywgYW5kIGF0In0gICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIgbGVhc3Qgb25lIG91dHB1dCBpdGVtIGlzIHByb2R1Y2VkLlwiLCBcImRlcGVuZHNPblwiOiBbXCJ3Zi1yZXJ1bi10ZXN0XCJdLCBcImtpbmRcIjogXCJjaGVja3BvaW50XCJ9In0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6In0ifSAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjAgICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjI0NiwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjEyOTExLCJvdXRwdXRfdG9rZW5zIjoxNjV9ICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgfQoK",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0004-1780495806999-unknown-host-POST-_v1_messages-c48d3d52.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Workflow Planner — you design solution architectures\\. You do NOT[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}Added: Verify 're-run test' workflow runs successfully \\(2 items total\\)[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-7ebe1ae4e825c23a5623a6947feed71d-3ef39c5856d21224-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=fkaNAkxsAxGVZelZib57MTqftJ3RTJLu5zoYfMPdmIw-1780495777.9320579-1.0.1.1-JTP1jUNf.VDW4GZRovf.IiajWbjWn_C5CaC9QVapbOk; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgTc45BjedfHHQwcRbmx"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T14:09:38Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17985000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T14:09:38Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T14:09:38Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T14:09:38Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14985000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 14:09:39 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f46d41c09fc6d-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "fkaNAkxsAxGVZelZib57MTqftJ3RTJLu5zoYfMPdmIw-1780495777.9320579-1.0.1.1-JTP1jUNf.VDW4GZRovf.IiajWbjWn_C5CaC9QVapbOk"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_015QJqvPCQe24EpGKAPaUWoq\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":199,\"cache_read_input_tokens\":13157,\"cache_creation\":{\"ephemeral_5m_input_tokens\":199,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":36,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01GEZNiCQNCjoU56RhnzbPPr\",\"name\":\"submit-plan\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":199,\"cache_read_input_tokens\":13157,\"output_tokens\":36} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxNVFKcXZQQ1FlMjRFcEdLQVBhVVdvcSIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MTk5LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTMxNTcsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjE5OSwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjM2LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMUdFWk5pQ1FOQ2pvVTU2UmhuemJQUHIiLCJuYW1lIjoic3VibWl0LXBsYW4iLCJpbnB1dCI6e30sImNhbGxlciI6eyJ0eXBlIjoiZGlyZWN0In19ICAgICAgICB9CgpldmVudDogcGluZwpkYXRhOiB7InR5cGUiOiAicGluZyJ9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiIn0gfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjE5OSwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjEzMTU3LCJvdXRwdXRfdG9rZW5zIjozNn0gICAgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgICB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0005-1780495807000-unknown-host-POST-_v1_messages-1558d1a7.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Workflow Planner — you design solution architectures\\. You do NOT[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}\\\\\"approved\\\\\":true[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-12168fd946136c8e83da4c3c50ab0530-b7ff204f5d3c8147-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=ljy6evEhIqpuo.mb_LEsdLfxHpD5iDkQl68xNFDeDtw-1780495779.989597-1.0.1.1-.GDiRrTgttsDZ3Zt1mpZrBK5TifPJfAw5kkBqstVneY; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgTcD89kWjUuUMgwckmB"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T14:09:40Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17985000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T14:09:40Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T14:09:40Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T14:09:40Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14985000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 14:09:41 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f46e0ecffc0ef-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "ljy6evEhIqpuo.mb_LEsdLfxHpD5iDkQl68xNFDeDtw-1780495779.989597-1.0.1.1-.GDiRrTgttsDZ3Zt1mpZrBK5TifPJfAw5kkBqstVneY"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01GvbQDQULkYt2kd8x3d3ePA\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":86,\"cache_creation_input_tokens\":412,\"cache_read_input_tokens\":12911,\"cache_creation\":{\"ephemeral_5m_input_tokens\":412,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Plan\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" approved.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":86,\"cache_creation_input_tokens\":412,\"cache_read_input_tokens\":12911,\"output_tokens\":6}}\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxR3ZiUURRVUxrWXQya2Q4eDNkM2VQQSIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjg2LCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjQxMiwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjEyOTExLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjo0MTIsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjowLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiJ9ICAgICAgICAgICAgICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJQbGFuIn0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgYXBwcm92ZWQuIn0gICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJlbmRfdHVybiIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInN0b3BfZGV0YWlscyI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6ODYsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6NDEyLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTI5MTEsIm91dHB1dF90b2tlbnMiOjZ9fQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgICAgICAgfQoK",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0006-1780495807001-unknown-host-POST-_v1_messages-aef0cb7a.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"assistant\"[\\s\\S]{0,1000}\"type\"\\s*:\\s*\"tool_use\"[\\s\\S]{0,300}\"name\"\\s*:\\s*\"plan\"[\\s\\S]*"
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}Plan approved and 2 tasks dispatched\\.[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
|
|
@ -15,31 +15,31 @@
|
|||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-2b75067de06d87f8f2a57e8c5341d703-eb52e3a0302513cb-01"
|
||||
"00-d777e2a3aa16a65329dae3bcc83ad101-93b254c70009b9c0-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=gOvVbWl0aRrLQxc8E.ly.vV0Ok3qd_Es2ptKjqNT9NA-1780165201.1768787-1.0.1.1-m87Ia8Gu49W1BHst80798gTEGW6bsLvWOPWv4_GuKLg; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
"_cfuvid=tln.Dmud4Gn3MHcd3na5eejUU1XI3jm35VI2dxb7YMM-1780495781.9112382-1.0.1.1-TaBDzkMm2xya9EI_ADoYF6SpP09bUHLNFfB4j6i9H9Q; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbZDTpVVVe6eUUmit4LE5"
|
||||
"req_011CbgTcM9r2qwHzkGZ4tNpZ"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-05-30T18:20:01Z"
|
||||
"2026-06-03T14:09:42Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"26970000"
|
||||
"17977000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"27000000"
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-05-30T18:20:01Z"
|
||||
"2026-06-03T14:09:42Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
|
|
@ -48,22 +48,22 @@
|
|||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-05-30T18:20:01Z"
|
||||
"2026-06-03T14:09:42Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"4500000"
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"4500000"
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-05-30T18:20:01Z"
|
||||
"2026-06-03T14:09:42Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"22470000"
|
||||
"14977000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"22500000"
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
|
|
@ -72,7 +72,7 @@
|
|||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Sat, 30 May 2026 18:20:02 GMT"
|
||||
"Wed, 03 Jun 2026 14:09:43 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
|
|
@ -84,20 +84,20 @@
|
|||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a03fc01b587b6031-BCN"
|
||||
"a05f46eced44f980-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "gOvVbWl0aRrLQxc8E.ly.vV0Ok3qd_Es2ptKjqNT9NA-1780165201.1768787-1.0.1.1-m87Ia8Gu49W1BHst80798gTEGW6bsLvWOPWv4_GuKLg"
|
||||
"_cfuvid": "tln.Dmud4Gn3MHcd3na5eejUU1XI3jm35VI2dxb7YMM-1780495781.9112382-1.0.1.1-TaBDzkMm2xya9EI_ADoYF6SpP09bUHLNFfB4j6i9H9Q"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01UXTD2jee8c9VPxTinD721G\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":108,\"cache_read_input_tokens\":29064,\"cache_creation\":{\"ephemeral_5m_input_tokens\":108,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"On\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" it — building the workflow now.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":108,\"cache_read_input_tokens\":29064,\"output_tokens\":11} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxVVhURDJqZWU4YzlWUHhUaW5ENzIxRyIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MTA4LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MjkwNjQsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjEwOCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjEsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fSAgICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiT24ifSB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBpdCDigJQgYnVpbGRpbmcgdGhlIHdvcmtmbG93IG5vdy4ifSAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJlbmRfdHVybiIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInN0b3BfZGV0YWlscyI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjoxMDgsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjoyOTA2NCwib3V0cHV0X3Rva2VucyI6MTF9ICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgICB9Cgo=",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_013Xs68nxBpujeLmitwT4p2V\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":402,\"cache_creation_input_tokens\":13339,\"cache_read_input_tokens\":18935,\"cache_creation\":{\"ephemeral_5m_input_tokens\":13339,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"On\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" it — building your workflow now.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":402,\"cache_creation_input_tokens\":13339,\"cache_read_input_tokens\":18935,\"output_tokens\":11} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxM1hzNjhueEJwdWplTG1pdHdUNHAyViIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjQwMiwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjoxMzMzOSwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjE4OTM1LCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjoxMzMzOSwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjEsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fSAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRleHQiLCJ0ZXh0IjoiIn0gIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiT24ifSB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBpdCDigJQgYnVpbGRpbmcgeW91ciB3b3JrZmxvdyBub3cuIn0gfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICAgICAgICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJlbmRfdHVybiIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInN0b3BfZGV0YWlscyI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NDAyLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjEzMzM5LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTg5MzUsIm91dHB1dF90b2tlbnMiOjExfSB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICAgICB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0008-1780165207180-unknown-host-POST-_v1_messages-35b38ebe.json",
|
||||
"id": "0007-1780495807002-unknown-host-POST-_v1_messages-e2718dda.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
|
|
@ -105,4 +105,4 @@
|
|||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*<planned-task-follow-up type=\\\\\"build-workflow\\\\\">\\\\n\\{\\\\n \\\\\"tasks\\\\\": \\[\\\\n \\{\\\\n \\\\\"id\\\\\":\\\\\"[A-Za-z0-9_-]+\\\\\",\\\\n \\\\\"title\\\\\"[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-ee3edf1cdbe42c13d9a73b8c4898ff10-906b3c4b48058164-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=1rF97ADybtmtdfbyD9UjxM_U5BcOgEPkgXU7z0dYNgk-1780495784.3660405-1.0.1.1-yHyM1r3OyyXrZ9hjJBJajK1zuSr4n9NHUkbk0q4ejqg; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgTcXcPaZoqpctuNqFH5"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T14:09:44Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17977000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T14:09:44Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T14:09:44Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T14:09:44Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14977000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 14:09:46 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f46fc4a9bf988-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "1rF97ADybtmtdfbyD9UjxM_U5BcOgEPkgXU7z0dYNgk-1780495784.3660405-1.0.1.1-yHyM1r3OyyXrZ9hjJBJajK1zuSr4n9NHUkbk0q4ejqg"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01SFTd8Z68NEPKnY2Bx769WF\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":32966,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":32966,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":71,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_017Fr2J4ekAjzYxFXnLMjsjY\",\"name\":\"build-workflow\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"code\\\": \\\"import { workflow, node, trigger } from '@n8n/workflow-sdk';\\\\n\\\\nconst manualTrigger = trigger({\\\\n type: 'n8n-nodes-\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"base.manualTrigger',\\\\n version: 1,\\\\n config: { name: 'When clicking \\\\\\\"Test workflow\\\\\\\"' },\\\\n});\\\\n\\\\nconst reRunTest = node({\\\\n type: 'n8n-nodes-base.set',\\\\n version: 3\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\".4,\\\\n config: {\\\\n name: 're-run test',\\\\n parameters: {\\\\n mode: 'keepAllFields',\\\\n },\\\\n },\\\\n});\\\\n\\\\nexport default workflow('new', 're-run test')\\\\n .add(manualTrigger\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\")\\\\n .to(reRunTest);\\\\n\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"name\\\": \\\"re-run test\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":32966,\"cache_read_input_tokens\":0,\"output_tokens\":252} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxU0ZUZDhaNjhORVBLblkyQng3NjlXRiIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MzI5NjYsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjozMjk2NiwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjcxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMTdGcjJKNGVrQWp6WXhGWG5MTWpzalkiLCJuYW1lIjoiYnVpbGQtd29ya2Zsb3ciLCJpbnB1dCI6e30sImNhbGxlciI6eyJ0eXBlIjoiZGlyZWN0In19ICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIifSAgICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJ7XCJjb2RlXCI6IFwiaW1wb3J0IHsgd29ya2Zsb3csIG5vZGUsIHRyaWdnZXIgfSBmcm9tICdAbjhuL3dvcmtmbG93LXNkayc7XFxuXFxuY29uc3QgbWFudWFsVHJpZ2dlciA9IHRyaWdnZXIoe1xcbiAgdHlwZTogJ244bi1ub2Rlcy0ifX0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJiYXNlLm1hbnVhbFRyaWdnZXInLFxcbiAgdmVyc2lvbjogMSxcXG4gIGNvbmZpZzogeyBuYW1lOiAnV2hlbiBjbGlja2luZyBcXFwiVGVzdCB3b3JrZmxvd1xcXCInIH0sXFxufSk7XFxuXFxuY29uc3QgcmVSdW5UZXN0ID0gbm9kZSh7XFxuICB0eXBlOiAnbjhuLW5vZGVzLWJhc2Uuc2V0JyxcXG4gIHZlcnNpb246IDMifSAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiLjQsXFxuICBjb25maWc6IHtcXG4gICAgbmFtZTogJ3JlLXJ1biB0ZXN0JyxcXG4gICAgcGFyYW1ldGVyczoge1xcbiAgICAgIG1vZGU6ICdrZWVwQWxsRmllbGRzJyxcXG4gICAgfSxcXG4gIH0sXFxufSk7XFxuXFxuZXhwb3J0IGRlZmF1bHQgd29ya2Zsb3coJ25ldycsICdyZS1ydW4gdGVzdCcpXFxuICAuYWRkKG1hbnVhbFRyaWdnZXIifSAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiKVxcbiAgLnRvKHJlUnVuVGVzdCk7XFxuIn0gICAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCIsIFwibmFtZVwiOiBcInJlLXJ1biB0ZXN0In0gICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCJ9In0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJ0b29sX3VzZSIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInN0b3BfZGV0YWlscyI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MywiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjozMjk2NiwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsIm91dHB1dF90b2tlbnMiOjI1Mn0gICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgICAgICAgfQoK",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0008-1780495807006-unknown-host-POST-_v1_messages-f0769297.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}\\\\\"success\\\\\":false[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-8268d8ba9733fc6dc4b2b64926ca4aa3-b0205e419e62aae7-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=Qa2y8w15RGtKL_2fZ_QBH6ZZVRRKUhUnbxvdYgOKz9o-1780495788.3672721-1.0.1.1-MbSHoZIxqbIfNkagoiWgRqTE7Qm3xdZS3euPgKCozZk; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgTcpmWxX5LFwAMNex4C"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T14:09:48Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17977000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T14:09:48Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T14:09:48Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T14:09:48Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14977000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 14:09:50 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f47154d5f34d7-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "Qa2y8w15RGtKL_2fZ_QBH6ZZVRRKUhUnbxvdYgOKz9o-1780495788.3672721-1.0.1.1-MbSHoZIxqbIfNkagoiWgRqTE7Qm3xdZS3euPgKCozZk"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01RRAtzxmxkM9cD4o8GZDMfy\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":409,\"cache_read_input_tokens\":32966,\"cache_creation\":{\"ephemeral_5m_input_tokens\":409,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":46,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01T2hzU33yoafWrysC7beNGw\",\"name\":\"build-workflow\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"patches\\\": [{\\\"old_str\\\": \\\" mode: 'keepAllFields',\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"new_str\\\": \\\" mode: 'manual',\\\\n includeOtherFields: true,\\\\n fields: {\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" values: [] },\\\"}]\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":409,\"cache_read_input_tokens\":32966,\"output_tokens\":106} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxUlJBdHp4bXhrTTljRDRvOEdaRE1meSIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6NDA5LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MzI5NjYsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjQwOSwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjQ2LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMVQyaHpVMzN5b2FmV3J5c0M3YmVOR3ciLCJuYW1lIjoiYnVpbGQtd29ya2Zsb3ciLCJpbnB1dCI6e30sImNhbGxlciI6eyJ0eXBlIjoiZGlyZWN0In19ICAgICAgICAgICAgICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiJ9ICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IntcInBhdGNoZXNcIjogW3tcIm9sZF9zdHJcIjogXCIgICAgICBtb2RlOiAna2VlcEFsbEZpZWxkcycsIn0gICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IlwiLCBcIm5ld19zdHJcIjogXCIgICAgICBtb2RlOiAnbWFudWFsJyxcXG4gICAgICBpbmNsdWRlT3RoZXJGaWVsZHM6IHRydWUsXFxuICAgICAgZmllbGRzOiB7In0gfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiB2YWx1ZXM6IFtdIH0sXCJ9XSJ9ICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6In0ifSAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoidG9vbF91c2UiLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6NDA5LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MzI5NjYsIm91dHB1dF90b2tlbnMiOjEwNn0gICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgICAgICB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0009-1780495807007-unknown-host-POST-_v1_messages-ec41fb8e.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"type\"\\s*:\\s*\"tool_use\"[\\s\\S]{0,300}\"name\"\\s*:\\s*\"build-workflow\"[\\s\\S]*"
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}\\\\\"success\\\\\":true[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
|
|
@ -15,31 +15,31 @@
|
|||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-09f7571e505ce290ac417c3d0141c0da-b34980455691fc9c-01"
|
||||
"00-e97d6e58a3bfa984939be52bbce430e7-8275b1a4149694e1-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=JOokfxzKFZe.zPZK36JUQP_bM4c40CE7Xfb5DPw8MVU-1780158588.982493-1.0.1.1-EobiH88mJf5YNmI_KixfkSUwIp75YLcemJwI9D.KG98; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
"_cfuvid=djGRBcGk.13QElkFr__U3etWNr.DLcBTtyedCBBoNyw-1780495791.3837826-1.0.1.1-38NJUF7zg6TmtTTrSVcG2_mSs4S4j3Uyzv6VQWB2.Y0; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbZ54QWGsWsATetKrtqCa"
|
||||
"req_011CbgTd3ffByyXNPjjVvZbV"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-05-30T16:29:49Z"
|
||||
"2026-06-03T14:09:51Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17980000"
|
||||
"17977000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-05-30T16:29:49Z"
|
||||
"2026-06-03T14:09:51Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-05-30T16:29:49Z"
|
||||
"2026-06-03T14:09:51Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
|
|
@ -57,10 +57,10 @@
|
|||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-05-30T16:29:49Z"
|
||||
"2026-06-03T14:09:51Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14980000"
|
||||
"14977000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
|
|
@ -72,7 +72,7 @@
|
|||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Sat, 30 May 2026 16:29:51 GMT"
|
||||
"Wed, 03 Jun 2026 14:09:52 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
|
|
@ -84,20 +84,20 @@
|
|||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a03f1ead2c0f98e6-BCN"
|
||||
"a05f47282dd1876f-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "JOokfxzKFZe.zPZK36JUQP_bM4c40CE7Xfb5DPw8MVU-1780158588.982493-1.0.1.1-EobiH88mJf5YNmI_KixfkSUwIp75YLcemJwI9D.KG98"
|
||||
"_cfuvid": "djGRBcGk.13QElkFr__U3etWNr.DLcBTtyedCBBoNyw-1780495791.3837826-1.0.1.1-38NJUF7zg6TmtTTrSVcG2_mSs4S4j3Uyzv6VQWB2.Y0"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_019DPxVhZpe6gLvL6sBGfACb\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":452,\"cache_read_input_tokens\":29397,\"cache_creation\":{\"ephemeral_5m_input_tokens\":452,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":2,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":452,\"cache_read_input_tokens\":29397,\"output_tokens\":2} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxOURQeFZoWnBlNmdMdkw2c0JHZkFDYiIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6NDUyLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MjkzOTcsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjQ1MiwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjIsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fSAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoiZW5kX3R1cm4iLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6NDUyLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MjkzOTcsIm91dHB1dF90b2tlbnMiOjJ9ICAgICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiB9Cgo=",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01GwqMBTMyBtz7tnvFmtGtrk\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":338,\"cache_read_input_tokens\":33375,\"cache_creation\":{\"ephemeral_5m_input_tokens\":338,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":2,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":338,\"cache_read_input_tokens\":33375,\"output_tokens\":2} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxR3dxTUJUTXlCdHo3dG52Rm10R3RyayIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MzM4LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MzMzNzUsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjMzOCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjIsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fSAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoiZW5kX3R1cm4iLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MzM4LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MzMzNzUsIm91dHB1dF90b2tlbnMiOjJ9ICAgICAgICAgICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICAgICAgICAgICAgICB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0012-1780158595429-unknown-host-POST-_v1_messages-a2e65d01.json",
|
||||
"id": "0010-1780495807009-unknown-host-POST-_v1_messages-77bad225.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*<planned-task-follow-up type=\\\\\"checkpoint\\\\\">[\\s\\S]{0,2000}__INSTANCE_AI_ID_VALUE__[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-78c387fcfb032d2d863e38c1a71b4a59-de4ae438593b2096-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=fnvb_d2o9ZW6KpKGn0gwgl.VrFHISe7aM..iF1qsYJY-1780495793.3766475-1.0.1.1-f_jsotX4MQAxLwcPcjK9_.9m28vkx3Jzn3P4_dZApd0; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgTdCE6q5MhX33TnDvA9"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T14:09:53Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17975000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T14:09:53Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T14:09:53Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T14:09:53Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14975000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 14:09:56 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f473498bbb38c-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "fnvb_d2o9ZW6KpKGn0gwgl.VrFHISe7aM..iF1qsYJY-1780495793.3766475-1.0.1.1-f_jsotX4MQAxLwcPcjK9_.9m28vkx3Jzn3P4_dZApd0"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01NBsp2tzLwarZ9X2GmTnGyx\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":34972,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":34972,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"The\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" verificationReadiness is `not_verifiable` due to a non-mockable trigger, so\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" I'll run the workflow directly via executions instead.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":1,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_0172KFc9SwGd5x94PUncnKY3\",\"name\":\"executions\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"action\\\": \\\"run\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"workflowId\\\": \\\"GD67K\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"j9gFqjFGo6V\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":1 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":34972,\"cache_read_input_tokens\":0,\"output_tokens\":121} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxTkJzcDJ0ekx3YXJaOVgyR21Ubkd5eCIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MzQ5NzIsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjozNDk3MiwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjEsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fSAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgICAgICAgICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiVGhlIn0gICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIHZlcmlmaWNhdGlvblJlYWRpbmVzcyBpcyBgbm90X3ZlcmlmaWFibGVgIGR1ZSB0byBhIG5vbi1tb2NrYWJsZSB0cmlnZ2VyLCBzbyJ9ICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgSSdsbCBydW4gdGhlIHdvcmtmbG93IGRpcmVjdGx5IHZpYSBleGVjdXRpb25zIGluc3RlYWQuIn0gICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjEsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMTcyS0ZjOVN3R2Q1eDk0UFVuY25LWTMiLCJuYW1lIjoiZXhlY3V0aW9ucyIsImlucHV0Ijp7fSwiY2FsbGVyIjp7InR5cGUiOiJkaXJlY3QifX0gICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiJ9ICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoie1wiYWN0aW9uXCI6IFwicnVuIn0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJcIiwgXCJ3b3JrZmxvd0lkXCI6IFwiR0Q2N0sifSAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6Imo5Z0ZxakZHbzZWIn0gICAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCJ9In0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjEgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjozLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjM0OTcyLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwib3V0cHV0X3Rva2VucyI6MTIxfSAgICAgfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgICB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0012-1780495807010-unknown-host-POST-_v1_messages-7dd3315b.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}\\\\\"status\\\\\":\\\\\"success\\\\\"[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-d4c87f9f509286419a49020bc6f1d764-c9efa31daef59d2b-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=sVZuC8sIWbQgl_4KcMsiT.8ON4TX0s5Er7xY_ZGhJkg-1780495797.9946668-1.0.1.1-DlQ.AceP92CfUig14XT1K08SgtFJ9K3eyPDFuMA._dk; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgTdXs46Xyp6iDfL5aPH"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T14:09:58Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17975000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T14:09:58Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T14:09:58Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T14:09:58Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14975000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 14:09:59 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f47517ad6f32a-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "sVZuC8sIWbQgl_4KcMsiT.8ON4TX0s5Er7xY_ZGhJkg-1780495797.9946668-1.0.1.1-DlQ.AceP92CfUig14XT1K08SgtFJ9K3eyPDFuMA._dk"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01SmGdcFjuoB7rGfYN5REYD6\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":291,\"cache_read_input_tokens\":34972,\"cache_creation\":{\"ephemeral_5m_input_tokens\":291,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":53,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01CBV9aLH3dYKDy14xNJAA44\",\"name\":\"complete-checkpoint\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"taskId\\\": \\\"chk-rerun-test\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"status\\\": \\\"succeeded\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"result\\\": \\\"Workflow executed successfully (execution #5). Manual\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" Trigger connected to the \\\\\\\"re-run test\\\\\\\" Set node, and one output item was produced with no errors.\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"outcome\\\": {\\\"execut\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"ionId\\\": \\\"5\\\", \\\"status\\\": \\\"success\\\", \\\"workflowId\\\": \\\"GD67Kj9gFqjFGo6V\\\"}\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":291,\"cache_read_input_tokens\":34972,\"output_tokens\":180} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxU21HZGNGanVvQjdyR2ZZTjVSRVlENiIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MjkxLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MzQ5NzIsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjI5MSwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjUzLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxQ0JWOWFMSDNkWUtEeTE0eE5KQUE0NCIsIm5hbWUiOiJjb21wbGV0ZS1jaGVja3BvaW50IiwiaW5wdXQiOnt9LCJjYWxsZXIiOnsidHlwZSI6ImRpcmVjdCJ9fSAgICAgICAgICB9CgpldmVudDogcGluZwpkYXRhOiB7InR5cGUiOiAicGluZyJ9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiIn0gICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJ7XCJ0YXNrSWRcIjogXCJjaGstcmVydW4tdGVzdCJ9ICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IlwiLCBcInN0YXR1c1wiOiBcInN1Y2NlZWRlZCJ9IH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJcIiwgXCJyZXN1bHRcIjogXCJXb3JrZmxvdyBleGVjdXRlZCBzdWNjZXNzZnVsbHkgKGV4ZWN1dGlvbiAjNSkuIE1hbnVhbCJ9ICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiIFRyaWdnZXIgY29ubmVjdGVkIHRvIHRoZSBcXFwicmUtcnVuIHRlc3RcXFwiIFNldCBub2RlLCBhbmQgb25lIG91dHB1dCBpdGVtIHdhcyBwcm9kdWNlZCB3aXRoIG5vIGVycm9ycy4ifSB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCIsIFwib3V0Y29tZVwiOiB7XCJleGVjdXQifSAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiaW9uSWRcIjogXCI1XCIsIFwic3RhdHVzXCI6IFwic3VjY2Vzc1wiLCBcIndvcmtmbG93SWRcIjogXCJHRDY3S2o5Z0ZxakZHbzZWXCJ9In0gICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6In0ifSAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoidG9vbF91c2UiLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MjkxLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MzQ5NzIsIm91dHB1dF90b2tlbnMiOjE4MH0gICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgIH0KCg==",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0013-1780495807012-unknown-host-POST-_v1_messages-5196b912.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}Checkpoint chk-rerun-test marked succeeded\\.[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-c654e6f4911686468c9158e4d5a84ad8-5d520f16ae1ab94e-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=iM85eef4Imd1FAICo2CxB4nJ6VmBZ3I6935RZDat614-1780495801.5323465-1.0.1.1-4TWDD1aPuHb8tVTiMVnK.UcFKw0qBIxa_U3Qh50hyDA; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgTdo5M5AvazgdweW6ey"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T14:10:01Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17975000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T14:10:01Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T14:10:01Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T14:10:01Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14975000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 14:10:02 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f47679811f97e-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "iM85eef4Imd1FAICo2CxB4nJ6VmBZ3I6935RZDat614-1780495801.5323465-1.0.1.1-4TWDD1aPuHb8tVTiMVnK.UcFKw0qBIxa_U3Qh50hyDA"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01438pFcyE8g2PiDb9r1cD1R\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":211,\"cache_read_input_tokens\":35263,\"cache_creation\":{\"ephemeral_5m_input_tokens\":211,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":2,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":211,\"cache_read_input_tokens\":35263,\"output_tokens\":2} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxNDM4cEZjeUU4ZzJQaURiOXIxY0QxUiIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MjExLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MzUyNjMsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjIxMSwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjIsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fSAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjIxMSwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjM1MjYzLCJvdXRwdXRfdG9rZW5zIjoyfSAgfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgICAgICAgICB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0014-1780495807013-unknown-host-POST-_v1_messages-788187c4.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*<planned-task-follow-up type=\\\\\"synthesize\\\\\">[\\s\\S]{0,2000}__INSTANCE_AI_ID_VALUE__[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-62b402bb5fcf6dd5108a69e3736512e4-d8c89910b6804061-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=_961N9ErxlEANGMlIPHMameMAttlvExV_3v.xZ27BEk-1780495803.301943-1.0.1.1-r.LtMn_NRwSAkvgP8oB31EYHcpM8XLPliKdPjSUwoPg; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgTdve1my8kgLU2MmBKj"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T14:10:03Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17975000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T14:10:03Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T14:10:03Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T14:10:03Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14975000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 14:10:05 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f4772a9c03516-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "_961N9ErxlEANGMlIPHMameMAttlvExV_3v.xZ27BEk-1780495803.301943-1.0.1.1-r.LtMn_NRwSAkvgP8oB31EYHcpM8XLPliKdPjSUwoPg"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01Rqdyap7PpPyPtHLX2qXmWq\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":35761,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":35761,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":3,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Workflow **\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\\"re-run test\\\"** (ID: `GD67Kj9gFqjFGo6V`) is ready\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" — a Manual Trigger connected to a Set node named \\\"re-run test\\\", verified running successfully.\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" Publish when you want it live.\"}}\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":35761,\"cache_read_input_tokens\":0,\"output_tokens\":65}}\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxUnFkeWFwN1BwUHlQdEhMWDJxWG1XcSIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MzU3NjEsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjozNTc2MSwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjMsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fSAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgICAgICAgICAgICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiV29ya2Zsb3cgKioifSAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IlwicmUtcnVuIHRlc3RcIioqIChJRDogYEdENjdLajlnRnFqRkdvNlZgKSBpcyByZWFkeSJ9ICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIg4oCUIGEgTWFudWFsIFRyaWdnZXIgY29ubmVjdGVkIHRvIGEgU2V0IG5vZGUgbmFtZWQgXCJyZS1ydW4gdGVzdFwiLCB2ZXJpZmllZCBydW5uaW5nIHN1Y2Nlc3NmdWxseS4ifSAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgUHVibGlzaCB3aGVuIHlvdSB3YW50IGl0IGxpdmUuIn19CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjozLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjM1NzYxLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwib3V0cHV0X3Rva2VucyI6NjV9fQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgICAgICB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0015-1780495807014-unknown-host-POST-_v1_messages-41863004.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1,62 +0,0 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "[{\"type\":\"text\",\"text\":\"You are the n8n Instance Agent — an AI assistant embedde",
|
||||
"subString": true
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"x-envoy-upstream-service-time": ["1445"],
|
||||
"vary": ["Accept-Encoding"],
|
||||
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
|
||||
"set-cookie": [
|
||||
"_cfuvid=9TANiINu4KlgXWACXzyQIsKsCDT6FPGI0k6hG_hd.yk-1776069557.5700831-1.0.1.1-XO1EW.e.io.6F2z_bPBnZ_HF7AeeUXv50qAeup3Ftls; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"server-timing": ["x-originResponse;dur=1449"],
|
||||
"request-id": ["req_011Ca1UAJqiEoB4oicZauVjc"],
|
||||
"cf-cache-status": ["DYNAMIC"],
|
||||
"anthropic-ratelimit-tokens-reset": ["2026-04-13T08:39:17Z"],
|
||||
"anthropic-ratelimit-tokens-remaining": ["26977000"],
|
||||
"anthropic-ratelimit-tokens-limit": ["27000000"],
|
||||
"anthropic-ratelimit-requests-reset": ["2026-04-13T08:39:17Z"],
|
||||
"anthropic-ratelimit-requests-remaining": ["19998"],
|
||||
"anthropic-ratelimit-requests-limit": ["20000"],
|
||||
"anthropic-ratelimit-output-tokens-reset": ["2026-04-13T08:39:17Z"],
|
||||
"anthropic-ratelimit-output-tokens-remaining": ["4500000"],
|
||||
"anthropic-ratelimit-output-tokens-limit": ["4500000"],
|
||||
"anthropic-ratelimit-input-tokens-reset": ["2026-04-13T08:39:17Z"],
|
||||
"anthropic-ratelimit-input-tokens-remaining": ["22477000"],
|
||||
"anthropic-ratelimit-input-tokens-limit": ["22500000"],
|
||||
"X-Robots-Tag": ["none"],
|
||||
"Server": ["cloudflare"],
|
||||
"Date": ["Mon, 13 Apr 2026 08:39:19 GMT"],
|
||||
"Content-Type": ["text/event-stream; charset=utf-8"],
|
||||
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
|
||||
"Cache-Control": ["no-cache"],
|
||||
"CF-RAY": ["9eb928cec8efe516-TXL"]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "9TANiINu4KlgXWACXzyQIsKsCDT6FPGI0k6hG_hd.yk-1776069557.5700831-1.0.1.1-XO1EW.e.io.6F2z_bPBnZ_HF7AeeUXv50qAeup3Ftls"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01DccTeDtBHA4fnMpo4CRQP7\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":565,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":12653,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Building\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" your workflow with a Manual Trigger connected to a Set node called \\\"re-run test\\\" now!\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":565,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":12653,\"output_tokens\":25} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxRGNjVGVEdEJIQTRmbk1wbzRDUlFQNyIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjU2NSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTI2NTMsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRleHQiLCJ0ZXh0IjoiIn0gICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJCdWlsZGluZyJ9ICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIHlvdXIgd29ya2Zsb3cgd2l0aCBhIE1hbnVhbCBUcmlnZ2VyIGNvbm5lY3RlZCB0byBhIFNldCBub2RlIGNhbGxlZCBcInJlLXJ1biB0ZXN0XCIgbm93ISJ9ICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoiZW5kX3R1cm4iLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjU2NSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTI2NTMsIm91dHB1dF90b2tlbnMiOjI1fSAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgICAgICAgfQoK",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "1776069601652-unknown-host-POST-_v1_messages-8a23f6c2.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,87 +0,0 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "[{\"type\":\"text\",\"text\":\"Generate a concise title (max 60 chars) summarizing what",
|
||||
"subString": true
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"x-envoy-upstream-service-time": ["953"],
|
||||
"vary": ["Accept-Encoding"],
|
||||
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
|
||||
"set-cookie": [
|
||||
"_cfuvid=uMyXO3w4nxHtF7X8Gu4T4045OnhfW85aazvFgy4S2Sc-1776069559.8836298-1.0.1.1-23l7mzfmUeB2zTOw07qEorluoVVl6fbaiJaZdFIkufw; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"server-timing": ["x-originResponse;dur=956"],
|
||||
"request-id": ["req_011Ca1UAUh3gZwgdjP9trwnv"],
|
||||
"cf-cache-status": ["DYNAMIC"],
|
||||
"anthropic-ratelimit-tokens-reset": ["2026-04-13T08:39:20Z"],
|
||||
"anthropic-ratelimit-tokens-remaining": ["27000000"],
|
||||
"anthropic-ratelimit-tokens-limit": ["27000000"],
|
||||
"anthropic-ratelimit-requests-reset": ["2026-04-13T08:39:19Z"],
|
||||
"anthropic-ratelimit-requests-remaining": ["19998"],
|
||||
"anthropic-ratelimit-requests-limit": ["20000"],
|
||||
"anthropic-ratelimit-output-tokens-reset": ["2026-04-13T08:39:20Z"],
|
||||
"anthropic-ratelimit-output-tokens-remaining": ["4500000"],
|
||||
"anthropic-ratelimit-output-tokens-limit": ["4500000"],
|
||||
"anthropic-ratelimit-input-tokens-reset": ["2026-04-13T08:39:20Z"],
|
||||
"anthropic-ratelimit-input-tokens-remaining": ["22500000"],
|
||||
"anthropic-ratelimit-input-tokens-limit": ["22500000"],
|
||||
"X-Robots-Tag": ["none"],
|
||||
"Server": ["cloudflare"],
|
||||
"Date": ["Mon, 13 Apr 2026 08:39:20 GMT"],
|
||||
"Content-Type": ["application/json"],
|
||||
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
|
||||
"CF-RAY": ["9eb928dd4bb06e5c-TXL"]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "uMyXO3w4nxHtF7X8Gu4T4045OnhfW85aazvFgy4S2Sc-1776069559.8836298-1.0.1.1-23l7mzfmUeB2zTOw07qEorluoVVl6fbaiJaZdFIkufw"
|
||||
},
|
||||
"body": {
|
||||
"contentType": "application/json",
|
||||
"type": "JSON",
|
||||
"json": {
|
||||
"model": "claude-sonnet-4-6",
|
||||
"id": "msg_01AeN1r2Nfz3VHszwy1kYhFr",
|
||||
"type": "message",
|
||||
"role": "assistant",
|
||||
"content": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": "Build simple workflow with manual trigger and Set node"
|
||||
}
|
||||
],
|
||||
"stop_reason": "end_turn",
|
||||
"stop_sequence": null,
|
||||
"stop_details": null,
|
||||
"usage": {
|
||||
"input_tokens": 116,
|
||||
"cache_creation_input_tokens": 0,
|
||||
"cache_read_input_tokens": 0,
|
||||
"cache_creation": {
|
||||
"ephemeral_5m_input_tokens": 0,
|
||||
"ephemeral_1h_input_tokens": 0
|
||||
},
|
||||
"output_tokens": 12,
|
||||
"service_tier": "standard",
|
||||
"inference_geo": "global"
|
||||
}
|
||||
},
|
||||
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1zb25uZXQtNC02IiwiaWQiOiJtc2dfMDFBZU4xcjJOZnozVkhzend5MWtZaEZyIiwidHlwZSI6Im1lc3NhZ2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiQnVpbGQgc2ltcGxlIHdvcmtmbG93IHdpdGggbWFudWFsIHRyaWdnZXIgYW5kIFNldCBub2RlIn1dLCJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjExNiwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfY3JlYXRpb24iOnsiZXBoZW1lcmFsXzVtX2lucHV0X3Rva2VucyI6MCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjEyLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0="
|
||||
}
|
||||
},
|
||||
"id": "1776069601653-unknown-host-POST-_v1_messages-18622610.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1,62 +0,0 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "[{\"type\":\"text\",\"text\":\"You are an expert n8n workflow builder. You generate com",
|
||||
"subString": true
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"x-envoy-upstream-service-time": ["1734"],
|
||||
"vary": ["Accept-Encoding"],
|
||||
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
|
||||
"set-cookie": [
|
||||
"_cfuvid=jumUv9GkGnpXJEPjD_F0WpBWaBQr0CKfDRcic3NQPRY-1776069563.6951046-1.0.1.1-kQKSUDcaQ16qadxXBTzCM5M5SaFrguQ_cvnFMdxY_M0; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"server-timing": ["x-originResponse;dur=1737"],
|
||||
"request-id": ["req_011Ca1UAmFDD5rvHUeGspQ5u"],
|
||||
"cf-cache-status": ["DYNAMIC"],
|
||||
"anthropic-ratelimit-tokens-reset": ["2026-04-13T08:39:24Z"],
|
||||
"anthropic-ratelimit-tokens-remaining": ["26974000"],
|
||||
"anthropic-ratelimit-tokens-limit": ["27000000"],
|
||||
"anthropic-ratelimit-requests-reset": ["2026-04-13T08:39:24Z"],
|
||||
"anthropic-ratelimit-requests-remaining": ["19998"],
|
||||
"anthropic-ratelimit-requests-limit": ["20000"],
|
||||
"anthropic-ratelimit-output-tokens-reset": ["2026-04-13T08:39:24Z"],
|
||||
"anthropic-ratelimit-output-tokens-remaining": ["4500000"],
|
||||
"anthropic-ratelimit-output-tokens-limit": ["4500000"],
|
||||
"anthropic-ratelimit-input-tokens-reset": ["2026-04-13T08:39:24Z"],
|
||||
"anthropic-ratelimit-input-tokens-remaining": ["22474000"],
|
||||
"anthropic-ratelimit-input-tokens-limit": ["22500000"],
|
||||
"X-Robots-Tag": ["none"],
|
||||
"Server": ["cloudflare"],
|
||||
"Date": ["Mon, 13 Apr 2026 08:39:25 GMT"],
|
||||
"Content-Type": ["text/event-stream; charset=utf-8"],
|
||||
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
|
||||
"Cache-Control": ["no-cache"],
|
||||
"CF-RAY": ["9eb928f51d58e50b-TXL"]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "jumUv9GkGnpXJEPjD_F0WpBWaBQr0CKfDRcic3NQPRY-1776069563.6951046-1.0.1.1-kQKSUDcaQ16qadxXBTzCM5M5SaFrguQ_cvnFMdxY_M0"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01GJGcErLKYZfwVHmbcioPAP\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":690,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":16876,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Done\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" — the workflow is ready with a Manual Trigger connected to the \\\"re-run test\\\" Set node.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":690,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":16876,\"output_tokens\":26} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\"}\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxR0pHY0VyTEtZWmZ3VkhtYmNpb1BBUCIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjY5MCwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTY4NzYsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjowLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiJ9ICAgICAgICAgICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJEb25lIn0gICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIOKAlCB0aGUgd29ya2Zsb3cgaXMgcmVhZHkgd2l0aCBhIE1hbnVhbCBUcmlnZ2VyIGNvbm5lY3RlZCB0byB0aGUgXCJyZS1ydW4gdGVzdFwiIFNldCBub2RlLiJ9ICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJlbmRfdHVybiIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInN0b3BfZGV0YWlscyI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NjkwLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjoxNjg3Niwib3V0cHV0X3Rva2VucyI6MjZ9ICAgfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AifQoK",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "1776069601656-unknown-host-POST-_v1_messages-4d1c93f7.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "[{\"type\":\"text\",\"text\":\"You are the n8n Instance Agent — an AI assistant embedde",
|
||||
"subString": true
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"x-envoy-upstream-service-time": ["3596"],
|
||||
"vary": ["Accept-Encoding"],
|
||||
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
|
||||
"set-cookie": [
|
||||
"_cfuvid=.Sqc76plqzLD.23uq05eARBETAJHDRIGXULbbJD_MEU-1776069568.7689385-1.0.1.1-BWbn8ZoTheRehH8KZl9F_9VOdKlh3MIjZTvCMuB2F7k; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"server-timing": ["x-originResponse;dur=3609"],
|
||||
"request-id": ["req_011Ca1UB8txRzERGaXP7696y"],
|
||||
"cf-cache-status": ["DYNAMIC"],
|
||||
"anthropic-ratelimit-tokens-reset": ["2026-04-13T08:39:28Z"],
|
||||
"anthropic-ratelimit-tokens-remaining": ["26976000"],
|
||||
"anthropic-ratelimit-tokens-limit": ["27000000"],
|
||||
"anthropic-ratelimit-requests-reset": ["2026-04-13T08:39:28Z"],
|
||||
"anthropic-ratelimit-requests-remaining": ["19998"],
|
||||
"anthropic-ratelimit-requests-limit": ["20000"],
|
||||
"anthropic-ratelimit-output-tokens-reset": ["2026-04-13T08:39:28Z"],
|
||||
"anthropic-ratelimit-output-tokens-remaining": ["4500000"],
|
||||
"anthropic-ratelimit-output-tokens-limit": ["4500000"],
|
||||
"anthropic-ratelimit-input-tokens-reset": ["2026-04-13T08:39:29Z"],
|
||||
"anthropic-ratelimit-input-tokens-remaining": ["22476000"],
|
||||
"anthropic-ratelimit-input-tokens-limit": ["22500000"],
|
||||
"X-Robots-Tag": ["none"],
|
||||
"Server": ["cloudflare"],
|
||||
"Date": ["Mon, 13 Apr 2026 08:39:32 GMT"],
|
||||
"Content-Type": ["text/event-stream; charset=utf-8"],
|
||||
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
|
||||
"Cache-Control": ["no-cache"],
|
||||
"CF-RAY": ["9eb92914cf78e504-TXL"]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": ".Sqc76plqzLD.23uq05eARBETAJHDRIGXULbbJD_MEU-1776069568.7689385-1.0.1.1-BWbn8ZoTheRehH8KZl9F_9VOdKlh3MIjZTvCMuB2F7k"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01GqtBjYT2xtiUqPwmG5ZMJX\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":732,\"cache_creation_input_tokens\":12653,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":12653,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"The\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" workflow is ready! It has a **Manual Trigger** connected to a **Set node** named \\\"re-run test\\\". \\n\\nWould\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" you like to test it or make any changes?\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":732,\"cache_creation_input_tokens\":12653,\"cache_read_input_tokens\":0,\"output_tokens\":43} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxR3F0QmpZVDJ4dGlVcVB3bUc1Wk1KWCIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjczMiwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjoxMjY1MywiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjEyNjUzLCJlcGhlbWVyYWxfMWhfaW5wdXRfdG9rZW5zIjowfSwib3V0cHV0X3Rva2VucyI6MSwic2VydmljZV90aWVyIjoic3RhbmRhcmQiLCJpbmZlcmVuY2VfZ2VvIjoiZ2xvYmFsIn19IH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgICB9CgpldmVudDogcGluZwpkYXRhOiB7InR5cGUiOiAicGluZyJ9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IlRoZSJ9ICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgd29ya2Zsb3cgaXMgcmVhZHkhIEl0IGhhcyBhICoqTWFudWFsIFRyaWdnZXIqKiBjb25uZWN0ZWQgdG8gYSAqKlNldCBub2RlKiogbmFtZWQgXCJyZS1ydW4gdGVzdFwiLiBcblxuV291bGQifX0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIHlvdSBsaWtlIHRvIHRlc3QgaXQgb3IgbWFrZSBhbnkgY2hhbmdlcz8ifSAgICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjAgICAgICAgICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJlbmRfdHVybiIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInN0b3BfZGV0YWlscyI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NzMyLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjEyNjUzLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwib3V0cHV0X3Rva2VucyI6NDN9ICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgIH0KCg==",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "1776069601668-unknown-host-POST-_v1_messages-8a23f6c2.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,12 @@
|
|||
{"kind":"header","version":1,"testName":"recording","recordedAt":"2026-04-13T08:39:07.457Z"}
|
||||
{"kind":"tool-call","stepId":1,"agentRole":"orchestrator","toolName":"build-workflow-with-agent","input":{"task":"Build a simple workflow with a Manual Trigger node connected to a Set node named \"re-run test\". The Set node doesn't need any specific fields configured — just the name.","conversationContext":"User wants a simple workflow: Manual Trigger → Set node named \"re-run test\"."},"output":{"result":"Workflow build started (task: build-ao_qOE2h). Reply with one short sentence — e.g. name what's being built. Do NOT summarize the plan or list details.","taskId":"build-ao_qOE2h"}}
|
||||
{"kind":"tool-call","stepId":2,"agentRole":"workflow-builder","toolName":"build-workflow","input":{"code":"\nimport { workflow, node, trigger, newCredential, expr } from '@n8n/workflow-sdk';\n\nconst manualTrigger = trigger({\n type: 'n8n-nodes-base.manualTrigger',\n version: 1,\n config: { name: 'When clicking \"Test workflow\"' }\n});\n\nconst setNode = node({\n type: 'n8n-nodes-base.set',\n version: 3.4,\n config: {\n name: 're-run test',\n parameters: {\n assignments: { assignments: [] },\n options: {}\n }\n }\n});\n\nexport default workflow('re-run-test', 're-run test')\n .add(manualTrigger)\n .to(setNode);\n","name":"re-run test"},"output":{"success":true,"workflowId":"2RsNNT31Ww0FD3vf"}}
|
||||
{"kind":"header","version":1,"testName":"recording","recordedAt":"2026-04-13T08:39:26.689Z"}
|
||||
{"kind":"header","version":1,"testName":"recording","recordedAt":"2026-06-03T14:09:18.486Z"}
|
||||
{"kind":"tool-call","stepId":1,"agentRole":"orchestrator","toolName":"build-workflow","input":{"code":"\nimport { workflow, node, trigger, expr } from '@n8n/workflow-sdk';\n\nconst manualTrigger = trigger({\n type: 'n8n-nodes-base.manualTrigger',\n version: 1,\n config: { name: 'When clicking \"Test workflow\"' },\n});\n\nconst reRunTest = node({\n type: 'n8n-nodes-base.set',\n version: 3.4,\n config: {\n name: 're-run test',\n parameters: {\n mode: 'keepAllFields',\n },\n },\n});\n\nexport default workflow('new', 're-run test')\n .add(manualTrigger)\n .to(reRunTest);\n","name":"re-run test"},"output":{"success":false,"errors":["New workflow builds must be planned first: call `plan` so the user can approve the build plan before saving."]}}
|
||||
{"kind":"tool-call","stepId":2,"agentRole":"planner","toolName":"add-plan-item","input":{"summary":"Build a minimal workflow with a Manual Trigger connected to a Set node named 're-run test'.","assumptions":["Set node will be named 're-run test' with no fields configured by default"],"item":{"id":"wf-rerun-test","name":"re-run test","purpose":"A simple manual-trigger workflow connected to a Set node named 're-run test'. Used for manual testing and re-running purposes. No external services or credentials required.","integrations":[],"triggerDescription":"Manual trigger","dependsOn":[],"kind":"workflow"}},"output":{"result":"Added: Build 're-run test' workflow (1 item total)"}}
|
||||
{"kind":"tool-call","stepId":3,"agentRole":"planner","toolName":"add-plan-item","input":{"item":{"id":"chk-rerun-test","title":"Verify 're-run test' workflow runs successfully","instructions":"Call verify-built-workflow with the work item ID from the 'wf-rerun-test' build outcome. Pass condition: workflow executes without errors, Manual Trigger connects to the Set node named 're-run test', and at least one output item is produced.","dependsOn":["wf-rerun-test"],"kind":"checkpoint"}},"output":{"result":"Added: Verify 're-run test' workflow runs successfully (2 items total)"}}
|
||||
{"kind":"tool-suspend","stepId":4,"agentRole":"planner","toolName":"submit-plan","input":{},"output":{},"suspendPayload":{"requestId":"4kOWMyz7inAw-x6Afb8mJ","message":"Review the plan (2 tasks) before execution starts.","severity":"info","inputType":"plan-review","tasks":{"tasks":[{"id":"wf-rerun-test","description":"Build 're-run test' workflow","status":"todo"},{"id":"chk-rerun-test","description":"Verify 're-run test' workflow runs successfully","status":"todo"}]},"planItems":[{"id":"wf-rerun-test","title":"Build 're-run test' workflow","kind":"build-workflow","spec":"A simple manual-trigger workflow connected to a Set node named 're-run test'. Used for manual testing and re-running purposes. No external services or credentials required.\nTrigger: Manual trigger\n\nAssumptions:\n- Set node will be named 're-run test' with no fields configured by default","deps":[]},{"id":"chk-rerun-test","title":"Verify 're-run test' workflow runs successfully","kind":"checkpoint","spec":"Call verify-built-workflow with the work item ID from the 'wf-rerun-test' build outcome. Pass condition: workflow executes without errors, Manual Trigger connects to the Set node named 're-run test', and at least one output item is produced.","deps":["wf-rerun-test"]}]}}
|
||||
{"kind":"tool-suspend","stepId":5,"agentRole":"orchestrator","toolName":"plan","input":{"guidance":"Build a simple workflow with a manual trigger connected to a single Set node named \"re-run test\". No credentials needed, no external services."},"output":{},"suspendPayload":{"requestId":"4kOWMyz7inAw-x6Afb8mJ","message":"Review the plan (2 tasks) before execution starts.","severity":"info","inputType":"plan-review","tasks":{"tasks":[{"id":"wf-rerun-test","description":"Build 're-run test' workflow","status":"todo"},{"id":"chk-rerun-test","description":"Verify 're-run test' workflow runs successfully","status":"todo"}]},"planItems":[{"id":"wf-rerun-test","title":"Build 're-run test' workflow","kind":"build-workflow","spec":"A simple manual-trigger workflow connected to a Set node named 're-run test'. Used for manual testing and re-running purposes. No external services or credentials required.\nTrigger: Manual trigger\n\nAssumptions:\n- Set node will be named 're-run test' with no fields configured by default","deps":[]},{"id":"chk-rerun-test","title":"Verify 're-run test' workflow runs successfully","kind":"checkpoint","spec":"Call verify-built-workflow with the work item ID from the 'wf-rerun-test' build outcome. Pass condition: workflow executes without errors, Manual Trigger connects to the Set node named 're-run test', and at least one output item is produced.","deps":["wf-rerun-test"]}]}}
|
||||
{"kind":"tool-resume","stepId":6,"agentRole":"planner","toolName":"submit-plan","input":{},"output":{"approved":true},"resumeData":{"approved":true}}
|
||||
{"kind":"tool-resume","stepId":7,"agentRole":"orchestrator","toolName":"plan","input":{"guidance":"Build a simple workflow with a manual trigger connected to a single Set node named \"re-run test\". No credentials needed, no external services."},"output":{"result":"Plan approved and 2 tasks dispatched."},"resumeData":{"approved":true}}
|
||||
{"kind":"tool-call","stepId":8,"agentRole":"orchestrator","toolName":"build-workflow","input":{"code":"import { workflow, node, trigger } from '@n8n/workflow-sdk';\n\nconst manualTrigger = trigger({\n type: 'n8n-nodes-base.manualTrigger',\n version: 1,\n config: { name: 'When clicking \"Test workflow\"' },\n});\n\nconst reRunTest = node({\n type: 'n8n-nodes-base.set',\n version: 3.4,\n config: {\n name: 're-run test',\n parameters: {\n mode: 'keepAllFields',\n },\n },\n});\n\nexport default workflow('new', 're-run test')\n .add(manualTrigger)\n .to(reRunTest);\n","name":"re-run test"},"output":{"success":false,"errors":["[SET_INVALID_MODE] (re-run test): 're-run test' [n8n-nodes-base.set] uses unsupported Set node mode \"keepAllFields\". Use \"manual\" for field mapping or \"raw\" for JSON output. To keep existing input fields while mapping fields, use mode: \"manual\" with includeOtherFields: true.","[INVALID_PARAMETER] (re-run test): Node \"re-run test\": Invalid value for \"parameters.mode\": got \"keepAllFields\", expected one of: \"manual\"."]}}
|
||||
{"kind":"tool-call","stepId":9,"agentRole":"orchestrator","toolName":"build-workflow","input":{"patches":[{"old_str":" mode: 'keepAllFields',","new_str":" mode: 'manual',\n includeOtherFields: true,\n fields: { values: [] },"}]},"output":{"success":true,"workflowId":"GD67Kj9gFqjFGo6V","workflowName":"re-run test","workItemId":"wi_5R5OjhWv","triggerNodes":[{"nodeName":"When clicking \"Test workflow\"","nodeType":"n8n-nodes-base.manualTrigger"}],"verificationReadiness":{"status":"not_verifiable","reason":"non-mockable-trigger","guidance":"The workflow does not have a trigger the post-build verifier can exercise."},"setupRequirement":{"status":"not_required"}}}
|
||||
{"kind":"tool-call","stepId":10,"agentRole":"orchestrator","toolName":"executions","input":{"action":"run","workflowId":"GD67Kj9gFqjFGo6V"},"output":{"executionId":"5","status":"success","data":{"When clicking \"Test workflow\"":"<untrusted_data source=\"execution-output\" label=\"node:When clicking "Test workflow"\">\n[\n {}\n]\n</untrusted_data>","re-run test":"<untrusted_data source=\"execution-output\" label=\"node:re-run test\">\n[\n {}\n]\n</untrusted_data>"},"startedAt":"2026-06-03T14:09:57.742Z","finishedAt":"2026-06-03T14:09:57.759Z"}}
|
||||
{"kind":"tool-call","stepId":11,"agentRole":"orchestrator","toolName":"complete-checkpoint","input":{"taskId":"chk-rerun-test","status":"succeeded","result":"Workflow executed successfully (execution #5). Manual Trigger connected to the \"re-run test\" Set node, and one output item was produced with no errors.","outcome":{"executionId":"5","status":"success","workflowId":"GD67Kj9gFqjFGo6V"}},"output":{"ok":true,"result":"Checkpoint chk-rerun-test marked succeeded."}}
|
||||
|
|
|
|||
|
|
@ -1,108 +0,0 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*Set up the workflow named \\\\\"B3 Full Wizard Apply\\\\\"\\.[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-25332d36d33cd2560e9f90d179a5ae3e-28bcf653748110be-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=s5WxbCpVbzABQPa8SsVNi58fQa8XfeFyVOwLi.KT39c-1780098659.3727632-1.0.1.1-5OfnGCqFrsGIv5TEHkNypubd6D_O0v9.1Wq6FL5p73U; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbXktjd6Xxd3guZmF7AAS"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-05-29T23:50:59Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"26971000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"27000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-05-29T23:50:59Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-05-29T23:50:59Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-05-29T23:50:59Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"22471000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"22500000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Fri, 29 May 2026 23:51:00 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a039678d1990df8c-BCN"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "s5WxbCpVbzABQPa8SsVNi58fQa8XfeFyVOwLi.KT39c-1780098659.3727632-1.0.1.1-5OfnGCqFrsGIv5TEHkNypubd6D_O0v9.1Wq6FL5p73U"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01NJtS8WZ6Najpjyce7RVP49\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":16534,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":16534,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Let\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" me look up that workflow first.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":1,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01RQeZ1UazgvzggQVdrahQ6S\",\"name\":\"workflows\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"action\\\": \\\"list\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"query\\\": \\\"B3 Full Wizard Apply\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":1 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":16534,\"cache_read_input_tokens\":0,\"output_tokens\":83}}\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxTkp0UzhXWjZOYWpwanljZTdSVlA0OSIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MTY1MzQsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjoxNjUzNCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjEsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fSAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgICB9CgpldmVudDogcGluZwpkYXRhOiB7InR5cGUiOiAicGluZyJ9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IkxldCJ9ICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgbWUgbG9vayB1cCB0aGF0IHdvcmtmbG93IGZpcnN0LiJ9ICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MSwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxUlFlWjFVYXpndnpnZ1FWZHJhaFE2UyIsIm5hbWUiOiJ3b3JrZmxvd3MiLCJpbnB1dCI6e30sImNhbGxlciI6eyJ0eXBlIjoiZGlyZWN0In19ICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiIn0gICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IntcImFjdGlvblwiOiBcImxpc3QifX0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJcIiwgXCJxdWVyeVwiOiBcIkIzIEZ1bGwgV2l6YXJkIEFwcGx5In0gICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IlwifSJ9ICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MSAgICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjozLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjE2NTM0LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwib3V0cHV0X3Rva2VucyI6ODN9fQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgfQoK",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0000-1780098669102-unknown-host-POST-_v1_messages-3c003bc2.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*Set up the workflow named \\\\\"B3 Full Wizard Apply\\\\\"\\.[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-7db3b7d819c1b336de099b7a83a1c963-caab1c8c042a79fa-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=S5gzDYIU2ZVTLHvBE4QOYCKcO45HoYpzguver2xfdkE-1780493861.9355466-1.0.1.1-LeyQ8ptCDSWPG4ZTEd597y7.fSfE07ZcyeYwje_Sy8o; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgRApVw2DBTbj2GUPwtw"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T13:37:42Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17978000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T13:37:42Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T13:37:42Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T13:37:42Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14978000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 13:37:43 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f180d1b98bc98-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "S5gzDYIU2ZVTLHvBE4QOYCKcO45HoYpzguver2xfdkE-1780493861.9355466-1.0.1.1-LeyQ8ptCDSWPG4ZTEd597y7.fSfE07ZcyeYwje_Sy8o"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01G33WykFTwykAsDD1uxHL3z\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":18929,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":18929,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Let\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" me look up that workflow first.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":1,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01Br2fAGxAAPzb2YXYCLUHAL\",\"name\":\"workflows\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"action\\\": \\\"list\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"query\\\": \\\"B3 Full Wizard Apply\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":1}\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":18929,\"cache_read_input_tokens\":0,\"output_tokens\":83} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxRzMzV3lrRlR3eWtBc0REMXV4SEwzeiIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MTg5MjksImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjoxODkyOSwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjEsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fSAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRleHQiLCJ0ZXh0IjoiIn0gICAgICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiTGV0In19CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBtZSBsb29rIHVwIHRoYXQgd29ya2Zsb3cgZmlyc3QuIn0gICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MSwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxQnIyZkFHeEFBUHpiMllYWUNMVUhBTCIsIm5hbWUiOiJ3b3JrZmxvd3MiLCJpbnB1dCI6e30sImNhbGxlciI6eyJ0eXBlIjoiZGlyZWN0In19ICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIifSAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoie1wiYWN0aW9uXCI6IFwibGlzdCJ9ICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJcIiwgXCJxdWVyeVwiOiBcIkIzIEZ1bGwgV2l6YXJkIEFwcGx5In0gICAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCJ9In0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MX0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjozLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjE4OTI5LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwib3V0cHV0X3Rva2VucyI6ODN9ICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgfQoK",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0000-1780493870906-unknown-host-POST-_v1_messages-3c003bc2.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,108 +0,0 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"type\"\\s*:\\s*\"tool_use\"[\\s\\S]{0,300}\"name\"\\s*:\\s*\"workflows\"[\\s\\S]{0,500}\"action\"\\s*:\\s*\"list\"[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-e449f70d863cc3cb2261e7a073c1b393-a11892273542a5ed-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=n2H3pnu97VEACivUGgESsuQixSDy6KIPxARyJCELbYA-1780098662.0338843-1.0.1.1-sH_dhbaZlo2DKj3yQ5.Gd3748lopxds0T4sgf7KspKY; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbXktw1hhns3iqLT47mej"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-05-29T23:51:02Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"26970000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"27000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-05-29T23:51:02Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-05-29T23:51:02Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-05-29T23:51:02Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"22470000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"22500000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Fri, 29 May 2026 23:51:03 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a039679dbe500873-BCN"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "n2H3pnu97VEACivUGgESsuQixSDy6KIPxARyJCELbYA-1780098662.0338843-1.0.1.1-sH_dhbaZlo2DKj3yQ5.Gd3748lopxds0T4sgf7KspKY"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01KBNNxUbyT4kreonyvtnTHH\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":214,\"cache_read_input_tokens\":16534,\"cache_creation\":{\"ephemeral_5m_input_tokens\":214,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":58,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01AAGwTetGa2zswmhMAMqDCZ\",\"name\":\"workflows\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"action\\\": \\\"setup\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"workflowId\\\": \\\"zATO9AEpTzU\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"W8H4B\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":214,\"cache_read_input_tokens\":16534,\"output_tokens\":85} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxS0JOTnhVYnlUNGtyZW9ueXZ0blRISCIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MjE0LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTY1MzQsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjIxNCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjU4LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxQUFHd1RldEdhMnpzd21oTUFNcURDWiIsIm5hbWUiOiJ3b3JrZmxvd3MiLCJpbnB1dCI6e30sImNhbGxlciI6eyJ0eXBlIjoiZGlyZWN0In19ICAgICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiJ9ICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoie1wiYWN0aW9uXCI6IFwic2V0dXAifSAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IlwiLCBcIndvcmtmbG93SWRcIjogXCJ6QVRPOUFFcFR6VSJ9ICAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6Ilc4SDRCIn0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJcIn0ifSAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoidG9vbF91c2UiLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MjE0LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTY1MzQsIm91dHB1dF90b2tlbnMiOjg1fSAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0001-1780098669102-unknown-host-POST-_v1_messages-1f2f17ee.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}\\\\\"name\\\\\":\\\\\"B3 Full Wizard Apply\\\\\"[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-70899cec7ae8aaf10f19de3aa838c7e1-2b4f193bcc0e3ee0-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=g5v8exgy0rR3CUQgurYv0bGEO7NYxXdqngYE7dHAhEo-1780493864.5984683-1.0.1.1-Btv9Mm0Ok55yAjLZf_LtANLTCNEvNIrqaBgiukUcb7k; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgRB1k7P9DVprY6jf27P"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T13:37:44Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17977000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T13:37:44Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T13:37:44Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T13:37:44Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14977000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 13:37:46 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f181db9c1f96c-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "g5v8exgy0rR3CUQgurYv0bGEO7NYxXdqngYE7dHAhEo-1780493864.5984683-1.0.1.1-Btv9Mm0Ok55yAjLZf_LtANLTCNEvNIrqaBgiukUcb7k"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_013fnCZhj4YnCVC6ch8FdM5G\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":210,\"cache_read_input_tokens\":18929,\"cache_creation\":{\"ephemeral_5m_input_tokens\":210,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":69,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01Uzr9zYUSoGKRbRCS7iZksm\",\"name\":\"workflows\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"action\\\": \\\"setup\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"workflowId\\\": \\\"IrIeUTmEFoNL8wDF\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":210,\"cache_read_input_tokens\":18929,\"output_tokens\":85} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxM2ZuQ1poajRZbkNWQzZjaDhGZE01RyIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MjEwLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTg5MjksImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjIxMCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjY5LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjowLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0b29sX3VzZSIsImlkIjoidG9vbHVfMDFVenI5ellVU29HS1JiUkNTN2laa3NtIiwibmFtZSI6IndvcmtmbG93cyIsImlucHV0Ijp7fSwiY2FsbGVyIjp7InR5cGUiOiJkaXJlY3QifX0gICAgICAgICB9CgpldmVudDogcGluZwpkYXRhOiB7InR5cGUiOiAicGluZyJ9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiIn0gICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoie1wiYWN0aW9uXCI6IFwic2V0dXAifSAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCIsIFwid29ya2Zsb3dJZFwiOiBcIklySWVVVG1FRm9OTDh3REYifSAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJcIn0ifSAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjIxMCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjE4OTI5LCJvdXRwdXRfdG9rZW5zIjo4NX0gfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgICAgICAgICAgICAgfQoK",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0001-1780493870908-unknown-host-POST-_v1_messages-91029a75.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,108 +0,0 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"type\"\\s*:\\s*\"tool_use\"[\\s\\S]{0,300}\"name\"\\s*:\\s*\"workflows\"[\\s\\S]{0,500}\"action\"\\s*:\\s*\"setup\"[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-24a682657499e271390e20389ccc8bb4-50107f698569feb2-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=O5u0CIBqnATLPIuloY3UqGPG75_CJzyUz7KLw6xArnw-1780098665.829543-1.0.1.1-ylBpJF4mloCETnSocQPpsAuvfNyznGIBr6LvILhG9AM; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbXkuDEWsggXZRjycE5iN"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-05-29T23:51:05Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"26970000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"27000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-05-29T23:51:05Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-05-29T23:51:05Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-05-29T23:51:06Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"22470000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"22500000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Fri, 29 May 2026 23:51:06 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a03967b56de2baf8-BCN"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "O5u0CIBqnATLPIuloY3UqGPG75_CJzyUz7KLw6xArnw-1780098665.829543-1.0.1.1-ylBpJF4mloCETnSocQPpsAuvfNyznGIBr6LvILhG9AM"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01Szx7sQTaBC9bpmneT33sab\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":542,\"cache_creation_input_tokens\":345,\"cache_read_input_tokens\":16200,\"cache_creation\":{\"ephemeral_5m_input_tokens\":345,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"The\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" setup for **B3 Full Wizard Apply** completed successfully. Here's what was configured:\\n\\n- **HTTP\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" Request** node — URL set to `https://example.com/api` with `GET` method,\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" using the **B3 Parameter Header Auth** credential for authentication.\\n- **Manual Trigger** → **HTTP Request** connection is w\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ired up.\\n\\nThe workflow is currently unpublished. Let me know if you'd like to test it or publish it.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":542,\"cache_creation_input_tokens\":345,\"cache_read_input_tokens\":16200,\"output_tokens\":105} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\"}\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxU3p4N3NRVGFCQzlicG1uZVQzM3NhYiIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjU0MiwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjozNDUsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjoxNjIwMCwiY2FjaGVfY3JlYXRpb24iOnsiZXBoZW1lcmFsXzVtX2lucHV0X3Rva2VucyI6MzQ1LCJlcGhlbWVyYWxfMWhfaW5wdXRfdG9rZW5zIjowfSwib3V0cHV0X3Rva2VucyI6MSwic2VydmljZV90aWVyIjoic3RhbmRhcmQiLCJpbmZlcmVuY2VfZ2VvIjoiZ2xvYmFsIn19ICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiVGhlIn0gICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBzZXR1cCBmb3IgKipCMyBGdWxsIFdpemFyZCBBcHBseSoqIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIEhlcmUncyB3aGF0IHdhcyBjb25maWd1cmVkOlxuXG4tICoqSFRUUCJ9ICAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgUmVxdWVzdCoqIG5vZGUg4oCUIFVSTCBzZXQgdG8gYGh0dHBzOi8vZXhhbXBsZS5jb20vYXBpYCB3aXRoIGBHRVRgIG1ldGhvZCwifSAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiB1c2luZyB0aGUgKipCMyBQYXJhbWV0ZXIgSGVhZGVyIEF1dGgqKiBjcmVkZW50aWFsIGZvciBhdXRoZW50aWNhdGlvbi5cbi0gKipNYW51YWwgVHJpZ2dlcioqIOKGkiAqKkhUVFAgUmVxdWVzdCoqIGNvbm5lY3Rpb24gaXMgdyJ9ICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJpcmVkIHVwLlxuXG5UaGUgd29ya2Zsb3cgaXMgY3VycmVudGx5IHVucHVibGlzaGVkLiBMZXQgbWUga25vdyBpZiB5b3UnZCBsaWtlIHRvIHRlc3QgaXQgb3IgcHVibGlzaCBpdC4ifSAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoiZW5kX3R1cm4iLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjU0MiwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjozNDUsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjoxNjIwMCwib3V0cHV0X3Rva2VucyI6MTA1fSAgICAgICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCJ9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0002-1780098669103-unknown-host-POST-_v1_messages-595b716b.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}\\\\\"success\\\\\":true[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-06e409cef9cc38ddbf95cb1f0cc53e82-ad17fa6cdfe3fd92-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=7W9c_ANTS6h4lKVMD3tqEhmZjvwxy8_pL5GJXs._oXM-1780493867.5680656-1.0.1.1-jMfOtBk_hcv4pVmoU_RNrC7WwHkTMuI0NPFaoKvDAJ0; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgRBEULC3D8AL7EmSy5B"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T13:37:47Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17977000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T13:37:47Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T13:37:47Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T13:37:47Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14977000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 13:37:48 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f18304fcf2fd3-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "7W9c_ANTS6h4lKVMD3tqEhmZjvwxy8_pL5GJXs._oXM-1780493867.5680656-1.0.1.1-jMfOtBk_hcv4pVmoU_RNrC7WwHkTMuI0NPFaoKvDAJ0"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_018u4TwnbZjP8zU9kz3BQvGJ\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":539,\"cache_creation_input_tokens\":345,\"cache_read_input_tokens\":18595,\"cache_creation\":{\"ephemeral_5m_input_tokens\":345,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"The\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" workflow \\\"B3 Full Wizard Apply\\\" has been set up successfully. Here's what was configured:\\n\\n- **HTTP Request** node — pointed\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" to `https://example.com/api` (GET) with the **B3 Parameter Header Auth** credential applied\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\\n- **Manual Trigger** → **HTTP Request** connection is wired up.\\n\\nThe workflow is currently unp\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ublished. Let me know if you'd like to test it or make any changes.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":539,\"cache_creation_input_tokens\":345,\"cache_read_input_tokens\":18595,\"output_tokens\":103} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxOHU0VHduYlpqUDh6VTlrejNCUXZHSiIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjUzOSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjozNDUsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjoxODU5NSwiY2FjaGVfY3JlYXRpb24iOnsiZXBoZW1lcmFsXzVtX2lucHV0X3Rva2VucyI6MzQ1LCJlcGhlbWVyYWxfMWhfaW5wdXRfdG9rZW5zIjowfSwib3V0cHV0X3Rva2VucyI6MSwic2VydmljZV90aWVyIjoic3RhbmRhcmQiLCJpbmZlcmVuY2VfZ2VvIjoiZ2xvYmFsIn19ICAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjowLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiJ9ICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJUaGUifSAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiB3b3JrZmxvdyBcIkIzIEZ1bGwgV2l6YXJkIEFwcGx5XCIgaGFzIGJlZW4gc2V0IHVwIHN1Y2Nlc3NmdWxseS4gSGVyZSdzIHdoYXQgd2FzIGNvbmZpZ3VyZWQ6XG5cbi0gKipIVFRQIFJlcXVlc3QqKiBub2RlIOKAlCBwb2ludGVkIn0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIHRvIGBodHRwczovL2V4YW1wbGUuY29tL2FwaWAgKEdFVCkgd2l0aCB0aGUgKipCMyBQYXJhbWV0ZXIgSGVhZGVyIEF1dGgqKiBjcmVkZW50aWFsIGFwcGxpZWQifSAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIuXG4tICoqTWFudWFsIFRyaWdnZXIqKiDihpIgKipIVFRQIFJlcXVlc3QqKiBjb25uZWN0aW9uIGlzIHdpcmVkIHVwLlxuXG5UaGUgd29ya2Zsb3cgaXMgY3VycmVudGx5IHVucCJ9ICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJ1Ymxpc2hlZC4gTGV0IG1lIGtub3cgaWYgeW91J2QgbGlrZSB0byB0ZXN0IGl0IG9yIG1ha2UgYW55IGNoYW5nZXMuIn0gICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICAgICAgICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJlbmRfdHVybiIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInN0b3BfZGV0YWlscyI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NTM5LCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjM0NSwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjE4NTk1LCJvdXRwdXRfdG9rZW5zIjoxMDN9ICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiIH0KCg==",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0002-1780493870909-unknown-host-POST-_v1_messages-77bad225.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +1,4 @@
|
|||
{"kind":"header","version":1,"testName":"recording","recordedAt":"2026-05-29T23:51:05.603Z"}
|
||||
{"kind":"header","version":1,"testName":"recording","recordedAt":"2026-06-03T13:37:41.399Z"}
|
||||
{"kind":"tool-call","stepId":1,"agentRole":"orchestrator","toolName":"workflows","input":{"action":"list","query":"B3 Full Wizard Apply"},"output":{"workflows":[{"id":"IrIeUTmEFoNL8wDF","name":"B3 Full Wizard Apply","versionId":"f6782996-ef62-4c85-a0c5-6942affca942","activeVersionId":null,"isArchived":false,"createdAt":"2026-06-03T13:37:37.538Z","updatedAt":"2026-06-03T13:37:37.538Z"}]}}
|
||||
{"kind":"tool-suspend","stepId":2,"agentRole":"orchestrator","toolName":"workflows","input":{"action":"setup","workflowId":"IrIeUTmEFoNL8wDF"},"output":{},"suspendPayload":{"requestId":"R7qmWoQj1cmzDJGjEwNrK","message":"Configure credentials for your workflow","severity":"info","setupRequests":[{"node":{"name":"HTTP Request","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"parameters":{"method":"GET","url":"","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"position":[220,0],"id":"http"},"credentialType":"httpHeaderAuth","isTrigger":false,"parameterIssues":{"url":["Parameter \"URL\" is required."]},"editableParameters":[{"name":"url","displayName":"URL","type":"string","required":true,"default":""}],"needsAction":true}],"workflowId":"IrIeUTmEFoNL8wDF"}}
|
||||
{"kind":"tool-resume","stepId":3,"agentRole":"orchestrator","toolName":"workflows","input":{"action":"setup","workflowId":"IrIeUTmEFoNL8wDF"},"output":{"success":true,"completedNodes":[{"nodeName":"HTTP Request","credentialType":"httpHeaderAuth","parametersSet":["url"]}],"updatedNodes":[{"id":"trigger","name":"Manual Trigger","type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[0,0],"parameters":{}},{"id":"http","name":"HTTP Request","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[220,0],"parameters":{"method":"GET","url":"https://example.com/api","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"vy8JO8K3XIkIhNXs","name":"B3 Parameter Header Auth"}}}],"updatedConnections":{"Manual Trigger":{"main":[[{"node":"HTTP Request","type":"main","index":0}]]}}},"resumeData":{"approved":true,"action":"apply","credentials":{"HTTP Request":{"httpHeaderAuth":"vy8JO8K3XIkIhNXs"}},"nodeParameters":{"HTTP Request":{"url":"https://example.com/api"}}}}
|
||||
|
|
|
|||
|
|
@ -1,108 +0,0 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*Build a simple workflow with a manual trigger and a set node called \\\\\"preview auto-open test\\\\\"\\. Save it only; do not run o[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-3f7e1a98a997789da32ab4bce57eac68-8ba6f06881158c54-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=4Ou3L8heXs4hiKab5AVbWcMM58wbIktGFDf8ctqvgNo-1780315639.1399786-1.0.1.1-k5YAFQGlJH1IbNn8YdUfWuLEsUPV2TQx4L.IR8gWsv8; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbcWfFMFz3ShKbBxxkhHb"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-01T12:07:19Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"26970000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"27000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-01T12:07:19Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-01T12:07:19Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-01T12:07:19Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"22470000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"22500000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Mon, 01 Jun 2026 12:07:20 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a04e18e89c29fe6a-BCN"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "4Ou3L8heXs4hiKab5AVbWcMM58wbIktGFDf8ctqvgNo-1780315639.1399786-1.0.1.1-k5YAFQGlJH1IbNn8YdUfWuLEsUPV2TQx4L.IR8gWsv8"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01DUJGFYFdt7zCSVsE6hu8KY\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":16553,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":16553,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":46,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_018QnY63uHfNpg9dQaj31oxj\",\"name\":\"load_skill\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"name\\\": \\\"workflow-builder\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"}}\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":16553,\"cache_read_input_tokens\":0,\"output_tokens\":56} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxRFVKR0ZZRmR0N3pDU1ZzRTZodThLWSIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MTY1NTMsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjoxNjU1MywiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjQ2LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxOFFuWTYzdUhmTnBnOWRRYWozMW94aiIsIm5hbWUiOiJsb2FkX3NraWxsIiwiaW5wdXQiOnt9LCJjYWxsZXIiOnsidHlwZSI6ImRpcmVjdCJ9fSAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIifSAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoie1wibmFtZVwiOiBcIndvcmtmbG93LWJ1aWxkZXIifSAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJcIn0ifX0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoidG9vbF91c2UiLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MTY1NTMsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJvdXRwdXRfdG9rZW5zIjo1Nn0gICAgICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgICAgICAgfQoK",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0000-1780315686811-unknown-host-POST-_v1_messages-302c00c6.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*Build a simple workflow with a manual trigger and a set node called \\\\\"preview auto-open test\\\\\"\\. Save it only; do not run o[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-66c173d2586ee57adeadb5dece96277e-0f0c3f1ed0c675be-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=nZIUH2srIJ.2WDoneTgqzvloU.HgZc2NhUppd8Fp_vA-1780493536.2684598-1.0.1.1-bK6O8AXyEVaKsgnDhXOliua7NFs9btFIAGOjGKHmvuw; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgQkpARb97oX9GGfg37W"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T13:32:16Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17978000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T13:32:16Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T13:32:16Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T13:32:16Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14978000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 13:32:18 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f1019abec23fa-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "nZIUH2srIJ.2WDoneTgqzvloU.HgZc2NhUppd8Fp_vA-1780493536.2684598-1.0.1.1-bK6O8AXyEVaKsgnDhXOliua7NFs9btFIAGOjGKHmvuw"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01R7Cw9ZJwDPNb5d5YrEsxTF\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":18948,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":18948,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":46,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01EQpY1r1HpNP7zTvDtCFcV1\",\"name\":\"load_skill\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"name\\\": \\\"workflow-builder\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":18948,\"cache_read_input_tokens\":0,\"output_tokens\":56} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxUjdDdzlaSndEUE5iNWQ1WXJFc3hURiIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MTg5NDgsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjoxODk0OCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjQ2LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMUVRcFkxcjFIcE5QN3pUdkR0Q0ZjVjEiLCJuYW1lIjoibG9hZF9za2lsbCIsImlucHV0Ijp7fSwiY2FsbGVyIjp7InR5cGUiOiJkaXJlY3QifX0gICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIifSAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IntcIm5hbWVcIjogXCJ3b3JrZmxvdy1idWlsZGVyIn0gICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCJ9In0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjAgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoidG9vbF91c2UiLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MTg5NDgsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJvdXRwdXRfdG9rZW5zIjo1Nn0gICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgIH0KCg==",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0000-1780493573448-unknown-host-POST-_v1_messages-302c00c6.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}\\\\\"success\\\\\":true[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-144fde9596ec831ce9936db3bd22df7c-a091820d9dca74c8-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=7rlKKCXKdh09hqXjFsTDoP2vbnez8HUthwSFsHxba6w-1780493538.6524143-1.0.1.1-0ufGHr2nZUx10j02KUfpAD7_i3fdnQ9B9wZ6_JBwJBU; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgQkzFQHCyswimadWrNi"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T13:32:18Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17977000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T13:32:18Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T13:32:18Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T13:32:18Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14977000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 13:32:20 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f10289d2cf98a-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "7rlKKCXKdh09hqXjFsTDoP2vbnez8HUthwSFsHxba6w-1780493538.6524143-1.0.1.1-0ufGHr2nZUx10j02KUfpAD7_i3fdnQ9B9wZ6_JBwJBU"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_012TnZx3i7fbnkdm6WxmJJ4h\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":13333,\"cache_read_input_tokens\":18948,\"cache_creation\":{\"ephemeral_5m_input_tokens\":13333,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Building\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" the workflow now.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":1,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01Nmukqihx9ToqET6foPSNZB\",\"name\":\"build-workflow\",\"input\":{},\"caller\":{\"type\":\"direct\"}}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"name\\\": \\\"preview auto-open test\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"code\\\": \\\"\\\\nimport { workflow, node, trigger, expr } from '@n8n/workflow-sdk';\\\\n\\\\nconst man\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"ualTrigger = trigger({\\\\n type: 'n8n-nodes-base.manualTrigger',\\\\n version: 1,\\\\n config: { name: 'When clicking \\\\\\\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"Test workflow\\\\\\\"' },\\\\n});\\\\n\\\\nconst setNode = node({\\\\n type: 'n8n-nodes-base.set',\\\\n version: 3\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\".4,\\\\n config: {\\\\n name: 'preview auto-open test',\\\\n parameters: {\\\\n mode: 'manual',\\\\n fields: {\\\\n values\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\": [\\\\n { name: 'message', type: 'stringValue', string: 'Hello from preview auto\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"-open test' },\\\\n ],\\\\n },\\\\n },\\\\n },\\\\n});\\\\n\\\\nexport default workflow('', 'preview auto-open test')\\\\n .add(manualTrigger)\\\\n .to\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"(setNode);\\\\n\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":1 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":13333,\"cache_read_input_tokens\":18948,\"output_tokens\":305} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxMlRuWngzaTdmYm5rZG02V3htSko0aCIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MTMzMzMsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjoxODk0OCwiY2FjaGVfY3JlYXRpb24iOnsiZXBoZW1lcmFsXzVtX2lucHV0X3Rva2VucyI6MTMzMzMsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgICB9CgpldmVudDogcGluZwpkYXRhOiB7InR5cGUiOiAicGluZyJ9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IkJ1aWxkaW5nIn0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIHRoZSB3b3JrZmxvdyBub3cuIn0gfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjEsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMU5tdWtxaWh4OVRvcUVUNmZvUFNOWkIiLCJuYW1lIjoiYnVpbGQtd29ya2Zsb3ciLCJpbnB1dCI6e30sImNhbGxlciI6eyJ0eXBlIjoiZGlyZWN0In19fQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiJ9ICAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IntcIm5hbWVcIjogXCJwcmV2aWV3IGF1dG8tb3BlbiB0ZXN0In0gICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCIsIFwiY29kZVwiOiBcIlxcbmltcG9ydCB7IHdvcmtmbG93LCBub2RlLCB0cmlnZ2VyLCBleHByIH0gZnJvbSAnQG44bi93b3JrZmxvdy1zZGsnO1xcblxcbmNvbnN0IG1hbiJ9ICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6InVhbFRyaWdnZXIgPSB0cmlnZ2VyKHtcXG4gIHR5cGU6ICduOG4tbm9kZXMtYmFzZS5tYW51YWxUcmlnZ2VyJyxcXG4gIHZlcnNpb246IDEsXFxuICBjb25maWc6IHsgbmFtZTogJ1doZW4gY2xpY2tpbmcgXFxcIiJ9ICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiVGVzdCB3b3JrZmxvd1xcXCInIH0sXFxufSk7XFxuXFxuY29uc3Qgc2V0Tm9kZSA9IG5vZGUoe1xcbiAgdHlwZTogJ244bi1ub2Rlcy1iYXNlLnNldCcsXFxuICB2ZXJzaW9uOiAzIn0gICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6Ii40LFxcbiAgY29uZmlnOiB7XFxuICAgIG5hbWU6ICdwcmV2aWV3IGF1dG8tb3BlbiB0ZXN0JyxcXG4gICAgcGFyYW1ldGVyczoge1xcbiAgICAgIG1vZGU6ICdtYW51YWwnLFxcbiAgICAgIGZpZWxkczoge1xcbiAgICAgICAgdmFsdWVzIn0gICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiOiBbXFxuICAgICAgICAgIHsgbmFtZTogJ21lc3NhZ2UnLCB0eXBlOiAnc3RyaW5nVmFsdWUnLCBzdHJpbmc6ICdIZWxsbyBmcm9tIHByZXZpZXcgYXV0byJ9ICAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6Ii1vcGVuIHRlc3QnIH0sXFxuICAgICAgICBdLFxcbiAgICAgIH0sXFxuICAgIH0sXFxuICB9LFxcbn0pO1xcblxcbmV4cG9ydCBkZWZhdWx0IHdvcmtmbG93KCcnLCAncHJldmlldyBhdXRvLW9wZW4gdGVzdCcpXFxuICAuYWRkKG1hbnVhbFRyaWdnZXIpXFxuICAudG8ifSB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiKHNldE5vZGUpO1xcbiJ9ICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCJ9In0gfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MSAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjEzMzMzLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTg5NDgsIm91dHB1dF90b2tlbnMiOjMwNX0gICAgICAgICAgICAgICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICAgICAgICAgICAgICB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0001-1780493573450-unknown-host-POST-_v1_messages-77bad225.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,108 +0,0 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"assistant\"[\\s\\S]{0,1000}\"type\"\\s*:\\s*\"tool_use\"[\\s\\S]{0,300}\"name\"\\s*:\\s*\"build-workflow\"[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-d6334d6cd688c39169159c72ea28fb80-72d5b4165f3c1a50-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=7TKM4YJ.TsoTAsemyCA_FWKefb8M5oLdado6hXwEKis-1780315649.7100444-1.0.1.1-DrZVdlLwGlTNu_y859KouXBYMePa7TpbvIMioJrTVBI; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbcWg2qxrhoJNXJMKTuc3"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-01T12:07:30Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"26970000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"27000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-01T12:07:30Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-01T12:07:30Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-01T12:07:30Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"22470000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"22500000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Mon, 01 Jun 2026 12:07:32 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a04e192aaa0cf134-BCN"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "7TKM4YJ.TsoTAsemyCA_FWKefb8M5oLdado6hXwEKis-1780315649.7100444-1.0.1.1-DrZVdlLwGlTNu_y859KouXBYMePa7TpbvIMioJrTVBI"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01RMMHJMgPSAsPPJeQbmqDUc\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":357,\"cache_read_input_tokens\":28788,\"cache_creation\":{\"ephemeral_5m_input_tokens\":357,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":63,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_013mLYTATiStxmArhoh6W44J\",\"name\":\"build-workflow\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"code\\\": \\\"\\\\nimport { workflow, node, trigger } from '@n8n/workflow-sdk';\\\\n\\\\nconst manualTrigger = trigger({\\\\n type:\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" 'n8n-nodes-base.manualTrigger',\\\\n version: 1,\\\\n config: { name: \\\\\\\"When clicking 'Test workflow'\\\\\\\" },\\\\n});\\\\n\\\\nconst previewSet = node({\\\\n type: 'n\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"8n-nodes-base.set',\\\\n version: 3.4,\\\\n config: {\\\\n name: 'preview auto-open test',\\\\n parameters: {\\\\n assignments: {\\\\n assignments: [\\\\n {\\\\n id: 'field1',\\\\n \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"name: 'message',\\\\n value: 'preview auto-open test',\\\\n type: 'string',\\\\n },\\\\n ],\\\\n },\\\\n },\\\\n },\\\\n});\\\\n\\\\nexport default workflow('', 'preview auto-open test')\\\\n .add(manual\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"Trigger)\\\\n .to(previewSet);\\\\n\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"name\\\": \\\"preview auto-open test\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":357,\"cache_read_input_tokens\":28788,\"output_tokens\":304} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxUk1NSEpNZ1BTQXNQUEplUWJtcURVYyIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MzU3LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6Mjg3ODgsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjM1NywiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjYzLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMTNtTFlUQVRpU3R4bUFyaG9oNlc0NEoiLCJuYW1lIjoiYnVpbGQtd29ya2Zsb3ciLCJpbnB1dCI6e30sImNhbGxlciI6eyJ0eXBlIjoiZGlyZWN0In19ICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIifSAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoie1wiY29kZVwiOiBcIlxcbmltcG9ydCB7IHdvcmtmbG93LCBub2RlLCB0cmlnZ2VyIH0gZnJvbSAnQG44bi93b3JrZmxvdy1zZGsnO1xcblxcbmNvbnN0IG1hbnVhbFRyaWdnZXIgPSB0cmlnZ2VyKHtcXG4gIHR5cGU6In0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIgJ244bi1ub2Rlcy1iYXNlLm1hbnVhbFRyaWdnZXInLFxcbiAgdmVyc2lvbjogMSxcXG4gIGNvbmZpZzogeyBuYW1lOiBcXFwiV2hlbiBjbGlja2luZyAnVGVzdCB3b3JrZmxvdydcXFwiIH0sXFxufSk7XFxuXFxuY29uc3QgcHJldmlld1NldCA9IG5vZGUoe1xcbiAgdHlwZTogJ24ifSAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IjhuLW5vZGVzLWJhc2Uuc2V0JyxcXG4gIHZlcnNpb246IDMuNCxcXG4gIGNvbmZpZzoge1xcbiAgICBuYW1lOiAncHJldmlldyBhdXRvLW9wZW4gdGVzdCcsXFxuICAgIHBhcmFtZXRlcnM6IHtcXG4gICAgICBhc3NpZ25tZW50czoge1xcbiAgICAgICAgYXNzaWdubWVudHM6IFtcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIGlkOiAnZmllbGQxJyxcXG4gICAgICAgICAgICAifSAgICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJuYW1lOiAnbWVzc2FnZScsXFxuICAgICAgICAgICAgdmFsdWU6ICdwcmV2aWV3IGF1dG8tb3BlbiB0ZXN0JyxcXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcXG4gICAgICAgICAgfSxcXG4gICAgICAgIF0sXFxuICAgICAgfSxcXG4gICAgfSxcXG4gIH0sXFxufSk7XFxuXFxuZXhwb3J0IGRlZmF1bHQgd29ya2Zsb3coJycsICdwcmV2aWV3IGF1dG8tb3BlbiB0ZXN0JylcXG4gIC5hZGQobWFudWFsIn0gICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IlRyaWdnZXIpXFxuICAudG8ocHJldmlld1NldCk7XFxuIn19CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCIsIFwibmFtZVwiOiBcInByZXZpZXcgYXV0by1vcGVuIHRlc3QifSAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCJ9In0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoidG9vbF91c2UiLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MzU3LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6Mjg3ODgsIm91dHB1dF90b2tlbnMiOjMwNH0gICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgfQoK",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0002-1780315686813-unknown-host-POST-_v1_messages-b91e8d01.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}\\\\\"success\\\\\":false[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-8ee4340129a7acbcb0fba9b02293be0d-77b35b5725131ccb-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=YCh127RjOi8WaBTfnKfq2HvkyyCKEH4qjSLB_KYjTNg-1780493544.1827116-1.0.1.1-S8pdMsXCz.P3K1d_YaIvJoYIL0_AojLtH66v8_lJp_A; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgQmPvSEj91wPx5X2vpf"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T13:32:24Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17977000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T13:32:24Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T13:32:24Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T13:32:24Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14977000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 13:32:26 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f104b29cb731b-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "YCh127RjOi8WaBTfnKfq2HvkyyCKEH4qjSLB_KYjTNg-1780493544.1827116-1.0.1.1-S8pdMsXCz.P3K1d_YaIvJoYIL0_AojLtH66v8_lJp_A"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01TxkP2HeuyfMNpLMWkqnfS3\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":349,\"cache_read_input_tokens\":32281,\"cache_creation\":{\"ephemeral_5m_input_tokens\":349,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":63,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_018Pfdh1B5TqXaA1TyFCmozP\",\"name\":\"build-workflow\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"code\\\": \\\"\\\\nimport { workflow, node, trigger } from '@n8n/workflow-sdk';\\\\n\\\\nconst manualTrigger = trigger({\\\\n type:\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" 'n8n-nodes-base.manualTrigger',\\\\n version: 1,\\\\n config: { name: 'When clicking \\\\\\\"Test workflow\\\\\\\"' },\\\\n});\\\\n\\\\nconst setNode = node({\\\\n type: 'n8n-nodes-base.set\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"',\\\\n version: 3.4,\\\\n config: {\\\\n name: 'preview auto-open test',\\\\n parameters: {\\\\n mode: 'manual',\\\\n fields: {\\\\n values: [\\\\n { name: 'message', type: 'string\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"Value', string: 'Hello from preview auto-open test' },\\\\n ],\\\\n },\\\\n },\\\\n },\\\\n});\\\\n\\\\nexport default workflow('', 'preview auto-open test')\\\\n .add(manualTrigger)\\\\n .to(setNode);\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\\n\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"name\\\": \\\"preview auto-open test\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":349,\"cache_read_input_tokens\":32281,\"output_tokens\":297} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxVHhrUDJIZXV5Zk1OcExNV2txbmZTMyIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MzQ5LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MzIyODEsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjM0OSwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjYzLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMThQZmRoMUI1VHFYYUExVHlGQ21velAiLCJuYW1lIjoiYnVpbGQtd29ya2Zsb3ciLCJpbnB1dCI6e30sImNhbGxlciI6eyJ0eXBlIjoiZGlyZWN0In19ICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIifSAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoie1wiY29kZVwiOiBcIlxcbmltcG9ydCB7IHdvcmtmbG93LCBub2RlLCB0cmlnZ2VyIH0gZnJvbSAnQG44bi93b3JrZmxvdy1zZGsnO1xcblxcbmNvbnN0IG1hbnVhbFRyaWdnZXIgPSB0cmlnZ2VyKHtcXG4gIHR5cGU6In0gICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiICduOG4tbm9kZXMtYmFzZS5tYW51YWxUcmlnZ2VyJyxcXG4gIHZlcnNpb246IDEsXFxuICBjb25maWc6IHsgbmFtZTogJ1doZW4gY2xpY2tpbmcgXFxcIlRlc3Qgd29ya2Zsb3dcXFwiJyB9LFxcbn0pO1xcblxcbmNvbnN0IHNldE5vZGUgPSBub2RlKHtcXG4gIHR5cGU6ICduOG4tbm9kZXMtYmFzZS5zZXQifSAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiInLFxcbiAgdmVyc2lvbjogMy40LFxcbiAgY29uZmlnOiB7XFxuICAgIG5hbWU6ICdwcmV2aWV3IGF1dG8tb3BlbiB0ZXN0JyxcXG4gICAgcGFyYW1ldGVyczoge1xcbiAgICAgIG1vZGU6ICdtYW51YWwnLFxcbiAgICAgIGZpZWxkczoge1xcbiAgICAgICAgdmFsdWVzOiBbXFxuICAgICAgICAgIHsgbmFtZTogJ21lc3NhZ2UnLCB0eXBlOiAnc3RyaW5nIn0gICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IlZhbHVlJywgc3RyaW5nOiAnSGVsbG8gZnJvbSBwcmV2aWV3IGF1dG8tb3BlbiB0ZXN0JyB9LFxcbiAgICAgICAgXSxcXG4gICAgICB9LFxcbiAgICB9LFxcbiAgfSxcXG59KTtcXG5cXG5leHBvcnQgZGVmYXVsdCB3b3JrZmxvdygnJywgJ3ByZXZpZXcgYXV0by1vcGVuIHRlc3QnKVxcbiAgLmFkZChtYW51YWxUcmlnZ2VyKVxcbiAgLnRvKHNldE5vZGUpOyJ9ICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJcXG4ifSAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCIsIFwibmFtZVwiOiBcInByZXZpZXcgYXV0by1vcGVuIHRlc3QifSAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IlwifSJ9ICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjAgICAgICAgICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJ0b29sX3VzZSIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInN0b3BfZGV0YWlscyI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjozNDksImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjozMjI4MSwib3V0cHV0X3Rva2VucyI6Mjk3fSAgICAgICAgICAgICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICAgIH0KCg==",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0002-1780493573451-unknown-host-POST-_v1_messages-ec41fb8e.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,108 +0,0 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"assistant\"[\\s\\S]{0,1000}\"type\"\\s*:\\s*\"tool_use\"[\\s\\S]{0,300}\"name\"\\s*:\\s*\"build-workflow\"[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-d978674dc62b40d88d5763a3f45b6c94-c3f07ca4a3a326ea-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=PnuL_njSySyJ3AfYKJ3_HHh4wK__qOsmbbod7cDp5Ws-1780315654.1408145-1.0.1.1-7hXSi6bjqitbF8p.SqiDir1008ZwhuVePJ1uARS6Eig; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbcWgMWsECwW2qomjr2QC"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-01T12:07:34Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"26970000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"27000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-01T12:07:34Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-01T12:07:34Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-01T12:07:34Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"22470000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"22500000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Mon, 01 Jun 2026 12:07:35 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a04e19465892f33f-BCN"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "PnuL_njSySyJ3AfYKJ3_HHh4wK__qOsmbbod7cDp5Ws-1780315654.1408145-1.0.1.1-7hXSi6bjqitbF8p.SqiDir1008ZwhuVePJ1uARS6Eig"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01ApaKvuoMUdQE2EU1JTk9qK\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":348,\"cache_read_input_tokens\":29145,\"cache_creation\":{\"ephemeral_5m_input_tokens\":348,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"}}\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"This\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" is a very simple workflow — I'll route it through the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" planner to get it approved and built.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":1,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01K49PL1TE35f7i37Ucf92ZJ\",\"name\":\"plan\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"guidance\\\": \\\"Build a simple workflow named \\\\\\\"preview auto-open test\\\\\\\" with just a Manual Trigger and a single\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" Set node also named \\\\\\\"preview auto-open test\\\\\\\". No credentials needed. Save only\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" — do not run, verify, or publish after building.\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":1 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":348,\"cache_read_input_tokens\":29145,\"output_tokens\":122} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxQXBhS3Z1b01VZFFFMkVVMUpUazlxSyIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MzQ4LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MjkxNDUsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjM0OCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjEsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fSAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifX0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiVGhpcyJ9ICAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBpcyBhIHZlcnkgc2ltcGxlIHdvcmtmbG93IOKAlCBJJ2xsIHJvdXRlIGl0IHRocm91Z2ggdGhlIn0gICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBwbGFubmVyIHRvIGdldCBpdCBhcHByb3ZlZCBhbmQgYnVpbHQuIn0gICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MSwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxSzQ5UEwxVEUzNWY3aTM3VWNmOTJaSiIsIm5hbWUiOiJwbGFuIiwiaW5wdXQiOnt9LCJjYWxsZXIiOnsidHlwZSI6ImRpcmVjdCJ9fSAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiJ9ICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IntcImd1aWRhbmNlXCI6IFwiQnVpbGQgYSBzaW1wbGUgd29ya2Zsb3cgbmFtZWQgXFxcInByZXZpZXcgYXV0by1vcGVuIHRlc3RcXFwiIHdpdGgganVzdCBhIE1hbnVhbCBUcmlnZ2VyIGFuZCBhIHNpbmdsZSJ9ICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIgU2V0IG5vZGUgYWxzbyBuYW1lZCBcXFwicHJldmlldyBhdXRvLW9wZW4gdGVzdFxcXCIuIE5vIGNyZWRlbnRpYWxzIG5lZWRlZC4gU2F2ZSBvbmx5In0gICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiDigJQgZG8gbm90IHJ1biwgdmVyaWZ5LCBvciBwdWJsaXNoIGFmdGVyIGJ1aWxkaW5nLiJ9ICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCJ9In0gfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MSAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjM0OCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjI5MTQ1LCJvdXRwdXRfdG9rZW5zIjoxMjJ9ICAgICAgICAgICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICAgICAgIH0KCg==",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0003-1780315686814-unknown-host-POST-_v1_messages-b91e8d01.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Instance Agent — an AI assistant embedded in an n8n instance\\. Yo[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}\\\\\"success\\\\\":false[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-01489b13586374c0c0b1d2b904b14fe5-102d69cacc777659-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=tRpNY0RQnWIxxhrEgjInPi9I4bEwIXgGW2g3eSblM90-1780493548.024544-1.0.1.1-faWNSkPL0zHB48OIz1mYN_ZHvD_qfmBqkpI8F0bS.nU; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgQmgNtmtn8RPRK7xkuT"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T13:32:28Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17977000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T13:32:28Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T13:32:28Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T13:32:28Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14977000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 13:32:29 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f10632b40bc98-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "tRpNY0RQnWIxxhrEgjInPi9I4bEwIXgGW2g3eSblM90-1780493548.024544-1.0.1.1-faWNSkPL0zHB48OIz1mYN_ZHvD_qfmBqkpI8F0bS.nU"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01VBbh4o2QViTH6Nge64sJnQ\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":341,\"cache_read_input_tokens\":32630,\"cache_creation\":{\"ephemeral_5m_input_tokens\":341,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"The\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" build tool requires a planning step for new workflows. Let me run the pl\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"anner — it's a lightweight approval step before saving.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":1,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_0144BiyXcjARoZbseYD1SP85\",\"name\":\"plan\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"guidance\\\": \\\"Build a simple new workflow named\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" \\\\\\\"preview auto-open test\\\\\\\" with only two nodes: a Manual Trigger and a Set node (also named\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" \\\\\\\"preview auto-open test\\\\\\\"). No credentials needed. Save only — do\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" not run, verify, or publish after building.\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":1 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":341,\"cache_read_input_tokens\":32630,\"output_tokens\":131} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxVkJiaDRvMlFWaVRINk5nZTY0c0puUSIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MzQxLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MzI2MzAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjM0MSwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjEsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fSAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjowLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiJ9ICAgICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiVGhlIn0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIGJ1aWxkIHRvb2wgcmVxdWlyZXMgYSBwbGFubmluZyBzdGVwIGZvciBuZXcgd29ya2Zsb3dzLiBMZXQgbWUgcnVuIHRoZSBwbCJ9ICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJhbm5lciDigJQgaXQncyBhIGxpZ2h0d2VpZ2h0IGFwcHJvdmFsIHN0ZXAgYmVmb3JlIHNhdmluZy4ifSB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjoxLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0b29sX3VzZSIsImlkIjoidG9vbHVfMDE0NEJpeVhjakFSb1pic2VZRDFTUDg1IiwibmFtZSI6InBsYW4iLCJpbnB1dCI6e30sImNhbGxlciI6eyJ0eXBlIjoiZGlyZWN0In19ICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiJ9ICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJ7XCJndWlkYW5jZVwiOiBcIkJ1aWxkIGEgc2ltcGxlIG5ldyB3b3JrZmxvdyBuYW1lZCJ9IH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIgXFxcInByZXZpZXcgYXV0by1vcGVuIHRlc3RcXFwiIHdpdGggb25seSB0d28gbm9kZXM6IGEgTWFudWFsIFRyaWdnZXIgYW5kIGEgU2V0IG5vZGUgKGFsc28gbmFtZWQifSB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiIFxcXCJwcmV2aWV3IGF1dG8tb3BlbiB0ZXN0XFxcIikuIE5vIGNyZWRlbnRpYWxzIG5lZWRlZC4gU2F2ZSBvbmx5IOKAlCBkbyJ9ICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiBub3QgcnVuLCB2ZXJpZnksIG9yIHB1Ymxpc2ggYWZ0ZXIgYnVpbGRpbmcuIn0gICAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCJ9In0gICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjEgICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJ0b29sX3VzZSIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInN0b3BfZGV0YWlscyI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjozNDEsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjozMjYzMCwib3V0cHV0X3Rva2VucyI6MTMxfSAgfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgICAgICAgfQoK",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0003-1780493573452-unknown-host-POST-_v1_messages-ec41fb8e.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,108 +0,0 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*\\[\\{\"type\":\"text\",\"text\":\"Skill loading protocol:\\\\nSkills are optional instruction[\\s\\S]*<current-datetime[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-4722f33e38740a5bdc541a67474c5d25-9df8efccc0e86a88-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=pN.K5szTTtfc7GC3FtITlBLaKd_cb_bgrsnKDWA6DdM-1780315657.7474704-1.0.1.1-5yrmRs7WEuwFuCbITkY0sfZOifkJDspV2SoPskak1G8; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbcWgd1XZBa6qW6Bsu9YS"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-01T12:07:37Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"26981000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"27000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-01T12:07:37Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-01T12:07:37Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-01T12:07:38Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"22481000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"22500000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Mon, 01 Jun 2026 12:07:39 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a04e195cee7678b2-BCN"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "pN.K5szTTtfc7GC3FtITlBLaKd_cb_bgrsnKDWA6DdM-1780315657.7474704-1.0.1.1-5yrmRs7WEuwFuCbITkY0sfZOifkJDspV2SoPskak1G8"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01Homq7kpasyzjKim2j4qnni\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":10913,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":10913,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":38,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01Mjhw1DjEk56aWqmnfbsJrb\",\"name\":\"add-plan-item\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"item\\\": {\\n \\\"id\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\": \\\"wf-preview-autoopen\\\",\\n \\\"kind\\\": \\\"workflow\\\",\\n \\\"name\\\": \\\"preview auto-open test\\\",\\n \\\"purpose\\\": \\\"A\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" minimal workflow containing a Manual Trigger connected to a single Set node (named 'preview auto-open test'). No\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" external integrations or credentials required. Workflow should be saved only — not run, verified\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\", or published after building.\\\",\\n \\\"triggerDescription\\\": \\\"Manual trigger\\\",\\n \\\"integrations\\\": [],\\n \\\"dependsOn\\\": []\\n}\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\", \\\"summary\\\": \\\"Create a simple\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" two-node workflow named 'preview auto-open test' with a Manual Trigger and a Set node. Save only.\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"assumptions\\\": [\\\"No credentials required\\\", \\\"Workflow is saved only — not executed\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\", verified, or published\\\"]\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":10913,\"cache_read_input_tokens\":0,\"output_tokens\":253} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxSG9tcTdrcGFzeXpqS2ltMmo0cW5uaSIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MTA5MTMsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjoxMDkxMywiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjM4LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxTWpodzFEakVrNTZhV3FtbmZic0pyYiIsIm5hbWUiOiJhZGQtcGxhbi1pdGVtIiwiaW5wdXQiOnt9LCJjYWxsZXIiOnsidHlwZSI6ImRpcmVjdCJ9fSAgICAgICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIifSAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoie1wiaXRlbVwiOiB7XG4gIFwiaWQifSAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IlwiOiBcIndmLXByZXZpZXctYXV0b29wZW5cIixcbiAgXCJraW5kXCI6IFwid29ya2Zsb3dcIixcbiAgXCJuYW1lXCI6IFwicHJldmlldyBhdXRvLW9wZW4gdGVzdFwiLFxuICBcInB1cnBvc2VcIjogXCJBIn0gICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiIG1pbmltYWwgd29ya2Zsb3cgY29udGFpbmluZyBhIE1hbnVhbCBUcmlnZ2VyIGNvbm5lY3RlZCB0byBhIHNpbmdsZSBTZXQgbm9kZSAobmFtZWQgJ3ByZXZpZXcgYXV0by1vcGVuIHRlc3QnKS4gTm8ifSAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIgZXh0ZXJuYWwgaW50ZWdyYXRpb25zIG9yIGNyZWRlbnRpYWxzIHJlcXVpcmVkLiBXb3JrZmxvdyBzaG91bGQgYmUgc2F2ZWQgb25seSDigJQgbm90IHJ1biwgdmVyaWZpZWQifSAgICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIsIG9yIHB1Ymxpc2hlZCBhZnRlciBidWlsZGluZy5cIixcbiAgXCJ0cmlnZ2VyRGVzY3JpcHRpb25cIjogXCJNYW51YWwgdHJpZ2dlclwiLFxuICBcImludGVncmF0aW9uc1wiOiBbXSxcbiAgXCJkZXBlbmRzT25cIjogW11cbn0ifSAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiwgXCJzdW1tYXJ5XCI6IFwiQ3JlYXRlIGEgc2ltcGxlIn0gICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiB0d28tbm9kZSB3b3JrZmxvdyBuYW1lZCAncHJldmlldyBhdXRvLW9wZW4gdGVzdCcgd2l0aCBhIE1hbnVhbCBUcmlnZ2VyIGFuZCBhIFNldCBub2RlLiBTYXZlIG9ubHkuIn0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJcIiwgXCJhc3N1bXB0aW9uc1wiOiBbXCJObyBjcmVkZW50aWFscyByZXF1aXJlZFwiLCBcIldvcmtmbG93IGlzIHNhdmVkIG9ubHkg4oCUIG5vdCBleGVjdXRlZCJ9ICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiLCB2ZXJpZmllZCwgb3IgcHVibGlzaGVkXCJdIn0gICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6In0ifSAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJ0b29sX3VzZSIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInN0b3BfZGV0YWlscyI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MywiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjoxMDkxMywiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsIm91dHB1dF90b2tlbnMiOjI1M30gIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgICAgICAgICAgIH0KCg==",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0004-1780315686814-unknown-host-POST-_v1_messages-1dbdec66.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Workflow Planner — you design solution architectures\\. You do NOT[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-a956bb9e67ca9508416258681dde355a-2ae84e2e3b0d7e0e-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=_Bl8RjfexwO4jff6d_A2vfIn8c_9p9MPfKHV_m4Ml50-1780493551.910468-1.0.1.1-CvezxOakSmwpF1E8UZAwhK5yZjP_8nhnT3SnIaZ3cDo; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgQmxsprxewREPAhZ2E8"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T13:32:32Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17985000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T13:32:32Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T13:32:32Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T13:32:32Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14985000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 13:32:33 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f107b6f5bb58b-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "_Bl8RjfexwO4jff6d_A2vfIn8c_9p9MPfKHV_m4Ml50-1780493551.910468-1.0.1.1-CvezxOakSmwpF1E8UZAwhK5yZjP_8nhnT3SnIaZ3cDo"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_013Myk8Q7grJxgaCGroqap7d\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":477,\"cache_read_input_tokens\":12472,\"cache_creation\":{\"ephemeral_5m_input_tokens\":477,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":38,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01FkWL2xtzzF4ho6LvBs1H7E\",\"name\":\"add-plan-item\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"item\\\": {\\n \\\"id\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\": \\\"wf-preview-auto-open\\\",\\n \\\"kind\\\": \\\"workflow\\\",\\n \\\"name\\\": \\\"preview auto-open test\\\",\\n \\\"purpose\\\": \\\"A minimal\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" two-node workflow consisting of a Manual Trigger and a Set node named 'preview auto-open test'. No logic or\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" data transformation required — this is a structural test workflow. Save\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" only; do not run, verify, or publish.\\\",\\n \\\"triggerDescription\\\": \\\"Manual trigger\\\",\\n \\\"integrations\\\": [],\\n \\\"dependsOn\\\": []\\n}\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\", \\\"summary\\\": \\\"Create a minimal saved workflow named 'preview auto-open test' with a Manual Trigger and\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" a Set node. Save only — no execution, verification, or publishing.\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\", \\\"assumptions\\\": [\\\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"No credentials required\\\", \\\"Set node will be named 'preview auto-open test'\\\", \\\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"Workflow is saved only — not run, verified, or published\\\"]\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"}\"}}\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":3,\"cache_creation_input_tokens\":477,\"cache_read_input_tokens\":12472,\"output_tokens\":276} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxM015azhRN2dySnhnYUNHcm9xYXA3ZCIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6NDc3LCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTI0NzIsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjQ3NywiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjM4LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxRmtXTDJ4dHp6RjRobzZMdkJzMUg3RSIsIm5hbWUiOiJhZGQtcGxhbi1pdGVtIiwiaW5wdXQiOnt9LCJjYWxsZXIiOnsidHlwZSI6ImRpcmVjdCJ9fSAgICAgICAgICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIifSAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJ7XCJpdGVtXCI6IHtcbiAgXCJpZCJ9ICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCI6IFwid2YtcHJldmlldy1hdXRvLW9wZW5cIixcbiAgXCJraW5kXCI6IFwid29ya2Zsb3dcIixcbiAgXCJuYW1lXCI6IFwicHJldmlldyBhdXRvLW9wZW4gdGVzdFwiLFxuICBcInB1cnBvc2VcIjogXCJBIG1pbmltYWwifSAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIgdHdvLW5vZGUgd29ya2Zsb3cgY29uc2lzdGluZyBvZiBhIE1hbnVhbCBUcmlnZ2VyIGFuZCBhIFNldCBub2RlIG5hbWVkICdwcmV2aWV3IGF1dG8tb3BlbiB0ZXN0Jy4gTm8gbG9naWMgb3IifSAgICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIgZGF0YSB0cmFuc2Zvcm1hdGlvbiByZXF1aXJlZCDigJQgdGhpcyBpcyBhIHN0cnVjdHVyYWwgdGVzdCB3b3JrZmxvdy4gU2F2ZSJ9ICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiBvbmx5OyBkbyBub3QgcnVuLCB2ZXJpZnksIG9yIHB1Ymxpc2guXCIsXG4gIFwidHJpZ2dlckRlc2NyaXB0aW9uXCI6IFwiTWFudWFsIHRyaWdnZXJcIixcbiAgXCJpbnRlZ3JhdGlvbnNcIjogW10sXG4gIFwiZGVwZW5kc09uXCI6IFtdXG59In0gICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiwgXCJzdW1tYXJ5XCI6IFwiQ3JlYXRlIGEgbWluaW1hbCBzYXZlZCB3b3JrZmxvdyBuYW1lZCAncHJldmlldyBhdXRvLW9wZW4gdGVzdCcgd2l0aCBhIE1hbnVhbCBUcmlnZ2VyIGFuZCJ9ICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIgYSBTZXQgbm9kZS4gU2F2ZSBvbmx5IOKAlCBubyBleGVjdXRpb24sIHZlcmlmaWNhdGlvbiwgb3IgcHVibGlzaGluZy4ifSAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJcIiwgXCJhc3N1bXB0aW9uc1wiOiBbXCIifSAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJObyBjcmVkZW50aWFscyByZXF1aXJlZFwiLCBcIlNldCBub2RlIHdpbGwgYmUgbmFtZWQgJ3ByZXZpZXcgYXV0by1vcGVuIHRlc3QnXCIsIFwiIn0gICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IldvcmtmbG93IGlzIHNhdmVkIG9ubHkg4oCUIG5vdCBydW4sIHZlcmlmaWVkLCBvciBwdWJsaXNoZWRcIl0ifSAgICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJ9In19CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjozLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjQ3NywiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjEyNDcyLCJvdXRwdXRfdG9rZW5zIjoyNzZ9ICAgICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICAgICAgIH0KCg==",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0004-1780493573453-unknown-host-POST-_v1_messages-74d1411b.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,108 +0,0 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*\\[\\{\"type\":\"text\",\"text\":\"Skill loading protocol:\\\\nSkills are optional instruction[\\s\\S]*\"role\"\\s*:\\s*\"assistant\"[\\s\\S]{0,1000}\"type\"\\s*:\\s*\"tool_use\"[\\s\\S]{0,300}\"name\"\\s*:\\s*\"add-plan-item\"[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-5bbf2d9e26b0ba30ce6f5b33c7fcae10-d6b38fbd7784ec29-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=E1cs5wvDVsJc_my..8ToaIvEeZzJexG8RtuW9e5ugPI-1780315662.8731663-1.0.1.1-shLoMcLgOnefYSS3MbEWsYAfO4QfFhVDSxTpnPteM3Q; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbcWgznUARtivLShMhiB1"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-01T12:07:43Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"26981000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"27000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-01T12:07:43Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-01T12:07:43Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-01T12:07:43Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"22481000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"22500000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Mon, 01 Jun 2026 12:07:43 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a04e197cfba69a49-BCN"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "E1cs5wvDVsJc_my..8ToaIvEeZzJexG8RtuW9e5ugPI-1780315662.8731663-1.0.1.1-shLoMcLgOnefYSS3MbEWsYAfO4QfFhVDSxTpnPteM3Q"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01HXryBUr8WUhniMs9t9ao7e\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":753,\"cache_read_input_tokens\":10440,\"cache_creation\":{\"ephemeral_5m_input_tokens\":753,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Per\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" the orchestrator's guidance, no verification checkpoint is needed since this workflow should not\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" be run. Submitting the plan.\"}}\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":1,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_019KDjwXsbsRbSug9KhQfz2v\",\"name\":\"submit-plan\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":1 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":753,\"cache_read_input_tokens\":10440,\"output_tokens\":63} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxSFhyeUJVcjhXVWhuaU1zOXQ5YW83ZSIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6NzUzLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTA0NDAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjc1MywiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjEsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fSAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgICAgICAgICAgICB9CgpldmVudDogcGluZwpkYXRhOiB7InR5cGUiOiAicGluZyJ9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IlBlciJ9ICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIHRoZSBvcmNoZXN0cmF0b3IncyBndWlkYW5jZSwgbm8gdmVyaWZpY2F0aW9uIGNoZWNrcG9pbnQgaXMgbmVlZGVkIHNpbmNlIHRoaXMgd29ya2Zsb3cgc2hvdWxkIG5vdCJ9ICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgYmUgcnVuLiBTdWJtaXR0aW5nIHRoZSBwbGFuLiJ9fQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjoxLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0b29sX3VzZSIsImlkIjoidG9vbHVfMDE5S0Rqd1hzYnNSYlN1ZzlLaFFmejJ2IiwibmFtZSI6InN1Ym1pdC1wbGFuIiwiaW5wdXQiOnt9LCJjYWxsZXIiOnsidHlwZSI6ImRpcmVjdCJ9fSAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIifSAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjEgICAgICAgICAgICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJ0b29sX3VzZSIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInN0b3BfZGV0YWlscyI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjo3NTMsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjoxMDQ0MCwib3V0cHV0X3Rva2VucyI6NjN9ICAgICAgICAgICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICAgICAgICAgICB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0005-1780315686815-unknown-host-POST-_v1_messages-1d173938.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Workflow Planner — you design solution architectures\\. You do NOT[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}Added: Build 'preview auto-open test' workflow \\(1 item total\\)[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-f5a72f6a6f726e46b57a08bc460d4504-8161590e55a85797-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=2nYjpQ6Crmf2YCndgd_kBuvEXvRoMoooeBXhpz0JXPA-1780493557.7713444-1.0.1.1-miCq72GVorSNdtqoPYRM7BJ0FA6_ETCcp3fUcNuYaXM; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgQnPyCERd5Q1WATMtF1"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T13:32:38Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17985000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T13:32:38Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T13:32:38Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T13:32:38Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14985000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 13:32:39 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f10a0198df99a-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "2nYjpQ6Crmf2YCndgd_kBuvEXvRoMoooeBXhpz0JXPA-1780493557.7713444-1.0.1.1-miCq72GVorSNdtqoPYRM7BJ0FA6_ETCcp3fUcNuYaXM"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01PQRkaFDHRvFSokryZ9d8Tg\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":303,\"cache_read_input_tokens\":12949,\"cache_creation\":{\"ephemeral_5m_input_tokens\":303,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":36,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01Ps7Uohw1uhBkedDU86Ds8T\",\"name\":\"submit-plan\",\"input\":{},\"caller\":{\"type\":\"direct\"}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":1,\"cache_creation_input_tokens\":303,\"cache_read_input_tokens\":12949,\"output_tokens\":36} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxUFFSa2FGREhSdkZTb2tyeVo5ZDhUZyIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MzAzLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTI5NDksImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjMwMywiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjM2LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxUHM3VW9odzF1aEJrZWREVTg2RHM4VCIsIm5hbWUiOiJzdWJtaXQtcGxhbiIsImlucHV0Ijp7fSwiY2FsbGVyIjp7InR5cGUiOiJkaXJlY3QifX0gIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIifSAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgICAgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoidG9vbF91c2UiLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MzAzLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MTI5NDksIm91dHB1dF90b2tlbnMiOjM2fSAgICAgICAgICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICAgICAgICAgfQoK",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0005-1780493573453-unknown-host-POST-_v1_messages-f2616caa.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,108 +0,0 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*\\[\\{\"type\":\"text\",\"text\":\"Skill loading protocol:\\\\nSkills are optional instruction[\\s\\S]*\"role\"\\s*:\\s*\"assistant\"[\\s\\S]{0,1000}\"type\"\\s*:\\s*\"tool_use\"[\\s\\S]{0,300}\"name\"\\s*:\\s*\"submit-plan\"[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-d3800eb76f1cb3c047a2d7430f046e1d-9804ec11bbc41a8f-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=CsHWSMBn8ELqjBgl1m_WXxKkp2hkpo5Q5LQ9pJ5wjVw-1780315665.4926305-1.0.1.1-TG_eZ1Iih3zuSfBn0mlCu7EKGtohLobZ51mw4ofQGEo; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbcWhBzfDk3WApcgPbinn"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-01T12:07:45Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"26980000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"27000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-01T12:07:45Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-01T12:07:45Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"4500000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-01T12:07:45Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"22480000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"22500000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Mon, 01 Jun 2026 12:07:52 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a04e198d5eb8f33f-BCN"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "CsHWSMBn8ELqjBgl1m_WXxKkp2hkpo5Q5LQ9pJ5wjVw-1780315665.4926305-1.0.1.1-TG_eZ1Iih3zuSfBn0mlCu7EKGtohLobZ51mw4ofQGEo"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01H2wgQh9VTmrpBBkFgpeiRz\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":112,\"cache_creation_input_tokens\":721,\"cache_read_input_tokens\":10440,\"cache_creation\":{\"ephemeral_5m_input_tokens\":721,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"}}\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Plan\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" approved.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":112,\"cache_creation_input_tokens\":721,\"cache_read_input_tokens\":10440,\"output_tokens\":6} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxSDJ3Z1FoOVZUbXJwQkJrRmdwZWlSeiIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjExMiwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjo3MjEsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjoxMDQ0MCwiY2FjaGVfY3JlYXRpb24iOnsiZXBoZW1lcmFsXzVtX2lucHV0X3Rva2VucyI6NzIxLCJlcGhlbWVyYWxfMWhfaW5wdXRfdG9rZW5zIjowfSwib3V0cHV0X3Rva2VucyI6MSwic2VydmljZV90aWVyIjoic3RhbmRhcmQiLCJpbmZlcmVuY2VfZ2VvIjoiZ2xvYmFsIn19IH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifX0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiUGxhbiJ9fQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgYXBwcm92ZWQuIn0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjAgICAgICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJlbmRfdHVybiIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInN0b3BfZGV0YWlscyI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MTEyLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjcyMSwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjEwNDQwLCJvdXRwdXRfdG9rZW5zIjo2fSAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0006-1780315686816-unknown-host-POST-_v1_messages-1ae37285.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"httpRequest": {
|
||||
"method": "POST",
|
||||
"path": "/v1/messages",
|
||||
"body": {
|
||||
"type": "REGEX",
|
||||
"regex": "[\\s\\S]*You are the n8n Workflow Planner — you design solution architectures\\. You do NOT[\\s\\S]*\"role\"\\s*:\\s*\"user\"[\\s\\S]{0,1500}\"type\"\\s*:\\s*\"tool_result\"[\\s\\S]{0,2000}\\\\\"approved\\\\\":true[\\s\\S]*"
|
||||
}
|
||||
},
|
||||
"httpResponse": {
|
||||
"statusCode": 200,
|
||||
"reasonPhrase": "OK",
|
||||
"headers": {
|
||||
"vary": [
|
||||
"Accept-Encoding"
|
||||
],
|
||||
"traceresponse": [
|
||||
"00-b4ac13468d0b38c071266bdd85df9074-865486d2de7259a1-01"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age=31536000; includeSubDomains; preload"
|
||||
],
|
||||
"set-cookie": [
|
||||
"_cfuvid=PEymKfcm2AWtqXZ1Gj66xfYliDLJyi06j_gLpIGClsg-1780493559.6623702-1.0.1.1-vHYCptpGTHlSEufrodmXwOv8utsDBEo0WTx4YJkwb1Y; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.anthropic.com"
|
||||
],
|
||||
"request-id": [
|
||||
"req_011CbgQnY28B2Fko5vXMpuG1"
|
||||
],
|
||||
"cf-cache-status": [
|
||||
"DYNAMIC"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-reset": [
|
||||
"2026-06-03T13:32:39Z"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-remaining": [
|
||||
"17985000"
|
||||
],
|
||||
"anthropic-ratelimit-tokens-limit": [
|
||||
"18000000"
|
||||
],
|
||||
"anthropic-ratelimit-requests-reset": [
|
||||
"2026-06-03T13:32:39Z"
|
||||
],
|
||||
"anthropic-ratelimit-requests-remaining": [
|
||||
"19998"
|
||||
],
|
||||
"anthropic-ratelimit-requests-limit": [
|
||||
"20000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-reset": [
|
||||
"2026-06-03T13:32:39Z"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-remaining": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-output-tokens-limit": [
|
||||
"3000000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-reset": [
|
||||
"2026-06-03T13:32:39Z"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-remaining": [
|
||||
"14985000"
|
||||
],
|
||||
"anthropic-ratelimit-input-tokens-limit": [
|
||||
"15000000"
|
||||
],
|
||||
"X-Robots-Tag": [
|
||||
"none"
|
||||
],
|
||||
"Server": [
|
||||
"cloudflare"
|
||||
],
|
||||
"Date": [
|
||||
"Wed, 03 Jun 2026 13:32:40 GMT"
|
||||
],
|
||||
"Content-Type": [
|
||||
"text/event-stream; charset=utf-8"
|
||||
],
|
||||
"Content-Security-Policy": [
|
||||
"default-src 'none'; frame-ancestors 'none'"
|
||||
],
|
||||
"Cache-Control": [
|
||||
"no-cache"
|
||||
],
|
||||
"CF-RAY": [
|
||||
"a05f10abeb531220-PRG"
|
||||
]
|
||||
},
|
||||
"cookies": {
|
||||
"_cfuvid": "PEymKfcm2AWtqXZ1Gj66xfYliDLJyi06j_gLpIGClsg-1780493559.6623702-1.0.1.1-vHYCptpGTHlSEufrodmXwOv8utsDBEo0WTx4YJkwb1Y"
|
||||
},
|
||||
"body": {
|
||||
"type": "STRING",
|
||||
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-6\",\"id\":\"msg_01AD6F9kr6hWs3Dwf7VAqDzo\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":85,\"cache_creation_input_tokens\":748,\"cache_read_input_tokens\":12472,\"cache_creation\":{\"ephemeral_5m_input_tokens\":748,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Plan\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" approved.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":85,\"cache_creation_input_tokens\":748,\"cache_read_input_tokens\":12472,\"output_tokens\":6} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
|
||||
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNiIsImlkIjoibXNnXzAxQUQ2RjlrcjZoV3MzRHdmN1ZBcUR6byIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjg1LCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjc0OCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjEyNDcyLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjo3NDgsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRleHQiLCJ0ZXh0IjoiIn0gICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJQbGFuIn0gICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBhcHByb3ZlZC4ifSAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwic3RvcF9kZXRhaWxzIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjo4NSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjo3NDgsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjoxMjQ3Miwib3V0cHV0X3Rva2VucyI6Nn0gICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgICAgICB9Cgo=",
|
||||
"contentType": "text/event-stream; charset=utf-8"
|
||||
}
|
||||
},
|
||||
"id": "0006-1780493573454-unknown-host-POST-_v1_messages-aef0cb7a.json",
|
||||
"priority": 0,
|
||||
"timeToLive": {
|
||||
"unlimited": true
|
||||
},
|
||||
"times": {
|
||||
"unlimited": true
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user