migrate-to-parallel
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMigrate to Parallel
迁移至Parallel
Replace the provider boundary end to end. Treat a successful HTTP response as the midpoint, not completion: migrate request construction, response consumers, dependencies, configuration, tests, and operational behavior.
Resolve to the directory containing this . Resolve every bundled reference and script from that directory, regardless of the current working directory. The scanner uses only the Python standard library. If Python 3.9 or newer is unavailable, perform equivalent repository searches with the harness's file-search tools and state that the bundled scan was not run.
<skill-root>SKILL.md端到端替换供应商边界。将成功的HTTP响应视为迁移的中点而非终点:迁移请求构造逻辑、响应消费逻辑、依赖项、配置、测试及运行行为。
将解析为包含此文件的目录。无论当前工作目录如何,所有捆绑的引用和脚本都从该目录解析。扫描器仅使用Python标准库。若无法使用Python 3.9或更高版本,请使用工具集的文件搜索工具执行等效的仓库搜索,并说明未运行捆绑的扫描脚本。
<skill-root>SKILL.mdLoad the right references
加载正确的参考文档
- Read references/exa.md when the repository contains Exa.
- Read references/tavily.md when the repository contains Tavily.
- Read references/perplexity.md when the repository contains Perplexity Search, Sonar, Agent API web tools, or a Perplexity search wrapper.
- Read references/firecrawl.md when the repository contains Firecrawl Search, Scrape, Batch Scrape, Extract, Agent, Research Index, Crawl, Map, Parse, Browser, Interact, Monitor, or MCP usage.
- Read references/parallel-search.md when any call may route to Search or needs query, filter, freshness, mode, or result-list migration.
- Read references/parallel-products.md when any call may route to Extract, Chat, Task, or entity discovery, or needs streaming, structured output, or citations.
- Read references/integration-patterns.md when queries are generated dynamically, the provider is exposed as a model tool, provider response types escape into multiple modules, or the application needs full content or synthesized answers.
- Open current official documentation for any detected SDK, wrapper, parameter, or response field not covered by those references. Do not guess at provider behavior.
- 当仓库包含Exa时,阅读references/exa.md。
- 当仓库包含Tavily时,阅读references/tavily.md。
- 当仓库包含Perplexity Search、Sonar、Agent API网页工具或Perplexity搜索包装器时,阅读references/perplexity.md。
- 当仓库包含Firecrawl Search、Scrape、Batch Scrape、Extract、Agent、Research Index、Crawl、Map、Parse、Browser、Interact、Monitor或MCP相关使用时,阅读references/firecrawl.md。
- 当任何调用可能路由至Search,或需要迁移查询、过滤、新鲜度、模式或结果列表时,阅读references/parallel-search.md。
- 当任何调用可能路由至Extract、Chat、Task或实体发现,或需要流式传输、结构化输出或引用时,阅读references/parallel-products.md。
- 当查询是动态生成的、供应商被作为模型工具暴露、供应商响应类型扩散到多个模块,或应用程序需要全内容或合成答案时,阅读references/integration-patterns.md。
- 针对任何未被上述参考文档覆盖的已检测SDK、包装器、参数或响应字段,查阅当前官方文档。请勿猜测供应商行为。
Preserve these invariants
保留以下不变项
- Preserve caller-visible behavior unless the user explicitly authorizes a change.
- Never silently drop a filter, content field, synthesized answer, image, safety control, or score-based decision.
- Never print API keys or secret values. Check only whether a key is present.
- Do not add a hidden LLM call merely to manufacture .
search_queries - Do not treat an arbitrary user prompt as a keyword query merely because it fits an API length limit.
- Keep web-research intent, hard filters, handler policy, and answer-synthesis instructions in their separate contracts.
- Treat omitted provider parameters as behavior too: inspect their defaults before omitting a Parallel setting.
- Do not recreate the entire legacy provider SDK behind a compatibility shim. Normalize only the contract the application actually uses.
- Do not remove credentials from external secret managers or provider dashboards unless the user explicitly asks. Remove obsolete code references and update checked-in templates.
- Treat mode mappings as starting points. Verify latency, quality, and output behavior with the application's real queries.
- Stop before destructive edits when a required behavior has no supported Parallel equivalent and no in-scope substitute. Report the exact gap and the smallest decision needed.
- Stop when the Perplexity boundary requires embeddings; they are not a Parallel Search replacement. Route through Parallel's general index using Search, Chat, or Task according to the consumed contract, and stop only when a hard market-data coverage, freshness, or raw-result requirement remains unpreserved. Keep Agent API model routing, sandbox, MCP, and existing custom-function capabilities separate unless the user explicitly expands the migration scope.
finance_search - Stop when the Firecrawl boundary requires complete crawling or URL mapping, local/private file parsing, browser actions or sessions, screenshots or other rich scrape formats, change tracking, or Firecrawl-specific privacy/security controls without an approved replacement. Search and Extract do not reproduce those contracts.
- Follow repository-local instructions such as ,
AGENTS.md, andCLAUDE.md. Preserve unrelated work and never reset or discard user changes.CONTRIBUTING.md - Complete safe repository-local migration work without stopping after an inventory or plan. Do not commit, push, change hosted secrets, or alter provider accounts unless the user asks.
- 除非用户明确授权更改,否则保留调用方可见的行为。
- 切勿静默丢弃过滤器、内容字段、合成答案、图片、安全控制或基于分数的决策。
- 切勿打印API密钥或机密值。仅检查密钥是否存在。
- 切勿仅为生成而添加隐藏的LLM调用。
search_queries - 切勿仅因为符合API长度限制,就将任意用户提示视为关键字查询。
- 将网页研究意图、硬过滤器、处理程序策略和答案合成指令保留在各自独立的约定中。
- 将省略的供应商参数也视为行为的一部分:在省略Parallel设置前,请检查其默认值。
- 切勿在兼容性垫片后重新创建整个旧供应商SDK。仅标准化应用程序实际使用的约定。
- 除非用户明确要求,否则不要从外部密钥管理器或供应商仪表板中删除凭据。删除过时的代码引用并更新已签入的模板。
- 将模式映射视为起点。使用应用程序的真实查询验证延迟、质量和输出行为。
- 当所需行为没有对应的Parallel支持项且没有范围内的替代方案时,在进行破坏性编辑前停止操作。报告确切的差距和所需的最小决策。
- 当Perplexity边界需要嵌入向量时停止操作;它们并非Parallel Search的替代方案。根据消费约定,通过Parallel的通用索引使用Search、Chat或Task路由,仅当硬市场数据覆盖范围、新鲜度或原始结果要求仍未满足时才停止操作。除非用户明确扩大迁移范围,否则保持Agent API模型路由、沙箱、MCP和现有自定义功能的独立性。
finance_search - 当Firecrawl边界需要完整抓取或URL映射、本地/私有文件解析、浏览器操作或会话、截图或其他富抓取格式、变更跟踪,或没有批准替代方案的Firecrawl特定隐私/安全控制时停止操作。Search和Extract无法重现这些约定。
- 遵循仓库本地的说明,如、
AGENTS.md和CLAUDE.md。保留无关工作,切勿重置或丢弃用户更改。CONTRIBUTING.md - 完成仓库本地的安全迁移工作,不要在盘点或制定计划后停止。除非用户要求,否则不要提交、推送、更改托管密钥或修改供应商账户。
1. Inventory the real migration surface
1. 盘点实际迁移范围
Record the current branch and working-tree state before editing. Run the bundled scanner from the target repository:
bash
python3 <skill-root>/scripts/scan_provider_usage.py .Use for machine-readable output. The scanner intentionally skips dependency/generated directories, binaries, unreadable files, and oversized files; it cannot identify provider-neutral consumers from field names alone. Treat it as an inventory aid, not proof of completeness. Inspect the results and then trace each provider response to its consumers. Also inspect:
--format json- package manifests and lockfiles;
- direct REST endpoints and auth headers;
- SDK clients, async clients, wrappers, and model-tool definitions;
- environment schemas, examples, deployment config, and docs;
- request builders, retries, timeouts, caches, observability, and error handling;
- response fields used for rendering, ranking, thresholds, citations, or model context;
- Firecrawl crawl, batch, extract, browser, interaction, webhook, and job-lifecycle consumers;
- tests, mocks, fixtures, and snapshots.
Run the existing focused tests before editing when feasible. Record which behavior is currently covered, which failures are pre-existing, and which behavior must be verified manually.
Before editing, write a decision row for every provider call site:
| Call site | Provider product | Consumed behavior | Parallel route | Semantic gap | Action |
|---|---|---|---|---|---|
| Search, Scrape, Agent, etc. | Inputs, outputs, lifecycle, and policy the caller relies on | Exact product path, if any | Anything the route cannot preserve | |
Choose exactly one action before changing the call:
- only when the proposed route preserves the consumed contract or the user has already approved the named difference;
migrate - when the call is outside the migration boundary or is the smallest safe way to preserve an unsupported capability;
retain - when the requested boundary cannot be completed without a user decision. Name the smallest decision, and continue any independent
blockrows.migrate
Do not use a broader Parallel product merely to eliminate a provider import. A plausible result shape is not evidence that source scope, spend controls, model behavior, lifecycle, or privacy policy remains equivalent.
在编辑前记录当前分支和工作树状态。从目标仓库运行捆绑的扫描器:
bash
python3 <skill-root>/scripts/scan_provider_usage.py .使用获取机器可读的输出。扫描器会有意跳过依赖项/生成目录、二进制文件、不可读文件和超大文件;它无法仅通过字段名称识别与供应商无关的消费者。将其视为盘点辅助工具,而非完整性的证明。检查结果,然后追踪每个供应商响应到其消费者。同时检查:
--format json- 包清单和锁定文件;
- 直接REST端点和认证头;
- SDK客户端、异步客户端、包装器和模型工具定义;
- 环境模式、示例、部署配置和文档;
- 请求构建器、重试、超时、缓存、可观测性和错误处理;
- 用于渲染、排名、阈值、引用或模型上下文的响应字段;
- Firecrawl抓取、批量处理、提取、浏览器、交互、webhook和作业生命周期消费者;
- 测试、模拟、固定装置和快照。
可行的话,在编辑前运行现有的针对性测试。记录当前覆盖的行为、预先存在的失败以及必须手动验证的行为。
在编辑前,为每个供应商调用站点编写一行决策记录:
| 调用站点 | 供应商产品 | 消费行为 | Parallel路由 | 语义差距 | 操作 |
|---|---|---|---|---|---|
| Search、Scrape、Agent等 | 调用方依赖的输入、输出、生命周期和策略 | 确切的产品路径(如有) | 路由无法保留的任何内容 | |
在更改调用前选择恰好一项操作:
- 仅当提议的路由保留了消费约定,或用户已批准指定差异时,选择;
migrate - 当调用超出迁移边界,或保留是保留不支持功能的最安全方式时,选择;
retain - 当请求的边界无法在无用户决策的情况下完成时,选择。指明最小的决策需求,并继续处理任何独立的
block行。migrate
切勿仅为消除供应商导入而使用更宽泛的Parallel产品。看似合理的结果形态并不意味着源范围、支出控制、模型行为、生命周期或隐私政策仍保持等效。
2. Choose the migration boundary
2. 选择迁移边界
Consider both designs before editing:
- Direct replacement: Use when provider calls are few, nearby, and provider-specific response types do not escape. Replace each call and its consumers atomically.
- Application-owned web-data module: Use when calls are scattered, several Parallel products are needed, or provider fields escape into the application. Put request construction, response normalization, retries, and telemetry behind one small caller-facing interface. Make this a deep module that hides provider details; do not add a pass-through wrapper.
Prefer the design that localizes future search-provider changes and minimizes edits to unrelated callers. If the application publishes the old provider's raw response, either preserve only the documented application contract through a normalizer or update all consumers together.
在编辑前考虑两种设计:
- 直接替换: 适用于供应商调用数量少、位置集中且供应商特定响应类型未扩散的场景。原子性地替换每个调用及其消费者。
- 应用程序自有网页数据模块: 适用于调用分散、需要多个Parallel产品,或供应商字段已扩散到应用程序中的场景。将请求构造、响应标准化、重试和遥测功能封装在一个面向调用方的小型接口后。将此模块设计为深度模块,隐藏供应商细节;不要添加直通包装器。
优先选择能够本地化未来搜索供应商变更,并最小化对无关调用方修改的设计。如果应用程序发布旧供应商的原始响应,则要么通过标准化器仅保留已记录的应用程序约定,要么同时更新所有消费者。
3. Migrate requests intentionally
3. 有目的地迁移请求
Build every Parallel Search API request around these facts:
- is required. Supply at least one non-empty keyword query; use two or three diverse keyword queries when the calling flow can provide them.
search_queries - is optional but recommended. Put the self-contained web-research goal there, not the whole user conversation or answer-format instructions.
objective - Use ,
https://api.parallel.ai/v1/search, andx-api-keyfor direct REST calls.PARALLEL_API_KEY - Use the official package for both Python and TypeScript unless the detected framework has a current first-party Parallel integration that preserves the needed contract.
parallel-web
Classify every legacy input before translating it:
- full web-research goal, context, or soft source/freshness preference → ;
objective - concise retrieval probes → ;
search_queries - must-only or must-never source restrictions → ;
advanced_settings.source_policy - answer format, synthesis instructions, structured output, or streaming → the existing synthesis layer, Chat API, or Task API;
- latency, result count, cache, and excerpt controls → application-owned policy chosen and tested explicitly.
For static calls, write an explicit objective and two or three keyword probes. For model tools, use the exact-three-query schema in references/integration-patterns.md. A one-query direct-call fallback is only for an already keyword-style legacy value and must be evaluated. Do not silently truncate intent, invent keyword variants, add a hidden planner, or move hard filters into prose.
Apply the provider mapping only after that classification. Preserve only settings that implement a real product requirement; unnecessary can reduce quality.
advanced_settingsValidate runtime values against the Parallel V1 contract before sending them. Pay particular attention to query count/length, objective length, the combined 200-domain limit, date normalization, and supported location codes. Do not carry the old provider's numeric ranges forward implicitly.
围绕以下事实构建每个Parallel Search API请求:
- 是必填项。提供至少一个非空关键字查询;当调用流程可以提供时,使用两到三个不同的关键字查询。
search_queries - 是可选但推荐的字段。在此处放置自包含的网页研究目标,而非整个用户对话或答案格式说明。
objective - 直接REST调用使用、
https://api.parallel.ai/v1/search和x-api-key。PARALLEL_API_KEY - 除非检测到的框架具有当前的第一方Parallel集成且能保留所需约定,否则Python和TypeScript均使用官方包。
parallel-web
在转换前对每个旧输入进行分类:
- 完整的网页研究目标、上下文或软来源/新鲜度偏好 → ;
objective - 简洁的检索探测 → ;
search_queries - 必须包含或必须排除的来源限制 → ;
advanced_settings.source_policy - 答案格式、合成说明、结构化输出或流式传输 → 现有合成层、Chat API或Task API;
- 延迟、结果数量、缓存和摘录控制 → 由应用程序明确选择并测试的自有策略。
对于静态调用,编写明确的目标和两到三个关键字探测。对于模型工具,使用references/integration-patterns.md中的精确三查询模式。仅当旧值已是关键字样式时,才使用单查询直接调用回退方案,且必须进行评估。切勿静默截断意图、生成关键字变体、添加隐藏规划器,或将硬过滤器移至文本描述中。
仅在分类完成后应用供应商映射。仅保留实现实际产品需求的设置;不必要的可能会降低质量。
advanced_settings在发送前验证运行时值是否符合Parallel V1约定。特别注意查询数量/长度、目标长度、合计200个域名的限制、日期标准化和支持的位置代码。切勿隐式沿用旧供应商的数值范围。
4. Migrate response behavior
4. 迁移响应行为
Update every consumer to the Parallel response shape. The Search API returns ranked with , optional , optional , and an array. It does not return the old provider's relevance score, generated answer, image fields, response time, or full-page body.
resultsurltitlepublish_dateexcerptsPreserve field semantics, not just field names. A date-only does not restore an old timestamp's time-of-day precision, a is not a session identifier, and SKU usage counts are not provider credits or dollar cost. Normalize only when the application contract defines the conversion; otherwise make the contract change explicit.
publish_datesearch_idRoute non-search behavior explicitly:
- Use Search API excerpts directly for LLM context or concise evidence.
- Use the Extract API for full content from known result URLs, reusing the Search API .
session_id - Use the Chat API or the application's existing model for a grounded answer.
- Use the Task API for asynchronous multi-step research or structured synthesis.
- Use Entity Search for synchronous people or company discovery.
For Firecrawl, classify the product before choosing a route. Search generally maps to Search; public-URL markdown or full content may map to Extract; structured multi-page research may map to Task only when Task preserves the required source scope, spend policy, quality choice, and lifecycle. Exact known-URL structured extraction instead favors Extract plus an application-owned model/parser. Research Index, Crawl, Map, Parse uploads, Browser, Interact, Monitor, screenshots, and other rich scrape behavior are not Search field mappings. Follow references/firecrawl.md and preserve separate capabilities until an explicit replacement is approved.
Do not fill missing fields with plausible-looking constants. Remove obsolete consumers, redesign the application contract, or use the appropriate Parallel API.
更新每个消费者以适配Parallel响应格式。Search API返回带排名的,包含、可选的、可选的和数组。它不会返回旧供应商的相关性分数、生成的答案、图片字段、响应时间或完整页面内容。
resultsurltitlepublish_dateexcerpts保留字段语义,而非仅保留字段名称。仅包含日期的无法恢复旧时间戳的时分秒精度,并非会话标识符,SKU使用次数也不是供应商信用额度或美元成本。仅当应用程序约定定义了转换规则时才进行标准化;否则明确说明约定变更。
publish_datesearch_id明确路由非搜索行为:
- 直接使用Search API摘录作为LLM上下文或简洁证据。
- 使用Extract API从已知结果URL获取完整内容,重用Search API的。
session_id - 使用Chat API或应用程序现有模型生成基于事实的答案。
- 使用Task API进行异步多步骤研究或结构化合成。
- 使用Entity Search进行同步人员或公司发现。
对于Firecrawl,在选择路由前先对产品进行分类。Search通常映射到Parallel的Search;公共URL的markdown或完整内容可能映射到Extract;结构化多页面研究仅当Task能保留所需的源范围、支出政策、质量选择和生命周期时,才映射到Task。已知URL的精确结构化提取更适合使用Extract加上应用程序自有模型/解析器。Research Index、Crawl、Map、Parse上传、Browser、Interact、Monitor、截图和其他富抓取行为不属于Search字段映射范畴。遵循references/firecrawl.md,在获得明确替换批准前保留独立功能。
切勿用看似合理的常量填充缺失字段。移除过时的消费者、重新设计应用程序约定,或使用合适的Parallel API。
5. Replace dependencies and configuration
5. 替换依赖项和配置
- Add only the SDKs required by the chosen routes: for Search, Extract, or Task;
parallel-webfor Chat unless the application already has a compatible client; no SDK when direct REST is the simpler existing pattern.openai - Remove a legacy provider package only when no row still depends on it, then regenerate the lockfile with the repository's package manager.
retain - Replace provider imports, client initialization, endpoints, and headers only inside rows. Keep shared provider setup until retained calls have their own explicit boundary.
migrate - Add to checked-in environment templates, validation schemas, setup scripts, deployment manifests, examples, and docs. Remove a legacy key from those surfaces only when no retained runtime capability still needs it.
PARALLEL_API_KEY - Preserve existing timeout, retry, cancellation, and logging behavior where the Parallel SDK supports it; otherwise implement the behavior at the application boundary and test it.
- Keep error messages provider-neutral unless the provider name helps the operator act.
Never expose or rewrite real secret values in logs, reports, patches, or fixtures.
- 仅添加所选路由所需的SDK:用于Search、Extract或Task;
parallel-web用于Chat(除非应用程序已有兼容客户端);当直接REST是更简单的现有模式时,无需SDK。openai - 仅当没有行仍依赖旧供应商包时,才移除该包,然后使用仓库的包管理器重新生成锁定文件。
retain - 仅在行内替换供应商导入、客户端初始化、端点和头信息。保留共享的供应商设置,直到保留的调用有自己明确的边界。
migrate - 将添加到已签入的环境模板、验证模式、设置脚本、部署清单、示例和文档中。仅当没有保留的运行时功能仍需要旧密钥时,才从这些位置移除旧密钥。
PARALLEL_API_KEY - 在Parallel SDK支持的情况下,保留现有的超时、重试、取消和日志记录行为;否则在应用程序边界实现该行为并进行测试。
- 保持错误消息与供应商无关,除非供应商名称有助于操作人员采取行动。
切勿在日志、报告、补丁或固定装置中暴露或重写真实的机密值。
6. Verify behavior, not just syntax
6. 验证行为,而非仅验证语法
Add or update tests for:
- request construction, including , mode, filters, dates, and location;
search_queries - source-policy normalization for apex domains, subdomains, schemes, paths, wildcards, conflicting lists, and provider-specific limits;
- query-design behavior: static requests, direct one-query compatibility paths, and model-tool schemas;
- omitted legacy defaults, dual domain lists, and any approved semantic change;
- target-limit validation for dynamic queries and domain lists;
- response parsing and excerpt joining;
- empty results, missing optional titles/dates, warnings, and errors;
- any normalizer that preserves an application-owned contract;
- full-content, synthesis, or entity routes when used;
- removal of score thresholds or provider-specific fields.
Preserve the repository's test execution contract. If its focused tests previously stubbed the provider package and ran without installing that SDK, stub the replacement SDK or keep imports behind the injected boundary too. Rerun the exact pre-migration test command in an equivalently clean environment; a pass that depends on an ambient package is not evidence that the repository remains self-contained.
Then run, in order:
- the narrow migration tests;
- the repository's formatter, type checker, lint, build, and broader tests as appropriate;
- when that provider is being removed completely;
python3 <skill-root>/scripts/scan_provider_usage.py . --provider <legacy-provider> --fail-on-legacy - when approved non-search Perplexity or Firecrawl usage remains, run the provider scan without , classify every finding, and then scan only the migrated roots or use narrow
--fail-on-legacypaths for isolated retained modules; never exclude a mixed search/non-search boundary;--exclude - an independent case-insensitive search for ,
exa,tavily,perplexity,sonar-, exactfirecrawlassignments tomodel, routedsonarmodel IDs, package names, endpoints, and key names, excludingperplexity/sonarif the skill is installed inside the target repository;<skill-root> - a review of the final diff for unintended behavior changes, leaked values, unrelated edits, and stale lockfiles;
- a live smoke test only when provider calls are explicitly authorized for this task and is already available, without printing it.
PARALLEL_API_KEY
An ambient credential does not by itself authorize a paid network call. When authorized, use a small, non-sensitive synthetic query and inspect , result ordering, excerpts, and error behavior. Compare representative production queries only when the user approves sending them to both providers or an existing repository test policy already permits that exact comparison. Do not require the user to paste secrets.
warnings添加或更新以下测试:
- 请求构造,包括、模式、过滤器、日期和位置;
search_queries - 源策略标准化,针对顶级域名、子域名、协议、路径、通配符、冲突列表和供应商特定限制;
- 查询设计行为:静态请求、直接单查询兼容路径和模型工具模式;
- 省略的旧默认值、双域名列表和任何已批准的语义变更;
- 动态查询和域名列表的目标限制验证;
- 响应解析和摘录拼接;
- 空结果、缺失的可选标题/日期、警告和错误;
- 任何保留应用程序自有约定的标准化器;
- 使用的全内容、合成或实体路由;
- 移除分数阈值或供应商特定字段。
保留仓库的测试执行约定。如果其针对性测试之前已模拟供应商包且无需安装该SDK即可运行,则也模拟替换SDK,或保持导入在注入边界之后。在等效的干净环境中重新运行迁移前的精确测试命令;依赖环境包的通过并不意味着仓库仍保持自包含。
然后按顺序运行:
- 窄范围迁移测试;
- 仓库的格式化工具、类型检查器、代码检查、构建和更广泛的测试(如适用);
- 当完全移除旧供应商时,运行;
python3 <skill-root>/scripts/scan_provider_usage.py . --provider <legacy-provider> --fail-on-legacy - 当仍有已批准的非搜索Perplexity或Firecrawl使用时,不带运行供应商扫描,对每个发现进行分类,然后仅扫描已迁移的根目录,或对孤立的保留模块使用窄范围
--fail-on-legacy路径;切勿排除混合搜索/非搜索边界;--exclude - 独立的不区分大小写搜索,查找、
exa、tavily、perplexity、sonar-、精确的firecrawl赋值为model、路由的sonar模型ID、包名称、端点和密钥名称;如果技能安装在目标仓库内部,则排除perplexity/sonar;<skill-root> - 审查最终差异,检查是否有意外的行为变更、泄露的值、无关编辑和过时的锁定文件;
- 仅当明确授权此任务进行供应商调用且已可用时,运行实时冒烟测试,且切勿打印密钥。
PARALLEL_API_KEY
环境凭据本身并不授权付费网络调用。获得授权后,使用小型、非敏感的合成查询,检查、结果排序、摘录和错误行为。仅当用户批准将代表性生产查询发送给两个供应商,或现有仓库测试策略已允许精确比较时,才进行比较。切勿要求用户粘贴机密信息。
warningsCompletion gate
完成条件
Finish only when all applicable statements are true:
- No legacy-provider runtime dependency, import, endpoint, auth header, key reference, tool definition, fixture, or stale setup instruction remains inside the migrated boundary.
- Any Perplexity model-routing, embeddings, sandbox, MCP, or custom-function capability outside that boundary remains intact or is called out as an explicit blocker.
- Any migrated path preserves the consumed final-answer or
finance_searchcontract through an evaluated Parallel route and, when needed, an application-owned normalizer; unresolved hard coverage or freshness requirements are explicit blockers.finance_results - Any Firecrawl crawl, map, file-parse, browser, interaction, rich-format, change-tracking, security/privacy, MCP, or asynchronous-job capability outside that boundary remains intact or is called out as an explicit blocker.
- Every inventoried call has a recorded ,
migrate, orretaindecision, and noblockrow was edited as though the gap were resolved.block - Firecrawl exact-URL constraints, per-run credit ceilings, model choices, and synchronous/asynchronous behavior are preserved or changed only with explicit approval; a domain allow-list, omitted budget, or guessed Task processor does not satisfy this gate.
spark-1-* - Every used request feature and response field has an implemented Parallel path or an explicitly approved behavior change.
- Query construction preserves the research goal, uses keyword-shaped retrieval probes, and follows the applicable direct-call or model-tool contract.
- Source-policy migration preserves the intended URL scope; unsupported path or wildcard behavior is implemented explicitly or recorded as an approved gap.
- Tests and static checks pass, or unrelated pre-existing failures are identified with evidence.
- The provider-specific legacy scan passes when the provider was removed completely. Otherwise, every remaining finding belongs to an approved, isolated non-search boundary and every identified response has been traced through its downstream consumers.
- A live call passes when it was explicitly authorized and credentials are available; otherwise the missing live verification is stated clearly.
- The final report names the migrated boundary, important semantic choices, verification commands, and any external secret cleanup still left to the operator.
仅当所有适用陈述均为真时,才完成迁移:
- 迁移边界内不再存在旧供应商的运行时依赖项、导入、端点、认证头、密钥引用、工具定义、固定装置或过时的设置说明。
- 边界外的任何Perplexity模型路由、嵌入向量、沙箱、MCP或自定义功能保持完整,或被明确列为阻塞项。
- 任何已迁移的路径通过经过评估的Parallel路由(必要时加上应用程序自有标准化器)保留了消费的最终答案或
finance_search约定;未解决的硬覆盖范围或新鲜度要求被明确列为阻塞项。finance_results - 边界外的任何Firecrawl抓取、映射、文件解析、浏览器、交互、富格式、变更跟踪、安全/隐私、MCP或异步作业功能保持完整,或被明确列为阻塞项。
- 每个盘点的调用都有记录的、
migrate或retain决策,且没有将block行当作已解决差距进行编辑。block - Firecrawl的精确URL约束、每次运行的信用上限、模型选择以及同步/异步行为被保留,或仅在获得明确批准后变更;域名允许列表、省略的预算或猜测的Task处理器不满足此条件。
spark-1-* - 每个使用的请求功能和响应字段都有已实现的Parallel路径,或有明确批准的行为变更。
- 查询构造保留了研究目标,使用关键字样式的检索探测,并遵循适用的直接调用或模型工具约定。
- 源策略迁移保留了预期的URL范围;不支持的路径或通配符行为被明确实现,或记录为已批准的差距。
- 测试和静态检查通过,或已识别无关的预先存在的失败并提供证据。
- 当完全移除供应商时,供应商特定的旧扫描通过。否则,每个剩余的发现都属于已批准的孤立非搜索边界,且每个已识别的响应都已追踪到其下游消费者。
- 当明确授权且凭据可用时,实时调用通过;否则明确说明缺少的实时验证。
- 最终报告指明了迁移边界、重要的语义选择、验证命令以及仍需操作人员完成的任何外部机密清理工作。